Skip to content

Commit

Permalink
🔥 Chore(actions): Merge procedures and actions packages together (#1453)
Browse files Browse the repository at this point in the history
## Description

_Concise description of proposed changes_

## Testing

Explain the quality checks that have been done on the code changes

## Additional Information

- [ ] I read the [contributing docs](../docs/contributing.md) (if this
is your first contribution)

Your ENS/address:

---------

Co-authored-by: William Cory <[email protected]>
  • Loading branch information
roninjin10 and William Cory authored Sep 24, 2024
1 parent 8067021 commit 1727e82
Show file tree
Hide file tree
Showing 1,331 changed files with 17,053 additions and 15,625 deletions.
5 changes: 5 additions & 0 deletions .changeset/tricky-plums-admire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@tevm/actions": patch
---

Deleted dead code

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion docs/astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ export default defineConfig({
'../packages/memory-client',
'../packages/precompiles/',
'../packages/predeploys',
'../packages/procedures',
'../packages/receipt-manager',
'../packages/rlp',
'../packages/server',
Expand Down
100 changes: 50 additions & 50 deletions docs/src/content/docs/learn/json-rpc/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: JSON Remote Procedure Calls

## JSON-RPC Requests

All [clients](/learn/clients) implement an EIP-1193 compatable [`tevm.request()`](/reference/tevm/procedures-types/type-aliases/tevmjsonrpcrequesthandler) method for handling JSON-RPC requests.
All [clients](/learn/clients) implement an EIP-1193 compatable [`tevm.request()`](/reference/tevm/actions/type-aliases/tevmjsonrpcrequesthandler) method for handling JSON-RPC requests.

```typescript
const { result, errors, id, method, jsonrpc } = await client.request(
Expand All @@ -20,70 +20,70 @@ Below are all procedures implemented or planned to be implemented. 🚧 means th

Tevm methods are feature-rich methods that provide a high level of control over the VM.

- [`tevm_call`](/reference/tevm/procedures-types/type-aliases/calljsonrpcprocedure) - Similar to eth call but with additional properties to control the VM execution
- [`tevm_getAccount`](/reference/tevm/procedures-types/type-aliases/getaccountjsonrpcprocedure) - gets account information such as balances contract information nonces and state roots.
- [`tevm_setAccount`](/reference/tevm/procedures-types/type-aliases/setaccountjsonrpcprocedure) - directly modifies the state of an account
- [`tevm_dumpState`](/reference/tevm/procedures-types/type-aliases/dumpstatejsonrpcprocedure) - Returns the state of the VM
- [`tevm_loadState`](/reference/tevm/procedures-types/type-aliases/loadstatejsonrpcprocedure) - Initializes the state of the VM
- [`tevm_call`](/reference/tevm/actions/type-aliases/calljsonrpcprocedure) - Similar to eth call but with additional properties to control the VM execution
- [`tevm_getAccount`](/reference/tevm/actions/type-aliases/getaccountjsonrpcprocedure) - gets account information such as balances contract information nonces and state roots.
- [`tevm_setAccount`](/reference/tevm/actions/type-aliases/setaccountjsonrpcprocedure) - directly modifies the state of an account
- [`tevm_dumpState`](/reference/tevm/actions/type-aliases/dumpstatejsonrpcprocedure) - Returns the state of the VM
- [`tevm_loadState`](/reference/tevm/actions/type-aliases/loadstatejsonrpcprocedure) - Initializes the state of the VM

## Eth methods

Tevm plans on implementing most of the [ethereum JSON-RPC](https://ethereum.org/developers/docs/apis/json-rpc) spec

- [`eth_accounts'](/reference/tevm/procedures-types/type-aliases/ethaccountsjsonrpcprocedure) - Uses the same test accounts ganache anvil and hardhat uses. Mnemonic: test test test test test test test test test test test junk
- [`eth_call'](/reference/tevm/procedures-types/type-aliases/ethcalljsonrpcprocedure)
- [`eth_chainId'](/reference/tevm/procedures-types/type-aliases/ethchainidjsonrpcprocedure)
- [`eth_estimateGas'](/reference/tevm/procedures-types/type-aliases/ethestimategasjsonrpcprocedure)
- [`eth_gasPrice'](/reference/tevm/procedures-types/type-aliases/ethgaspricejsonrpcprocedure)
- [`eth_getBalance'](/reference/tevm/procedures-types/type-aliases/ethgetbalancejsonrpcprocedure)
- [`eth_getCode'](/reference/tevm/procedures-types/type-aliases/ethgetcodejsonrpcprocedure)
- [`eth_getStorageAt'](/reference/tevm/procedures-types/type-aliases/ethgetcodejsonrpcprocedure)
- [`eth_getTransactionReceipt'](/reference/tevm/procedures-types/type-aliases/ethgettransactionreceiptjsonrpcprocedure)
- [`eth_sign'](/reference/tevm/procedures-types/type-aliases/ethsignjsonrpcprocedure)
- [`eth_signTransaction'](/reference/tevm/procedures-types/type-aliases/ethsigntransactionjsonrpcprocedure)
- [`eth_getLogs'](/reference/tevm/procedures-types/type-aliases/ethgetlogsjsonrpcprocedure)
- [`eth_coinbase'](/reference/tevm/procedures-types/type-aliases/ethcoinbasejsonrpcprocedure)
- [`eth_hashrate'](/reference/tevm/procedures-types/type-aliases/ethhashratejsonrpcprocedure)
- [`eth_protocolVersion'](/reference/tevm/procedures-types/type-aliases/ethprotocolversionjsonrpcprocedure)
- [`eth_sendTransaction'](/reference/tevm/procedures-types/type-aliases/ethsendtransactionjsonrpcprocedure)
- [`eth_sendRawTransaction'](/reference/tevm/procedures-types/type-aliases/ethsendrawtransactionjsonrpcprocedure)
- [`eth_uninstallFilter'](/reference/tevm/procedures-types/type-aliases/ethuninstallfilterjsonrpcprocedure)
- [`eth_getBlockByNumber'](/reference/tevm/procedures-types/type-aliases/ethgetblockbynumberjsonrpcprocedure)
- [`eth_getFilterChanges'](/reference/tevm/procedures-types/type-aliases/ethgetfilterchangesjsonrpcprocedure)
- [`eth_newFilter'](/reference/tevm/procedures-types/type-aliases/ethnewfilterjsonrpcprocedure)
- [`eth_getFilterLogs'](/reference/tevm/procedures-types/type-aliases/ethgetfilterlogsjsonrpcprocedure)
- [`eth_getBlockByHash'](/reference/tevm/procedures-types/type-aliases/ethgetblockbyhashjsonrpcprocedure)
- [`eth_newBlockFilter'](/reference/tevm/procedures-types/type-aliases/ethnewblockfilterjsonrpcprocedure)
- [`eth_getTransactionCount'](/reference/tevm/procedures-types/type-aliases/ethgettransactioncountjsonrpcprocedure)
- [`eth_getTransactionByHash'](/reference/tevm/procedures-types/type-aliases/ethgettransactionbyhashjsonrpcprocedure)
- [`eth_newPendingTransactionFilter'](/reference/tevm/procedures-types/type-aliases/ethnewpendingtransactionfilterjsonrpcresponse)
- [`eth_getBlockTransactionCountByHash'](/reference/tevm/procedures-types/type-aliases/ethgetblocktransactioncountbyhashjsonrpcprocedure)
- [`eth_accounts'](/reference/tevm/actions/type-aliases/ethaccountsjsonrpcprocedure) - Uses the same test accounts ganache anvil and hardhat uses. Mnemonic: test test test test test test test test test test test junk
- [`eth_call'](/reference/tevm/actions/type-aliases/ethcalljsonrpcprocedure)
- [`eth_chainId'](/reference/tevm/actions/type-aliases/ethchainidjsonrpcprocedure)
- [`eth_estimateGas'](/reference/tevm/actions/type-aliases/ethestimategasjsonrpcprocedure)
- [`eth_gasPrice'](/reference/tevm/actions/type-aliases/ethgaspricejsonrpcprocedure)
- [`eth_getBalance'](/reference/tevm/actions/type-aliases/ethgetbalancejsonrpcprocedure)
- [`eth_getCode'](/reference/tevm/actions/type-aliases/ethgetcodejsonrpcprocedure)
- [`eth_getStorageAt'](/reference/tevm/actions/type-aliases/ethgetcodejsonrpcprocedure)
- [`eth_getTransactionReceipt'](/reference/tevm/actions/type-aliases/ethgettransactionreceiptjsonrpcprocedure)
- [`eth_sign'](/reference/tevm/actions/type-aliases/ethsignjsonrpcprocedure)
- [`eth_signTransaction'](/reference/tevm/actions/type-aliases/ethsigntransactionjsonrpcprocedure)
- [`eth_getLogs'](/reference/tevm/actions/type-aliases/ethgetlogsjsonrpcprocedure)
- [`eth_coinbase'](/reference/tevm/actions/type-aliases/ethcoinbasejsonrpcprocedure)
- [`eth_hashrate'](/reference/tevm/actions/type-aliases/ethhashratejsonrpcprocedure)
- [`eth_protocolVersion'](/reference/tevm/actions/type-aliases/ethprotocolversionjsonrpcprocedure)
- [`eth_sendTransaction'](/reference/tevm/actions/type-aliases/ethsendtransactionjsonrpcprocedure)
- [`eth_sendRawTransaction'](/reference/tevm/actions/type-aliases/ethsendrawtransactionjsonrpcprocedure)
- [`eth_uninstallFilter'](/reference/tevm/actions/type-aliases/ethuninstallfilterjsonrpcprocedure)
- [`eth_getBlockByNumber'](/reference/tevm/actions/type-aliases/ethgetblockbynumberjsonrpcprocedure)
- [`eth_getFilterChanges'](/reference/tevm/actions/type-aliases/ethgetfilterchangesjsonrpcprocedure)
- [`eth_newFilter'](/reference/tevm/actions/type-aliases/ethnewfilterjsonrpcprocedure)
- [`eth_getFilterLogs'](/reference/tevm/actions/type-aliases/ethgetfilterlogsjsonrpcprocedure)
- [`eth_getBlockByHash'](/reference/tevm/actions/type-aliases/ethgetblockbyhashjsonrpcprocedure)
- [`eth_newBlockFilter'](/reference/tevm/actions/type-aliases/ethnewblockfilterjsonrpcprocedure)
- [`eth_getTransactionCount'](/reference/tevm/actions/type-aliases/ethgettransactioncountjsonrpcprocedure)
- [`eth_getTransactionByHash'](/reference/tevm/actions/type-aliases/ethgettransactionbyhashjsonrpcprocedure)
- [`eth_newPendingTransactionFilter'](/reference/tevm/actions/type-aliases/ethnewpendingtransactionfilterjsonrpcresponse)
- [`eth_getBlockTransactionCountByHash'](/reference/tevm/actions/type-aliases/ethgetblocktransactioncountbyhashjsonrpcprocedure)
- `eth_getBlockTransactionCountByNumber'
- [`eth_getTransactionByBlockHashAndIndex'](/reference/tevm/procedures-types/type-aliases/ethgettransactionbyblockhashandindexjsonrpcprocedure)
- [`eth_getTransactionByBlockHashAndIndex'](/reference/tevm/actions/type-aliases/ethgettransactionbyblockhashandindexjsonrpcprocedure)
- `eth_getTransactionByBlockNumberAndIndex'

## Debug methods

- [`debug_traceCall`](/reference/tevm/procedures-types/type-aliases/debugtracecallprocedure)
- [`debug_traceTransaction`](/reference/tevm/procedures-types/type-aliases/debugtracetransactionprocedure)
- [`debug_traceCall`](/reference/tevm/actions/type-aliases/debugtracecallprocedure)
- [`debug_traceTransaction`](/reference/tevm/actions/type-aliases/debugtracetransactionprocedure)

## Anvil/Hardhat methods

Anvil/hardhat methods are provided for compatability

- [`anvil_setCode'](/reference/tevm/procedures-types/type-aliases/anvilsetcodeprocedure)
- [`anvil_setNonce'](/reference/tevm/procedures-types/type-aliases/anvilsetnonceprocedure)
- [`anvil_setBalance'](/reference/tevm/procedures-types/type-aliases/anvilsetbalanceprocedure)
- [`anvil_setChainId'](/reference/tevm/procedures-types/type-aliases/anvilsetchainidprocedure)
- [`anvil_mine'](/reference/tevm/procedures-types/type-aliases/anvilmineprocedure)
- [`anvil_getAutomine'](/reference/tevm/procedures-types/type-aliases/anvilgetautomineprocedure) (currently always false)
- [`anvil_setStorageAt'](/reference/tevm/procedures-types/type-aliases/anvilsetstorageatprocedure)
- [`anvil_reset'](/reference/tevm/procedures-types/type-aliases/anvilresetprocedure)
- [`anvil_dumpState'](/reference/tevm/procedures-types/type-aliases/anvildumpstateprocedure)
- [`anvil_loadState'](/reference/tevm/procedures-types/type-aliases/anvilloadstateprocedure)
- [`anvil_dropTransaction'](/reference/tevm/procedures-types/type-aliases/anvildroptransactionprocedure) (only supports dropping unmined tx atm)
- [`anvil_impersonateAccount'](/reference/tevm/procedures-types/type-aliases/anvilimpersonateaccountprocedure) (Can only impersonate one account at a time atm0
- [`anvil_stopImpersonatingAccount'](/reference/tevm/procedures-types/type-aliases/anvilstopimpersonatingaccountprocedure)
- [`anvil_setCode'](/reference/tevm/actions/type-aliases/anvilsetcodeprocedure)
- [`anvil_setNonce'](/reference/tevm/actions/type-aliases/anvilsetnonceprocedure)
- [`anvil_setBalance'](/reference/tevm/actions/type-aliases/anvilsetbalanceprocedure)
- [`anvil_setChainId'](/reference/tevm/actions/type-aliases/anvilsetchainidprocedure)
- [`anvil_mine'](/reference/tevm/actions/type-aliases/anvilmineprocedure)
- [`anvil_getAutomine'](/reference/tevm/actions/type-aliases/anvilgetautomineprocedure) (currently always false)
- [`anvil_setStorageAt'](/reference/tevm/actions/type-aliases/anvilsetstorageatprocedure)
- [`anvil_reset'](/reference/tevm/actions/type-aliases/anvilresetprocedure)
- [`anvil_dumpState'](/reference/tevm/actions/type-aliases/anvildumpstateprocedure)
- [`anvil_loadState'](/reference/tevm/actions/type-aliases/anvilloadstateprocedure)
- [`anvil_dropTransaction'](/reference/tevm/actions/type-aliases/anvildroptransactionprocedure) (only supports dropping unmined tx atm)
- [`anvil_impersonateAccount'](/reference/tevm/actions/type-aliases/anvilimpersonateaccountprocedure) (Can only impersonate one account at a time atm0
- [`anvil_stopImpersonatingAccount'](/reference/tevm/actions/type-aliases/anvilstopimpersonatingaccountprocedure)

## Wallet methods

Expand Down
2 changes: 0 additions & 2 deletions docs/src/content/docs/learn/reference/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@ The following packages are used to build `MemoryClient`:
- [@tevm/memory-client](https://github.com/evmts/tevm-monorepo/tree/main/packages/memory-client) Implements the tevm MemoryClient
- [@tevm/precompiles](https://github.com/evmts/tevm-monorepo/tree/main/packages/precompiles) Implements tevm precompile support for tevm advanced scripting
- [@tevm/predeploys](https://github.com/evmts/tevm-monorepo/tree/main/packages/predeploys) Implements tevm predeploy support
- [@tevm/procedures](https://github.com/evmts/tevm-monorepo/tree/main/packages/procedures) Wraps the `@tevm/actions` api with JSON-RPC support.
- [@tevm/procedures-types](https://github.com/evmts/tevm-monorepo/tree/main/packages/procedures-types) Wraps the `@tevm/actions` api with JSON-RPC support. The TypeScript types for `@tevm/procedures`
- [@tevm/server](https://github.com/evmts/tevm-monorepo/tree/main/packages/server) Turns any tevm client with `tevm.send` such as MemoryClient into a http server in next.js, express, or a vanilla node http handler
- [@tevm/sync-storage-persister](https://github.com/evmts/tevm-monorepo/tree/main/packages/sync-storage-persister) An experimental package that allows users to persist tevm state. Often used to sync tevm to local storage.
- [@tevm/utils](https://github.com/evmts/tevm-monorepo/tree/main/packages/utils) Contains many low level util methods used by tevm as well as reexports important utils from viem and ethereumjs that end users may need.
Expand Down
7 changes: 3 additions & 4 deletions docs/src/content/docs/learn/tevm-node/create-tevm-node.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,7 @@ tevm.logger.warn("Custom warning");

There are a few packages that add additional functionality to a TevmNode in a tree shakable way.

- `tevm/actions` Tree shakable methods such as `call`, `getBlockNumber`, and more for interacting with a TevmNode
- `tevm/procedures` Tree shakable methods for implementing the JSON-RPC api for ethereum, hardhat, anvil, and custom tevm json-rpc methods.
- `tevm/actions` Tree shakable methods such as `call`, `getBlockNumber`, and more for interacting with a TevmNode along with json-rpc procedures
- `tevm/decorators` Extensions to add additional properties to a TevmNode

### Extending with actions
Expand Down Expand Up @@ -280,10 +279,10 @@ await setAccount(tevm)({

See the `tevmActions` and `ethActions` extensions if you would like to add these actions to your client instance directly because tree shaking is not a concern.

All procedures for the JSON-RPC api are optionally available in `tevm/procedures` package.
All procedures for the JSON-RPC api are optionally available in `tevm/actions` package.

```typescript
import { ethGetBlockNumberProcedure } from "tevm/procedures";
import { ethGetBlockNumberProcedure } from "tevm/actions";
import { createTevmNode } from "tevm/node";

const tevm = createTevmNode().extend(tevmActions());
Expand Down
6 changes: 3 additions & 3 deletions docs/src/content/docs/learn/tevm-node/using-jsonrpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ TevmNode supports much of the ethereum, debug, anvil, and hardhat JSON-RPC apis.

### Using Treeshakable prodedures and actions

Tree shakable procedures can be imported form the tevm/procedures package. All procedures take a TevmClient as a param and return a handler.
Tree shakable procedures can be imported form the tevm/actions package. All procedures take a TevmClient as a param and return a handler.

```typescript
import {createTevmNode} from 'tevm'
import {ethCallProcedure, EthCallJsonRpcRequest} from 'tevm/procedures'
import {ethCallProcedure, EthCallJsonRpcRequest} from 'tevm/actions'

const node = createTevmNode()

Expand All @@ -30,7 +30,7 @@ const request: EthCallJsonRpcRequest = {
method: 'eth_call'
}

const res = await call(request)
const res = await call(request)
```

Most JSON-RPC procedures have more ergonomic apis called "Actions" as well that can be used as an alternative. Actions have benifit of
Expand Down
1 change: 0 additions & 1 deletion docs/src/content/docs/reference/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion extensions/ethers/.depcheckrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
ignores: [
"@tevm/client-types",
"@tevm/procedures",
"@tevm/actions",
"@tevm/node"
]
skip-missing: true
2 changes: 1 addition & 1 deletion extensions/ethers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@tevm/actions": "workspace:^",
"@tevm/client-types": "workspace:^",
"@tevm/contract": "workspace:^",
"@tevm/decorators": "workspace:^",
"@tevm/node": "workspace:^",
"@tevm/procedures": "workspace:^",
"@tevm/utils": "workspace:^"
},
"devDependencies": {
Expand Down
6 changes: 2 additions & 4 deletions extensions/ethers/src/TevmProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,17 +188,15 @@ export class TevmProvider extends JsonRpcApiProvider {
if (Array.isArray(payload)) {
return /** @type {Promise<Array<import('ethers').JsonRpcResult | import('ethers').JsonRpcError>>}*/ (
this.tevm.sendBulk(
/** @type {Array<import('@tevm/procedures').TevmJsonRpcRequest | import('@tevm/procedures').EthJsonRpcRequest>}*/ (
/** @type {Array<import('@tevm/actions').TevmJsonRpcRequest | import('@tevm/actions').EthJsonRpcRequest>}*/ (
payload
),
)
)
}
return /** @type {[import('ethers').JsonRpcResult | import('ethers').JsonRpcError]}*/ ([
await this.tevm.send(
/** @type {import('@tevm/procedures').TevmJsonRpcRequest | import('@tevm/procedures').EthJsonRpcRequest}*/ (
payload
),
/** @type {import('@tevm/actions').TevmJsonRpcRequest | import('@tevm/actions').EthJsonRpcRequest}*/ (payload),
),
])
}
Expand Down
1 change: 0 additions & 1 deletion extensions/viem/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@
"@tevm/common": "workspace:^",
"@tevm/contract": "workspace:^",
"@tevm/memory-client": "workspace:^",
"@tevm/procedures": "workspace:^",
"@tevm/server": "workspace:^",
"@tevm/state": "workspace:^",
"@tevm/test-utils": "workspace:^",
Expand Down
54 changes: 1 addition & 53 deletions extensions/viem/src/tevmViemExtension.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,57 +94,6 @@ export const tevmViemExtension = () => {
throw new Error('Bulk json rpc requests are not yet implemented')
}

/**
* @type {import('@tevm/actions').ScriptHandler}
*/
const script = async (params) => {
const out = /** @type {any} */ (
parseCallResponse(
await request({
method: 'tevm_call',
jsonrpc: '2.0',
params: [
{
...getCallArgs(params),
deployedBytecode: params.deployedBytecode,
data: encodeFunctionData(
/** @type any*/ ({
abi: params.abi,
functionName: params.functionName,
args: params.args,
}),
),
},
],
}),
)
)
try {
out.data = decodeFunctionResult(
/** @type any*/ ({
data: out.rawData,
abi: params.abi,
functionName: params.functionName,
args: params.args,
}),
)
} catch (e) {
if (out.rawData === '0x') {
throw new Error('UnexpectedError: data is 0x')
}
console.error('Unable to decode function data', {
input: {
data: out.rawData,
abi: params.abi,
functionName: params.functionName,
args: params.args,
},
})
throw e
}
return out
}

/**
* @type {import('@tevm/actions').GetAccountHandler}
*/
Expand Down Expand Up @@ -227,7 +176,7 @@ export const tevmViemExtension = () => {
}

/**
* @param {import('@tevm/procedures').CallJsonRpcResponse | import('@tevm/procedures').ScriptJsonRpcResponse} response
* @param {import('@tevm/actions').CallJsonRpcResponse} response
*/
const parseCallResponse = (response) => {
if ('error' in response) {
Expand Down Expand Up @@ -465,7 +414,6 @@ export const tevmViemExtension = () => {
accounts: testAccounts,
request,
requestBulk,
script,
getAccount,
setAccount,
call,
Expand Down
Loading

0 comments on commit 1727e82

Please sign in to comment.