gmbytecode/test/asm_code/identity.aesm
Craig Everett 1cdcb9150b
All checks were successful
Gajumaru Bytecode Tests / tests (push) Successful in -3m34s
Revamp (#235)
Add Gitea tests
Rename
Remove oracle references
Package for zx

Reviewed-on: #235
Reviewed-by: dimitar.p.ivanov <dimitarivanov@qpq.swiss>
Co-authored-by: Craig Everett <zxq9@zxq9.com>
Co-committed-by: Craig Everett <zxq9@zxq9.com>
2025-01-22 21:12:54 +09:00

75 lines
3.0 KiB
Plaintext

;; CONTRACT: Identity
PUSH1 0
CALLDATALOAD
DUP1
;; Should be the hash of
;; the signature of the
;; first function (use 0 as placeholder)
PUSH32 0x0000000000000000000000000000
EQ
PUSH32 id_entry
JUMPI
STOP
id_entry: JUMPDEST
;; Skip the function name in the calldata
PUSH1 32
;; Load argument on stack
CALLDATALOAD
;; This function only takes one immidiate as argument.
;; Call the local version of the function
;; Get return address
PC
PUSH1 39
ADD
;; Get Argument
SWAP1
PUSH32 id_local
JUMP
;; return here from local call
;; Store top of stack at mem[0]
JUMPDEST
PUSH1 0
MSTORE
;; Return mem[0]-mem[32]
PUSH1 32
PUSH1 0
RETURN
;; for local calls
;; Stack:
;; | |
;; | Arg | <- SP
;; | RetAdr |
;; ...
id_local: JUMPDEST
;; Just return the argument
SWAP1
;; Stack:
;; | |
;; | RetAdr | <- SP
;; | RetVal | (Arg in this case)
;; ...
JUMP
;; Test the code from the shell
;; aevm_eeevm:eval(aevm_eeevm_state:init(#{ exec => #{ code => list_to_binary(gmb_asm:file("apps/gmsophia/test/contracts/identity.aesm", [])), address => 0, caller => 0, data => <<0:256, 42:256>>, gas => 1000000, gasPrice => 1, origin => 0, value => 0 }, env => #{currentCoinbase => 0, currentDifficulty => 0, currentGasLimit => 10000, currentNumber => 0, currentTimestamp => 0}, pre => #{}}, #{})).
;; Test the code from the shell with tracing.
;; aevm_eeevm:eval(aevm_eeevm_state:init(#{ exec => #{ code => gmb_asm:file("apps/gmsophia/test/contracts/identity.aesm", []), address => 0, caller => 0, data => <<0:256, 42:256>>, gas => 1000000, gasPrice => 1, origin => 0, value => 0 }, env => #{currentCoinbase => 0, currentDifficulty => 0, currentGasLimit => 10000, currentNumber => 0, currentTimestamp => 0}, pre => #{}}, #{ trace => true})).
;; Test the code from the shell with tracing.
;; aevm_eeevm:eval(aevm_eeevm_state:init(#{ exec => #{ code => gmb_asm:file("apps/gmsophia/test/contracts/identity.aesm", [pp_tokens, pp_opcodes, pp_patched_code, pp_hex_string]), address => 0, caller => 0, data => <<0:256, 42:256>>, gas => 1000000, gasPrice => 1, origin => 0, value => 0}, env => #{currentCoinbase => 0, currentDifficulty => 0, currentGasLimit => 10000, currentNumber => 0, currentTimestamp => 0}, pre => #{}}, #{ trace => true})).
;; aec_conductor:stop_mining().