EVM¶
Calls¶
call¶
Issue an EVM call operation. This is similar to a message call transaction in Ethereum.
Attributes¶
Name | Type |
---|---|
source | H160 |
target | H160 |
input | Vec<u8> |
value | U256 |
gas_limit | u64 |
max_fee_per_gas | U256 |
max_priority_fee_per_gas | Option<U256> |
nonce | Option<U256> |
access_list | Vec<(H160, Vec<H256>)> |
Python¶
call = substrate.compose_call(
'EVM', 'call', {
'access_list': [
(
'[u8; 20]',
['scale_info::12'],
),
],
'gas_limit': 'u64',
'input': 'Bytes',
'max_fee_per_gas': 'scale_info::187',
'max_priority_fee_per_gas': (
None,
'scale_info::187',
),
'nonce': (None, 'scale_info::187'),
'source': '[u8; 20]',
'target': '[u8; 20]',
'value': 'scale_info::187',
}
)
create¶
Issue an EVM create operation. This is similar to a contract creation transaction in Ethereum.
Attributes¶
Name | Type |
---|---|
source | H160 |
init | Vec<u8> |
value | U256 |
gas_limit | u64 |
max_fee_per_gas | U256 |
max_priority_fee_per_gas | Option<U256> |
nonce | Option<U256> |
access_list | Vec<(H160, Vec<H256>)> |
Python¶
call = substrate.compose_call(
'EVM', 'create', {
'access_list': [
(
'[u8; 20]',
['scale_info::12'],
),
],
'gas_limit': 'u64',
'init': 'Bytes',
'max_fee_per_gas': 'scale_info::187',
'max_priority_fee_per_gas': (
None,
'scale_info::187',
),
'nonce': (None, 'scale_info::187'),
'source': '[u8; 20]',
'value': 'scale_info::187',
}
)
create2¶
Issue an EVM create2 operation.
Attributes¶
Name | Type |
---|---|
source | H160 |
init | Vec<u8> |
salt | H256 |
value | U256 |
gas_limit | u64 |
max_fee_per_gas | U256 |
max_priority_fee_per_gas | Option<U256> |
nonce | Option<U256> |
access_list | Vec<(H160, Vec<H256>)> |
Python¶
call = substrate.compose_call(
'EVM', 'create2', {
'access_list': [
(
'[u8; 20]',
['scale_info::12'],
),
],
'gas_limit': 'u64',
'init': 'Bytes',
'max_fee_per_gas': 'scale_info::187',
'max_priority_fee_per_gas': (
None,
'scale_info::187',
),
'nonce': (None, 'scale_info::187'),
'salt': 'scale_info::12',
'source': '[u8; 20]',
'value': 'scale_info::187',
}
)
withdraw¶
Withdraw balance from EVM into currency/balances pallet.
Attributes¶
Name | Type |
---|---|
address | H160 |
value | BalanceOf<T> |
Python¶
call = substrate.compose_call(
'EVM', 'withdraw', {
'address': '[u8; 20]',
'value': 'u128',
}
)
Events¶
Created¶
A contract has been created at given address.
Attributes¶
Name | Type | Composition |
---|---|---|
address | H160 |
[u8; 20] |
CreatedFailed¶
A contract was attempted to be created, but the execution failed.
Attributes¶
Name | Type | Composition |
---|---|---|
address | H160 |
[u8; 20] |
Executed¶
A contract has been executed successfully with states applied.
Attributes¶
Name | Type | Composition |
---|---|---|
address | H160 |
[u8; 20] |
ExecutedFailed¶
A contract has been executed with errors. States are reverted with only gas fees applied.
Attributes¶
Name | Type | Composition |
---|---|---|
address | H160 |
[u8; 20] |
Log¶
Ethereum events from contracts.
Attributes¶
Name | Type | Composition |
---|---|---|
log | Log |
{'address': '[u8; 20]', 'topics': ['scale_info::12'], 'data': 'Bytes'} |
Storage functions¶
AccountCodes¶
Python¶
result = substrate.query(
'EVM', 'AccountCodes', ['[u8; 20]']
)
Return value¶
'Bytes'
AccountCodesMetadata¶
Python¶
result = substrate.query(
'EVM', 'AccountCodesMetadata', ['[u8; 20]']
)
Return value¶
{'hash': 'scale_info::12', 'size': 'u64'}
AccountStorages¶
Python¶
result = substrate.query(
'EVM', 'AccountStorages', ['[u8; 20]', 'scale_info::12']
)
Return value¶
'scale_info::12'
Errors¶
BalanceLow¶
Not enough balance to perform action
FeeOverflow¶
Calculating total fee overflowed
GasLimitTooHigh¶
Gas limit is too high.
GasLimitTooLow¶
Gas limit is too low.
GasPriceTooLow¶
Gas price is too low.
InvalidNonce¶
Nonce is invalid
PaymentOverflow¶
Calculating total payment overflowed
Reentrancy¶
EVM reentrancy
TransactionMustComeFromEOA¶
EIP-3607,
Undefined¶
Undefined error.
WithdrawFailed¶
Withdraw fee failed