CreateContractFn
CreateContractFn: <
TName
,TAbi
,TAddress
,TBytecode
,TDeployedBytecode
,TCode
,THumanReadableAbi
>({ name, humanReadableAbi, bytecode, deployedBytecode, code, }
) =>Contract
<TName
,THumanReadableAbi
,TAddress
,TBytecode
,TDeployedBytecode
,TCode
>
Type of createContract
factory function.
Creates a tevm Contract instance from a human readable ABI or JSON ABI.
Type Parameters
• TName extends string
The name of the contract
• TAbi extends readonly string
[] | Abi
The ABI type (either string[] for human readable or Abi for JSON)
• TAddress extends undefined
| Address
= undefined
The contract address type (optional)
• TBytecode extends undefined
| Hex
= undefined
The contract bytecode type (optional)
• TDeployedBytecode extends undefined
| Hex
= undefined
The deployed bytecode type (optional)
• TCode extends undefined
| Hex
= undefined
The runtime bytecode type (optional)
• THumanReadableAbi extends readonly string
[] = TAbi
extends readonly string
[] ? TAbi
: TAbi
extends Abi
? FormatAbi
<TAbi
> : never
Parameters
• {
name,
humanReadableAbi,
bytecode,
deployedBytecode,
code,
}: CreateContractParams
<TName
, TAbi
, TAddress
, TBytecode
, TDeployedBytecode
, TCode
>
Returns
Contract
<TName
, THumanReadableAbi
, TAddress
, TBytecode
, TDeployedBytecode
, TCode
>
Examples
Using a human readable ABI:
import { type Contract, createContract } from 'tevm/contract'
const contract: Contract = createContract({ name: 'ERC20', humanReadableAbi: [ 'function balanceOf(address owner) view returns (uint256)', 'function transfer(address to, uint256 amount) returns (bool)', 'event Transfer(address indexed from, address indexed to, uint256 value)', ],})
Using a JSON ABI (needs to be formatted):
import { type Contract, createContract } from 'tevm/contract'import { formatAbi } from '@tevm/utils'
const jsonAbi = [ { "inputs": [{"name": "owner", "type": "address"}], "name": "balanceOf", "outputs": [{"type": "uint256"}], "stateMutability": "view", "type": "function" }, { "inputs": [ {"name": "to", "type": "address"}, {"name": "amount", "type": "uint256"} ], "name": "transfer", "outputs": [{"type": "bool"}], "stateMutability": "nonpayable", "type": "function" }, { "anonymous": false, "inputs": [ {"indexed": true, "name": "from", "type": "address"}, {"indexed": true, "name": "to", "type": "address"}, {"indexed": false, "name": "value", "type": "uint256"} ], "name": "Transfer", "type": "event" }]
const contract = createContract({ name: 'ERC20', abi: formatAbi(jsonAbi), address: '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI token address on Ethereum mainnet bytecode: '0x60806040526000805534801561001457600080fd5b50610771806100246000396000f3fe', // Example bytecode (truncated) deployedBytecode: '0x608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a08231146101bc', // Example deployed bytecode (truncated) code: '0x608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a08231146101bc', // Example runtime code (truncated)})