From 3ca0b148afcb2683c904f2a4295f3a02c8144c10 Mon Sep 17 00:00:00 2001 From: Gino Date: Thu, 11 Jul 2024 11:36:10 +0100 Subject: [PATCH 1/3] feat: move L1Assets.sol from wiki to wasp repo --- .../evm/evmtest/wiki_how_tos/L1Assets.abi | 1 + .../evm/evmtest/wiki_how_tos/L1Assets.bin | 1 + .../evm/evmtest/wiki_how_tos/L1Assets.sol | 16 +++++ .../evmtest/wiki_how_tos/L1_assets_test.go | 65 +++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 packages/evm/evmtest/wiki_how_tos/L1Assets.abi create mode 100644 packages/evm/evmtest/wiki_how_tos/L1Assets.bin create mode 100644 packages/evm/evmtest/wiki_how_tos/L1Assets.sol create mode 100644 packages/evm/evmtest/wiki_how_tos/L1_assets_test.go diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.abi b/packages/evm/evmtest/wiki_how_tos/L1Assets.abi new file mode 100644 index 0000000000..423b979e45 --- /dev/null +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.abi @@ -0,0 +1 @@ +[{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L1Address","name":"to","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.bin b/packages/evm/evmtest/wiki_how_tos/L1Assets.bin new file mode 100644 index 0000000000..2360138751 --- /dev/null +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.bin @@ -0,0 +1 @@ +6080604052348015600e575f80fd5b506110228061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80639505f6dc1461002d575b5f80fd5b6100476004803603810190610042919061047b565b610049565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b81526004016100979190610501565b5f60405180830381865afa1580156100b1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906100d99190610932565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663423fa15133836040518363ffffffff1660e01b815260040161012a929190610c21565b5f604051808303815f87803b158015610141575f80fd5b505af1158015610153573d5f803e3d5ffd5b5050505061015f6101ef565b61016761023d565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7a53f5385855f86866040518663ffffffff1660e01b81526004016101bc959493929190610f7f565b5f604051808303815f87803b1580156101d3575f80fd5b505af11580156101e5573d5f803e3d5ffd5b5050505050505050565b6040518060a001604052805f63ffffffff1681526020015f63ffffffff16815260200161021a61025f565b8152602001610227610272565b81526020015f67ffffffffffffffff1681525090565b60405180604001604052805f60070b815260200161025961029c565b81525090565b6040518060200160405280606081525090565b60405180606001604052805f67ffffffffffffffff16815260200160608152602001606081525090565b60405180604001604052805f60070b81526020016102b86102be565b81525090565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61032c826102e6565b810181811067ffffffffffffffff8211171561034b5761034a6102f6565b5b80604052505050565b5f61035d6102d1565b90506103698282610323565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610394576103936102f6565b5b61039d826102e6565b9050602081019050919050565b828183375f83830152505050565b5f6103ca6103c58461037a565b610354565b9050828152602081018484840111156103e6576103e5610376565b5b6103f18482856103aa565b509392505050565b5f82601f83011261040d5761040c610372565b5b813561041d8482602086016103b8565b91505092915050565b5f6020828403121561043b5761043a6102e2565b5b6104456020610354565b90505f82013567ffffffffffffffff8111156104645761046361036e565b5b610470848285016103f9565b5f8301525092915050565b5f602082840312156104905761048f6102da565b5b5f82013567ffffffffffffffff8111156104ad576104ac6102de565b5b6104b984828501610426565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104eb826104c2565b9050919050565b6104fb816104e1565b82525050565b5f6020820190506105145f8301846104f2565b92915050565b5f67ffffffffffffffff82169050919050565b6105368161051a565b8114610540575f80fd5b50565b5f815190506105518161052d565b92915050565b5f67ffffffffffffffff821115610571576105706102f6565b5b602082029050602081019050919050565b5f80fd5b8281835e5f83830152505050565b5f6105a66105a18461037a565b610354565b9050828152602081018484840111156105c2576105c1610376565b5b6105cd848285610586565b509392505050565b5f82601f8301126105e9576105e8610372565b5b81516105f9848260208601610594565b91505092915050565b5f60208284031215610617576106166102e2565b5b6106216020610354565b90505f82015167ffffffffffffffff8111156106405761063f61036e565b5b61064c848285016105d5565b5f8301525092915050565b5f819050919050565b61066981610657565b8114610673575f80fd5b50565b5f8151905061068481610660565b92915050565b5f6040828403121561069f5761069e6102e2565b5b6106a96040610354565b90505f82015167ffffffffffffffff8111156106c8576106c761036e565b5b6106d484828501610602565b5f8301525060206106e784828501610676565b60208301525092915050565b5f61070561070084610557565b610354565b9050808382526020820190506020840283018581111561072857610727610582565b5b835b8181101561076f57805167ffffffffffffffff81111561074d5761074c610372565b5b80860161075a898261068a565b8552602085019450505060208101905061072a565b5050509392505050565b5f82601f83011261078d5761078c610372565b5b815161079d8482602086016106f3565b91505092915050565b5f67ffffffffffffffff8211156107c0576107bf6102f6565b5b602082029050602081019050919050565b5f819050919050565b6107e3816107d1565b81146107ed575f80fd5b50565b5f815190506107fe816107da565b92915050565b5f610816610811846107a6565b610354565b9050808382526020820190506020840283018581111561083957610838610582565b5b835b81811015610862578061084e88826107f0565b84526020840193505060208101905061083b565b5050509392505050565b5f82601f8301126108805761087f610372565b5b8151610890848260208601610804565b91505092915050565b5f606082840312156108ae576108ad6102e2565b5b6108b86060610354565b90505f6108c784828501610543565b5f83015250602082015167ffffffffffffffff8111156108ea576108e961036e565b5b6108f684828501610779565b602083015250604082015167ffffffffffffffff81111561091a5761091961036e565b5b6109268482850161086c565b60408301525092915050565b5f60208284031215610947576109466102da565b5b5f82015167ffffffffffffffff811115610964576109636102de565b5b61097084828501610899565b91505092915050565b6109828161051a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6109d5826109b1565b6109df81856109bb565b93506109ef818560208601610586565b6109f8816102e6565b840191505092915050565b5f602083015f8301518482035f860152610a1d82826109cb565b9150508091505092915050565b610a3381610657565b82525050565b5f604083015f8301518482035f860152610a538282610a03565b9150506020830151610a686020860182610a2a565b508091505092915050565b5f610a7e8383610a39565b905092915050565b5f602082019050919050565b5f610a9c82610988565b610aa68185610992565b935083602082028501610ab8856109a2565b805f5b85811015610af35784840389528151610ad48582610a73565b9450610adf83610a86565b925060208a01995050600181019050610abb565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610b38826107d1565b9050919050565b610b4881610b2e565b82525050565b5f610b598383610b3f565b60208301905092915050565b5f602082019050919050565b5f610b7b82610b05565b610b858185610b0f565b9350610b9083610b1f565b805f5b83811015610bc0578151610ba78882610b4e565b9750610bb283610b65565b925050600181019050610b93565b5085935050505092915050565b5f606083015f830151610be25f860182610979565b5060208301518482036020860152610bfa8282610a92565b91505060408301518482036040860152610c148282610b71565b9150508091505092915050565b5f604082019050610c345f8301856104f2565b8181036020830152610c468184610bcd565b90509392505050565b5f602083015f8301518482035f860152610c6982826109cb565b9150508091505092915050565b5f8115159050919050565b610c8a81610c76565b82525050565b5f63ffffffff82169050919050565b5f819050919050565b5f610cc2610cbd610cb884610c90565b610c9f565b610c90565b9050919050565b610cd281610ca8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f8301518482035f860152610d1b82826109cb565b91505060208301518482036020860152610d3582826109cb565b9150508091505092915050565b5f610d4d8383610d01565b905092915050565b5f602082019050919050565b5f610d6b82610cd8565b610d758185610ce2565b935083602082028501610d8785610cf2565b805f5b85811015610dc25784840389528151610da38582610d42565b9450610dae83610d55565b925060208a01995050600181019050610d8a565b50829750879550505050505092915050565b5f602083015f8301518482035f860152610dee8282610d61565b9150508091505092915050565b5f606083015f830151610e105f860182610979565b5060208301518482036020860152610e288282610a92565b91505060408301518482036040860152610e428282610b71565b9150508091505092915050565b5f60a083015f830151610e645f860182610cc9565b506020830151610e776020860182610cc9565b5060408301518482036040860152610e8f8282610dd4565b91505060608301518482036060860152610ea98282610dfb565b9150506080830151610ebe6080860182610979565b508091505092915050565b5f8160070b9050919050565b610ede81610ec9565b82525050565b5f602083015f8301518482035f860152610efe82826109cb565b9150508091505092915050565b5f604083015f830151610f205f860182610ed5565b5060208301518482036020860152610f388282610ee4565b9150508091505092915050565b5f604083015f830151610f5a5f860182610ed5565b5060208301518482036020860152610f728282610f0b565b9150508091505092915050565b5f60a0820190508181035f830152610f978188610c4f565b90508181036020830152610fab8187610bcd565b9050610fba6040830186610c81565b8181036060830152610fcc8185610e4f565b90508181036080830152610fe08184610f45565b9050969550505050505056fea2646970667358221220bc9fb66c19a0073be20bc438e3354360e47b6904ffba39e99e0e5e38acf3c32464736f6c63430008190033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.sol b/packages/evm/evmtest/wiki_how_tos/L1Assets.sol new file mode 100644 index 0000000000..41f9fce87d --- /dev/null +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@iscmagic/ISC.sol"; + +contract L1Assets { + function withdraw(L1Address memory to) public { + ISCAssets memory allowance = ISC.sandbox.getAllowanceFrom(msg.sender); + ISC.sandbox.takeAllowedFunds(msg.sender, allowance); + + ISCSendMetadata memory metadata; + ISCSendOptions memory options; + ISC.sandbox.send(to, allowance, false, metadata, options); + } +} diff --git a/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go b/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go new file mode 100644 index 0000000000..7c0daa2b81 --- /dev/null +++ b/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go @@ -0,0 +1,65 @@ +package wiki_how_tos_test + +import ( + _ "embed" + "math/big" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/iotaledger/wasp/packages/isc" + "github.com/iotaledger/wasp/packages/solo" + "github.com/iotaledger/wasp/packages/vm/core/evm/evmtest" +) + +//go:generate sh -c "solc --abi --bin --overwrite @iscmagic=`realpath ../../../vm/core/evm/iscmagic` L1Assets.sol -o ." +var ( + //go:embed L1Assets.abi + L1AssetsContractABI string + //go:embed L1Assets.bin + L1AssetsContractBytecodeHex string + L1AssetsContractBytecode = common.FromHex(strings.TrimSpace(L1AssetsContractBytecodeHex)) +) + +func TestWithdraw(t *testing.T) { + env := evmtest.InitEVMWithSolo(t, solo.New(t), true) + privateKey, deployer := env.Chain.NewEthereumAccountWithL2Funds() + + instance := env.DeployContract(privateKey, L1AssetsContractABI, L1AssetsContractBytecode) + + // Define a mock L1 address for withdrawal + recipientAddress := common.HexToAddress("0x1234567890Abcdef1234567890Abcdef12345678") + + // Mock the allowance that would be returned by ISC.sandbox.getAllowanceFrom + mockAllowance := isc.NewEmptyAssets() + mockAllowance.AddBaseTokens(1000) + + // Call the withdraw function and expect an event (assuming "Withdrawn" event) + var withdrawnEvent struct { + To common.Address + Amount *big.Int + } + result, err := instance.CallFnExpectEvent(nil, "Withdrawn", &withdrawnEvent, "withdraw", recipientAddress) + require.NoError(t, err) + + // Verify the event + assert.Equal(t, recipientAddress, withdrawnEvent.To, "Recipient address should match") + assert.Equal(t, mockAllowance.BaseTokens(), withdrawnEvent.Amount.Uint64(), "Withdrawn amount should match the allowance") + + // Get the transaction hash from the result + txHash := result.GetTxHash() + require.NotNil(t, txHash) + + // Wait for the transaction to be confirmed + receipt, err := env.Chain.EVM().TransactionReceipt(txHash) + require.NoError(t, err) + assert.Equal(t, receipt.Status, uint64(1), "Transaction should be successful") + + // Additional check: Ensure deployer still has funds + balance, err := env.Chain.EVM().Balance(deployer, nil) + require.NoError(t, err) + assert.True(t, balance.Sign() > 0, "Deployer should still have a positive balance") +} From b861cff41d54d2af0e8f76853196c35dec7c8d7e Mon Sep 17 00:00:00 2001 From: Gino Date: Mon, 15 Jul 2024 12:36:44 +0100 Subject: [PATCH 2/3] feat: commiting to get suggestions --- .../evm/evmtest/wiki_how_tos/L1Assets.abi | 2 +- .../evm/evmtest/wiki_how_tos/L1Assets.bin | 2 +- .../evm/evmtest/wiki_how_tos/L1Assets.sol | 9 ++ .../evmtest/wiki_how_tos/L1_assets_test.go | 93 ++++++++++--------- 4 files changed, 60 insertions(+), 46 deletions(-) diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.abi b/packages/evm/evmtest/wiki_how_tos/L1Assets.abi index 423b979e45..6657b82497 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1Assets.abi +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.abi @@ -1 +1 @@ -[{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L1Address","name":"to","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct NativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct NativeToken[]","name":"_amount","type":"tuple[]"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L1Address","name":"to","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.bin b/packages/evm/evmtest/wiki_how_tos/L1Assets.bin index 2360138751..38e3c67f65 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1Assets.bin +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.bin @@ -1 +1 @@ -6080604052348015600e575f80fd5b506110228061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80639505f6dc1461002d575b5f80fd5b6100476004803603810190610042919061047b565b610049565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b81526004016100979190610501565b5f60405180830381865afa1580156100b1573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906100d99190610932565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663423fa15133836040518363ffffffff1660e01b815260040161012a929190610c21565b5f604051808303815f87803b158015610141575f80fd5b505af1158015610153573d5f803e3d5ffd5b5050505061015f6101ef565b61016761023d565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7a53f5385855f86866040518663ffffffff1660e01b81526004016101bc959493929190610f7f565b5f604051808303815f87803b1580156101d3575f80fd5b505af11580156101e5573d5f803e3d5ffd5b5050505050505050565b6040518060a001604052805f63ffffffff1681526020015f63ffffffff16815260200161021a61025f565b8152602001610227610272565b81526020015f67ffffffffffffffff1681525090565b60405180604001604052805f60070b815260200161025961029c565b81525090565b6040518060200160405280606081525090565b60405180606001604052805f67ffffffffffffffff16815260200160608152602001606081525090565b60405180604001604052805f60070b81526020016102b86102be565b81525090565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61032c826102e6565b810181811067ffffffffffffffff8211171561034b5761034a6102f6565b5b80604052505050565b5f61035d6102d1565b90506103698282610323565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610394576103936102f6565b5b61039d826102e6565b9050602081019050919050565b828183375f83830152505050565b5f6103ca6103c58461037a565b610354565b9050828152602081018484840111156103e6576103e5610376565b5b6103f18482856103aa565b509392505050565b5f82601f83011261040d5761040c610372565b5b813561041d8482602086016103b8565b91505092915050565b5f6020828403121561043b5761043a6102e2565b5b6104456020610354565b90505f82013567ffffffffffffffff8111156104645761046361036e565b5b610470848285016103f9565b5f8301525092915050565b5f602082840312156104905761048f6102da565b5b5f82013567ffffffffffffffff8111156104ad576104ac6102de565b5b6104b984828501610426565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104eb826104c2565b9050919050565b6104fb816104e1565b82525050565b5f6020820190506105145f8301846104f2565b92915050565b5f67ffffffffffffffff82169050919050565b6105368161051a565b8114610540575f80fd5b50565b5f815190506105518161052d565b92915050565b5f67ffffffffffffffff821115610571576105706102f6565b5b602082029050602081019050919050565b5f80fd5b8281835e5f83830152505050565b5f6105a66105a18461037a565b610354565b9050828152602081018484840111156105c2576105c1610376565b5b6105cd848285610586565b509392505050565b5f82601f8301126105e9576105e8610372565b5b81516105f9848260208601610594565b91505092915050565b5f60208284031215610617576106166102e2565b5b6106216020610354565b90505f82015167ffffffffffffffff8111156106405761063f61036e565b5b61064c848285016105d5565b5f8301525092915050565b5f819050919050565b61066981610657565b8114610673575f80fd5b50565b5f8151905061068481610660565b92915050565b5f6040828403121561069f5761069e6102e2565b5b6106a96040610354565b90505f82015167ffffffffffffffff8111156106c8576106c761036e565b5b6106d484828501610602565b5f8301525060206106e784828501610676565b60208301525092915050565b5f61070561070084610557565b610354565b9050808382526020820190506020840283018581111561072857610727610582565b5b835b8181101561076f57805167ffffffffffffffff81111561074d5761074c610372565b5b80860161075a898261068a565b8552602085019450505060208101905061072a565b5050509392505050565b5f82601f83011261078d5761078c610372565b5b815161079d8482602086016106f3565b91505092915050565b5f67ffffffffffffffff8211156107c0576107bf6102f6565b5b602082029050602081019050919050565b5f819050919050565b6107e3816107d1565b81146107ed575f80fd5b50565b5f815190506107fe816107da565b92915050565b5f610816610811846107a6565b610354565b9050808382526020820190506020840283018581111561083957610838610582565b5b835b81811015610862578061084e88826107f0565b84526020840193505060208101905061083b565b5050509392505050565b5f82601f8301126108805761087f610372565b5b8151610890848260208601610804565b91505092915050565b5f606082840312156108ae576108ad6102e2565b5b6108b86060610354565b90505f6108c784828501610543565b5f83015250602082015167ffffffffffffffff8111156108ea576108e961036e565b5b6108f684828501610779565b602083015250604082015167ffffffffffffffff81111561091a5761091961036e565b5b6109268482850161086c565b60408301525092915050565b5f60208284031215610947576109466102da565b5b5f82015167ffffffffffffffff811115610964576109636102de565b5b61097084828501610899565b91505092915050565b6109828161051a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6109d5826109b1565b6109df81856109bb565b93506109ef818560208601610586565b6109f8816102e6565b840191505092915050565b5f602083015f8301518482035f860152610a1d82826109cb565b9150508091505092915050565b610a3381610657565b82525050565b5f604083015f8301518482035f860152610a538282610a03565b9150506020830151610a686020860182610a2a565b508091505092915050565b5f610a7e8383610a39565b905092915050565b5f602082019050919050565b5f610a9c82610988565b610aa68185610992565b935083602082028501610ab8856109a2565b805f5b85811015610af35784840389528151610ad48582610a73565b9450610adf83610a86565b925060208a01995050600181019050610abb565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610b38826107d1565b9050919050565b610b4881610b2e565b82525050565b5f610b598383610b3f565b60208301905092915050565b5f602082019050919050565b5f610b7b82610b05565b610b858185610b0f565b9350610b9083610b1f565b805f5b83811015610bc0578151610ba78882610b4e565b9750610bb283610b65565b925050600181019050610b93565b5085935050505092915050565b5f606083015f830151610be25f860182610979565b5060208301518482036020860152610bfa8282610a92565b91505060408301518482036040860152610c148282610b71565b9150508091505092915050565b5f604082019050610c345f8301856104f2565b8181036020830152610c468184610bcd565b90509392505050565b5f602083015f8301518482035f860152610c6982826109cb565b9150508091505092915050565b5f8115159050919050565b610c8a81610c76565b82525050565b5f63ffffffff82169050919050565b5f819050919050565b5f610cc2610cbd610cb884610c90565b610c9f565b610c90565b9050919050565b610cd281610ca8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f8301518482035f860152610d1b82826109cb565b91505060208301518482036020860152610d3582826109cb565b9150508091505092915050565b5f610d4d8383610d01565b905092915050565b5f602082019050919050565b5f610d6b82610cd8565b610d758185610ce2565b935083602082028501610d8785610cf2565b805f5b85811015610dc25784840389528151610da38582610d42565b9450610dae83610d55565b925060208a01995050600181019050610d8a565b50829750879550505050505092915050565b5f602083015f8301518482035f860152610dee8282610d61565b9150508091505092915050565b5f606083015f830151610e105f860182610979565b5060208301518482036020860152610e288282610a92565b91505060408301518482036040860152610e428282610b71565b9150508091505092915050565b5f60a083015f830151610e645f860182610cc9565b506020830151610e776020860182610cc9565b5060408301518482036040860152610e8f8282610dd4565b91505060608301518482036060860152610ea98282610dfb565b9150506080830151610ebe6080860182610979565b508091505092915050565b5f8160070b9050919050565b610ede81610ec9565b82525050565b5f602083015f8301518482035f860152610efe82826109cb565b9150508091505092915050565b5f604083015f830151610f205f860182610ed5565b5060208301518482036020860152610f388282610ee4565b9150508091505092915050565b5f604083015f830151610f5a5f860182610ed5565b5060208301518482036020860152610f728282610f0b565b9150508091505092915050565b5f60a0820190508181035f830152610f978188610c4f565b90508181036020830152610fab8187610bcd565b9050610fba6040830186610c81565b8181036060830152610fcc8185610e4f565b90508181036080830152610fe08184610f45565b9050969550505050505056fea2646970667358221220bc9fb66c19a0073be20bc438e3354360e47b6904ffba39e99e0e5e38acf3c32464736f6c63430008190033 \ No newline at end of file +6080604052348015600e575f80fd5b506112e48061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80631d62c241146100385780639505f6dc14610054575b5f80fd5b610052600480360381019061004d919061070c565b610070565b005b61006e600480360381019061006991906107bb565b610102565b005b6100786102a8565b81816020018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663765f4f9e84836040518363ffffffff1660e01b81526004016100d0929190610ae3565b5f604051808303815f87803b1580156100e7575f80fd5b505af11580156100f9573d5f803e3d5ffd5b50505050505050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b81526004016101509190610b11565b5f60405180830381865afa15801561016a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906101929190610eca565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663423fa15133836040518363ffffffff1660e01b81526004016101e3929190610ae3565b5f604051808303815f87803b1580156101fa575f80fd5b505af115801561020c573d5f803e3d5ffd5b505050506102186102d2565b610220610320565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7a53f5385855f86866040518663ffffffff1660e01b8152600401610275959493929190611241565b5f604051808303815f87803b15801561028c575f80fd5b505af115801561029e573d5f803e3d5ffd5b5050505050505050565b60405180606001604052805f67ffffffffffffffff16815260200160608152602001606081525090565b6040518060a001604052805f63ffffffff1681526020015f63ffffffff1681526020016102fd610342565b815260200161030a6102a8565b81526020015f67ffffffffffffffff1681525090565b60405180604001604052805f60070b815260200161033c610355565b81525090565b6040518060200160405280606081525090565b60405180604001604052805f60070b8152602001610371610377565b81525090565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103c48261039b565b9050919050565b6103d4816103ba565b81146103de575f80fd5b50565b5f813590506103ef816103cb565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61043f826103f9565b810181811067ffffffffffffffff8211171561045e5761045d610409565b5b80604052505050565b5f61047061038a565b905061047c8282610436565b919050565b5f67ffffffffffffffff82111561049b5761049a610409565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156104d6576104d5610409565b5b6104df826103f9565b9050602081019050919050565b828183375f83830152505050565b5f61050c610507846104bc565b610467565b905082815260208101848484011115610528576105276104b8565b5b6105338482856104ec565b509392505050565b5f82601f83011261054f5761054e6103f5565b5b813561055f8482602086016104fa565b91505092915050565b5f6020828403121561057d5761057c6104b0565b5b6105876020610467565b90505f82013567ffffffffffffffff8111156105a6576105a56104b4565b5b6105b28482850161053b565b5f8301525092915050565b5f819050919050565b6105cf816105bd565b81146105d9575f80fd5b50565b5f813590506105ea816105c6565b92915050565b5f60408284031215610605576106046104b0565b5b61060f6040610467565b90505f82013567ffffffffffffffff81111561062e5761062d6104b4565b5b61063a84828501610568565b5f83015250602061064d848285016105dc565b60208301525092915050565b5f61066b61066684610481565b610467565b9050808382526020820190506020840283018581111561068e5761068d6104ac565b5b835b818110156106d557803567ffffffffffffffff8111156106b3576106b26103f5565b5b8086016106c089826105f0565b85526020850194505050602081019050610690565b5050509392505050565b5f82601f8301126106f3576106f26103f5565b5b8135610703848260208601610659565b91505092915050565b5f806040838503121561072257610721610393565b5b5f61072f858286016103e1565b925050602083013567ffffffffffffffff8111156107505761074f610397565b5b61075c858286016106df565b9150509250929050565b5f6020828403121561077b5761077a6104b0565b5b6107856020610467565b90505f82013567ffffffffffffffff8111156107a4576107a36104b4565b5b6107b08482850161053b565b5f8301525092915050565b5f602082840312156107d0576107cf610393565b5b5f82013567ffffffffffffffff8111156107ed576107ec610397565b5b6107f984828501610766565b91505092915050565b61080b816103ba565b82525050565b5f67ffffffffffffffff82169050919050565b61082d81610811565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61088e8261085c565b6108988185610866565b93506108a8818560208601610876565b6108b1816103f9565b840191505092915050565b5f602083015f8301518482035f8601526108d68282610884565b9150508091505092915050565b6108ec816105bd565b82525050565b5f604083015f8301518482035f86015261090c82826108bc565b915050602083015161092160208601826108e3565b508091505092915050565b5f61093783836108f2565b905092915050565b5f602082019050919050565b5f61095582610833565b61095f818561083d565b9350836020820285016109718561084d565b805f5b858110156109ac578484038952815161098d858261092c565b94506109988361093f565b925060208a01995050600181019050610974565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f6109fa826109e7565b9050919050565b610a0a816109f0565b82525050565b5f610a1b8383610a01565b60208301905092915050565b5f602082019050919050565b5f610a3d826109be565b610a4781856109c8565b9350610a52836109d8565b805f5b83811015610a82578151610a698882610a10565b9750610a7483610a27565b925050600181019050610a55565b5085935050505092915050565b5f606083015f830151610aa45f860182610824565b5060208301518482036020860152610abc828261094b565b91505060408301518482036040860152610ad68282610a33565b9150508091505092915050565b5f604082019050610af65f830185610802565b8181036020830152610b088184610a8f565b90509392505050565b5f602082019050610b245f830184610802565b92915050565b610b3381610811565b8114610b3d575f80fd5b50565b5f81519050610b4e81610b2a565b92915050565b5f610b66610b61846104bc565b610467565b905082815260208101848484011115610b8257610b816104b8565b5b610b8d848285610876565b509392505050565b5f82601f830112610ba957610ba86103f5565b5b8151610bb9848260208601610b54565b91505092915050565b5f60208284031215610bd757610bd66104b0565b5b610be16020610467565b90505f82015167ffffffffffffffff811115610c0057610bff6104b4565b5b610c0c84828501610b95565b5f8301525092915050565b5f81519050610c25816105c6565b92915050565b5f60408284031215610c4057610c3f6104b0565b5b610c4a6040610467565b90505f82015167ffffffffffffffff811115610c6957610c686104b4565b5b610c7584828501610bc2565b5f830152506020610c8884828501610c17565b60208301525092915050565b5f610ca6610ca184610481565b610467565b90508083825260208201905060208402830185811115610cc957610cc86104ac565b5b835b81811015610d1057805167ffffffffffffffff811115610cee57610ced6103f5565b5b808601610cfb8982610c2b565b85526020850194505050602081019050610ccb565b5050509392505050565b5f82601f830112610d2e57610d2d6103f5565b5b8151610d3e848260208601610c94565b91505092915050565b5f67ffffffffffffffff821115610d6157610d60610409565b5b602082029050602081019050919050565b610d7b816109e7565b8114610d85575f80fd5b50565b5f81519050610d9681610d72565b92915050565b5f610dae610da984610d47565b610467565b90508083825260208201905060208402830185811115610dd157610dd06104ac565b5b835b81811015610dfa5780610de68882610d88565b845260208401935050602081019050610dd3565b5050509392505050565b5f82601f830112610e1857610e176103f5565b5b8151610e28848260208601610d9c565b91505092915050565b5f60608284031215610e4657610e456104b0565b5b610e506060610467565b90505f610e5f84828501610b40565b5f83015250602082015167ffffffffffffffff811115610e8257610e816104b4565b5b610e8e84828501610d1a565b602083015250604082015167ffffffffffffffff811115610eb257610eb16104b4565b5b610ebe84828501610e04565b60408301525092915050565b5f60208284031215610edf57610ede610393565b5b5f82015167ffffffffffffffff811115610efc57610efb610397565b5b610f0884828501610e31565b91505092915050565b5f602083015f8301518482035f860152610f2b8282610884565b9150508091505092915050565b5f8115159050919050565b610f4c81610f38565b82525050565b5f63ffffffff82169050919050565b5f819050919050565b5f610f84610f7f610f7a84610f52565b610f61565b610f52565b9050919050565b610f9481610f6a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f8301518482035f860152610fdd8282610884565b91505060208301518482036020860152610ff78282610884565b9150508091505092915050565b5f61100f8383610fc3565b905092915050565b5f602082019050919050565b5f61102d82610f9a565b6110378185610fa4565b93508360208202850161104985610fb4565b805f5b8581101561108457848403895281516110658582611004565b945061107083611017565b925060208a0199505060018101905061104c565b50829750879550505050505092915050565b5f602083015f8301518482035f8601526110b08282611023565b9150508091505092915050565b5f606083015f8301516110d25f860182610824565b50602083015184820360208601526110ea828261094b565b915050604083015184820360408601526111048282610a33565b9150508091505092915050565b5f60a083015f8301516111265f860182610f8b565b5060208301516111396020860182610f8b565b50604083015184820360408601526111518282611096565b9150506060830151848203606086015261116b82826110bd565b91505060808301516111806080860182610824565b508091505092915050565b5f8160070b9050919050565b6111a08161118b565b82525050565b5f602083015f8301518482035f8601526111c08282610884565b9150508091505092915050565b5f604083015f8301516111e25f860182611197565b50602083015184820360208601526111fa82826111a6565b9150508091505092915050565b5f604083015f83015161121c5f860182611197565b506020830151848203602086015261123482826111cd565b9150508091505092915050565b5f60a0820190508181035f8301526112598188610f11565b9050818103602083015261126d8187610a8f565b905061127c6040830186610f43565b818103606083015261128e8185611111565b905081810360808301526112a28184611207565b9050969550505050505056fea2646970667358221220a198779f8d262a5281c4c07b99f49391656edf0a14408696531fc65ded20a3a664736f6c63430008190033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.sol b/packages/evm/evmtest/wiki_how_tos/L1Assets.sol index 41f9fce87d..d67a86b8b8 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1Assets.sol +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.sol @@ -5,6 +5,15 @@ pragma solidity ^0.8.0; import "@iscmagic/ISC.sol"; contract L1Assets { + + function allow(address memory _address, NativeTokenID memory _nativeTokenId) public { + NativeTokenID[] memory nativeTokenIds = new NativeTokenID[](1); + nativeTokenIds[0] = NativeTokenID.wrap(_nativeTokenId); + ISCAssets memory assets; + assets.nativeTokens = _nativeTokenIds; + ISC.sandbox.allow(_address, assets); + } + function withdraw(L1Address memory to) public { ISCAssets memory allowance = ISC.sandbox.getAllowanceFrom(msg.sender); ISC.sandbox.takeAllowedFunds(msg.sender, allowance); diff --git a/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go b/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go index 7c0daa2b81..549bb39a64 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go +++ b/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go @@ -1,65 +1,70 @@ package wiki_how_tos_test import ( - _ "embed" - "math/big" - "strings" - "testing" + _ "embed" + "strings" + "testing" - "github.com/ethereum/go-ethereum/common" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/common" + //"github.com/iotaledger/wasp/packages/isc" + //"github.com/iotaledger/wasp/packages/parameters" + "github.com/iotaledger/wasp/packages/isc" + "github.com/iotaledger/wasp/packages/solo" - "github.com/iotaledger/wasp/packages/isc" - "github.com/iotaledger/wasp/packages/solo" - "github.com/iotaledger/wasp/packages/vm/core/evm/evmtest" + //"github.com/iotaledger/wasp/packages/util" + "github.com/iotaledger/wasp/packages/vm/core/evm/evmtest" + "github.com/iotaledger/wasp/packages/vm/core/evm/iscmagic" + "github.com/stretchr/testify/require" ) //go:generate sh -c "solc --abi --bin --overwrite @iscmagic=`realpath ../../../vm/core/evm/iscmagic` L1Assets.sol -o ." var ( - //go:embed L1Assets.abi - L1AssetsContractABI string - //go:embed L1Assets.bin - L1AssetsContractBytecodeHex string - L1AssetsContractBytecode = common.FromHex(strings.TrimSpace(L1AssetsContractBytecodeHex)) + //go:embed L1Assets.abi + L1AssetsContractABI string + //go:embed L1Assets.bin + L1AssetsContractBytecodeHex string + L1AssetsContractBytecode = common.FromHex(strings.TrimSpace(L1AssetsContractBytecodeHex)) ) func TestWithdraw(t *testing.T) { - env := evmtest.InitEVMWithSolo(t, solo.New(t), true) - privateKey, deployer := env.Chain.NewEthereumAccountWithL2Funds() + env := evmtest.InitEVMWithSolo(t, solo.New(t), true) + privateKey, deployer := env.Chain.NewEthereumAccountWithL2Funds() - instance := env.DeployContract(privateKey, L1AssetsContractABI, L1AssetsContractBytecode) + _, receiver := env.Chain.Env.NewKeyPair() - // Define a mock L1 address for withdrawal - recipientAddress := common.HexToAddress("0x1234567890Abcdef1234567890Abcdef12345678") + // Deploy L1Assets contract + instance := env.DeployContract(privateKey, L1AssetsContractABI, L1AssetsContractBytecode) - // Mock the allowance that would be returned by ISC.sandbox.getAllowanceFrom - mockAllowance := isc.NewEmptyAssets() - mockAllowance.AddBaseTokens(1000) + require.Zero(t, env.Chain.Env.L1BaseTokens(receiver)) + senderInitialBalance := env.Chain.L2BaseTokens(isc.NewEthereumAddressAgentID(env.Chain.ChainID, deployer)) - // Call the withdraw function and expect an event (assuming "Withdrawn" event) - var withdrawnEvent struct { - To common.Address - Amount *big.Int - } - result, err := instance.CallFnExpectEvent(nil, "Withdrawn", &withdrawnEvent, "withdraw", recipientAddress) - require.NoError(t, err) + // transfer 1 mil from ethAddress L2 to receiver L1 + transfer := 1 * isc.Million - // Verify the event - assert.Equal(t, recipientAddress, withdrawnEvent.To, "Recipient address should match") - assert.Equal(t, mockAllowance.BaseTokens(), withdrawnEvent.Amount.Uint64(), "Withdrawn amount should match the allowance") + // create a new native token on L1 + foundry, tokenID, err := env.Chain.NewNativeTokenParams(100000000000000).CreateFoundry() + require.NoError(t, err) + // the token id in bytes, used to call the contract + nativeTokenIDBytes := isc.NativeTokenIDToBytes(tokenID) - // Get the transaction hash from the result - txHash := result.GetTxHash() - require.NotNil(t, txHash) + // mint some native tokens to the chain originator + err = env.Chain.MintTokens(foundry, 10000000, env.Chain.OriginatorPrivateKey) + require.NoError(t, err) - // Wait for the transaction to be confirmed - receipt, err := env.Chain.EVM().TransactionReceipt(txHash) - require.NoError(t, err) - assert.Equal(t, receipt.Status, uint64(1), "Transaction should be successful") +// // Create ISCAssets with native tokens +// assets := isc.ISCAssets{ +// NativeTokens: []isc.NativeToken{{ID: nativeTokenIDBytes, Amount: 1000}}, +// } - // Additional check: Ensure deployer still has funds - balance, err := env.Chain.EVM().Balance(deployer, nil) - require.NoError(t, err) - assert.True(t, balance.Sign() > 0, "Deployer should still have a positive balance") + // Allow the L1Assets contract to withdraw the funds + _, err = instance.CallFn(nil, "allow", deployer, nativeTokenIDBytes) + require.NoError(t, err) + + // Withdraw funds to receiver using the withdraw function of L1Assets contract + _, err = instance.CallFn(nil, "withdraw", iscmagic.WrapL1Address(receiver), transfer) + require.NoError(t, err) + require.GreaterOrEqual(t, env.Chain.Env.L1BaseTokens(receiver), transfer-500) + + // Verify balances + require.LessOrEqual(t, env.Chain.L2BaseTokens(isc.NewEthereumAddressAgentID(env.Chain.ChainID, deployer)), senderInitialBalance-transfer) } From 4731ceb3ec490d520bee6ba14d7463f17d8e6428 Mon Sep 17 00:00:00 2001 From: Gino Date: Wed, 17 Jul 2024 17:48:18 +0100 Subject: [PATCH 3/3] feat: modify test but it still fails --- .../evm/evmtest/wiki_how_tos/L1Assets.abi | 2 +- .../evm/evmtest/wiki_how_tos/L1Assets.bin | 2 +- .../evm/evmtest/wiki_how_tos/L1Assets.sol | 13 +++--- .../evmtest/wiki_how_tos/L1_assets_test.go | 41 +++++++++++++------ 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.abi b/packages/evm/evmtest/wiki_how_tos/L1Assets.abi index 6657b82497..78eafcc5b3 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1Assets.abi +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct NativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct NativeToken[]","name":"_amount","type":"tuple[]"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L1Address","name":"to","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"components":[{"internalType":"uint64","name":"baseTokens","type":"uint64"},{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct NativeTokenID","name":"ID","type":"tuple"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct NativeToken[]","name":"nativeTokens","type":"tuple[]"},{"internalType":"NFTID[]","name":"nfts","type":"bytes32[]"}],"internalType":"struct ISCAssets","name":"_assets","type":"tuple"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct L1Address","name":"to","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.bin b/packages/evm/evmtest/wiki_how_tos/L1Assets.bin index 38e3c67f65..50a80883f5 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1Assets.bin +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.bin @@ -1 +1 @@ -6080604052348015600e575f80fd5b506112e48061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80631d62c241146100385780639505f6dc14610054575b5f80fd5b610052600480360381019061004d919061070c565b610070565b005b61006e600480360381019061006991906107bb565b610102565b005b6100786102a8565b81816020018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663765f4f9e84836040518363ffffffff1660e01b81526004016100d0929190610ae3565b5f604051808303815f87803b1580156100e7575f80fd5b505af11580156100f9573d5f803e3d5ffd5b50505050505050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b81526004016101509190610b11565b5f60405180830381865afa15801561016a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906101929190610eca565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663423fa15133836040518363ffffffff1660e01b81526004016101e3929190610ae3565b5f604051808303815f87803b1580156101fa575f80fd5b505af115801561020c573d5f803e3d5ffd5b505050506102186102d2565b610220610320565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7a53f5385855f86866040518663ffffffff1660e01b8152600401610275959493929190611241565b5f604051808303815f87803b15801561028c575f80fd5b505af115801561029e573d5f803e3d5ffd5b5050505050505050565b60405180606001604052805f67ffffffffffffffff16815260200160608152602001606081525090565b6040518060a001604052805f63ffffffff1681526020015f63ffffffff1681526020016102fd610342565b815260200161030a6102a8565b81526020015f67ffffffffffffffff1681525090565b60405180604001604052805f60070b815260200161033c610355565b81525090565b6040518060200160405280606081525090565b60405180604001604052805f60070b8152602001610371610377565b81525090565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103c48261039b565b9050919050565b6103d4816103ba565b81146103de575f80fd5b50565b5f813590506103ef816103cb565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61043f826103f9565b810181811067ffffffffffffffff8211171561045e5761045d610409565b5b80604052505050565b5f61047061038a565b905061047c8282610436565b919050565b5f67ffffffffffffffff82111561049b5761049a610409565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156104d6576104d5610409565b5b6104df826103f9565b9050602081019050919050565b828183375f83830152505050565b5f61050c610507846104bc565b610467565b905082815260208101848484011115610528576105276104b8565b5b6105338482856104ec565b509392505050565b5f82601f83011261054f5761054e6103f5565b5b813561055f8482602086016104fa565b91505092915050565b5f6020828403121561057d5761057c6104b0565b5b6105876020610467565b90505f82013567ffffffffffffffff8111156105a6576105a56104b4565b5b6105b28482850161053b565b5f8301525092915050565b5f819050919050565b6105cf816105bd565b81146105d9575f80fd5b50565b5f813590506105ea816105c6565b92915050565b5f60408284031215610605576106046104b0565b5b61060f6040610467565b90505f82013567ffffffffffffffff81111561062e5761062d6104b4565b5b61063a84828501610568565b5f83015250602061064d848285016105dc565b60208301525092915050565b5f61066b61066684610481565b610467565b9050808382526020820190506020840283018581111561068e5761068d6104ac565b5b835b818110156106d557803567ffffffffffffffff8111156106b3576106b26103f5565b5b8086016106c089826105f0565b85526020850194505050602081019050610690565b5050509392505050565b5f82601f8301126106f3576106f26103f5565b5b8135610703848260208601610659565b91505092915050565b5f806040838503121561072257610721610393565b5b5f61072f858286016103e1565b925050602083013567ffffffffffffffff8111156107505761074f610397565b5b61075c858286016106df565b9150509250929050565b5f6020828403121561077b5761077a6104b0565b5b6107856020610467565b90505f82013567ffffffffffffffff8111156107a4576107a36104b4565b5b6107b08482850161053b565b5f8301525092915050565b5f602082840312156107d0576107cf610393565b5b5f82013567ffffffffffffffff8111156107ed576107ec610397565b5b6107f984828501610766565b91505092915050565b61080b816103ba565b82525050565b5f67ffffffffffffffff82169050919050565b61082d81610811565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61088e8261085c565b6108988185610866565b93506108a8818560208601610876565b6108b1816103f9565b840191505092915050565b5f602083015f8301518482035f8601526108d68282610884565b9150508091505092915050565b6108ec816105bd565b82525050565b5f604083015f8301518482035f86015261090c82826108bc565b915050602083015161092160208601826108e3565b508091505092915050565b5f61093783836108f2565b905092915050565b5f602082019050919050565b5f61095582610833565b61095f818561083d565b9350836020820285016109718561084d565b805f5b858110156109ac578484038952815161098d858261092c565b94506109988361093f565b925060208a01995050600181019050610974565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f6109fa826109e7565b9050919050565b610a0a816109f0565b82525050565b5f610a1b8383610a01565b60208301905092915050565b5f602082019050919050565b5f610a3d826109be565b610a4781856109c8565b9350610a52836109d8565b805f5b83811015610a82578151610a698882610a10565b9750610a7483610a27565b925050600181019050610a55565b5085935050505092915050565b5f606083015f830151610aa45f860182610824565b5060208301518482036020860152610abc828261094b565b91505060408301518482036040860152610ad68282610a33565b9150508091505092915050565b5f604082019050610af65f830185610802565b8181036020830152610b088184610a8f565b90509392505050565b5f602082019050610b245f830184610802565b92915050565b610b3381610811565b8114610b3d575f80fd5b50565b5f81519050610b4e81610b2a565b92915050565b5f610b66610b61846104bc565b610467565b905082815260208101848484011115610b8257610b816104b8565b5b610b8d848285610876565b509392505050565b5f82601f830112610ba957610ba86103f5565b5b8151610bb9848260208601610b54565b91505092915050565b5f60208284031215610bd757610bd66104b0565b5b610be16020610467565b90505f82015167ffffffffffffffff811115610c0057610bff6104b4565b5b610c0c84828501610b95565b5f8301525092915050565b5f81519050610c25816105c6565b92915050565b5f60408284031215610c4057610c3f6104b0565b5b610c4a6040610467565b90505f82015167ffffffffffffffff811115610c6957610c686104b4565b5b610c7584828501610bc2565b5f830152506020610c8884828501610c17565b60208301525092915050565b5f610ca6610ca184610481565b610467565b90508083825260208201905060208402830185811115610cc957610cc86104ac565b5b835b81811015610d1057805167ffffffffffffffff811115610cee57610ced6103f5565b5b808601610cfb8982610c2b565b85526020850194505050602081019050610ccb565b5050509392505050565b5f82601f830112610d2e57610d2d6103f5565b5b8151610d3e848260208601610c94565b91505092915050565b5f67ffffffffffffffff821115610d6157610d60610409565b5b602082029050602081019050919050565b610d7b816109e7565b8114610d85575f80fd5b50565b5f81519050610d9681610d72565b92915050565b5f610dae610da984610d47565b610467565b90508083825260208201905060208402830185811115610dd157610dd06104ac565b5b835b81811015610dfa5780610de68882610d88565b845260208401935050602081019050610dd3565b5050509392505050565b5f82601f830112610e1857610e176103f5565b5b8151610e28848260208601610d9c565b91505092915050565b5f60608284031215610e4657610e456104b0565b5b610e506060610467565b90505f610e5f84828501610b40565b5f83015250602082015167ffffffffffffffff811115610e8257610e816104b4565b5b610e8e84828501610d1a565b602083015250604082015167ffffffffffffffff811115610eb257610eb16104b4565b5b610ebe84828501610e04565b60408301525092915050565b5f60208284031215610edf57610ede610393565b5b5f82015167ffffffffffffffff811115610efc57610efb610397565b5b610f0884828501610e31565b91505092915050565b5f602083015f8301518482035f860152610f2b8282610884565b9150508091505092915050565b5f8115159050919050565b610f4c81610f38565b82525050565b5f63ffffffff82169050919050565b5f819050919050565b5f610f84610f7f610f7a84610f52565b610f61565b610f52565b9050919050565b610f9481610f6a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f8301518482035f860152610fdd8282610884565b91505060208301518482036020860152610ff78282610884565b9150508091505092915050565b5f61100f8383610fc3565b905092915050565b5f602082019050919050565b5f61102d82610f9a565b6110378185610fa4565b93508360208202850161104985610fb4565b805f5b8581101561108457848403895281516110658582611004565b945061107083611017565b925060208a0199505060018101905061104c565b50829750879550505050505092915050565b5f602083015f8301518482035f8601526110b08282611023565b9150508091505092915050565b5f606083015f8301516110d25f860182610824565b50602083015184820360208601526110ea828261094b565b915050604083015184820360408601526111048282610a33565b9150508091505092915050565b5f60a083015f8301516111265f860182610f8b565b5060208301516111396020860182610f8b565b50604083015184820360408601526111518282611096565b9150506060830151848203606086015261116b82826110bd565b91505060808301516111806080860182610824565b508091505092915050565b5f8160070b9050919050565b6111a08161118b565b82525050565b5f602083015f8301518482035f8601526111c08282610884565b9150508091505092915050565b5f604083015f8301516111e25f860182611197565b50602083015184820360208601526111fa82826111a6565b9150508091505092915050565b5f604083015f83015161121c5f860182611197565b506020830151848203602086015261123482826111cd565b9150508091505092915050565b5f60a0820190508181035f8301526112598188610f11565b9050818103602083015261126d8187610a8f565b905061127c6040830186610f43565b818103606083015261128e8185611111565b905081810360808301526112a28184611207565b9050969550505050505056fea2646970667358221220a198779f8d262a5281c4c07b99f49391656edf0a14408696531fc65ded20a3a664736f6c63430008190033 \ No newline at end of file +6080604052348015600e575f80fd5b506114288061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063765f4f9e146100385780639505f6dc14610054575b5f80fd5b610052600480360381019061004d91906108c3565b610070565b005b61006e60048036038101906100699190610972565b6100f0565b005b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663765f4f9e83836040518363ffffffff1660e01b81526004016100bf929190610c7e565b5f604051808303815f87803b1580156100d6575f80fd5b505af11580156100e8573d5f803e3d5ffd5b505050505050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b815260040161013e9190610cac565b5f60405180830381865afa158015610158573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610180919061100e565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663423fa15133836040518363ffffffff1660e01b81526004016101d1929190610c7e565b5f604051808303815f87803b1580156101e8575f80fd5b505af11580156101fa573d5f803e3d5ffd5b50505050610206610296565b61020e6102e4565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b7a53f5385855f86866040518663ffffffff1660e01b8152600401610263959493929190611385565b5f604051808303815f87803b15801561027a575f80fd5b505af115801561028c573d5f803e3d5ffd5b5050505050505050565b6040518060a001604052805f63ffffffff1681526020015f63ffffffff1681526020016102c1610306565b81526020016102ce610319565b81526020015f67ffffffffffffffff1681525090565b60405180604001604052805f60070b8152602001610300610343565b81525090565b6040518060200160405280606081525090565b60405180606001604052805f67ffffffffffffffff16815260200160608152602001606081525090565b60405180604001604052805f60070b815260200161035f610365565b81525090565b6040518060200160405280606081525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103b282610389565b9050919050565b6103c2816103a8565b81146103cc575f80fd5b50565b5f813590506103dd816103b9565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61042d826103e7565b810181811067ffffffffffffffff8211171561044c5761044b6103f7565b5b80604052505050565b5f61045e610378565b905061046a8282610424565b919050565b5f80fd5b5f67ffffffffffffffff82169050919050565b61048f81610473565b8114610499575f80fd5b50565b5f813590506104aa81610486565b92915050565b5f80fd5b5f67ffffffffffffffff8211156104ce576104cd6103f7565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115610501576105006103f7565b5b61050a826103e7565b9050602081019050919050565b828183375f83830152505050565b5f610537610532846104e7565b610455565b905082815260208101848484011115610553576105526104e3565b5b61055e848285610517565b509392505050565b5f82601f83011261057a576105796104b0565b5b813561058a848260208601610525565b91505092915050565b5f602082840312156105a8576105a76103e3565b5b6105b26020610455565b90505f82013567ffffffffffffffff8111156105d1576105d061046f565b5b6105dd84828501610566565b5f8301525092915050565b5f819050919050565b6105fa816105e8565b8114610604575f80fd5b50565b5f81359050610615816105f1565b92915050565b5f604082840312156106305761062f6103e3565b5b61063a6040610455565b90505f82013567ffffffffffffffff8111156106595761065861046f565b5b61066584828501610593565b5f83015250602061067884828501610607565b60208301525092915050565b5f610696610691846104b4565b610455565b905080838252602082019050602084028301858111156106b9576106b86104df565b5b835b8181101561070057803567ffffffffffffffff8111156106de576106dd6104b0565b5b8086016106eb898261061b565b855260208501945050506020810190506106bb565b5050509392505050565b5f82601f83011261071e5761071d6104b0565b5b813561072e848260208601610684565b91505092915050565b5f67ffffffffffffffff821115610751576107506103f7565b5b602082029050602081019050919050565b5f819050919050565b61077481610762565b811461077e575f80fd5b50565b5f8135905061078f8161076b565b92915050565b5f6107a76107a284610737565b610455565b905080838252602082019050602084028301858111156107ca576107c96104df565b5b835b818110156107f357806107df8882610781565b8452602084019350506020810190506107cc565b5050509392505050565b5f82601f830112610811576108106104b0565b5b8135610821848260208601610795565b91505092915050565b5f6060828403121561083f5761083e6103e3565b5b6108496060610455565b90505f6108588482850161049c565b5f83015250602082013567ffffffffffffffff81111561087b5761087a61046f565b5b6108878482850161070a565b602083015250604082013567ffffffffffffffff8111156108ab576108aa61046f565b5b6108b7848285016107fd565b60408301525092915050565b5f80604083850312156108d9576108d8610381565b5b5f6108e6858286016103cf565b925050602083013567ffffffffffffffff81111561090757610906610385565b5b6109138582860161082a565b9150509250929050565b5f60208284031215610932576109316103e3565b5b61093c6020610455565b90505f82013567ffffffffffffffff81111561095b5761095a61046f565b5b61096784828501610566565b5f8301525092915050565b5f6020828403121561098757610986610381565b5b5f82013567ffffffffffffffff8111156109a4576109a3610385565b5b6109b08482850161091d565b91505092915050565b6109c2816103a8565b82525050565b6109d181610473565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610a3282610a00565b610a3c8185610a0a565b9350610a4c818560208601610a1a565b610a55816103e7565b840191505092915050565b5f602083015f8301518482035f860152610a7a8282610a28565b9150508091505092915050565b610a90816105e8565b82525050565b5f604083015f8301518482035f860152610ab08282610a60565b9150506020830151610ac56020860182610a87565b508091505092915050565b5f610adb8383610a96565b905092915050565b5f602082019050919050565b5f610af9826109d7565b610b0381856109e1565b935083602082028501610b15856109f1565b805f5b85811015610b505784840389528151610b318582610ad0565b9450610b3c83610ae3565b925060208a01995050600181019050610b18565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610b9582610762565b9050919050565b610ba581610b8b565b82525050565b5f610bb68383610b9c565b60208301905092915050565b5f602082019050919050565b5f610bd882610b62565b610be28185610b6c565b9350610bed83610b7c565b805f5b83811015610c1d578151610c048882610bab565b9750610c0f83610bc2565b925050600181019050610bf0565b5085935050505092915050565b5f606083015f830151610c3f5f8601826109c8565b5060208301518482036020860152610c578282610aef565b91505060408301518482036040860152610c718282610bce565b9150508091505092915050565b5f604082019050610c915f8301856109b9565b8181036020830152610ca38184610c2a565b90509392505050565b5f602082019050610cbf5f8301846109b9565b92915050565b5f81519050610cd381610486565b92915050565b5f610ceb610ce6846104e7565b610455565b905082815260208101848484011115610d0757610d066104e3565b5b610d12848285610a1a565b509392505050565b5f82601f830112610d2e57610d2d6104b0565b5b8151610d3e848260208601610cd9565b91505092915050565b5f60208284031215610d5c57610d5b6103e3565b5b610d666020610455565b90505f82015167ffffffffffffffff811115610d8557610d8461046f565b5b610d9184828501610d1a565b5f8301525092915050565b5f81519050610daa816105f1565b92915050565b5f60408284031215610dc557610dc46103e3565b5b610dcf6040610455565b90505f82015167ffffffffffffffff811115610dee57610ded61046f565b5b610dfa84828501610d47565b5f830152506020610e0d84828501610d9c565b60208301525092915050565b5f610e2b610e26846104b4565b610455565b90508083825260208201905060208402830185811115610e4e57610e4d6104df565b5b835b81811015610e9557805167ffffffffffffffff811115610e7357610e726104b0565b5b808601610e808982610db0565b85526020850194505050602081019050610e50565b5050509392505050565b5f82601f830112610eb357610eb26104b0565b5b8151610ec3848260208601610e19565b91505092915050565b5f81519050610eda8161076b565b92915050565b5f610ef2610eed84610737565b610455565b90508083825260208201905060208402830185811115610f1557610f146104df565b5b835b81811015610f3e5780610f2a8882610ecc565b845260208401935050602081019050610f17565b5050509392505050565b5f82601f830112610f5c57610f5b6104b0565b5b8151610f6c848260208601610ee0565b91505092915050565b5f60608284031215610f8a57610f896103e3565b5b610f946060610455565b90505f610fa384828501610cc5565b5f83015250602082015167ffffffffffffffff811115610fc657610fc561046f565b5b610fd284828501610e9f565b602083015250604082015167ffffffffffffffff811115610ff657610ff561046f565b5b61100284828501610f48565b60408301525092915050565b5f6020828403121561102357611022610381565b5b5f82015167ffffffffffffffff8111156110405761103f610385565b5b61104c84828501610f75565b91505092915050565b5f602083015f8301518482035f86015261106f8282610a28565b9150508091505092915050565b5f8115159050919050565b6110908161107c565b82525050565b5f63ffffffff82169050919050565b5f819050919050565b5f6110c86110c36110be84611096565b6110a5565b611096565b9050919050565b6110d8816110ae565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f604083015f8301518482035f8601526111218282610a28565b9150506020830151848203602086015261113b8282610a28565b9150508091505092915050565b5f6111538383611107565b905092915050565b5f602082019050919050565b5f611171826110de565b61117b81856110e8565b93508360208202850161118d856110f8565b805f5b858110156111c857848403895281516111a98582611148565b94506111b48361115b565b925060208a01995050600181019050611190565b50829750879550505050505092915050565b5f602083015f8301518482035f8601526111f48282611167565b9150508091505092915050565b5f606083015f8301516112165f8601826109c8565b506020830151848203602086015261122e8282610aef565b915050604083015184820360408601526112488282610bce565b9150508091505092915050565b5f60a083015f83015161126a5f8601826110cf565b50602083015161127d60208601826110cf565b506040830151848203604086015261129582826111da565b915050606083015184820360608601526112af8282611201565b91505060808301516112c460808601826109c8565b508091505092915050565b5f8160070b9050919050565b6112e4816112cf565b82525050565b5f602083015f8301518482035f8601526113048282610a28565b9150508091505092915050565b5f604083015f8301516113265f8601826112db565b506020830151848203602086015261133e82826112ea565b9150508091505092915050565b5f604083015f8301516113605f8601826112db565b50602083015184820360208601526113788282611311565b9150508091505092915050565b5f60a0820190508181035f83015261139d8188611055565b905081810360208301526113b18187610c2a565b90506113c06040830186611087565b81810360608301526113d28185611255565b905081810360808301526113e6818461134b565b9050969550505050505056fea26469706673582212200c9e42eed90ff25602623801a2c825d09dda38c7a80114225b5e2537b34ef79e64736f6c63430008190033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/L1Assets.sol b/packages/evm/evmtest/wiki_how_tos/L1Assets.sol index d67a86b8b8..38b12f50eb 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1Assets.sol +++ b/packages/evm/evmtest/wiki_how_tos/L1Assets.sol @@ -3,15 +3,16 @@ pragma solidity ^0.8.0; import "@iscmagic/ISC.sol"; +import "@iscmagic/ISCTypes.sol"; contract L1Assets { - function allow(address memory _address, NativeTokenID memory _nativeTokenId) public { - NativeTokenID[] memory nativeTokenIds = new NativeTokenID[](1); - nativeTokenIds[0] = NativeTokenID.wrap(_nativeTokenId); - ISCAssets memory assets; - assets.nativeTokens = _nativeTokenIds; - ISC.sandbox.allow(_address, assets); + function allow(address _address, ISCAssets memory _assets ) public { + // NativeTokenID[] memory nativeTokenIds = new NativeTokenID[](1); + // nativeTokenIds[0] = NativeTokenID.wrap(_nativeTokenId); + // ISCAssets memory assets; + // assets.nativeTokens = _nativeTokenIds; + ISC.sandbox.allow(_address, _assets); } function withdraw(L1Address memory to) public { diff --git a/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go b/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go index 549bb39a64..a93db1578d 100644 --- a/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go +++ b/packages/evm/evmtest/wiki_how_tos/L1_assets_test.go @@ -2,6 +2,7 @@ package wiki_how_tos_test import ( _ "embed" + "math/big" "strings" "testing" @@ -36,35 +37,49 @@ func TestWithdraw(t *testing.T) { instance := env.DeployContract(privateKey, L1AssetsContractABI, L1AssetsContractBytecode) require.Zero(t, env.Chain.Env.L1BaseTokens(receiver)) - senderInitialBalance := env.Chain.L2BaseTokens(isc.NewEthereumAddressAgentID(env.Chain.ChainID, deployer)) + // const storageDeposit uint64 = 10_000 - // transfer 1 mil from ethAddress L2 to receiver L1 - transfer := 1 * isc.Million + contractAgentID := isc.NewEthereumAddressAgentID(env.Chain.ChainID, deployer) + env.Chain.GetL2FundsFromFaucet(contractAgentID, 2000) - // create a new native token on L1 + { + const baseTokensDepositFee = 500 + k, _ := env.Chain.Env.NewKeyPairWithFunds(env.Chain.Env.NewSeedFromIndex(1)) + //k, _ := env.solo.NewKeyPairWithFunds(env.solo.NewSeedFromIndex(1)) + err := env.Chain.SendFromL1ToL2AccountBaseTokens(baseTokensDepositFee, 1*isc.Million, contractAgentID, k) + require.NoError(t, err) + require.EqualValues(t, 1*isc.Million, env.Chain.L2BaseTokens(contractAgentID)) + } + + // create a new native token on L1 foundry, tokenID, err := env.Chain.NewNativeTokenParams(100000000000000).CreateFoundry() require.NoError(t, err) // the token id in bytes, used to call the contract nativeTokenIDBytes := isc.NativeTokenIDToBytes(tokenID) - // mint some native tokens to the chain originator + nativeTokenID := iscmagic.NativeTokenID{ + Data: nativeTokenIDBytes, + } + + // mint some native tokens to the chain originator err = env.Chain.MintTokens(foundry, 10000000, env.Chain.OriginatorPrivateKey) require.NoError(t, err) -// // Create ISCAssets with native tokens -// assets := isc.ISCAssets{ -// NativeTokens: []isc.NativeToken{{ID: nativeTokenIDBytes, Amount: 1000}}, -// } + // Create ISCAssets with native tokens + amount := big.NewInt(500) + assets := iscmagic.ISCAssets{ + NativeTokens: []iscmagic.NativeToken{{ID: nativeTokenID, Amount: amount}}, + } // Allow the L1Assets contract to withdraw the funds - _, err = instance.CallFn(nil, "allow", deployer, nativeTokenIDBytes) + _, err = instance.CallFn(nil, "allow", deployer, assets) require.NoError(t, err) // Withdraw funds to receiver using the withdraw function of L1Assets contract - _, err = instance.CallFn(nil, "withdraw", iscmagic.WrapL1Address(receiver), transfer) + _, err = instance.CallFn(nil, "withdraw", iscmagic.WrapL1Address(receiver)) require.NoError(t, err) - require.GreaterOrEqual(t, env.Chain.Env.L1BaseTokens(receiver), transfer-500) + //require.GreaterOrEqual(t, env.Chain.Env.L1BaseTokens(receiver)) // Verify balances - require.LessOrEqual(t, env.Chain.L2BaseTokens(isc.NewEthereumAddressAgentID(env.Chain.ChainID, deployer)), senderInitialBalance-transfer) + //require.LessOrEqual(t, env.Chain.L2BaseTokens(isc.NewEthereumAddressAgentID(env.Chain.ChainID, deployer))) }