Example #1
0
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
Example #2
0
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
Example #3
0
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()
Example #4
0
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()
Example #5
0
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
Example #6
0
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
Example #7
0
    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":