@tevm/actions
Version:
A typesafe library for writing forge scripts in typescript
42 lines (40 loc) • 1.6 kB
JavaScript
import { hexToBigInt } from '@tevm/utils'
import { setAccountHandler } from './setAccountHandler.js'
/**
* Creates an SetAccount JSON-RPC Procedure for handling tevm_setAccount requests with Ethereumjs VM
* @param {import('@tevm/node').TevmNode} client
* @returns {import('./SetAccountJsonRpcProcedure.js').SetAccountJsonRpcProcedure}
*/
export const setAccountProcedure = (client) => async (request) => {
const { errors = [], ...result } = await setAccountHandler(client)({
throwOnFail: false,
address: request.params[0].address,
...(request.params[0].nonce ? { nonce: hexToBigInt(request.params[0].nonce) } : {}),
...(request.params[0].balance ? { balance: hexToBigInt(request.params[0].balance) } : {}),
...(request.params[0].deployedBytecode ? { deployedBytecode: request.params[0].deployedBytecode } : {}),
...(request.params[0].storageRoot ? { storageRoot: request.params[0].storageRoot } : {}),
...(request.params[0].state ? { state: request.params[0].state } : {}),
...(request.params[0].stateDiff ? { stateDiff: request.params[0].stateDiff } : {}),
})
if (errors.length > 0) {
const error = /** @type {import('./TevmSetAccountError.js').TevmSetAccountError}*/ (errors[0])
return {
jsonrpc: '2.0',
error: {
code: error.code,
message: error.message,
data: {
errors: errors.map(({ message }) => message),
},
},
method: 'tevm_setAccount',
...(request.id === undefined ? {} : { id: request.id }),
}
}
return {
jsonrpc: '2.0',
result,
method: 'tevm_setAccount',
...(request.id === undefined ? {} : { id: request.id }),
}
}