From 6523512a1d56b70b919baa8b935935046ca213c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Papierski?= Date: Fri, 16 Apr 2021 16:58:43 +0200 Subject: [PATCH 1/6] EE-1221: Increase create_purse/mint price 10x. --- execution_engine/src/shared/host_function_costs.rs | 2 +- execution_engine/src/shared/system_config/mint_costs.rs | 2 +- resources/local/chainspec.toml.in | 2 +- resources/production/chainspec.toml | 4 ++-- resources/test/valid/0_9_0/chainspec.toml | 2 +- resources/test/valid/0_9_0_unordered/chainspec.toml | 2 +- resources/test/valid/1_0_0/chainspec.toml | 2 +- utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in | 2 +- utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in | 2 +- utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/execution_engine/src/shared/host_function_costs.rs b/execution_engine/src/shared/host_function_costs.rs index dd946789f5..f83052b4fb 100644 --- a/execution_engine/src/shared/host_function_costs.rs +++ b/execution_engine/src/shared/host_function_costs.rs @@ -23,7 +23,7 @@ const DEFAULT_ADD_COST: u32 = 5_800; const DEFAULT_CALL_CONTRACT_COST: u32 = 4_500; const DEFAULT_CALL_CONTRACT_ARGS_SIZE_WEIGHT: u32 = 420; -const DEFAULT_CREATE_PURSE_COST: u32 = 170_000; +const DEFAULT_CREATE_PURSE_COST: u32 = 1_700_000; const DEFAULT_GET_BALANCE_COST: u32 = 3_800; const DEFAULT_GET_BLOCKTIME_COST: u32 = 330; const DEFAULT_GET_CALLER_COST: u32 = 380; diff --git a/execution_engine/src/shared/system_config/mint_costs.rs b/execution_engine/src/shared/system_config/mint_costs.rs index 7a532c7753..be322bed83 100644 --- a/execution_engine/src/shared/system_config/mint_costs.rs +++ b/execution_engine/src/shared/system_config/mint_costs.rs @@ -3,7 +3,7 @@ use datasize::DataSize; use rand::{distributions::Standard, prelude::*, Rng}; use serde::{Deserialize, Serialize}; -pub const DEFAULT_MINT_COST: u32 = 10_000; +pub const DEFAULT_MINT_COST: u32 = 1_700_000; pub const DEFAULT_REDUCE_TOTAL_SUPPLY_COST: u32 = 10_000; pub const DEFAULT_CREATE_COST: u32 = 10_000; pub const DEFAULT_BALANCE_COST: u32 = 10_000; diff --git a/resources/local/chainspec.toml.in b/resources/local/chainspec.toml.in index 97f0c09e43..9a6041d84c 100644 --- a/resources/local/chainspec.toml.in +++ b/resources/local/chainspec.toml.in @@ -143,7 +143,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 170_000, arguments = [0, 0] } +create_purse = { cost = 1_700_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } diff --git a/resources/production/chainspec.toml b/resources/production/chainspec.toml index ff9895b499..39f5c9c90c 100644 --- a/resources/production/chainspec.toml +++ b/resources/production/chainspec.toml @@ -146,7 +146,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 170_000, arguments = [0, 0] } +create_purse = { cost = 1_700_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } @@ -201,7 +201,7 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 1_700_000 reduce_total_supply = 10_000 create = 10_000 balance = 10_000 diff --git a/resources/test/valid/0_9_0/chainspec.toml b/resources/test/valid/0_9_0/chainspec.toml index 2b6ef8a8a1..84941a767e 100644 --- a/resources/test/valid/0_9_0/chainspec.toml +++ b/resources/test/valid/0_9_0/chainspec.toml @@ -123,7 +123,7 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 1_700_000 reduce_total_supply = 10_000 create = 10_000 balance = 10_000 diff --git a/resources/test/valid/0_9_0_unordered/chainspec.toml b/resources/test/valid/0_9_0_unordered/chainspec.toml index 2b6ef8a8a1..84941a767e 100644 --- a/resources/test/valid/0_9_0_unordered/chainspec.toml +++ b/resources/test/valid/0_9_0_unordered/chainspec.toml @@ -123,7 +123,7 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 1_700_000 reduce_total_supply = 10_000 create = 10_000 balance = 10_000 diff --git a/resources/test/valid/1_0_0/chainspec.toml b/resources/test/valid/1_0_0/chainspec.toml index b8e6629bd0..9551592b92 100644 --- a/resources/test/valid/1_0_0/chainspec.toml +++ b/resources/test/valid/1_0_0/chainspec.toml @@ -124,7 +124,7 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 1_700_000 reduce_total_supply = 10_000 create = 10_000 balance = 10_000 diff --git a/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in b/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in index 49b071d690..cd8902e704 100644 --- a/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in +++ b/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in @@ -141,7 +141,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 170_000, arguments = [0, 0] } +create_purse = { cost = 1_700_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } diff --git a/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in b/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in index 37bda53d13..3b9fefacbe 100644 --- a/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in +++ b/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in @@ -141,7 +141,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 170_000, arguments = [0, 0] } +create_purse = { cost = 1_700_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } diff --git a/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in b/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in index 2cfffa83ca..df80349e04 100644 --- a/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in +++ b/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in @@ -141,7 +141,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 170_000, arguments = [0, 0] } +create_purse = { cost = 1_700_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } From da0a16439f34e61035a85616c298a57298fa3077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Papierski?= Date: Mon, 19 Apr 2021 16:01:06 +0200 Subject: [PATCH 2/6] EE-1221: Bump price to 2.5 tokens --- execution_engine/src/shared/system_config/mint_costs.rs | 4 ++-- resources/local/chainspec.toml.in | 6 +++--- resources/production/chainspec.toml | 6 +++--- resources/test/valid/0_9_0/chainspec.toml | 4 ++-- resources/test/valid/0_9_0_unordered/chainspec.toml | 4 ++-- resources/test/valid/1_0_0/chainspec.toml | 4 ++-- .../nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in | 6 +++--- utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in | 6 +++--- utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in | 6 +++--- 9 files changed, 23 insertions(+), 23 deletions(-) diff --git a/execution_engine/src/shared/system_config/mint_costs.rs b/execution_engine/src/shared/system_config/mint_costs.rs index be322bed83..93eafb3f21 100644 --- a/execution_engine/src/shared/system_config/mint_costs.rs +++ b/execution_engine/src/shared/system_config/mint_costs.rs @@ -3,9 +3,9 @@ use datasize::DataSize; use rand::{distributions::Standard, prelude::*, Rng}; use serde::{Deserialize, Serialize}; -pub const DEFAULT_MINT_COST: u32 = 1_700_000; +pub const DEFAULT_MINT_COST: u32 = 2_500_000_000; pub const DEFAULT_REDUCE_TOTAL_SUPPLY_COST: u32 = 10_000; -pub const DEFAULT_CREATE_COST: u32 = 10_000; +pub const DEFAULT_CREATE_COST: u32 = 2_500_000_000; pub const DEFAULT_BALANCE_COST: u32 = 10_000; pub const DEFAULT_TRANSFER_COST: u32 = 10_000; pub const DEFAULT_READ_BASE_ROUND_REWARD_COST: u32 = 10_000; diff --git a/resources/local/chainspec.toml.in b/resources/local/chainspec.toml.in index 9a6041d84c..4e8e0cfa40 100644 --- a/resources/local/chainspec.toml.in +++ b/resources/local/chainspec.toml.in @@ -143,7 +143,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 1_700_000, arguments = [0, 0] } +create_purse = { cost = 2_500_000_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } @@ -198,9 +198,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/resources/production/chainspec.toml b/resources/production/chainspec.toml index 39f5c9c90c..a2fb75ac19 100644 --- a/resources/production/chainspec.toml +++ b/resources/production/chainspec.toml @@ -146,7 +146,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 1_700_000, arguments = [0, 0] } +create_purse = { cost = 2_500_000_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } @@ -201,9 +201,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 1_700_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/resources/test/valid/0_9_0/chainspec.toml b/resources/test/valid/0_9_0/chainspec.toml index 84941a767e..fb2016dd0e 100644 --- a/resources/test/valid/0_9_0/chainspec.toml +++ b/resources/test/valid/0_9_0/chainspec.toml @@ -123,9 +123,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 1_700_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/resources/test/valid/0_9_0_unordered/chainspec.toml b/resources/test/valid/0_9_0_unordered/chainspec.toml index 84941a767e..fb2016dd0e 100644 --- a/resources/test/valid/0_9_0_unordered/chainspec.toml +++ b/resources/test/valid/0_9_0_unordered/chainspec.toml @@ -123,9 +123,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 1_700_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/resources/test/valid/1_0_0/chainspec.toml b/resources/test/valid/1_0_0/chainspec.toml index 9551592b92..28ac2e76b4 100644 --- a/resources/test/valid/1_0_0/chainspec.toml +++ b/resources/test/valid/1_0_0/chainspec.toml @@ -124,9 +124,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 1_700_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in b/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in index cd8902e704..e5087841a9 100644 --- a/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in +++ b/utils/nctl/sh/scenarios/chainspecs/bond_its.chainspec.toml.in @@ -141,7 +141,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 1_700_000, arguments = [0, 0] } +create_purse = { cost = 2_500_000_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } @@ -196,9 +196,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in b/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in index 3b9fefacbe..93a8059525 100644 --- a/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in +++ b/utils/nctl/sh/scenarios/chainspecs/itst13.chainspec.toml.in @@ -141,7 +141,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 1_700_000, arguments = [0, 0] } +create_purse = { cost = 2_500_000_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } @@ -196,9 +196,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 diff --git a/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in b/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in index df80349e04..70c4d483c7 100644 --- a/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in +++ b/utils/nctl/sh/scenarios/chainspecs/itst14.chainspec.toml.in @@ -141,7 +141,7 @@ call_contract = { cost = 4_500, arguments = [0, 0, 0, 0, 0, 420, 0] } call_versioned_contract = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0, 0] } create_contract_package_at_hash = { cost = 200, arguments = [0, 0] } create_contract_user_group = { cost = 200, arguments = [0, 0, 0, 0, 0, 0, 0, 0] } -create_purse = { cost = 1_700_000, arguments = [0, 0] } +create_purse = { cost = 2_500_000_000, arguments = [0, 0] } disable_contract_version = { cost = 200, arguments = [0, 0, 0, 0] } get_balance = { cost = 3_800, arguments = [0, 0, 0] } get_blocktime = { cost = 330, arguments = [0] } @@ -196,9 +196,9 @@ read_era_id = 10_000 activate_bid = 10_000 [system_costs.mint_costs] -mint = 10_000 +mint = 2_500_000_000 reduce_total_supply = 10_000 -create = 10_000 +create = 2_500_000_000 balance = 10_000 transfer = 10_000 read_base_round_reward = 10_000 From 40da8b797aa8504d7e4bfae36c6256af68e599df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Papierski?= Date: Fri, 21 May 2021 18:57:24 +0200 Subject: [PATCH 3/6] EE-1221: Create purse first, then use in payment. This change first creates a purse and saves them in the account's context which will be later retrieved under payment code. This is due to the fact that create_purse would always trigger GasLimit error. --- .../handle_payment/finalize_payment.rs | 18 +++++++ .../handle_payment/refund_purse.rs | 47 +++++++++++++++++-- .../test/finalize-payment/src/main.rs | 13 ++++- .../contracts/test/refund-purse/src/main.rs | 27 ++++++++--- 4 files changed, 94 insertions(+), 11 deletions(-) diff --git a/execution_engine_testing/tests/src/test/system_contracts/handle_payment/finalize_payment.rs b/execution_engine_testing/tests/src/test/system_contracts/handle_payment/finalize_payment.rs index b7d45b17a9..b86b04327c 100644 --- a/execution_engine_testing/tests/src/test/system_contracts/handle_payment/finalize_payment.rs +++ b/execution_engine_testing/tests/src/test/system_contracts/handle_payment/finalize_payment.rs @@ -17,6 +17,9 @@ const CONTRACT_TRANSFER_PURSE_TO_ACCOUNT: &str = "transfer_purse_to_account.wasm const FINALIZE_PAYMENT: &str = "finalize_payment.wasm"; const LOCAL_REFUND_PURSE: &str = "local_refund_purse"; +const CREATE_PURSE_01: &str = "create_purse_01.wasm"; +const ARG_PURSE_NAME: &str = "purse_name"; + const ACCOUNT_ADDR: AccountHash = AccountHash::new([1u8; 32]); pub const ARG_AMOUNT: &str = "amount"; pub const ARG_AMOUNT_SPENT: &str = "amount_spent"; @@ -94,11 +97,26 @@ fn finalize_payment_should_refund_to_specified_purse() { ARG_REFUND_FLAG => refund_purse_flag, ARG_AMOUNT_SPENT => Option::::None, ARG_ACCOUNT_KEY => Option::::None, + ARG_PURSE_NAME => LOCAL_REFUND_PURSE, }; builder.run_genesis(&DEFAULT_RUN_GENESIS_REQUEST); + let create_purse_request = { + ExecuteRequestBuilder::standard( + *DEFAULT_ACCOUNT_ADDR, + CREATE_PURSE_01, + runtime_args! { + ARG_PURSE_NAME => LOCAL_REFUND_PURSE, + }, + ) + .build() + }; + + builder.exec(create_purse_request).expect_success().commit(); + let rewards_pre_balance = builder.get_proposer_purse_balance(); + let payment_pre_balance = get_handle_payment_payment_purse_balance(&builder); let refund_pre_balance = get_named_account_balance(&builder, *DEFAULT_ACCOUNT_ADDR, LOCAL_REFUND_PURSE) diff --git a/execution_engine_testing/tests/src/test/system_contracts/handle_payment/refund_purse.rs b/execution_engine_testing/tests/src/test/system_contracts/handle_payment/refund_purse.rs index a3f82267dc..90374e3b5f 100644 --- a/execution_engine_testing/tests/src/test/system_contracts/handle_payment/refund_purse.rs +++ b/execution_engine_testing/tests/src/test/system_contracts/handle_payment/refund_purse.rs @@ -10,6 +10,12 @@ use casper_types::{account::AccountHash, runtime_args, RuntimeArgs, U512}; const CONTRACT_TRANSFER_PURSE_TO_ACCOUNT: &str = "transfer_purse_to_account.wasm"; const ACCOUNT_1_ADDR: AccountHash = AccountHash::new([1u8; 32]); const ARG_PAYMENT_AMOUNT: &str = "payment_amount"; +const CREATE_PURSE_01: &str = "create_purse_01.wasm"; +const ARG_PURSE_NAME: &str = "purse_name"; +const ARG_PURSE_NAME_1: &str = "purse_name_1"; +const ARG_PURSE_NAME_2: &str = "purse_name_2"; +const LOCAL_REFUND_PURSE_1: &str = "local_refund_purse_1"; +const LOCAL_REFUND_PURSE_2: &str = "local_refund_purse_2"; #[ignore] #[test] @@ -55,14 +61,49 @@ fn transfer(builder: &mut InMemoryWasmTestBuilder, account_hash: AccountHash, am } fn refund_tests(builder: &mut InMemoryWasmTestBuilder, account_hash: AccountHash) { - let exec_request = { + let create_purse_request_1 = { + ExecuteRequestBuilder::standard( + account_hash, + CREATE_PURSE_01, + runtime_args! { + ARG_PURSE_NAME => LOCAL_REFUND_PURSE_1, + }, + ) + .build() + }; + + let create_purse_request_2 = { + ExecuteRequestBuilder::standard( + account_hash, + CREATE_PURSE_01, + runtime_args! { + ARG_PURSE_NAME => LOCAL_REFUND_PURSE_2, + }, + ) + .build() + }; + + builder + .exec(create_purse_request_1) + .expect_success() + .commit(); + builder + .exec(create_purse_request_2) + .expect_success() + .commit(); + + let refund_purse_request = { let deploy = DeployItemBuilder::new() .with_address(account_hash) .with_deploy_hash([2; 32]) .with_session_code("do_nothing.wasm", RuntimeArgs::default()) .with_payment_code( "refund_purse.wasm", - runtime_args! { ARG_PAYMENT_AMOUNT => *DEFAULT_PAYMENT }, + runtime_args! { + ARG_PAYMENT_AMOUNT => *DEFAULT_PAYMENT, + ARG_PURSE_NAME_1 => LOCAL_REFUND_PURSE_1, + ARG_PURSE_NAME_2 => LOCAL_REFUND_PURSE_2, + }, ) .with_authorization_keys(&[account_hash]) .build(); @@ -70,5 +111,5 @@ fn refund_tests(builder: &mut InMemoryWasmTestBuilder, account_hash: AccountHash ExecuteRequestBuilder::new().push_deploy(deploy).build() }; - builder.exec(exec_request).expect_success().commit(); + builder.exec(refund_purse_request).expect_success().commit(); } diff --git a/smart_contracts/contracts/test/finalize-payment/src/main.rs b/smart_contracts/contracts/test/finalize-payment/src/main.rs index cebefed7e4..5e40de70bc 100644 --- a/smart_contracts/contracts/test/finalize-payment/src/main.rs +++ b/smart_contracts/contracts/test/finalize-payment/src/main.rs @@ -1,6 +1,10 @@ #![no_std] #![no_main] +extern crate alloc; + +use alloc::string::String; + use casper_contract::{ contract_api::{account, runtime, system}, unwrap_or_revert::UnwrapOrRevert, @@ -12,6 +16,7 @@ pub const ARG_AMOUNT_SPENT: &str = "amount_spent"; pub const ARG_REFUND_FLAG: &str = "refund"; pub const ARG_PURSE: &str = "purse"; pub const ARG_ACCOUNT_KEY: &str = "account"; +pub const ARG_PURSE_NAME: &str = "purse_name"; fn set_refund_purse(contract_hash: ContractHash, purse: URef) { runtime::call_contract( @@ -52,12 +57,16 @@ pub extern "C" fn call() { let refund_purse_flag: u8 = runtime::get_named_arg(ARG_REFUND_FLAG); let maybe_amount_spent: Option = runtime::get_named_arg(ARG_AMOUNT_SPENT); let maybe_account: Option = runtime::get_named_arg(ARG_ACCOUNT_KEY); + let purse_name: String = runtime::get_named_arg(ARG_PURSE_NAME); submit_payment(contract_hash, payment_amount); if refund_purse_flag != 0 { - let refund_purse = system::create_purse(); - runtime::put_key("local_refund_purse", refund_purse.into()); + let refund_purse = { + let stored_purse_key = runtime::get_key(&purse_name).unwrap_or_revert(); + let stored_purse = stored_purse_key.into_uref().unwrap_or_revert(); + stored_purse + }; set_refund_purse(contract_hash, refund_purse); } diff --git a/smart_contracts/contracts/test/refund-purse/src/main.rs b/smart_contracts/contracts/test/refund-purse/src/main.rs index 0bdaa5ddc8..99196d886a 100644 --- a/smart_contracts/contracts/test/refund-purse/src/main.rs +++ b/smart_contracts/contracts/test/refund-purse/src/main.rs @@ -1,6 +1,10 @@ #![no_std] #![no_main] +extern crate alloc; + +use alloc::string::String; + use casper_contract::{ contract_api::{account, runtime, system}, unwrap_or_revert::UnwrapOrRevert, @@ -20,6 +24,8 @@ const ARG_PAYMENT_AMOUNT: &str = "payment_amount"; const SET_REFUND_PURSE: &str = "set_refund_purse"; const GET_REFUND_PURSE: &str = "get_refund_purse"; const GET_PAYMENT_PURSE: &str = "get_payment_purse"; +const ARG_PURSE_NAME_1: &str = "purse_name_1"; +const ARG_PURSE_NAME_2: &str = "purse_name_2"; fn set_refund_purse(contract_hash: ContractHash, p: &URef) { runtime::call_contract( @@ -49,7 +55,13 @@ fn submit_payment(handle_payment: ContractHash, amount: U512) { pub extern "C" fn call() { let handle_payment = system::get_handle_payment(); - let refund_purse = system::create_purse(); + let refund_purse_name_1: String = runtime::get_named_arg(ARG_PURSE_NAME_1); + let refund_purse_name_2: String = runtime::get_named_arg(ARG_PURSE_NAME_2); + + let refund_purse_1 = runtime::get_key(&refund_purse_name_1) + .unwrap_or_revert() + .into_uref() + .unwrap_or_revert(); { // get_refund_purse should return None before setting it let refund_result = get_refund_purse(handle_payment); @@ -58,10 +70,10 @@ pub extern "C" fn call() { } // it should return Some(x) after calling set_refund_purse(x) - set_refund_purse(handle_payment, &refund_purse); + set_refund_purse(handle_payment, &refund_purse_1); let refund_purse = match get_refund_purse(handle_payment) { None => runtime::revert(ApiError::User(Error::NotFound as u16)), - Some(x) if x.addr() == refund_purse.addr() => x, + Some(x) if x.addr() == refund_purse_1.addr() => x, Some(_) => runtime::revert(ApiError::User(Error::Invalid as u16)), }; @@ -71,12 +83,15 @@ pub extern "C" fn call() { } } { - let refund_purse = system::create_purse(); + let refund_purse_2 = runtime::get_key(&refund_purse_name_2) + .unwrap_or_revert() + .into_uref() + .unwrap_or_revert(); // get_refund_purse should return correct value after setting a second time - set_refund_purse(handle_payment, &refund_purse); + set_refund_purse(handle_payment, &refund_purse_2); match get_refund_purse(handle_payment) { None => runtime::revert(ApiError::User(Error::NotFound as u16)), - Some(uref) if uref.addr() == refund_purse.addr() => (), + Some(uref) if uref.addr() == refund_purse_2.addr() => (), Some(_) => runtime::revert(ApiError::User(Error::Invalid as u16)), } From 7183bc8d67ad191abc203192b561c26e016a7449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Papierski?= Date: Fri, 21 May 2021 19:02:07 +0200 Subject: [PATCH 4/6] EE-1221: Bump default create_purse cost. --- execution_engine/src/shared/host_function_costs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/execution_engine/src/shared/host_function_costs.rs b/execution_engine/src/shared/host_function_costs.rs index 0c43856c9c..0219ccb1e5 100644 --- a/execution_engine/src/shared/host_function_costs.rs +++ b/execution_engine/src/shared/host_function_costs.rs @@ -23,7 +23,7 @@ const DEFAULT_ADD_COST: u32 = 5_800; const DEFAULT_CALL_CONTRACT_COST: u32 = 4_500; const DEFAULT_CALL_CONTRACT_ARGS_SIZE_WEIGHT: u32 = 420; -const DEFAULT_CREATE_PURSE_COST: u32 = 1_700_000; +const DEFAULT_CREATE_PURSE_COST: u32 = 2_500_000_000; const DEFAULT_GET_BALANCE_COST: u32 = 3_800; const DEFAULT_GET_BLOCKTIME_COST: u32 = 330; const DEFAULT_GET_CALLER_COST: u32 = 380; From 5380d04e82a833e4b9f33b114152a6885c0d9966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Papierski?= Date: Mon, 24 May 2021 19:23:50 +0200 Subject: [PATCH 5/6] EE-1221: Fix clipy issues. --- smart_contracts/contracts/test/finalize-payment/src/main.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/smart_contracts/contracts/test/finalize-payment/src/main.rs b/smart_contracts/contracts/test/finalize-payment/src/main.rs index 5e40de70bc..6370d89ec5 100644 --- a/smart_contracts/contracts/test/finalize-payment/src/main.rs +++ b/smart_contracts/contracts/test/finalize-payment/src/main.rs @@ -64,8 +64,7 @@ pub extern "C" fn call() { if refund_purse_flag != 0 { let refund_purse = { let stored_purse_key = runtime::get_key(&purse_name).unwrap_or_revert(); - let stored_purse = stored_purse_key.into_uref().unwrap_or_revert(); - stored_purse + stored_purse_key.into_uref().unwrap_or_revert() }; set_refund_purse(contract_hash, refund_purse); } From c838e0b3f8e4e7a2ab48aeaa8d0d75e9329f38fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Papierski?= Date: Tue, 20 Jul 2021 17:42:51 +0200 Subject: [PATCH 6/6] EE-1221: Update changelog --- execution_engine/CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/execution_engine/CHANGELOG.md b/execution_engine/CHANGELOG.md index c8b4c1ee1c..b789729453 100644 --- a/execution_engine/CHANGELOG.md +++ b/execution_engine/CHANGELOG.md @@ -15,8 +15,7 @@ All notable changes to this project will be documented in this file. The format ### Changed * Update pinned version of Rust to `nightly-2021-06-17` - - +* Changed price of `create_purse` to 2.5CSPR to discourage people from creating purses in the payment code. ## [1.2.0] - 2021-05-27