Skip to content

Commit

Permalink
Refactor transferdomain tests (#2196)
Browse files Browse the repository at this point in the history
* Refactgor transferdomain tests

* Fix lint
  • Loading branch information
Mixa84 authored Jul 19, 2023
1 parent 47b08e2 commit 11a2c55
Show file tree
Hide file tree
Showing 3 changed files with 265 additions and 100 deletions.
100 changes: 0 additions & 100 deletions test/functional/feature_evm.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,9 @@ def test_tx_without_chainid(self, node, keypair, web3):
def run_test(self):

address = self.nodes[0].get_genesis_keys().ownerAuthAddress
address2 = self.nodes[0].get_genesis_keys().ownerAuthAddress
eth_address = '0x9b8a4af42140d8a4c153a822f02571a1dd037e89'
eth_address_bech32 = 'bcrt1qta8meuczw0mhqupzjl5wplz47xajz0dn0wxxr8'
eth_address_privkey = 'af990cc3ba17e776f7f57fcc59942a82846d75833fa17d2ba59ce6858d886e23'
eth_address1 = self.nodes[0].getnewaddress("", "eth")
to_address = '0x6c34cbb9219d8caa428835d2073e8ec88ba0a110'
to_address_privkey = '17b8cb134958b3d8422b6c43b0732fcdb8c713b524df2d45de12f0c7e214ba35'

Expand All @@ -68,7 +66,6 @@ def run_test(self):
assert_equal(result['ismine'], True)
assert_equal(result['iswitness'], True)

self.nodes[0].importprivkey(eth_address_privkey) # eth_address
self.nodes[0].importprivkey(to_address_privkey) # to_address

# Check export of private key
Expand Down Expand Up @@ -109,24 +106,10 @@ def run_test(self):
self.nodes[0].setgov({"ATTRIBUTES": {'v0/transferdomain/allowed/dvm-evm': 'true'}})
self.nodes[0].generate(1)

# Check transferdomain without DFI balance before DFI address is funded
assert_raises_rpc_error(-32600, "amount 0.00000000 is less than 100.00000000", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])

# Create additional token to be used in tests
self.nodes[0].createtoken({
"symbol": "BTC",
"name": "BTC token",
"isDAT": True,
"collateralAddress": address
})
self.nodes[0].getbalance()

# Fund DFI address
txid = self.nodes[0].utxostoaccount({address: "101@DFI"})
self.nodes[0].generate(1)

# transferdomain tests

# Check initial balances
dfi_balance = self.nodes[0].getaccount(address, {}, True)['0']
eth_balance = self.nodes[0].eth_getBalance(eth_address)
Expand All @@ -140,89 +123,6 @@ def run_test(self):
assert_raises_rpc_error(-5, "Eth type addresses are not valid", self.nodes[0].sendmany, "", {eth_address: 1})
assert_raises_rpc_error(-5, "Eth type addresses are not valid", self.nodes[0].sendtoaddress, eth_address, 1)
assert_raises_rpc_error(-5, "Eth type addresses are not valid", self.nodes[0].accounttoaccount, address, {eth_address: "1@DFI"})
assert_raises_rpc_error(-8, "Invalid parameters, src argument \"address\" must not be null", self.nodes[0].transferdomain, [{"src": {"amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-8, "Invalid parameters, src argument \"amount\" must not be null", self.nodes[0].transferdomain, [{"src": {"address":address, "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-8, "Invalid parameters, src argument \"domain\" must not be null", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI"}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-8, "JSON value is not an integer as expected", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": "dvm"}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-8, "JSON value is not an integer as expected", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": "evm"}}])
assert_raises_rpc_error(-8, "Invalid parameters, src argument \"domain\" must be either 2 (DFI token to EVM) or 3 (EVM to DFI token)", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 0}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 2}}])
assert_raises_rpc_error(-32600, "Unknown transfer domain aspect", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 4}}])
assert_raises_rpc_error(-5, "recipient (blablabla) does not refer to any valid address", self.nodes[0].transferdomain, [{"src": {"address":"blablabla", "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-5, "recipient (blablabla) does not refer to any valid address", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":"blablabla", "amount":"100@DFI", "domain": 3}}])

# Check for valid values DVM->EVM in transferdomain rpc
assert_raises_rpc_error(-32600, "Src address must be a legacy or Bech32 address in case of \"DVM\" domain", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-32600, "Dst address must be an ERC55 address in case of \"EVM\" domain", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-32600, "Cannot transfer inside same domain", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 2}}])
assert_raises_rpc_error(-32600, "Source amount must be equal to destination amount", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"101@DFI", "domain": 3}}])
assert_raises_rpc_error(-32600, "For transferdomain, only DFI token is currently supported", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@BTC", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-32600, "For transferdomain, only DFI token is currently supported", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@BTC", "domain": 3}}])
assert_raises_rpc_error(-32600, "Excess data set, maximum allow is 0", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2, "data": "1"}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-32600, "Excess data set, maximum allow is 0", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3, "data": "1"}}])

