def _call_pos_bonding( node, from_address: str, amount: int, public_key: str, private_key: str, gas_price: int = 1, session_contract: str = Contract.POS_BONDING, method: bytes = b"bond", ): if method == b"bond": session_args = ABI.args([ABI.byte_array(method), ABI.u512(amount)]) elif method == b"unbond": session_args = ABI.args([ ABI.byte_array(method), ABI.option(ABI.u512(amount) if amount is not None else None), ]) else: raise Exception(f"_call_pos_bonding: method {method} not supported") node.p_client.deploy( from_address=from_address, session_contract=session_contract, gas_price=gas_price, public_key=public_key, private_key=private_key, session_args=session_args, ) block_hash = node.p_client.propose().block_hash.hex() for deploy_info in node.p_client.show_deploys(block_hash): if deploy_info.is_error: raise Exception(f"bond: {deploy_info.error_message}") return block_hash
def test_not_enough_funds_to_run_payment_code(payment_node_network): network = payment_node_network node0: DockerNode = network.docker_nodes[0] blocks = parse_show_blocks(node0.d_client.show_blocks(1000)) genesis_hash = blocks[0].summary.block_hash assert len( blocks) == 1 # There should be only one block - the genesis block genesis_balance = node0.d_client.get_balance( account_address=GENESIS_ACCOUNT.public_key_hex, block_hash=genesis_hash) assert genesis_balance == INITIAL_MOTES_AMOUNT session_args = ABI.args([ ABI.account(bytes.fromhex(GENESIS_ACCOUNT.public_key_hex)), ABI.u32(10**7) ]) _, deploy_hash = node0.p_client.deploy( from_address=GENESIS_ACCOUNT.public_key_hex, session_contract=Contract.TRANSFER_TO_ACCOUNT, payment_contract=Contract.STANDARD_PAYMENT, public_key=GENESIS_ACCOUNT.public_key_path, private_key=GENESIS_ACCOUNT.private_key_path, gas_price=1, session_args=session_args, payment_args=ABI.args([ABI.u512(450)]), ) latest_block_hash = parse_show_blocks( node0.d_client.show_blocks(1000))[0].summary.block_hash genesis_balance_after_transfer = node0.d_client.get_balance( account_address=GENESIS_ACCOUNT.public_key_hex, block_hash=latest_block_hash) assert genesis_balance == genesis_balance_after_transfer
def deploy_and_propose(network: CasperLabsNetwork, contract: str, account: Account) -> (str, str): """ Wrapper method for contract deployment. """ node = network.docker_nodes[0] response, deploy_hash = node.p_client.deploy( from_address=account.public_key_hex, session_contract=contract, payment_contract=Contract.STANDARD_PAYMENT, gas_price=1, public_key=account.public_key_path, private_key=account.private_key_path, payment_args=[ABI.u512("amount", 10000000)]) response = node.p_client.propose() block_hash = response.block_hash.hex() return block_hash, deploy_hash.hex()
def call_ttt(network: CasperLabsNetwork, account: Account, ttt_contract_hash: str, json_args: str) -> (str, str): """ Wrapper method for contract deployment. """ node = network.docker_nodes[0] payment = node.p_client.node.resources_folder / Contract.STANDARD_PAYMENT client = node.p_client.client status, deploy_hash = client.deploy( from_addr=account.public_key_binary, gas_price=1, private_key=account.private_key_path, public_key=account.public_key_path, payment=payment, payment_args=[ABI.u512("amount", 10000000)], session_hash=bytes.fromhex(ttt_contract_hash), session_args=ABI.args_from_json(json_args)) response = client.propose() block_hash = response.block_hash.hex() return block_hash, deploy_hash.hex()
def test_error_in_payment_contract(payment_node_network): network = payment_node_network node0: DockerNode = network.docker_nodes[0] node0.use_docker_client() blocks = parse_show_blocks(node0.d_client.show_blocks(1000)) genesis_hash = blocks[0].summary.block_hash assert len( blocks) == 1 # There should be only one block - the genesis block genesis_balance = node0.client.get_balance( account_address=GENESIS_ACCOUNT.public_key_hex, block_hash=genesis_hash) assert genesis_balance == INITIAL_MOTES_AMOUNT from_account = Account("genesis") to_account = Account(1) session_args = ABI.args([ ABI.account(bytes.fromhex(to_account.public_key_hex)), ABI.u32(10**7) ]) payment_args = ABI.args([ABI.u512(10**6)]) response, deploy_hash_bytes = node0.p_client.deploy( from_address=from_account.public_key_hex, session_contract=Contract.TRANSFER_TO_ACCOUNT, payment_contract=Contract.ERR_STANDARD_PAYMENT, public_key=from_account.public_key_path, private_key=from_account.private_key_path, gas_price=1, session_args=session_args, payment_args=payment_args, ) genesis_balance_after_transfer = node0.client.get_balance( account_address=GENESIS_ACCOUNT.public_key_hex, block_hash=parse_show_blocks( node0.d_client.show_blocks(1000))[0].summary.block_hash, ) assert genesis_balance == genesis_balance_after_transfer
def test_refund_after_session_code_error(payment_node_network): network = payment_node_network node0: DockerNode = network.docker_nodes[0] blocks = parse_show_blocks(node0.d_client.show_blocks(1000)) genesis_init_balance = node0.client.get_balance( account_address=GENESIS_ACCOUNT.public_key_hex, block_hash=blocks[0].summary.block_hash, ) _, deploy_hash = node0.p_client.deploy( from_address=GENESIS_ACCOUNT.public_key_hex, session_contract=Contract.ARGS_U512, payment_contract=Contract.STANDARD_PAYMENT, public_key=GENESIS_ACCOUNT.public_key_path, private_key=GENESIS_ACCOUNT.private_key_path, gas_price=1, session_args=ABI.args([ABI.u512("number", 100)]), payment_args=ABI.args([ABI.u32("amount", 10 ** 6)]) # 100 is a revert code. ) try: node0.p_client.propose() except Exception as ex: print(ex) latest_blocks = parse_show_blocks(node0.d_client.show_blocks(1000)) deploy_hash = latest_blocks[0].summary.block_hash deploy = node0.client.show_deploys(deploy_hash)[0] assert deploy.cost == MAX_PAYMENT_COST / CONV_RATE motes = deploy.cost * CONV_RATE later_balance = node0.client.get_balance( account_address=GENESIS_ACCOUNT.public_key_hex, block_hash=deploy_hash ) expected_sum = later_balance + motes assert genesis_init_balance == expected_sum
SET_KEY_THRESHOLDS = "set_key_thresholds.wasm" STANDARD_PAYMENT = "standard_payment.wasm" SUBCALL_REVERT_CALL = "test_subcall_revert_call.wasm" SUBCALL_REVERT_DEFINE = "test_subcall_revert_define.wasm" TRANSFER_TO_ACCOUNT = "transfer_to_account.wasm" UNBONDINGCALL = "test_unbondingcall.wasm" UPDATE_ASSOCIATED_KEY = "update_associated_key.wasm" # TEST Account Use Notes # test_transfer_to_accounts: 300, 299, 298 # test_transfer_with_overdraft: 297, 296 MAX_PAYMENT_COST = 10000000 INITIAL_MOTES_AMOUNT = 10**20 MAX_PAYMENT_ABI = ABI.args([ABI.u512(MAX_PAYMENT_COST)]) CONV_RATE = 10 TEST_ACCOUNT_INITIAL_BALANCE = 100000000 BOOTSTRAP_PATH = "/root/.casperlabs/bootstrap" @dataclasses.dataclass(eq=True, frozen=True) class KeyPair: private_key: str public_key: str def testing_root_path() -> Path: cur_path = Path(os.path.realpath(__file__)).parent while cur_path.name != "integration-testing":