Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

@tevm/contract

@tevm/contract is Tevm's shared, type-safe contract kernel. It defines the contract surface used by both the Tevm core node and Tevm's bundler packages, so contract descriptions and generated actions have one stable representation across the ecosystem.

This repository is the standalone home of the package formerly maintained at packages/contract in the Tevm monorepo. Its Git history was preserved during the extraction.

Install

pnpm add @tevm/contract

The package does not require a Tevm node at runtime. Consumers that execute the actions produced here should install the appropriate Tevm client separately.

Usage

import{createContract}from'@tevm/contract'constgreeter=createContract({name: 'Greeter',humanReadableAbi: ['function greet() view returns (string)'],address: '0x0000000000000000000000000000000000000001',})constaction=greeter.read.greet()

createContract accepts either a human-readable ABI or a JSON ABI. The returned value exposes typed read, write, event, deployment, withAddress, and withCode action creators.

Development

This repository uses Node.js 24 and pnpm 9.

pnpm install
pnpm lint
pnpm typecheck
pnpm build
pnpm test

Package releases are managed with Changesets. Add a changeset with pnpm changeset; merging the generated version PR publishes to npm with provenance.

Documentation

The documentation site lives in site/ and is built with vocs 2.x. It deploys to contract.tevm.sh. The umbrella Tevm documentation remains at tevm.sh.

pnpm docs:dev # local dev server
pnpm docs:build # production build -> site/dist/public
pnpm docs:preview # serve the production build

pnpm docs is separate: it runs TypeDoc to regenerate the markdown API reference in docs/ from source JSDoc.

License

MIT

Releases

Packages

Contributors

Languages