ElementsProject / ElementsProject/lightning
`AssertionError` in `test_coinmoves`
- Dominant language
- C
- Stars
- 3.1k
- Forks
- 1k
- Avg merge
- 4d 10h
- Merged PRs (30d)
- 13
Description
While running the integration tests on **v25.09rc3**, I experienced this failure:
```
__________________________________________________________ test_coinmoves __________________________________________________________
[gw2] linux -- Python 3.13.5 /usr/bin/python3.13
node_factory =
bitcoind =
@pytest.mark.openchannel('v1')
@pytest.mark.openchannel('v2')
@unittest.skipIf(TEST_NETWORK != 'regtest', "Amounts are for regtest.")
def test_coinmoves(node_factory, bitcoind):
l1, l2, l3 = node_factory.get_nodes(3)
# Empty
expected_channel1 = []
expected_channel2 = []
expected_chain1 = []
expected_chain2 = []
check_channel_moves(l1, expected_channel1)
check_channel_moves(l2, expected_channel2)
check_chain_moves(l1, expected_chain1)
check_chain_moves(l2, expected_chain2)
# MVT_DEPOSIT
addr = l1.rpc.newaddr()['bech32']
txid_deposit = bitcoind.rpc.sendtoaddress(addr, 200000000 / 10**8)
bitcoind.generate_block(1, wait_for_mempool=1)
sync_blockheight(bitcoind, [l1])
vout_deposit = only_one([out['n'] for out in bitcoind.rpc.gettransaction(txid_deposit, False, True)['decoded']['vout'] if out['scriptPubKey']['address'] == addr])
expected_chain1 += [{'account_id': 'wallet',
'blockheight': 102,
'credit_msat': 200000000000,
'debit_msat': 0,
'output_msat': 200000000000,
'primary_tag': 'deposit',
'extra_tags': [],
'utxo': f"{txid_deposit}:{vout_deposit}"}]
check_channel_moves(l1, expected_channel1)
check_channel_moves(l2, expected_channel2)
check_chain_moves(l1, expected_chain1)
check_chain_moves(l2, expected_chain2)
# Since sql uses pagination, rowids no longer change on each access!
first_rowid = only_one(only_one(l1.rpc.sql("SELECT rowid FROM chainmoves;")['rows']))
# MVT_WITHDRAWAL
addr = l3.rpc.newaddr()['bech32']
withdraw = l1.rpc.withdraw(addr, 100000000)
bitcoind.generate_block(1, wait_for_mempool=1)
sync_blockheight(bitcoind, [l1])
vout_withdrawal = only_one([out['n'] for out in bitcoind.rpc.decoderawtransaction(withdraw['tx'])['vout'] if out['scriptPubKey']['address'] == addr])
expected_chain1 += [{'account_id': 'external',
'blockheight': 0,
'credit_msat': 100000000000,
'debit_msat': 0,
'output_msat': 100000000000,
'originating_account': 'wallet',
'primary_tag': 'deposit',
'extra_tags': [],
'utxo': f"{withdraw['txid']}:{vout_withdrawal}"},
# Spend
{'account_id': 'wallet',
'blockheight': 103,
'credit_msat': 0,
'debit_msat': 200000000000,
'primary_tag': 'withdrawal',
'output_msat': 200000000000,
'extra_tags': [],
'spending_txid': withdraw['txid'],
'utxo': f"{txid_deposit}:{vout_deposit}"},
# Change
{'account_id': 'wallet',
'blockheight': 103,
'credit_msat': 99995433000,
'debit_msat': 0,
'primary_tag': 'deposit',
'extra_tags': [],
'output_msat': 99995433000,
'utxo': f"{withdraw['txid']}:{vout_withdrawal ^ 1}"}]
check_channel_moves(l1, expected_channel1)
check_channel_moves(l2, expected_channel2)
check_chain_moves(l1, expected_chain1)
check_chain_moves(l2, expected_chain2)
# MVT_CHANNEL_OPEN
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
fundchannel = l1.rpc.fundchannel(l2.info['id'], 'all')
bitcoind.generate_block(1, wait_for_mempool=fundchannel['txid'])
wait_for(lambda: all([c['state'] == 'CHANNELD_NORMAL' for c in l1.rpc.listpeerchannels(l2.info['id'])['channels']]))
expected_chain1 += [{'account_id': 'wallet',
'blockheight': 104,
'credit_msat': 0,
'debit_msat': 99995433000,
'output_msat': 99995433000,
'primary_tag': 'withdrawal',
'extra_tags': [],
'spending_txid': fundchannel['txid'],
'utxo': f"{withdraw['txid']}:{vout_withdrawal ^ 1}"},
{'account_id': 'wallet',
'blockheight': 104,
'credit_msat': 25000000,
'debit_msat': 0,
'output_msat': 25000000,
'primary_tag': 'deposit',
'extra_tags': [],
'utxo': f"{fundchannel['txid']}:{fundchannel['outnum'] ^ 1}"},
{'account_id': fundchannel['channel_id'],
'blockheight': 104,
'credit_msat': 99965813000,
'debit_msat': 0,
'output_msat': 99965813000,
'peer_id': l2.info['id'],
'primary_tag': 'channel_open',
'extra_tags': ['opener'],
'utxo': f"{fundchannel['txid']}:{fundchannel['outnum']}"}]
expected_chain2 += [{'account_id': fundchannel['channel_id'],
'blockheight': 104,
'credit_msat': 0,
'debit_msat': 0,
'output_msat': 99965813000,
'peer_id': l1.info['id'],
'primary_tag': 'channel_open',
'extra_tags': [],
'utxo': f"{fundchannel['txid']}:{fundchannel['outnum']}"}]
check_channel_moves(l1, expected_channel1)
check_channel_moves(l2, expected_channel2)
check_chain_moves(l1, expected_chain1)
check_chain_moves(l2, expected_chain2)
# MVT_INVOICE
inv = l2.rpc.invoice('any', 'test_coinmoves', 'test_coinmoves')
l1.rpc.xpay(inv['bolt11'], '1000sat')
# Make sure it's fully settled.
wait_for(lambda: only_one(l1.rpc.listpeerchannels(l2.info['id'])['channels'])['htlcs'] == [])
# We cheat and extract group id.
group_id = l1.rpc.listchannelmoves()['channelmoves'][-1]['group_id']
expected_channel1 += [{'account_id': fundchannel['channel_id'],
'credit_msat': 0,
'debit_msat': 1000000,
'primary_tag': 'invoice',
'fees_msat': 0,
'payment_hash': inv['payment_hash'],
'group_id': group_id,
'part_id': 1}]
expected_channel2 += [{'account_id': fundchannel['channel_id'],
'credit_msat': 1000000,
'debit_msat': 0,
'primary_tag': 'invoice',
'fees_msat': 0,
'payment_hash': inv['payment_hash']}]
check_channel_moves(l1, expected_channel1)
check_channel_moves(l2, expected_channel2)
check_chain_moves(l1, expected_chain1)
check_chain_moves(l2, expected_chain2)
# MVT_PUSHED
l3.rpc.connect(l1.info['id'], 'localhost', l1.port)
if not EXPERIMENTAL_DUAL_FUND:
l3fundchannel = l3.rpc.fundchannel(l1.info['id'], 40000000, push_msat=100000)
else:
l3fundchannel = l3.rpc.fundchannel(l1.info['id'], 40000000)
bitcoind.generate_block(1, wait_for_mempool=1)
wait_for(lambda: all([c['state'] == 'CHANNELD_NORMAL' for c in l1.rpc.listpeerchannels(l3.info['id'])['channels']]))
expected_chain1 += [{'account_id': l3fundchannel['channel_id'],
'blockheight': 105,
'credit_msat': 0,
'debit_msat': 0,
'output_msat': 40000000000,
'peer_id': l3.info['id'],
'primary_tag': 'channel_open',
'extra_tags': [],
'utxo': f"{l3fundchannel['txid']}:{l3fundchannel['outnum']}"}]
if not EXPERIMENTAL_DUAL_FUND:
expected_channel1 += [{'account_id': l3fundchannel['channel_id'],
'credit_msat': 100000,
'debit_msat': 0,
'fees_msat': 0,
'primary_tag': 'pushed'}]
check_channel_moves(l1, expected_channel1)
check_channel_moves(l2, expected_channel2)
check_chain_moves(l1, expected_chain1)
check_chain_moves(l2, expected_chain2)
# MVT_ROUTED
# Make sure l3 sees l2.
bitcoind.generate_block(5)
wait_for(lambda: len(l3.rpc.listchannels()['channels']) == 4)
inv = l2.rpc.invoice('any', 'test_coinmoves2', 'test_coinmoves2')
l3.rpc.xpay(inv['bolt11'], '10000000sat')
# Make sure it's fully settled.
wait_for(lambda: only_one(l3.rpc.listpeerchannels(l1.info['id'])['channels'])['htlcs'] == [])
expected_channel1 += [{'account_id': fundchannel['channel_id'],
'credit_msat': 0,
'debit_msat': 10000000000,
'fees_msat': 100001,
'payment_hash': inv['payment_hash'],
'primary_tag': 'routed'},
{'account_id': l3fundchannel['channel_id'],
'credit_msat': 10000100001,
'debit_msat': 0,
'fees_msat': 100001,
'payment_hash': inv['payment_hash'],
'primary_tag': 'routed'}]
expected_channel2 += [{'account_id': fundchannel['channel_id'],
'credit_msat': 10000000000,
'debit_msat': 0,
'fees_msat': 0,
'payment_hash': inv['payment_hash'],
'primary_tag': 'invoice'}]
> check_channel_moves(l1, expected_channel1)
addr = 'bcrt1q6r4vvt7uack33qf9n05umfxy8h5s2rdcmq7ra3'
bitcoind =
expected_chain1 = [{'account_id': 'wallet',
'blockheight': 102,
'created_index': 1,
'credit_msat': 200000000000,
'debit_msat': 0,
'extra_tags': [],
'output_msat': 200000000000,
'primary_tag': 'deposit',
'utxo': 'a27c5319744f19a5179eb4df2fe2c97e6407a0c6ce1a80f64e8f5434a7d081c3:0'},
{'account_id': 'external',
'blockheight': 0,
'created_index': 2,
'credit_msat': 100000000000,
'debit_msat': 0,
'extra_tags': [],
'originating_account': 'wallet',
'output_msat': 100000000000,
'primary_tag': 'deposit',
'utxo': 'f3cd1e41b7a644debaf4141ac8c29f03ecb2209ea74bb72f7598f73bb7ac6371:0'},
{'account_id': 'wallet',
'blockheight': 103,
'created_index': 3,
'credit_msat': 0,
'debit_msat': 200000000000,
'extra_tags': [],
'output_msat': 200000000000,
'primary_tag': 'withdrawal',
'spending_txid': 'f3cd1e41b7a644debaf4141ac8c29f03ecb2209ea74bb72f7598f73bb7ac6371',
'utxo': 'a27c5319744f19a5179eb4df2fe2c97e6407a0c6ce1a80f64e8f5434a7d081c3:0'},
{'account_id': 'wallet',
'blockheight': 103,
'created_index': 4,
'credit_msat': 99995433000,
'debit_msat': 0,
'extra_tags': [],
'output_msat': 99995433000,
'primary_tag': 'deposit',
'utxo': 'f3cd1e41b7a644debaf4141ac8c29f03ecb2209ea74bb72f7598f73bb7ac6371:1'},
{'account_id': 'wallet',
'blockheight': 104,
'created_index': 5,
'credit_msat': 0,
'debit_msat': 99995433000,
'extra_tags': [],
'output_msat': 99995433000,
'primary_tag': 'withdrawal',
'spending_txid': '3012750e868900c6a8d076fff307068742b15218214e8e48c899d6c5c6d3162e',
'utxo': 'f3cd1e41b7a644debaf4141ac8c29f03ecb2209ea74bb72f7598f73bb7ac6371:1'},
{'account_id': 'wallet',
'blockheight': 104,
'created_index': 6,
'credit_msat': 25000000,
'debit_msat': 0,
'extra_tags': [],
'output_msat': 25000000,
'primary_tag': 'deposit',
'utxo': '3012750e868900c6a8d076fff307068742b15218214e8e48c899d6c5c6d3162e:1'},
{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'blockheight': 104,
'created_index': 7,
'credit_msat': 99965813000,
'debit_msat': 0,
'extra_tags': ['opener'],
'output_msat': 99965813000,
'peer_id': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
'primary_tag': 'channel_open',
'utxo': '3012750e868900c6a8d076fff307068742b15218214e8e48c899d6c5c6d3162e:0'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'blockheight': 105,
'created_index': 8,
'credit_msat': 0,
'debit_msat': 0,
'extra_tags': [],
'output_msat': 40000000000,
'peer_id': '035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d',
'primary_tag': 'channel_open',
'utxo': 'c61aeaf8635bf7d87e0f713a468205416da1e4177e6b0fd6d2cbacc3408357f9:0'}]
expected_chain2 = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'blockheight': 104,
'created_index': 1,
'credit_msat': 0,
'debit_msat': 0,
'extra_tags': [],
'output_msat': 99965813000,
'peer_id': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518',
'primary_tag': 'channel_open',
'utxo': '3012750e868900c6a8d076fff307068742b15218214e8e48c899d6c5c6d3162e:0'}]
expected_channel1 = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 1,
'credit_msat': 0,
'debit_msat': 1000000,
'fees_msat': 0,
'group_id': 8979437882979687304,
'part_id': 1,
'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524',
'primary_tag': 'invoice'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 2,
'credit_msat': 100000,
'debit_msat': 0,
'fees_msat': 0,
'primary_tag': 'pushed'},
{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 3,
'credit_msat': 0,
'debit_msat': 10000000000,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 4,
'credit_msat': 10000100001,
'debit_msat': 0,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'}]
expected_channel2 = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 1,
'credit_msat': 1000000,
'debit_msat': 0,
'fees_msat': 0,
'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524',
'primary_tag': 'invoice'},
{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'credit_msat': 10000000000,
'debit_msat': 0,
'fees_msat': 0,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'invoice'}]
first_rowid = 1
fundchannel = {'channel_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'channel_type': {'bits': [12, 22],
'names': ['static_remotekey/even', 'anchors/even']},
'outnum': 0,
'tx': '020000000001017163acb73bf798752fb74ba79e20b2ec039fc2c81a14f4bade44a6b7411ecdf30100000000fdffffff02755bf505000000002200205b8cd3b914cf67cdd8fa6273c930353dd36476734fbd962102c2df53b90880cda861000000000000225120eed745804da9784cc203f563efa99ffa54fdf01b137bc964e63c3124070ffbe60140254f50fec00f84a473f73f8ad0096e199e01854cb4689046cc662781f9d6efd4ae74e49f79e7c3a80cc8b15335a6de7d13560c508e6922ebc871dafe9301032267000000',
'txid': '3012750e868900c6a8d076fff307068742b15218214e8e48c899d6c5c6d3162e'}
group_id = 8979437882979687304
inv = {'bolt11': 'lnbcrt1p527dsmsp5v0m4f57k4tv8w7qacvh8766pq5s2swd8cwhrdj7lym8tjp906gxspp5cnzulsr45g972f8jwpjhk3h0qhj8amx66v5uufv4jjt35msk2h4sdqcw3jhxazlvdhkjmnddamx2uejxqyjw5qcqp9rzjqfnwgkvdr57yzh6h92zg3qctvrm7w38djg67kzcm4yeg8vc4cq63sqqqdqqqqqgqqqqqqqqpqqqqqzsqqc9qxpqysgqg7zc4leuz45fp8g89u904rxeg4zru4c70vz00zd4u3maln43xwjyncg5wz8ymtguf7ypnam5vmzt9nvzqzzhxaragmd5s35lqarhyuqp3eq9e8',
'created_index': 2,
'expires_at': 1756917915,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'payment_secret': '63f754d3d6aad877781dc32e7f6b410520a839a7c3ae36cbdf26ceb904afd20d'}
l1 =
l2 =
l3 =
l3fundchannel = {'channel_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'channel_type': {'bits': [12, 22],
'names': ['static_remotekey/even', 'anchors/even']},
'outnum': 0,
'tx': '020000000001017163acb73bf798752fb74ba79e20b2ec039fc2c81a14f4bade44a6b7411ecdf30000000000fdffffff02005a620200000000220020b5534649d83864bf66a7c404ff30ee074a302e0095899686beb5d8dae0e3d870c173930300000000225120a7583f0c421663b8ca76fa579018b40682ef8553d73fd061cd8f216ecdced6a3024730440220703b9dd25ffd7b65dffa6dec50721729ab0c278cada78947dabae40c571406aa0220704798acc80585c5e47119d2007aa433d7e90b5cf90b73fba23464b156cb57c3012102c8a8f25ed135cd671c88bd4e407bb3746678cfacbcf65ce89f8efc2aa0abe53568000000',
'txid': 'c61aeaf8635bf7d87e0f713a468205416da1e4177e6b0fd6d2cbacc3408357f9'}
node_factory =
txid_deposit = 'a27c5319744f19a5179eb4df2fe2c97e6407a0c6ce1a80f64e8f5434a7d081c3'
vout_deposit = 0
vout_withdrawal = 0
withdraw = {'psbt': 'cHNidP8BAgQCAAAAAQMEIgAAAAEEAQEBBQECAQYBAwH7BAIAAAAAAQBxAgAAAAFus/42A01sXev37/xTtCMTI6+b4ko5+5z1x3qhEVWuugAAAAAA/f///wIAwusLAAAAABYAFAH62Qq81maX4lkhZHIt5KlevuFlcy8aHgEAAAAWABQCuBuQz1PEBE1m4osL8cU8km2TV2UAAAABAR8AwusLAAAAABYAFAH62Qq81maX4lkhZHIt5KlevuFlIgID10VEXJNiZl8i4NlunnZvJz8yYN6jnIp2v6Bd0mhN3M9HMEQCIAJYjh/PfLlD3uw185DiobIvVU8zoGMAS6zbH6LeHrp+AiBXWgp6yTO2zslyk5PebU9Q34bj8b+r0uYiVIhFvVSA0wEiBgPXRURck2JmXyLg2W6edm8nPzJg3qOcina/oF3SaE3czwgB+tkKAAAAAAEOIMOB0Kc0VI9O9oAazsagB2R+yeIv37SeF6UZT3QZU3yiAQ8EAAAAAAEQBP3///8AAQMIAOH1BQAAAAABBBYAFNDqxi/c7i0YgSWb6c2kxD3pBQ24DPwJbGlnaHRuaW5nBAIAAQABAwgpz/UFAAAAAAEEIlEgY//uTqfVHmyt+QhuKGolJ5IqqiW4xTrr8y+jKgpif1ohB5FFMoEqRApNdmxxzTkZNpSjQK4R4BLluhrZ77pudspTCQDCzKsXAgAAAAA=',
'tx': '0200000001c381d0a734548f4ef6801acec6a007647ec9e22fdfb49e17a5194f7419537ca20000000000fdffffff0200e1f50500000000160014d0eac62fdcee2d1881259be9cda4c43de9050db829cff5050000000022512063ffee4ea7d51e6cadf9086e286a2527922aaa25b8c53aebf32fa32a0a627f5a22000000',
'txid': 'f3cd1e41b7a644debaf4141ac8c29f03ecb2209ea74bb72f7598f73bb7ac6371'}
tests/test_coinmoves.py:299:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_coinmoves.py:41: in check_channel_moves
check_moves(node.rpc.listchannelmoves()['channelmoves'], expected)
expected = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 1,
'credit_msat': 0,
'debit_msat': 1000000,
'fees_msat': 0,
'group_id': 8979437882979687304,
'part_id': 1,
'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524',
'primary_tag': 'invoice'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 2,
'credit_msat': 100000,
'debit_msat': 0,
'fees_msat': 0,
'primary_tag': 'pushed'},
{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 3,
'credit_msat': 0,
'debit_msat': 10000000000,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 4,
'credit_msat': 10000100001,
'debit_msat': 0,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'}]
node =
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
moves = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'created_index': 1, 'credit_msat':...8e4e211852b142870607f3ff76d0a8c60089860e751230', 'created_index': 4, 'credit_msat': 0, 'debit_msat': 10000000000, ...}]
expected = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'created_index': 1, 'credit_msat':...0f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6', 'created_index': 4, 'credit_msat': 10000100001, 'debit_msat': 0, ...}]
def check_moves(moves, expected):
# Can't predict timestamp
for m in moves:
del m['timestamp']
# But we can absolutely predict created_index.
for i, m in enumerate(expected, start=1):
m['created_index'] = i
> assert moves == expected
E AssertionError: assert [{'created_index': 1, 'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'credit_msat': 0, 'debit_msat': 1000000, 'primary_tag': 'invoice', 'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524', 'part_id': 1, 'group_id': 8979437882979687304, 'fees_msat': 0}, {'created_index': 2, 'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6', 'credit_msat': 100000, 'debit_msat': 0, 'primary_tag': 'pushed', 'fees_msat': 0}, {'created_index': 3, 'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6', 'credit_msat': 10000100001, 'debit_msat': 0, 'primary_tag': 'routed', 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb', 'fees_msat': 100001}, {'created_index': 4, 'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'credit_msat': 0, 'debit_msat': 10000000000, 'primary_tag': 'routed', 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb', 'fees_msat': 100001}] == [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'credit_msat': 0, 'debit_msat': 1000000, 'primary_tag': 'invoice', 'fees_msat': 0, 'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524', 'group_id': 8979437882979687304, 'part_id': 1, 'created_index': 1}, {'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6', 'credit_msat': 100000, 'debit_msat': 0, 'fees_msat': 0, 'primary_tag': 'pushed', 'created_index': 2}, {'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'credit_msat': 0, 'debit_msat': 10000000000, 'fees_msat': 100001, 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb', 'primary_tag': 'routed', 'created_index': 3}, {'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6', 'credit_msat': 10000100001, 'debit_msat': 0, 'fees_msat': 100001, 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb', 'primary_tag': 'routed', 'created_index': 4}]
E
E At index 2 diff: {'created_index': 3, 'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6', 'credit_msat': 10000100001, 'debit_msat': 0, 'primary_tag': 'routed', 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb', 'fees_msat': 100001} != {'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230', 'credit_msat': 0, 'debit_msat': 10000000000, 'fees_msat': 100001, 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb', 'primary_tag': 'routed', 'created_index': 3}
E
E Full diff:
E [
E {
E 'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
E 'created_index': 1,
E 'credit_msat': 0,
E 'debit_msat': 1000000,
E 'fees_msat': 0,
E 'group_id': 8979437882979687304,
E 'part_id': 1,
E 'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524',
E 'primary_tag': 'invoice',
E },
E {
E 'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
E 'created_index': 2,
E 'credit_msat': 100000,
E 'debit_msat': 0,
E 'fees_msat': 0,
E 'primary_tag': 'pushed',
E },
E {
E + 'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
E + 'created_index': 3,
E + 'credit_msat': 10000100001,
E + 'debit_msat': 0,
E + 'fees_msat': 100001,
E + 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
E + 'primary_tag': 'routed',
E + },
E + {
E 'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
E - 'created_index': 3,
E ? ^
E + 'created_index': 4,
E ? ^
E 'credit_msat': 0,
E 'debit_msat': 10000000000,
E 'fees_msat': 100001,
E 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
E 'primary_tag': 'routed',
E },
E - {
E - 'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
E - 'created_index': 4,
E - 'credit_msat': 10000100001,
E - 'debit_msat': 0,
E - 'fees_msat': 100001,
E - 'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
E - 'primary_tag': 'routed',
E - },
E ]
expected = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 1,
'credit_msat': 0,
'debit_msat': 1000000,
'fees_msat': 0,
'group_id': 8979437882979687304,
'part_id': 1,
'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524',
'primary_tag': 'invoice'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 2,
'credit_msat': 100000,
'debit_msat': 0,
'fees_msat': 0,
'primary_tag': 'pushed'},
{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 3,
'credit_msat': 0,
'debit_msat': 10000000000,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 4,
'credit_msat': 10000100001,
'debit_msat': 0,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'}]
i = 4
m = {'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 4,
'credit_msat': 10000100001,
'debit_msat': 0,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'}
moves = [{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 1,
'credit_msat': 0,
'debit_msat': 1000000,
'fees_msat': 0,
'group_id': 8979437882979687304,
'part_id': 1,
'payment_hash': '78af766ec4ac3a1c29fdf23d990817a4f93ae212c4e6e60e3be3d14c8a751524',
'primary_tag': 'invoice'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 2,
'credit_msat': 100000,
'debit_msat': 0,
'fees_msat': 0,
'primary_tag': 'pushed'},
{'account_id': 'f9578340c3accbd2d60f6b7e17e4a16d410582463a710f7ed8f75b63f8ea1ac6',
'created_index': 3,
'credit_msat': 10000100001,
'debit_msat': 0,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'},
{'account_id': '2e16d3c6c5d699c8488e4e211852b142870607f3ff76d0a8c60089860e751230',
'created_index': 4,
'credit_msat': 0,
'debit_msat': 10000000000,
'fees_msat': 100001,
'payment_hash': 'c4c5cfc075a20be524f270657b46ef05e47eecdad329ce259594971a6e1655eb',
'primary_tag': 'routed'}]
tests/test_coinmoves.py:36: AssertionError
```
It appears that the order in which the coin movements are recorded is not deterministic.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.