Basic setTableValue util function.

This commit is contained in:
Jacques Wagener 2019-09-09 22:48:25 +02:00
parent 3fcfb0fb0c
commit 9bb140eb58
No known key found for this signature in database
GPG Key ID: C294D1025DA0E923
5 changed files with 52 additions and 22 deletions

9
.gitmodules vendored
View File

@ -0,0 +1,9 @@
[submodule "vendor/nim-stew"]
path = vendor/nim-stew
url = git@github.com:status-im/nim-stew.git
[submodule "vendor/stint"]
path = vendor/stint
url = git@github.com:status-im/nim-stint.git
[submodule "vendor/nimcrypto"]
path = vendor/nimcrypto
url = git@github.com:cheatfate/nimcrypto.git

View File

@ -1,30 +1,48 @@
import ../nimplay0_1
proc exit_message(s: string) =
revert(cstring(s), s.len.int32)
# balances: StorageTable[address, wei_value]
proc setTableValue[N](table_id: int32, key: array[N, byte], value: var bytes32) {.inline.} =
type CombinedKey {.packed.} = object
table_id: int32
key: array[N, byte]
var
sha256_address: array[20, byte]
combined_key: CombinedKey
hashed_key: bytes32
sha256_address[19] = 2'u8
combined_key.table_id = table_id
combined_key.key = key
var res = call(
getGasLeft(), # gas
addr sha256_address, # addressOffset (ptr)
nil, # valueOffset (ptr)
addr combined_key, # dataOffset (ptr)
sizeof(combined_key).int32, # dataLength
)
if res == 1: # call failed
exit_message("Could not call sha256 in setTableValue")
# raise newException(Exception, "Could not call sha256 in setTableValue")
if getReturnDataSize() != 32.int32:
exit_message("Could not call sha256, Incorrect return size")
returnDataCopy(addr hashed_key, 0.int32, 32.int32)
storageStore(hashed_key, addr value)
contract("MapStorage"):
proc test*() {.msg.} =
var
tmp_in: array[5, byte] = [0x68'u8, 0x65'u8, 0x6c'u8, 0x6c'u8, 0x6f'u8] # hello
key: bytes32
val: array[32, byte]
sha256_address: array[20, byte]
sha256_address[19] = 2'u8
var res = call(
20000.int64, # gas
addr sha256_address, # addressOffset (ptr)
nil, # valueOffset (ptr)
addr tmp_in, # dataOffset (ptr)
tmp_in.len.int32, # dataLength
)
if res == 1: # call failed
var i = 911.int32
revert(addr i, 32)
returnDataCopy(addr key, 0.int32, getReturnDataSize())
val[29] = 1
val[30] = 1
val[31] = 1
storageStore(addr key, addr val)
proc test*() =
var
key: array[5, byte] = [0x68'u8, 0x65'u8, 0x6c'u8, 0x6c'u8, 0x6f'u8]
val: bytes32
val[31] = 0x75'u8
setTableValue(0.int32, key, val)
# tx = contract_.functions.test().buildTransaction({'from': acct.address, 'nonce': w3.eth.getTransactionCount(acct.address)})
# signed = acct.signTransaction(tx)

1
vendor/nim-stew vendored Submodule

@ -0,0 +1 @@
Subproject commit 5f1dc751ca436e599c59df939344a641f935dd4d

1
vendor/nimcrypto vendored Submodule

@ -0,0 +1 @@
Subproject commit 8d22cf80c509a204f8dbf53309f4a996b5434bcb

1
vendor/stint vendored Submodule

@ -0,0 +1 @@
Subproject commit 9993b9dca4a2dbf76bc432252ad4e8db944ae831