mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-07 08:13:11 +00:00
commit
2ab1634413
@ -3,6 +3,7 @@
|
||||
// Creates a new sub context and executes the code of the given account.
|
||||
global sys_call:
|
||||
// stack: kexit_info, gas, address, value, args_offset, args_size, ret_offset, ret_size
|
||||
// TODO: Charge gas.
|
||||
%create_context
|
||||
// stack: new_ctx, kexit_info, gas, address, value, args_offset, args_size, ret_offset, ret_size
|
||||
|
||||
@ -27,6 +28,7 @@ global sys_call:
|
||||
// given account. In particular the storage remains the same.
|
||||
global sys_callcode:
|
||||
// stack: kexit_info, gas, address, value, args_offset, args_size, ret_offset, ret_size
|
||||
// TODO: Charge gas.
|
||||
%create_context
|
||||
// stack: new_ctx, kexit_info, gas, address, value, args_offset, args_size, ret_offset, ret_size
|
||||
|
||||
@ -50,6 +52,7 @@ global sys_callcode:
|
||||
// CALL if the value sent is not 0.
|
||||
global sys_staticcall:
|
||||
// stack: kexit_info, gas, address, args_offset, args_size, ret_offset, ret_size
|
||||
// TODO: Charge gas.
|
||||
%create_context
|
||||
// stack: new_ctx, kexit_info, gas, address, args_offset, args_size, ret_offset, ret_size
|
||||
|
||||
@ -70,6 +73,7 @@ global sys_staticcall:
|
||||
// value remain the same.
|
||||
global sys_delegatecall:
|
||||
// stack: kexit_info, gas, address, args_offset, args_size, ret_offset, ret_size
|
||||
// TODO: Charge gas.
|
||||
%create_context
|
||||
// stack: new_ctx, kexit_info, gas, address, args_offset, args_size, ret_offset, ret_size
|
||||
|
||||
|
||||
@ -1,21 +1,30 @@
|
||||
// The CREATE syscall.
|
||||
//
|
||||
// Pre stack: value, CODE_ADDR, code_len, retdest
|
||||
// Pre stack: kexit_info, value, code_offset, code_len
|
||||
// Post stack: address
|
||||
global sys_create:
|
||||
// TODO: Charge gas.
|
||||
%stack (kexit_info, value, code_offset, code_len)
|
||||
-> (value, 0, @SEGMENT_MAIN_MEMORY, code_offset, code_len)
|
||||
%address
|
||||
// stack: sender, value, CODE_ADDR: 3, code_len, sys_create_finish, kexit_info
|
||||
%jump(create)
|
||||
sys_create_finish:
|
||||
// stack: address, kexit_info
|
||||
SWAP1
|
||||
EXIT_KERNEL
|
||||
|
||||
// Create a new contract account with the traditional address scheme, i.e.
|
||||
// address = KEC(RLP(sender, nonce))[12:]
|
||||
// This can be used both for the CREATE instruction and for contract-creation
|
||||
// transactions.
|
||||
//
|
||||
// Pre stack: sender, endowment, CODE_ADDR, code_len, retdest
|
||||
// Pre stack: sender, endowment, CODE_ADDR: 3, code_len, retdest
|
||||
// Post stack: address
|
||||
// Note: CODE_ADDR refers to a (context, segment, offset) tuple.
|
||||
global create:
|
||||
// stack: sender, endowment, CODE_ADDR, code_len, retdest
|
||||
// TODO: Charge gas.
|
||||
DUP1 %get_nonce
|
||||
// stack: nonce, sender, endowment, CODE_ADDR, code_len, retdest
|
||||
// Call get_create_address and have it return to create_inner.
|
||||
@ -26,20 +35,34 @@ global create:
|
||||
// CREATE2; see EIP-1014. Address will be
|
||||
// address = KEC(0xff || sender || salt || code_hash)[12:]
|
||||
//
|
||||
// Pre stack: sender, endowment, salt, CODE_ADDR: 3, code_len, retdest
|
||||
// Pre stack: kexit_info, value, code_offset, code_len, salt
|
||||
// Post stack: address
|
||||
// Note: CODE_ADDR refers to a (context, segment, offset) tuple.
|
||||
global sys_create2:
|
||||
// stack: sender, endowment, salt, CODE_ADDR: 3, code_len, retdest
|
||||
DUP7 DUP7 DUP7 DUP7 // CODE_ADDR: 3, code_len
|
||||
// stack: kexit_info, value, code_offset, code_len, salt
|
||||
// TODO: Charge gas.
|
||||
SWAP4
|
||||
%stack (salt) -> (salt, sys_create2_got_address)
|
||||
// stack: salt, sys_create2_got_address, value, code_offset, code_len, kexit_info
|
||||
DUP4 // code_len
|
||||
DUP4 // code_offset
|
||||
PUSH @SEGMENT_MAIN_MEMORY
|
||||
PUSH 0 // context
|
||||
KECCAK_GENERAL
|
||||
// stack: code_hash, sender, endowment, salt, CODE_ADDR: 3, code_len, retdest
|
||||
|
||||
// Call get_create2_address and have it return to create_inner.
|
||||
%stack (code_hash, sender, endowment, salt)
|
||||
-> (sender, salt, code_hash, create_inner, sender, endowment)
|
||||
// stack: sender, salt, CODE_ADDR, code_len, create_inner, sender, endowment, CODE_ADDR, code_len, retdest
|
||||
// stack: hash, salt, sys_create2_got_address, value, code_offset, code_len, kexit_info
|
||||
%address
|
||||
// stack: sender, hash, salt, sys_create2_got_address, value, code_offset, code_len, kexit_info
|
||||
%jump(get_create2_address)
|
||||
sys_create2_got_address:
|
||||
// stack: address, value, code_offset, code_len, kexit_info
|
||||
%address
|
||||
%stack (sender, address, value, code_offset, code_len, kexit_info)
|
||||
-> (address, sender, value, 0, @SEGMENT_MAIN_MEMORY, code_offset, code_len,
|
||||
sys_create2_finish, kexit_info)
|
||||
%jump(create_inner)
|
||||
sys_create2_finish:
|
||||
// stack: address, kexit_info
|
||||
SWAP1
|
||||
EXIT_KERNEL
|
||||
|
||||
// Pre stack: address, sender, endowment, CODE_ADDR, code_len, retdest
|
||||
// Post stack: address
|
||||
|
||||
@ -47,3 +47,12 @@ global sys_gas:
|
||||
// stack: kexit_info'
|
||||
EXIT_KERNEL
|
||||
%endmacro
|
||||
|
||||
global sys_gasprice:
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%mload_txn_field(@TXN_FIELD_COMPUTED_FEE_PER_GAS)
|
||||
// stack: gas_price, kexit_info
|
||||
SWAP1
|
||||
EXIT_KERNEL
|
||||
|
||||
@ -17,20 +17,12 @@ global sys_balance:
|
||||
PANIC
|
||||
global sys_origin:
|
||||
PANIC
|
||||
global sys_calldataload:
|
||||
PANIC
|
||||
global sys_calldatasize:
|
||||
PANIC
|
||||
global sys_calldatacopy:
|
||||
PANIC
|
||||
global sys_codecopy:
|
||||
PANIC
|
||||
global sys_gasprice:
|
||||
// stack: kexit_info
|
||||
%mload_txn_field(@TXN_FIELD_COMPUTED_FEE_PER_GAS)
|
||||
// stack: gas_price, kexit_info
|
||||
SWAP1
|
||||
EXIT_KERNEL
|
||||
global sys_returndatasize:
|
||||
PANIC
|
||||
global sys_returndatacopy:
|
||||
@ -52,6 +44,8 @@ global sys_gaslimit:
|
||||
global sys_chainid:
|
||||
// TODO: Return the block's chain ID instead of the txn's, even though they should match.
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%mload_txn_field(@TXN_FIELD_CHAIN_ID)
|
||||
// stack: chain_id, kexit_info
|
||||
SWAP1
|
||||
|
||||
@ -20,6 +20,7 @@ global sys_return:
|
||||
|
||||
global sys_selfdestruct:
|
||||
// stack: kexit_info
|
||||
// TODO: Charge gas.
|
||||
%consume_gas_const(@GAS_SELFDESTRUCT)
|
||||
%leftover_gas
|
||||
// stack: leftover_gas
|
||||
|
||||
@ -39,6 +39,8 @@
|
||||
%endmacro
|
||||
|
||||
global sys_address:
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%address
|
||||
// stack: address, kexit_info
|
||||
@ -50,6 +52,8 @@ global sys_address:
|
||||
%endmacro
|
||||
|
||||
global sys_caller:
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%caller
|
||||
// stack: caller, kexit_info
|
||||
@ -65,6 +69,8 @@ global sys_caller:
|
||||
%endmacro
|
||||
|
||||
global sys_codesize:
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%codesize
|
||||
// stack: codesize, kexit_info
|
||||
@ -72,6 +78,8 @@ global sys_codesize:
|
||||
EXIT_KERNEL
|
||||
|
||||
global sys_callvalue:
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%callvalue
|
||||
// stack: callvalue, kexit_info
|
||||
@ -88,6 +96,8 @@ global sys_callvalue:
|
||||
%endmacro
|
||||
|
||||
global sys_msize:
|
||||
// stack: kexit_info
|
||||
%charge_gas_const(@GAS_BASE)
|
||||
// stack: kexit_info
|
||||
%msize
|
||||
// stack: msize, kexit_info
|
||||
|
||||
@ -104,3 +104,17 @@ global sys_mstore8:
|
||||
%mstore_current(@SEGMENT_MAIN_MEMORY)
|
||||
// stack: kexit_info
|
||||
EXIT_KERNEL
|
||||
|
||||
global sys_calldataload:
|
||||
// stack: kexit_info, i
|
||||
%charge_gas_const(@GAS_VERYLOW)
|
||||
// stack: kexit_info, i
|
||||
%stack (kexit_info, i) -> (@SEGMENT_CALLDATA, i, 32, sys_calldataload_after_mload_packing, kexit_info)
|
||||
GET_CONTEXT
|
||||
// stack: ADDR: 3, 32, sys_calldataload_after_mload_packing, kexit_info
|
||||
%jump(mload_packing)
|
||||
sys_calldataload_after_mload_packing:
|
||||
// stack: value, kexit_info
|
||||
SWAP1
|
||||
EXIT_KERNEL
|
||||
PANIC
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
|
||||
global sys_sload:
|
||||
// stack: kexit_info, slot
|
||||
// TODO: Charge gas.
|
||||
SWAP1
|
||||
// stack: slot, kexit_info
|
||||
%stack (slot) -> (slot, after_storage_read)
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
global sys_keccak256:
|
||||
// stack: kexit_info, offset, len
|
||||
// TODO: Charge gas.
|
||||
%stack (kexit_info, offset, len) -> (offset, len, kexit_info)
|
||||
PUSH @SEGMENT_MAIN_MEMORY
|
||||
GET_CONTEXT
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user