Ejemplo n.º 1
0
    def create_side_info(self, node_type: str):
        self.params.arbiter_params.side_info[node_type] = dict()
        global side_chain_genesis_hash
        if node_type is not "geth":
            side_port = util.reset_port(1, node_type, "json_port")
            Logger.warn("{} side port: {}".format(self.tag, side_port))
            side_chain_genesis_hash = rpc.get_block_hash_by_height(
                0, side_port)
            Logger.debug("{} {} genesis hash: {}".format(
                self.tag, node_type,
                self.params.arbiter_params.side_chain_genesis_hash))
        else:
            side_chain_genesis_hash = self.params.eth_params.genesis_hash

        recharge_address = keytool.gen_cross_chain_address(
            bytes.fromhex(side_chain_genesis_hash))

        self.params.arbiter_params.recharge_address = recharge_address
        self.params.arbiter_params.withdraw_address = "0000000000000000000000000000000000"
        self.params.arbiter_params.side_chain_genesis_hash = side_chain_genesis_hash
        Logger.info("{} side genesis hash:{}".format(self.tag,
                                                     side_chain_genesis_hash))
        Logger.info("{} recharge address: {}".format(
            self.tag, self.params.arbiter_params.recharge_address))
        Logger.info("{} withdraw address: {}".format(
            self.tag, self.params.arbiter_params.withdraw_address))

        self.params.arbiter_params.side_info[node_type][
            constant.SIDE_GENESIS_ADDRESS] = side_chain_genesis_hash
        self.params.arbiter_params.side_info[node_type][
            constant.SIDE_RECHARGE_ADDRESS] = recharge_address
        self.params.arbiter_params.side_info[node_type][constant.SIDE_WITHDRAW_ADDRESS] = \
            self.params.arbiter_params.withdraw_address
    def transfer_cross_chain_asset(self, input_private_key: str, lock_address: str, cross_address: str,
                                   amount: int, recharge: bool, port=rpc.DEFAULT_PORT):
        tx = txbuild.create_cross_chain_transaction(
            input_private_key=input_private_key,
            lock_address=lock_address,
            cross_chain_address=cross_address,
            amount=amount,
            recharge=recharge,
            rpc_port=port
        )

        if tx is None:
            return False

        tx = txbuild.single_sign_transaction(input_private_key, tx)
        Logger.warn("cross chain asset transaction: \n{}".format(tx))
        ret = self.handle_tx_result(tx, port)

        return ret
Ejemplo n.º 3
0
                node.start()
            remaining_start = True

        if stop_height != 0 and current_height > stop_height + 100:
            current_pubkeys = controller.get_current_arbiter_public_keys()
            controller.check_result("check all nodes have the same height",
                                    controller.check_nodes_height())

            result = set(controller.node_manager.normal_dpos_pubkeys) == set(
                current_pubkeys)
            break

        # mining a block per second
        controller.discrete_mining_blocks(1)
        time.sleep(1)

    # Finally, output the test result and exit
    controller.check_result(test_case, result)
    if result:
        controller.terminate_all_process(result)


if __name__ == '__main__':

    for i in range(config["times"]):
        Logger.warn("[main] begin testing {} times".format(i + 1))
        time.sleep(2)
        test_content()
        Logger.warn("[main] end testing {} times".format(i + 1))
        time.sleep(3)
Ejemplo n.º 4
0
config = {
    "recharge": 1,
    "rpc_port": 10016,
    "host": "127.0.0.1",
    "outputs_num": 1,
    "inputs_num": 1,
    "block_size": 1,
    "pressure_private_key":
    "fcbcd369529e4229468ac4f78627467bbe2b6f1c6625b1d9f0f55bf11e638090",
    # EM7U5Y8AJcv49pUPQ5jPpt93Nmcwh3ti4Y
    "tap_private_key":
    "bd758440a858baaff56ec1783388bc44135ed44bb0e4f25ad6cf28be45896d74",
    # EWRwrmBWpYFwnvAQffcP1vrPCS5sGTgWEB
    "eth_tap_address": "0x53781e106a2e3378083bdcede1874e5c2a7225f8",
    "lock_address": "XaKGQrBSAUPF9pAZMz7Ek1S1SdRaw1NfKJ"  # eth
    #"lock_address":"XKUh4GLhFJiqAMTF6HyWQrV9pK9HcGUdfJ" # did
}


