From 6823b5caeb5eb2660d6516f542e357c8d1d3550a Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 29 Jun 2018 16:25:24 +0200 Subject: [PATCH 1/3] Add all missing ewasm methods --- assembly/lib/ethereum.ts | 72 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/assembly/lib/ethereum.ts b/assembly/lib/ethereum.ts index 2f50448..955a306 100644 --- a/assembly/lib/ethereum.ts +++ b/assembly/lib/ethereum.ts @@ -2,6 +2,46 @@ import "allocator/arena"; +export declare function useGas(amount: i64): void; + +export declare function getGasLeft(): i64; + +export declare function getAddress(resultOffset: i32): void; + +export declare function getBalance(addressOffset: i32, resultOffset: i32): void; + +export declare function getBlockCoinbase(resultOffset: i32): void; + +export declare function getBlockDifficulty(resultOffset: i32): void; + +export declare function getBlockGasLimit(): i64; + +export declare function getBlockHash(number: i64, resultOffset: i32): void; + +export declare function getBlockNumber(): i64; + +export declare function getBlockTimestamp(): i64; + +export declare function getTxGasPrice(valueOffset: i32): void; + +export declare function getTxOrigin(resultOffest: i32): void; + +export declare function log(dataOffset: i32, length: i32, numberOfTopics: i32, topic1: i32, topic2: i32, topic3: i32, topic4: i32): void; + +export declare function call(gas: i64, addressOffset: i32, valueOffset: i32, dataOffset: i32, dataLength: i32): i32; + +export declare function callCode(gas: i64, addressOffset: i32, valueOffset: i32, dataOffset: i32, dataLength: i32): i32; + +export declare function callDelegate(gas: i64, addressOffset: i32, dataOffset: i32, dataLength: i32): i32; + +export declare function callStatic(gas: i64, addressOffset: i32, dataOffset: i32, dataLength: i32): i32; + +export declare function create(valueOffset: i32, dataOffset: i32, length: i32, resultOffset: i32): i32; + +export declare function returnDataCopy(resultOffset: i32, dataOffset: i32, length: i32): void; + +export declare function getReturnDataSize(): i32; + @external("return") export declare function finish(dataOffset: i32, length: i32): void; @@ -11,13 +51,43 @@ export declare function callDataCopy(resultOffset: i32, dataOffset: i32, length: export declare function getCallDataSize(): i32; -export declare function getCaller(dataOffset: i32): void; +export declare function getCaller(resultOffset: i32): void; + +export declare function getCallValue(resultOffset: i32): void; + +export declare function codeCopy(resultOffset: i32, codeOffset: i32, length: i32): void; + +export declare function getCodeSize(): i32; + +export declare function externalCodeCopy(addressOffset: i32, resultOffset: i32, codeOffset: i32, lengh: i32): void; + +export declare function getExternalCodeSize(addressOffset: i32): i32; export declare function storageStore(pathOffset: i32, valueOffset: i32): void; export declare function storageLoad(pathOffset: i32, resultOffset: i32): void; +export declare function selfDestruct(addressOffset: i32): void; + +@external("debug", "print32") +export declare function print32(value: i32): void; + +@external("debug", "print64") +export declare function print64(value: i64): void; + +@external("debug", "printMem") +export declare function printMem(dataOffset: i32, length: i32): void; + @external("debug", "printMemHex") export declare function printMemHex(dataOffset: i32, length: i32): void; +@external("debug", "printStorage") +export declare function printStorage(pathOffset: i32): void; + +@external("debug", "printStorageHex") +export declare function printStorageHex(pathOffset: i32): void; + +@external("debug", "evmTrace") +export declare function evmTrace(pc: i32, opcode: i32, cost: i32, sp: i32): void; + // TODO: need to implement a nice wrapper over the native functions which use native types and handles the memory. From 5a95dff5276dd4e9687bdf8af985d91e9628404b Mon Sep 17 00:00:00 2001 From: Lane Rettig Date: Fri, 29 Jun 2018 16:38:28 -0400 Subject: [PATCH 2/3] Use usize for pointers --- assembly/lib/ethereum.ts | 60 +++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/assembly/lib/ethereum.ts b/assembly/lib/ethereum.ts index 955a306..24063f9 100644 --- a/assembly/lib/ethereum.ts +++ b/assembly/lib/ethereum.ts @@ -6,68 +6,68 @@ export declare function useGas(amount: i64): void; export declare function getGasLeft(): i64; -export declare function getAddress(resultOffset: i32): void; +export declare function getAddress(resultOffset: usize): void; -export declare function getBalance(addressOffset: i32, resultOffset: i32): void; +export declare function getBalance(addressOffset: usize, resultOffset: usize): void; -export declare function getBlockCoinbase(resultOffset: i32): void; +export declare function getBlockCoinbase(resultOffset: usize): void; -export declare function getBlockDifficulty(resultOffset: i32): void; +export declare function getBlockDifficulty(resultOffset: usize): void; export declare function getBlockGasLimit(): i64; -export declare function getBlockHash(number: i64, resultOffset: i32): void; +export declare function getBlockHash(number: i64, resultOffset: usize): void; export declare function getBlockNumber(): i64; export declare function getBlockTimestamp(): i64; -export declare function getTxGasPrice(valueOffset: i32): void; +export declare function getTxGasPrice(valueOffset: usize): void; -export declare function getTxOrigin(resultOffest: i32): void; +export declare function getTxOrigin(resultOffest: usize): void; -export declare function log(dataOffset: i32, length: i32, numberOfTopics: i32, topic1: i32, topic2: i32, topic3: i32, topic4: i32): void; +export declare function log(dataOffset: usize, length: i32, numberOfTopics: i32, topic1: i32, topic2: i32, topic3: i32, topic4: i32): void; -export declare function call(gas: i64, addressOffset: i32, valueOffset: i32, dataOffset: i32, dataLength: i32): i32; +export declare function call(gas: i64, addressOffset: usize, valueOffset: usize, dataOffset: usize, dataLength: i32): i32; -export declare function callCode(gas: i64, addressOffset: i32, valueOffset: i32, dataOffset: i32, dataLength: i32): i32; +export declare function callCode(gas: i64, addressOffset: usize, valueOffset: usize, dataOffset: usize, dataLength: i32): i32; -export declare function callDelegate(gas: i64, addressOffset: i32, dataOffset: i32, dataLength: i32): i32; +export declare function callDelegate(gas: i64, addressOffset: usize, dataOffset: usize, dataLength: i32): i32; -export declare function callStatic(gas: i64, addressOffset: i32, dataOffset: i32, dataLength: i32): i32; +export declare function callStatic(gas: i64, addressOffset: usize, dataOffset: usize, dataLength: i32): i32; -export declare function create(valueOffset: i32, dataOffset: i32, length: i32, resultOffset: i32): i32; +export declare function create(valueOffset: usize, dataOffset: usize, length: i32, resultOffset: usize): i32; -export declare function returnDataCopy(resultOffset: i32, dataOffset: i32, length: i32): void; +export declare function returnDataCopy(resultOffset: usize, dataOffset: usize, length: i32): void; export declare function getReturnDataSize(): i32; @external("return") -export declare function finish(dataOffset: i32, length: i32): void; +export declare function finish(dataOffset: usize, length: i32): void; -export declare function revert(dataOffset: i32, length: i32): void; +export declare function revert(dataOffset: usize, length: i32): void; -export declare function callDataCopy(resultOffset: i32, dataOffset: i32, length: i32): void; +export declare function callDataCopy(resultOffset: usize, dataOffset: usize, length: i32): void; export declare function getCallDataSize(): i32; -export declare function getCaller(resultOffset: i32): void; +export declare function getCaller(resultOffset: usize): void; -export declare function getCallValue(resultOffset: i32): void; +export declare function getCallValue(resultOffset: usize): void; -export declare function codeCopy(resultOffset: i32, codeOffset: i32, length: i32): void; +export declare function codeCopy(resultOffset: usize, codeOffset: usize, length: i32): void; export declare function getCodeSize(): i32; -export declare function externalCodeCopy(addressOffset: i32, resultOffset: i32, codeOffset: i32, lengh: i32): void; +export declare function externalCodeCopy(addressOffset: usize, resultOffset: usize, codeOffset: usize, lengh: i32): void; -export declare function getExternalCodeSize(addressOffset: i32): i32; +export declare function getExternalCodeSize(addressOffset: usize): i32; -export declare function storageStore(pathOffset: i32, valueOffset: i32): void; +export declare function storageStore(pathOffset: usize, valueOffset: usize): void; -export declare function storageLoad(pathOffset: i32, resultOffset: i32): void; +export declare function storageLoad(pathOffset: usize, resultOffset: usize): void; -export declare function selfDestruct(addressOffset: i32): void; +export declare function selfDestruct(addressOffset: usize): void; @external("debug", "print32") export declare function print32(value: i32): void; @@ -76,18 +76,16 @@ export declare function print32(value: i32): void; export declare function print64(value: i64): void; @external("debug", "printMem") -export declare function printMem(dataOffset: i32, length: i32): void; +export declare function printMem(dataOffset: usize, length: i32): void; @external("debug", "printMemHex") -export declare function printMemHex(dataOffset: i32, length: i32): void; +export declare function printMemHex(dataOffset: usize, length: i32): void; @external("debug", "printStorage") -export declare function printStorage(pathOffset: i32): void; +export declare function printStorage(pathOffset: usize): void; @external("debug", "printStorageHex") -export declare function printStorageHex(pathOffset: i32): void; +export declare function printStorageHex(pathOffset: usize): void; @external("debug", "evmTrace") export declare function evmTrace(pc: i32, opcode: i32, cost: i32, sp: i32): void; - -// TODO: need to implement a nice wrapper over the native functions which use native types and handles the memory. From e7f50f6a758a86a09edb214494ee126140a2b427 Mon Sep 17 00:00:00 2001 From: Lane Rettig Date: Fri, 29 Jun 2018 16:42:22 -0400 Subject: [PATCH 3/3] Fix typo --- assembly/lib/ethereum.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assembly/lib/ethereum.ts b/assembly/lib/ethereum.ts index 24063f9..655a065 100644 --- a/assembly/lib/ethereum.ts +++ b/assembly/lib/ethereum.ts @@ -24,7 +24,7 @@ export declare function getBlockTimestamp(): i64; export declare function getTxGasPrice(valueOffset: usize): void; -export declare function getTxOrigin(resultOffest: usize): void; +export declare function getTxOrigin(resultOffset: usize): void; export declare function log(dataOffset: usize, length: i32, numberOfTopics: i32, topic1: i32, topic2: i32, topic3: i32, topic4: i32): void;