def test_to_json(self): txn = Transaction( Binance.chain, "USER", "VAULT", Coin("BNB.BNB", 100), "STAKE:BNB", ) self.assertEqual( txn.to_json(), '{"id": "TODO", "chain": "BNB", "from_address": "USER", ' '"to_address": "VAULT", "memo": "STAKE:BNB", "coins": ' '[{"asset": "BNB.BNB", "amount": 100}], "gas": null}', ) txn.coins = [Coin("BNB.BNB", 1000000000), Coin(RUNE, 1000000000)] self.assertEqual( txn.to_json(), '{"id": "TODO", "chain": "BNB", "from_address": "USER", ' '"to_address": "VAULT", "memo": "STAKE:BNB", "coins": [' '{"asset": "BNB.BNB", "amount": 1000000000}, ' '{"asset": "' + RUNE + '", "amount": 1000000000}], "gas": null}', ) txn.coins = None self.assertEqual( txn.to_json(), '{"id": "TODO", "chain": "BNB", "from_address": "USER", ' '"to_address": "VAULT", "memo": "STAKE:BNB", "coins": null, "gas": null}', ) txn.gas = [Coin("BNB.BNB", 37500)] self.assertEqual( txn.to_json(), '{"id": "TODO", "chain": "BNB", "from_address": "USER", ' '"to_address": "VAULT", "memo": "STAKE:BNB", "coins": null,' ' "gas": [{"asset": "BNB.BNB", "amount": 37500}]}', )
def test_custom_hash(self): txn = Transaction( Binance.chain, "USER", "tbnb1yxfyeda8pnlxlmx0z3cwx74w9xevspwdpzdxpj", Coin("BNB.BNB", 194765912), "REFUND:TODO", id="9999A5A08D8FCF942E1AAAA01AB1E521B699BA3A009FA0591C011DC1FFDC5E68", ) self.assertEqual( txn.custom_hash(""), "FE64709713A9F9D691CF2C5B144CA6DAA53E902800C1367C692FE7935BD029CE", ) txn.coins = None self.assertEqual( txn.custom_hash(""), "229BD31DB372A43FB71896BDE7512BFCA06731A4D825B4721A1D8DD800159DCD", ) txn.to_address = "tbnb189az9plcke2c00vns0zfmllfpfdw67dtv25kgx" txn.coins = [Coin(RUNE, 49900000000)] txn.memo = ( "REFUND:CA3A36052DC2FC30B91AD3996012E9EF2E69EEA70D5FBBBD9364F6F97A056D7C" ) pubkey = ( "thorpub1addwnpepqv7kdf473gc4jyls7hlx4rg" "t2lqxm9qkfh5m3ua7wnzzzfhlpz49u4slu4g" ) if DEFAULT_RUNE_ASSET == RUNE: self.assertEqual( txn.custom_hash(pubkey), "158D75777A5C23A5C8A39B55C0812252C0ABA9A87816D5E74BB7166EB95EDB73", )
def test_str(self): txn = Transaction(Binance.chain, "USER", "VAULT", Coin("BNB.BNB", 100), "MEMO",) self.assertEqual(str(txn), "Tx USER ==> VAULT | MEMO | 100_BNB.BNB") txn.coins = [Coin("BNB.BNB", 1000000000), Coin(RUNE, 1000000000)] self.assertEqual( str(txn), "Tx USER ==> VAULT | MEMO | 1,000,000,000_BNB.BNB" f", 1,000,000,000_{RUNE}", ) txn.coins = None self.assertEqual( str(txn), "Tx USER ==> VAULT | MEMO | No Coins", ) txn.gas = [Coin("BNB.BNB", 37500)] self.assertEqual( str(txn), "Tx USER ==> VAULT | MEMO | No Coins | Gas 37,500_BNB.BNB", )
def test_repr(self): txn = Transaction(Binance.chain, "USER", "VAULT", Coin("BNB.BNB", 100), "MEMO",) self.assertEqual( repr(txn), "<Tx USER ==> VAULT | MEMO | [<Coin 100_BNB.BNB>]>" ) txn.coins = [Coin("BNB.BNB", 1000000000), Coin(RUNE, 1000000000)] self.assertEqual( repr(txn), "<Tx USER ==> VAULT | MEMO | [<Coin 1,000,000,000_BNB.BNB>," f" <Coin 1,000,000,000_{RUNE}>]>", ) txn.coins = None self.assertEqual( repr(txn), "<Tx USER ==> VAULT | MEMO | No Coins>", ) txn.gas = [Coin("BNB.BNB", 37500)] self.assertEqual( repr(txn), "<Tx USER ==> VAULT | MEMO | No Coins |" " Gas [<Coin 37,500_BNB.BNB>]>", )
def test_constructor(self): txn = Transaction(Binance.chain, "USER", "VAULT", Coin("BNB.BNB", 100), "MEMO",) self.assertEqual(txn.chain, "BNB") self.assertEqual(txn.from_address, "USER") self.assertEqual(txn.to_address, "VAULT") self.assertEqual(txn.coins[0].asset, "BNB.BNB") self.assertEqual(txn.coins[0].amount, 100) self.assertEqual(txn.memo, "MEMO") txn.coins = [Coin("BNB.BNB", 1000000000), Coin(RUNE, 1000000000)] self.assertEqual(txn.coins[0].asset, "BNB.BNB") self.assertEqual(txn.coins[0].amount, 1000000000) self.assertEqual(txn.coins[1].asset, RUNE) self.assertEqual(txn.coins[1].amount, 1000000000)
def test_eq(self): tx1 = Transaction( Binance.chain, "USER", "VAULT", Coin("BNB.BNB", 100), "STAKE:BNB", ) tx2 = Transaction( Binance.chain, "USER", "VAULT", Coin("BNB.BNB", 100), "STAKE:BNB", ) self.assertEqual(tx1, tx2) tx2.chain = "BTC" self.assertNotEqual(tx1, tx2) tx1 = Transaction( Binance.chain, "USER", "VAULT", [Coin("BNB.BNB", 100)], "STAKE:BNB", ) tx2 = Transaction( Binance.chain, "USER", "VAULT", [Coin("BNB.BNB", 100)], "STAKE:BNB", ) self.assertEqual(tx1, tx2) tx1.memo = "STAKE:BNB" tx2.memo = "ADD:BNB" self.assertNotEqual(tx1, tx2) tx1.memo = "STAKE" tx2.memo = "ADD" self.assertNotEqual(tx1, tx2) tx1.memo = "" tx2.memo = "" self.assertEqual(tx1, tx2) tx1.memo = "Hello" tx2.memo = "" self.assertNotEqual(tx1, tx2) # we ignore addresses in memo tx1.memo = "REFUND:ADDRESS" tx2.memo = "REFUND:TODO" self.assertNotEqual(tx1, tx2) # we dont ignore different assets though tx1.memo = "STAKE:BNB" tx2.memo = "STAKE:RUNE" self.assertNotEqual(tx1, tx2) tx2.memo = "STAKE:BNB" self.assertEqual(tx1, tx2) tx2.coins = [Coin("BNB.BNB", 100)] self.assertEqual(tx1, tx2) tx2.coins = [Coin("BNB.BNB", 100), Coin("RUNE", 100)] self.assertNotEqual(tx1, tx2) # different list of coins not equal tx1.coins = [Coin("RUNE", 200), Coin("RUNE", 100)] tx2.coins = [Coin("BNB.BNB", 100), Coin("RUNE", 200)] self.assertNotEqual(tx1, tx2) # coins different order tx are still equal tx1.coins = [Coin("RUNE", 200), Coin("BNB.BNB", 100)] tx2.coins = [Coin("BNB.BNB", 100), Coin("RUNE", 200)] self.assertEqual(tx1, tx2) # we ignore from / to address for equality tx1.to_address = "VAULT1" tx2.to_address = "VAULT2" tx1.from_address = "USER1" tx2.from_address = "USER2" self.assertNotEqual(tx1, tx2) # check list of transactions equality tx1 = Transaction( Binance.chain, "USER", "VAULT", [Coin("BNB.BNB", 100)], "STAKE:BNB", ) tx2 = deepcopy(tx1) tx3 = deepcopy(tx1) tx4 = deepcopy(tx1) list1 = [tx1, tx2] list2 = [tx3, tx4] self.assertEqual(list1, list2) # check sort list of transactions get sorted by smallest coin # check list of 1 coin # descending order in list1 tx1.coins = [Coin("RUNE", 200)] tx2.coins = [Coin("BNB.BNB", 100)] # ascrending order in list2 tx3.coins = [Coin("BNB.BNB", 100)] tx4.coins = [Coin("RUNE", 200)] self.assertNotEqual(list1, list2) self.assertEqual(sorted(list1), list2) self.assertEqual(sorted(list1), sorted(list2)) # check list of > 1 coin # descending order in list1 tx1.coins = [Coin("RUNE", 200), Coin("BNB.BNB", 300)] tx2.coins = [Coin("BNB.BNB", 100), Coin("LOK-3C0", 500)] # ascrending order in list2 tx3.coins = [Coin("BNB.BNB", 100), Coin("LOK-3C0", 500)] tx4.coins = [Coin("RUNE", 200), Coin("BNB.BNB", 300)] self.assertNotEqual(list1, list2) self.assertEqual(sorted(list1), list2) self.assertEqual(sorted(list1), sorted(list2)) # check 1 tx with no coins list1 = sorted(list1) self.assertEqual(list1, list2) list1[0].coins = None self.assertNotEqual(list1, list2) list2[0].coins = None self.assertEqual(list1, list2)