mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-16 09:55:07 +00:00
62 lines
2.9 KiB
Nim
62 lines
2.9 KiB
Nim
import pkg/unittest2
|
|
import ../web3
|
|
import chronos, nimcrypto, options, json, stint
|
|
import test_utils
|
|
import ./depositcontract
|
|
|
|
contract(DepositContract):
|
|
proc deposit(pubkey: DynamicBytes[0, 48], withdrawalCredentials: DynamicBytes[0, 32], signature: DynamicBytes[0, 96], deposit_data_root: FixedBytes[32])
|
|
proc get_deposit_root(): FixedBytes[32]
|
|
proc DepositEvent(pubkey: DynamicBytes[0, 48], withdrawalCredentials: DynamicBytes[0, 32], amount: DynamicBytes[0, 8], signature: DynamicBytes[0, 96], merkleTreeIndex: DynamicBytes[0, 8]) {.event.}
|
|
|
|
suite "Deposit contract":
|
|
|
|
test "deposits":
|
|
proc test() {.async.} =
|
|
let web3 = await newWeb3("ws://127.0.0.1:8545/")
|
|
let accounts = await web3.provider.eth_accounts()
|
|
let gasPrice = int(await web3.provider.eth_gasPrice())
|
|
web3.defaultAccount = accounts[0]
|
|
|
|
let receipt = await web3.deployContract(DepositContractCode, gasPrice=gasPrice)
|
|
let contractAddress = receipt.contractAddress.get
|
|
echo "Deployed Deposit contract: ", contractAddress
|
|
|
|
var ns = web3.contractSender(DepositContract, contractAddress)
|
|
|
|
let notifFut = newFuture[void]()
|
|
var notificationsReceived = 0
|
|
|
|
var pk = DynamicBytes[0, 48].fromHex("0xa20469ec49fdfdcaaa68c470642feb9d7d0e612026c6243928772a7277bde77d081e63cc9034cee9eb5abee66ea12861")
|
|
var cr = DynamicBytes[0, 32].fromHex("0x0012c7b99594801d513ae92396379e5ffcf60e23127cbcabb166db28586f01aa")
|
|
var sig = DynamicBytes[0, 96].fromHex("0x81c7536816ff1e4ca6a52b5e853c19e9def14c01b07f0e1ac9b1e8a198bf78c98e98e74465d13e2978ae720dcab0a7da10fa56221477773ad7c3f82317c3e0f12a76f47332b9b5350b655ae196db33221f64183d1da3784f608001489ff523d5")
|
|
var dataRoot = FixedBytes[32].fromHex("0x2ed19a8a1a22a2ff61fbd3862d4ff9f9bd45836efe313e6ecad6dd907f1b6078")
|
|
|
|
var fut = newFuture[void]()
|
|
|
|
let s = await ns.subscribe(DepositEvent, %*{"fromBlock": "0x0"}) do (
|
|
pubkey: DynamicBytes[0, 48], withdrawalCredentials: DynamicBytes[0, 32], amount: DynamicBytes[0, 8], signature: DynamicBytes[0, 96], merkleTreeIndex: DynamicBytes[0, 8])
|
|
{.raises: [Defect], gcsafe.}:
|
|
try:
|
|
echo "onDeposit"
|
|
echo "pubkey: ", pubkey
|
|
echo "withdrawalCredentials: ", withdrawalCredentials
|
|
echo "amount: ", amount
|
|
echo "signature: ", signature
|
|
echo "merkleTreeIndex: ", merkleTreeIndex
|
|
assert(pubkey == pk)
|
|
fut.complete()
|
|
except Exception as err:
|
|
# chronos still raises exceptions which inherit directly from Exception
|
|
doAssert false, err.msg
|
|
do (err: CatchableError):
|
|
echo "Error from DepositEvent subscription: ", err.msg
|
|
|
|
discard await ns.deposit(pk, cr, sig, dataRoot).send(value = 32.u256.ethToWei, gasPrice=gasPrice)
|
|
|
|
await fut
|
|
echo "hash_tree_root: ", await ns.get_deposit_root().call()
|
|
await web3.close()
|
|
|
|
waitFor test()
|