# Check error before transferdomain DVM to EVM is enabled
assert_raises_rpc_error(-32600, "EVM to DVM is not currently enabled", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 3}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 2}}])

# Activate transferdomain DVM to EVM
self.nodes[0].setgov({"ATTRIBUTES": {'v0/transferdomain/allowed/evm-dvm': 'true'}})
self.nodes[0].generate(1)

# Test not enough balance for EVM to DVM transfer
assert_raises_rpc_error(-32600, "Not enough balance in " + eth_address + " to cover \"EVM\" domain transfer", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@DFI", "domain": 3}, "dst":{"address":address, "amount":"100@DFI", "domain": 2}}])

# Transfer 100 DFI from DVM to EVM
tx1 = self.nodes[0].transferdomain([{"src": {"address":address, "amount":"100@DFI", "domain": 2}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 3}}])
self.nodes[0].generate(1)

# Check tx1 fields
result = self.nodes[0].getcustomtx(tx1)["results"]["transfers"][0]
assert_equal(result["src"]["address"], address)
assert_equal(result["src"]["amount"], "100.00000000@0")
assert_equal(result["src"]["domain"], "DVM")
assert_equal(result["dst"]["address"], eth_address)
assert_equal(result["dst"]["amount"], "100.00000000@0")
assert_equal(result["dst"]["domain"], "EVM")

# Check that EVM balance shows in gettokenbalances
assert_equal(self.nodes[0].gettokenbalances({}, False, False, True), ['101.00000000@0'])

# Check new balances
new_dfi_balance = self.nodes[0].getaccount(address, {}, True)['0']
new_eth_balance = self.nodes[0].eth_getBalance(eth_address)
assert_equal(new_dfi_balance, dfi_balance - Decimal('100'))
assert_equal(new_eth_balance, int_to_eth_u256(100))
assert_equal(len(self.nodes[0].getaccount(eth_address, {}, True)), 1)
assert_equal(self.nodes[0].getaccount(eth_address)[0], "100.00000000@DFI")

# Check for valid values EVM->DVM in transferdomain rpc
assert_raises_rpc_error(-32600, "Src address must be an ERC55 address in case of \"EVM\" domain", self.nodes[0].transferdomain, [{"src": {"address":address, "amount":"100@DFI", "domain": 3}, "dst":{"address":address, "amount":"100@DFI", "domain": 2}}])
assert_raises_rpc_error(-32600, "Dst address must be a legacy or Bech32 address in case of \"DVM\" domain", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@DFI", "domain": 3}, "dst":{"address":eth_address, "amount":"100@DFI", "domain": 2}}])
assert_raises_rpc_error(-32600, "Cannot transfer inside same domain", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@DFI", "domain": 3}, "dst":{"address":address, "amount":"100@DFI", "domain": 3}}])
assert_raises_rpc_error(-32600, "Source amount must be equal to destination amount", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@DFI", "domain": 3}, "dst":{"address":address, "amount":"101@DFI", "domain": 2}}])
assert_raises_rpc_error(-32600, "For transferdomain, only DFI token is currently supported", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@BTC", "domain": 3}, "dst":{"address":address, "amount":"100@DFI", "domain": 2}}])
assert_raises_rpc_error(-32600, "For transferdomain, only DFI token is currently supported", self.nodes[0].transferdomain, [{"src": {"address":eth_address, "amount":"100@DFI", "domain": 3}, "dst":{"address":address, "amount":"100@BTC", "domain": 2}}])
assert_raises_rpc_error(-32600, "TransferDomain currently only supports a single transfer per transaction", self.nodes[0].transferdomain, [{"src": {"address":eth_address1, "amount":"10@DFI", "domain": 3}, "dst":{"address":address, "amount":"10@DFI", "domain": 2}},
{"src": {"address":eth_address1, "amount":"10@DFI", "domain": 3}, "dst":{"address":address2, "amount":"10@DFI", "domain": 2}}])

# Transfer 100 DFI from DVM to EVM
tx = self.nodes[0].transferdomain([{"src": {"address":eth_address, "amount":"100@DFI", "domain": 3}, "dst":{"address":address, "amount":"100@DFI", "domain": 2}}])
self.nodes[0].generate(1)

# Check tx fields
result = self.nodes[0].getcustomtx(tx)["results"]["transfers"][0]
assert_equal(result["src"]["address"], eth_address)
assert_equal(result["src"]["amount"], "100.00000000@0")
assert_equal(result["src"]["domain"], "EVM")
assert_equal(result["dst"]["address"], address)
assert_equal(result["dst"]["amount"], "100.00000000@0")
assert_equal(result["dst"]["domain"], "DVM")

# Check new balances
new_dfi_balance = self.nodes[0].getaccount(address, {}, True)['0']
new_eth_balance = self.nodes[0].eth_getBalance(eth_address)
assert_equal(new_dfi_balance, dfi_balance)
assert_equal(new_eth_balance, eth_balance)
assert_equal(len(self.nodes[0].getaccount(eth_address, {}, True)), 0)

# evmtx tests

Expand Down
Loading

0 comments on commit 11a2c55

Please sign in to comment.