def test_content():
    tx = TxControl(config)
    tx.get_current_height()
    tx.ready_for_pressure_outputs()
    tx.ready_for_pressure_cross_chain()


if __name__ == '__main__':
    Logger.warn("[main] begin testing")
    test_content()
    Logger.warn("[main] end testing")
    def cross_chain_transaction(self, side_node_type: str, recharge: bool, input_account=None):
        if side_node_type is None or side_node_type is "":
            return False, None, None, None, None

        global cross_key_account
        global side_port
        global result
        global balance_port

        if not input_account:
            input_account = self.tap_account

        if side_node_type is "did":
            side_port = 10136
            cross_key_account = self.node_manager.keystore_manager.cross_did_account
        elif side_node_type is "token":
            side_port = 10146
            cross_key_account = self.node_manager.keystore_manager.cross_token_account
        elif side_node_type is "neo":
            side_port = 10156
            cross_key_account = self.node_manager.keystore_manager.cross_neo_account
        elif side_node_type is "geth":
            side_port = 1111
            from src.core.nodes.eth import Eth
            cross_key_account = Eth.get_random_eth_account()

        if recharge:
            port = self.rpc_port
            balance_port = side_port
            input_private_key = input_account.private_key()
            lock_address = self.params.arbiter_params.side_info[side_node_type][constant.SIDE_RECHARGE_ADDRESS]
            cross_address = cross_key_account.address()
            amount = 100 * constant.TO_SELA

        else:
            port = side_port
            balance_port = self.rpc_port
            input_private_key = cross_key_account.private_key()
            lock_address = self.params.arbiter_params.side_info[side_node_type][constant.SIDE_WITHDRAW_ADDRESS]
            cross_address = self.tap_account.address()
            amount = 100 * constant.TO_SELA

        cross_address = cross_address[2:]
        Logger.warn("{} cross address: {}".format(self.tag, cross_address))

        balance1 = rpc.get_balance_by_address(cross_address, balance_port, side_node_type)

        ret, tx_hash = self.transfer_cross_chain_asset(
            input_private_key=input_private_key,
            lock_address=lock_address,
            cross_address=cross_address,
            amount=amount,
            recharge=recharge,
            port=port
        )

        if not ret:
            Logger.error("{} transfer cross chain asset failed".format(self.tag))
            return False, None, None, None, None

        side_height_begin = rpc.get_block_count(side_port)
        main_height = rpc.get_block_count()
        Logger.info(
            "To make sure recharge tx be putted into main chain block, we need to wait main chain mining 16 blocks!")
        while True:
            current_height = rpc.get_block_count()
            side_height = rpc.get_block_count(side_port)

            Logger.info("{} Current height: {}, dest height: {}".format(self.tag, current_height, (main_height + 16)))

            if side_node_type == "geth":
                if current_height - main_height > 15:
                    break
            else:
                if side_height - side_height_begin > 10:
                    break
            rpc.discrete_mining(1)
            time.sleep(3)

        balance2 = rpc.get_balance_by_address(cross_address, balance_port, side_node_type)
        Logger.debug("{} recharge balance1: {}".format(self.tag, balance1))
        Logger.debug("{} recharge balance2: {}".format(self.tag, balance2))

        # result = (float(balance2) - float(balance1)) * constant.TO_SELA > float(amount - 3 * 10000)
        # Logger.debug("{} recharge result: {}".format(self.tag, result))
        #
        return True, tx_hash, cross_address, amount, TX_FEE