|
@ -74,12 +74,12 @@ def bip32(sequence): |
|
|
assert type(k) is bytes |
|
|
assert type(k) is bytes |
|
|
return k |
|
|
return k |
|
|
|
|
|
|
|
|
def create_test_channels(): |
|
|
def create_test_channels(feerate=6000, local=None, remote=None): |
|
|
funding_txid = binascii.hexlify(os.urandom(32)).decode("ascii") |
|
|
funding_txid = binascii.hexlify(os.urandom(32)).decode("ascii") |
|
|
funding_index = 0 |
|
|
funding_index = 0 |
|
|
funding_sat = bitcoin.COIN * 10 |
|
|
funding_sat = ((local + remote) // 1000) if local is not None and remote is not None else (bitcoin.COIN * 10) |
|
|
local_amount = (funding_sat * 1000) // 2 |
|
|
local_amount = local if local is not None else (funding_sat * 1000 // 2) |
|
|
remote_amount = (funding_sat * 1000) // 2 |
|
|
remote_amount = remote if remote is not None else (funding_sat * 1000 // 2) |
|
|
alice_raw = [ bip32("m/" + str(i)) for i in range(5) ] |
|
|
alice_raw = [ bip32("m/" + str(i)) for i in range(5) ] |
|
|
bob_raw = [ bip32("m/" + str(i)) for i in range(5,11) ] |
|
|
bob_raw = [ bip32("m/" + str(i)) for i in range(5,11) ] |
|
|
alice_privkeys = [lnbase.Keypair(lnbase.privkey_to_pubkey(x), x) for x in alice_raw] |
|
|
alice_privkeys = [lnbase.Keypair(lnbase.privkey_to_pubkey(x), x) for x in alice_raw] |
|
@ -97,12 +97,21 @@ def create_test_channels(): |
|
|
|
|
|
|
|
|
return \ |
|
|
return \ |
|
|
lnhtlc.HTLCStateMachine( |
|
|
lnhtlc.HTLCStateMachine( |
|
|
create_channel_state(funding_txid, funding_index, funding_sat, 6000, True, local_amount, remote_amount, alice_privkeys, bob_pubkeys, alice_seed, bob_cur, bob_next, b"\x02"*33, l_dust=200, r_dust=1300, l_csv=5, r_csv=4), "alice"), \ |
|
|
create_channel_state(funding_txid, funding_index, funding_sat, feerate, True, local_amount, remote_amount, alice_privkeys, bob_pubkeys, alice_seed, bob_cur, bob_next, b"\x02"*33, l_dust=200, r_dust=1300, l_csv=5, r_csv=4), "alice"), \ |
|
|
lnhtlc.HTLCStateMachine( |
|
|
lnhtlc.HTLCStateMachine( |
|
|
create_channel_state(funding_txid, funding_index, funding_sat, 6000, False, remote_amount, local_amount, bob_privkeys, alice_pubkeys, bob_seed, alice_cur, alice_next, b"\x01"*33, l_dust=1300, r_dust=200, l_csv=4, r_csv=5), "bob") |
|
|
create_channel_state(funding_txid, funding_index, funding_sat, feerate, False, remote_amount, local_amount, bob_privkeys, alice_pubkeys, bob_seed, alice_cur, alice_next, b"\x01"*33, l_dust=1300, r_dust=200, l_csv=4, r_csv=5), "bob") |
|
|
|
|
|
|
|
|
one_bitcoin_in_msat = bitcoin.COIN * 1000 |
|
|
one_bitcoin_in_msat = bitcoin.COIN * 1000 |
|
|
|
|
|
|
|
|
|
|
|
class TestFee(unittest.TestCase): |
|
|
|
|
|
""" |
|
|
|
|
|
test |
|
|
|
|
|
https://github.com/lightningnetwork/lightning-rfc/blob/e0c436bd7a3ed6a028e1cb472908224658a14eca/03-transactions.md#requirements-2 |
|
|
|
|
|
""" |
|
|
|
|
|
def test_SimpleAddSettleWorkflow(self): |
|
|
|
|
|
alice_channel, bob_channel = create_test_channels(253, 10000000000, 5000000000) |
|
|
|
|
|
self.assertIn(9999817, [x[2] for x in alice_channel.local_commitment.outputs()]) |
|
|
|
|
|
|
|
|
class TestLNBaseHTLCStateMachine(unittest.TestCase): |
|
|
class TestLNBaseHTLCStateMachine(unittest.TestCase): |
|
|
def assertOutputExistsByValue(self, tx, amt_sat): |
|
|
def assertOutputExistsByValue(self, tx, amt_sat): |
|
|
for typ, scr, val in tx.outputs(): |
|
|
for typ, scr, val in tx.outputs(): |
|
|