mirror of https://github.com/status-im/nimplay.git
Basic setTableValue util function.
This commit is contained in:
parent
3fcfb0fb0c
commit
9bb140eb58
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 5f1dc751ca436e599c59df939344a641f935dd4d
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 8d22cf80c509a204f8dbf53309f4a996b5434bcb
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 9993b9dca4a2dbf76bc432252ad4e8db944ae831
|
Loading…
Reference in New Issue