Esempio n. 1
0
    def _ready_litnode_for_channel(self):
        self.log.info("Send funds from coin node to lit node 0")
        self.balance = self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal']
        self.log_balances(self.coins[0]['code'])
        addr = self.litnodes[0].rpc.Address(NumToMake=1, CoinType=self.coins[0]['code'])
        self.coinnodes[0].sendtoaddress(addr["result"]["LegacyAddresses"][0], 12.34)
        self.confirm_transactions(self.coinnodes[0], self.litnodes[0], 1)

        self.log.info("Waiting to receive transaction")

        # Wait for transaction to be received by lit node
        wait_until(lambda: self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal'] - self.balance == 1234000000)
        self.balance = self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal']
        self.log.info("Funds received by lit node 0")
        self.log_balances(self.coins[0]['code'])

        self.log.info("Send money from lit node 0 to its own segwit address and confirm")
        self.log.info("Sending 1000000000 satoshis to lit node 0 address")
        self.litnodes[0].Send(DestAddrs=[self.litnodes[0].Address()['result']['WitAddresses'][0]], Amts=[1000000000])
        self.confirm_transactions(self.coinnodes[0], self.litnodes[0], 1)

        # We'll lose some money to fees.
        assert self.balance - self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal'] < self.coins[0]["feerate"] * 250
        self.balance = self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal']
        self.log.info("Funds transferred to segwit address")
        self.log_balances(self.coins[0]['code'])
Esempio n. 2
0
    def _open_channel(self):
        self.log.info("Open channel from lit node 0 to lit node 1")
        assert_equal(self.litnodes[0].ChannelList()['result']['Channels'], [])
        assert_equal(self.litnodes[1].ChannelList()['result']['Channels'], [])

        self.litnodes[0].FundChannel(Peer=1, CoinType=self.coins[0]['code'], Capacity=1000000000)
        self.confirm_transactions(self.coinnodes[0], self.litnodes[0], 1)
        self.log.info("lit node 0 has funded channel")

        # Wait for channel to open
        wait_until(lambda: len(self.litnodes[0].ChannelList()['result']['Channels']) > 0)
        assert len(self.litnodes[1].ChannelList()['result']['Channels']) > 0
        self.log.info("Channel open")

        # Why does this error?
        #assert abs(self.balance - self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal'] - 1000000000) < self.coins[0]["feerate"] * 250
        self.balance = self.litnodes[0].get_balance(self.coins[0]['code'])['TxoTotal']
        self.log_balances(self.coins[0]['code'])

        litnode0_channel = self.litnodes[0].ChannelList()['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList()['result']['Channels'][0]

        assert_equal(litnode0_channel['Capacity'], 1000000000)
        assert_equal(litnode0_channel['StateNum'], 0)
        assert not litnode0_channel['Closed']
        assert_equal(litnode0_channel['MyBalance'], 1000000000)

        assert_equal(litnode1_channel['Capacity'], 1000000000)
        assert_equal(litnode1_channel['StateNum'], 0)
        assert not litnode1_channel['Closed']
        assert_equal(litnode1_channel['MyBalance'], 0)

        self.log_channel_balance(self.litnodes[0], 0, self.litnodes[1], 0)
Esempio n. 3
0
    def _ready_litnodes(self):
        """Start two lit nodes and connect them."""
        # Start lit node 0 and open websocket connection
        self.add_litnode()
        self.litnodes[0].args.extend(
            [self.coins[0]["wallit_code"], "127.0.0.1"])
        self.litnodes[0].start_node()
        self.litnodes[0].add_rpc_connection("127.0.0.1", "8001")

        # Start lit node 1 and open websocket connection
        self.add_litnode()
        self.litnodes[1].args.extend(
            ["-rpcport", "8002", self.coins[0]["wallit_code"], "127.0.0.1"])
        self.litnodes[1].start_node()
        self.litnodes[1].add_rpc_connection("127.0.0.1", "8002")

        self.log.info("Connect lit nodes")
        res = self.litnodes[0].Listen(Port="127.0.0.1:10001")["result"]
        self.litnodes[0].lit_address = res["Adr"] + '@' + res["LisIpPorts"][0]

        res = self.litnodes[1].Connect(LNAddr=self.litnodes[0].lit_address)
        assert not res['error']

        # Check that litnode0 and litnode1 are connected
        wait_until(lambda: len(self.litnodes[0].ListConnections()['result'][
            'Connections']) == 1)
        assert len(
            self.litnodes[1].ListConnections()['result']['Connections']) == 1
        self.log.info("lit nodes connected")
Esempio n. 4
0
    def _break_channel(self):
        self.log.info("Break channel")
        self.litnodes[0].BreakChannel(ChanIdx=1)
        self.confirm_transactions(self.coinnodes[0], self.litnodes[0], 1)

        # Make sure balances are as expected
        wait_until(lambda: abs(self.litnodes[1].get_balance(self.coins[0][
            'code'])['TxoTotal'] - 50200000) < self.coins[0]["feerate"] * 2000)
        litnode1_balance = self.litnodes[1].get_balance(self.coins[0]['code'])
        assert litnode1_balance['TxoTotal'] == litnode1_balance['MatureWitty']
        litnode0_balance = self.litnodes[0].get_balance(self.coins[0]['code'])
        assert abs(self.balance + 949800000 - litnode0_balance['TxoTotal']
                   ) < self.coins[0]["feerate"] * 2000

        self.log.info(
            "Verify that channel breaker cannot spend funds immediately")
        assert abs(litnode0_balance['TxoTotal'] -
                   litnode0_balance['MatureWitty'] -
                   949800000) < self.coins[0]["feerate"] * 2000

        self.log_balances(self.coins[0]['code'])

        self.log.info(
            "Advance chain 5 blocks. Verify that channel breaker can now spend funds"
        )
        self.coinnodes[0].generate(5)
        self.chain_height += 5
        wait_until(lambda: self.litnodes[0].get_balance(self.coins[0]['code'])[
            "SyncHeight"] == self.chain_height)
        litnode0_balance = self.litnodes[0].get_balance(self.coins[0]['code'])
        assert litnode0_balance['TxoTotal'] == litnode0_balance['MatureWitty']

        self.log_balances(self.coins[0]['code'])
Esempio n. 5
0
    def _close_channel(self):
        self.log.info("Close channel")
        self.litnodes[0].CloseChannel(ChanIdx=1)
        self.confirm_transactions(self.coinnodes[0], self.litnodes[0], 1)

        # Make sure balances are as expected
        wait_until(lambda: abs(self.litnodes[1].get_balance(self.coins[0]['code'])['TxoTotal'] - 50000000) < self.coins[0]["feerate"] * 2000)
        litnode1_balance = self.litnodes[1].get_balance(self.coins[0]['code'])
        assert_equal(litnode1_balance['TxoTotal'], litnode1_balance['MatureWitty'])
        litnode0_balance = self.litnodes[0].get_balance(self.coins[0]['code'])
        assert abs(self.balance + 950000000 - litnode0_balance['TxoTotal']) < self.coins[0]["feerate"] * 2000
        assert_equal(litnode0_balance['TxoTotal'], litnode0_balance['MatureWitty'])

        self.log_balances(self.coins[0]['code'])
Esempio n. 6
0
    def _ready_litnodes(self):
        """Start two lit nodes and connect them."""
        # Start lit node 0 and open websocket connection
        self.log.info("Starting Lit Node 1")
        self.add_litnode()
        self.litnodes[0].args.extend(
            [self.coins[0]["wallit_code"], "127.0.0.1"])
        self.litnodes[0].start_node()
        self.litnodes[0].add_rpc_connection("127.0.0.1", "8001")

        # Start lit node 1 and open websocket connection
        self.log.info("Starting Lit Node 2")
        self.add_litnode()
        self.litnodes[1].args.extend(
            ["--rpcport", "8002", self.coins[0]["wallit_code"], "127.0.0.1"])
        self.litnodes[1].start_node()
        self.litnodes[1].add_rpc_connection("127.0.0.1", "8002")

        self.log.info("Wait until lit nodes are sync'ed")
        wait_until(
            lambda: self.litnodes[0].get_height(self.coins[0]['code']) == 500)
        wait_until(
            lambda: self.litnodes[1].get_height(self.coins[0]['code']) == 500)

        self.log.info("Listen on Node 0")
        res = self.litnodes[0].Listen(Port="127.0.0.1:10001")["result"]

        self.log.info("Try to connect to incorrect pkh")
        self.litnodes[
            0].lit_address = "ln1p7lhcxmlfgd5mltv6pc335aulv443tkw49q6er" + '@' + res[
                "LisIpPorts"][0]
        failingRes = self.litnodes[1].Connect(
            LNAddr=self.litnodes[0].lit_address)
        assert failingRes['error']

        self.log.info("Connect to correct pkh")
        self.litnodes[0].lit_address = res["Adr"] + '@' + res["LisIpPorts"][0]
        res = self.litnodes[1].Connect(LNAddr=self.litnodes[0].lit_address)
        assert not res['error']

        time.sleep(1)  #RPC timeout

        # Check that litnode0 and litnode1 are connected
        self.log.info("Waiting for nodes to connect to each other")
        wait_until(lambda: len(self.litnodes[0].ListConnections()['result'][
            'Connections']) == 1)
        #self.log.info("Does wait_until actually trigger?")
        #time.sleep(10) #RPC timeout, so this doesn't affect the program flow
        # Wait until both nodes are connected

        assert_equal(
            len(self.litnodes[1].ListConnections()['result']['Connections']),
            1)
        self.log.info("lit nodes connected")
Esempio n. 7
0
    def run_test(self):

        # Start a bitcoind node
        self.bcnodes = [BCNode(0, self.tmpdir)]
        self.bcnodes[0].start_node()
        print("generating 500 blocks")
        self.bcnodes[0].generate(nblocks=500)
        # We need segwit to have activated
        network_info = self.bcnodes[0].getblockchaininfo().json()['result']
        print(network_info)
        assert network_info['bip9_softforks']['segwit']['status'] == 'active'

        # Start lit node 0 and open websocket connection
        self.litnodes.append(LitNode(0, self.tmpdir))
        self.litnodes[0].args.extend(["-reg", "127.0.0.1"])
        self.litnodes[0].start_node()
        time.sleep(2)
        self.litnodes[0].add_rpc_connection("127.0.0.1", "8001")
        print(self.litnodes[0].rpc.new_address())
        self.litnodes[0].Balance()

        # Start lit node 1 and open websocket connection
        self.litnodes.append(LitNode(1, self.tmpdir))
        self.litnodes[1].args.extend(["-rpcport", "8002", "-reg", "127.0.0.1"])
        self.litnodes[1].start_node()
        time.sleep(1)
        self.litnodes[1].add_rpc_connection("127.0.0.1", "8002")
        self.litnodes[1].rpc.new_address()
        self.litnodes[1].Balance()

        # Listen on litnode0 and connect from litnode1
        res = self.litnodes[0].Listen(Port="127.0.0.1:10001")["result"]
        self.litnodes[0].lit_address = res["Adr"] + '@' + res["LisIpPorts"][0]

        res = self.litnodes[1].Connect(LNAddr=self.litnodes[0].lit_address)
        assert not res['error']

        time.sleep(1)
        # Check that litnode0 and litnode1 are connected
        assert len(
            self.litnodes[0].ListConnections()['result']['Connections']) == 1
        assert len(
            self.litnodes[1].ListConnections()['result']['Connections']) == 1

        # Send funds from the bitcoin node to litnode0
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        print("previous bal: " + str(balance))
        addr = self.litnodes[0].rpc.new_address()
        self.bcnodes[0].sendtoaddress(
            address=addr["result"]["LegacyAddresses"][0], amount=12.34)
        print("New block mined: %s" % self.bcnodes[0].generate(nblocks=1).text)
        print("waiting to receive transaction")

        # Wait for transaction to be received (15 seconds timeout)
        wait_until(lambda: self.litnodes[0].get_balance(BC_REGTEST) - balance
                   == 1234000000)
        balance = self.litnodes[0].get_balance(BC_REGTEST)

        # Send money from litnode0 to its own segwit address and confirm
        print("sending 1000000000 satoshis to litnode1 address")
        self.bcnodes[0].generate(nblocks=1)
        self.litnodes[0].Send(DestAddrs=[
            self.litnodes[0].Address()['result']['WitAddresses'][0]
        ],
                              Amts=[1000000000])
        self.bcnodes[0].generate(nblocks=1)
        wait_until(lambda: self.litnodes[0].Balance()['result']["Balances"][0][
            "SyncHeight"] == 503)
        # We'll lose some money to fees. Hopefully not too much!
        assert balance - self.litnodes[0].get_balance(BC_REGTEST) < 50000
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        print("New balance: %s" % balance)

        # Now let's open some channels!
        print("Opening channel from litnode0 to litnode1")
        assert self.litnodes[0].ChannelList()['result']['Channels'] == []
        assert self.litnodes[1].ChannelList()['result']['Channels'] == []

        resp = self.litnodes[0].FundChannel(Peer=1,
                                            CoinType=257,
                                            Capacity=1000000000)
        print("FundChannel response: %s" % resp)

        # Wait for channel to open
        wait_until(lambda: len(self.litnodes[0].ChannelList()['result'][
            'Channels']) > 0)

        assert abs(balance - self.litnodes[0].get_balance(BC_REGTEST) -
                   1000000000) < 50000
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        print("New balance: %s" % balance)

        litnode0_channel = self.litnodes[0].ChannelList(
        )['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList(
        )['result']['Channels'][0]
        print(litnode0_channel)
        print(litnode1_channel)

        assert litnode0_channel['Capacity'] == 1000000000
        assert litnode0_channel['StateNum'] == 0
        assert not litnode0_channel['Closed']
        assert litnode0_channel['MyBalance'] == 1000000000

        assert litnode1_channel['Capacity'] == 1000000000
        assert litnode1_channel['StateNum'] == 0
        assert not litnode1_channel['Closed']
        assert litnode1_channel['MyBalance'] == 0

        print("Now push some funds from litnode0 to litnode1")

        resp = self.litnodes[0].Push(ChanIdx=1, Amt=100000000)
        print("Push response: %s" % resp)

        litnode0_channel = self.litnodes[0].ChannelList(
        )['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList(
        )['result']['Channels'][0]
        print(litnode0_channel)
        print(litnode1_channel)

        assert litnode0_channel['MyBalance'] == 900000000
        assert litnode1_channel['MyBalance'] == 100000000

        print("push some funds back")

        resp = self.litnodes[1].Push(ChanIdx=1, Amt=50000000)
        print("Push response: %s" % resp)

        litnode0_channel = self.litnodes[0].ChannelList(
        )['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList(
        )['result']['Channels'][0]
        print(litnode0_channel)
        print(litnode1_channel)

        assert litnode0_channel['MyBalance'] == 950000000
        assert litnode1_channel['MyBalance'] == 50000000

        print("Close channel")
        resp = self.litnodes[0].CloseChannel(ChanIdx=1)
        print("Close channel response: %s" % resp)
        self.bcnodes[0].generate(nblocks=10)
        wait_until(lambda: self.litnodes[0].Balance()['result']["Balances"][0][
            "SyncHeight"] == 513)

        assert abs(self.litnodes[1].get_balance(BC_REGTEST) - 50000000) < 50000

        assert abs(balance + 950000000 -
                   self.litnodes[0].get_balance(BC_REGTEST)) < 50000
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        print("New balance: %s" % balance)
Esempio n. 8
0
    def run_test(self):

        # Start a bitcoind node
        self.add_bcnode()
        self.bcnodes[0].start_node()

        self.log.info("Generate 500 blocks to activate segwit")
        self.bcnodes[0].generate(nblocks=500)
        network_info = self.bcnodes[0].getblockchaininfo().json()['result']
        assert network_info['bip9_softforks']['segwit']['status'] == 'active'

        # Start lit node 0 and open websocket connection
        self.add_litnode()
        self.litnodes[0].args.extend(["-reg", "127.0.0.1"])
        self.litnodes[0].start_node()
        self.litnodes[0].add_rpc_connection("127.0.0.1", "8001")

        # Start lit node 1 and open websocket connection
        self.add_litnode()
        self.litnodes[1].args.extend(["-rpcport", "8002", "-reg", "127.0.0.1"])
        self.litnodes[1].start_node()
        self.litnodes[1].add_rpc_connection("127.0.0.1", "8002")

        self.log.info("Connect lit nodes")
        res = self.litnodes[0].Listen(Port="127.0.0.1:10001")["result"]
        self.litnodes[0].lit_address = res["Adr"] + '@' + res["LisIpPorts"][0]

        res = self.litnodes[1].Connect(LNAddr=self.litnodes[0].lit_address)
        assert not res['error']
        time.sleep(1)

        # Check that litnode0 and litnode1 are connected
        assert len(
            self.litnodes[0].ListConnections()['result']['Connections']) == 1
        assert len(
            self.litnodes[1].ListConnections()['result']['Connections']) == 1
        self.log.info("lit nodes connected")

        self.log.info("Send funds from bitcoind node to litnode0")
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        self.log_balances(BC_REGTEST)
        addr = self.litnodes[0].rpc.new_address()
        self.bcnodes[0].sendtoaddress(
            address=addr["result"]["LegacyAddresses"][0], amount=12.34)
        self.bcnodes[0].generate(nblocks=1).text

        self.log.info("Waiting to receive transaction")

        # Wait for transaction to be received (15 seconds timeout)
        wait_until(lambda: self.litnodes[0].get_balance(BC_REGTEST) - balance
                   == 1234000000)
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        self.log.info("Funds received")
        self.log_balances(BC_REGTEST)

        self.log.info(
            "Send money from litnode0 to its own segwit address and confirm")
        self.log.info("sending 1000000000 satoshis to litnode1 address")
        self.bcnodes[0].generate(nblocks=1)
        self.litnodes[0].Send(DestAddrs=[
            self.litnodes[0].Address()['result']['WitAddresses'][0]
        ],
                              Amts=[1000000000])
        self.bcnodes[0].generate(nblocks=1)
        wait_until(lambda: self.litnodes[0].Balance()['result']["Balances"][0][
            "SyncHeight"] == 503)

        # We'll lose some money to fees. Hopefully not too much!
        assert balance - self.litnodes[0].get_balance(BC_REGTEST) < 50000
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        self.log.info("Funds transferred to segwit address")
        self.log_balances(BC_REGTEST)

        self.log.info("Open channel from litnode0 to litnode1")
        assert self.litnodes[0].ChannelList()['result']['Channels'] == []
        assert self.litnodes[1].ChannelList()['result']['Channels'] == []

        self.litnodes[0].FundChannel(Peer=1, CoinType=257, Capacity=1000000000)
        self.log.info("litnode0 has funded channel")

        # Wait for channel to open
        wait_until(lambda: len(self.litnodes[0].ChannelList()['result'][
            'Channels']) > 0)
        assert len(self.litnodes[1].ChannelList()['result']['Channels']) > 0
        self.log.info("Channel open")

        assert abs(balance - self.litnodes[0].get_balance(BC_REGTEST) -
                   1000000000) < 50000
        balance = self.litnodes[0].get_balance(BC_REGTEST)
        self.log_balances(BC_REGTEST)

        litnode0_channel = self.litnodes[0].ChannelList(
        )['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList(
        )['result']['Channels'][0]

        assert litnode0_channel['Capacity'] == 1000000000
        assert litnode0_channel['StateNum'] == 0
        assert not litnode0_channel['Closed']
        assert litnode0_channel['MyBalance'] == 1000000000

        assert litnode1_channel['Capacity'] == 1000000000
        assert litnode1_channel['StateNum'] == 0
        assert not litnode1_channel['Closed']
        assert litnode1_channel['MyBalance'] == 0

        self.log_channel_balance(self.litnodes[0], 0, self.litnodes[1], 0)
        self.log.info("Now push some funds from litnode0 to litnode1")

        self.litnodes[0].Push(ChanIdx=1, Amt=100000000)

        litnode0_channel = self.litnodes[0].ChannelList(
        )['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList(
        )['result']['Channels'][0]
        assert litnode0_channel['MyBalance'] == 900000000
        assert litnode1_channel['MyBalance'] == 100000000

        self.log_channel_balance(self.litnodes[0], 0, self.litnodes[1], 0)

        self.log.info("Push some funds back")
        self.litnodes[1].Push(ChanIdx=1, Amt=50000000)

        litnode0_channel = self.litnodes[0].ChannelList(
        )['result']['Channels'][0]
        litnode1_channel = self.litnodes[1].ChannelList(
        )['result']['Channels'][0]
        assert litnode0_channel['MyBalance'] == 950000000
        assert litnode1_channel['MyBalance'] == 50000000

        self.log_channel_balance(self.litnodes[0], 0, self.litnodes[1], 0)
        self.log.info("Close channel")
        self.litnodes[0].CloseChannel(ChanIdx=1)
        self.bcnodes[0].generate(nblocks=10)
        wait_until(lambda: self.litnodes[0].Balance()['result']["Balances"][0][
            "SyncHeight"] == 513)

        assert abs(self.litnodes[1].get_balance(BC_REGTEST) - 50000000) < 50000
        assert abs(balance + 950000000 -
                   self.litnodes[0].get_balance(BC_REGTEST)) < 50000

        self.log_balances(BC_REGTEST)