Skip to content

Commit

Permalink
Merge #4644
Browse files Browse the repository at this point in the history
4644: Add tracking of size and consumption in determing block utilization r=darthsiroftardis a=darthsiroftardis

CHANGELOG:

- Changed the tracking of block utilization to also consider the block size and gas being consumed
- Added tests to ensure correct tracking of block utilization

Co-authored-by: Karan Dhareshwar <karan@casperlabs.io>
  • Loading branch information
casperlabs-bors-ng[bot] and darthsiroftardis committed Apr 24, 2024
2 parents a528ab8 + 3fc1134 commit a9a7fff
Show file tree
Hide file tree
Showing 14 changed files with 377 additions and 225 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ fn should_transfer_to_account_with_correct_balances() {
.expect("should get account 1");

let default_account_balance = builder.get_purse_balance(default_account.main_purse());
let default_expected_balance =
U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE) - (U512::one() + MintCosts::default().transfer);
let default_expected_balance = U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE) - (U512::one());
assert_eq!(
default_account_balance, default_expected_balance,
"default account balance should reflect the transfer",
Expand Down Expand Up @@ -115,31 +114,32 @@ fn should_transfer_from_default_and_then_to_another_account() {
.get_entity_by_account_hash(*DEFAULT_ACCOUNT_ADDR)
.expect("should get default account");

let account1 = builder
let _account1 = builder
.get_entity_by_account_hash(*ACCOUNT_1_ADDR)
.expect("should get account 1");

let account2 = builder
.get_entity_by_account_hash(*ACCOUNT_2_ADDR)
.expect("should get account 2");

let default_account_balance = builder.get_purse_balance(default_account.main_purse());
let _default_account_balance = builder.get_purse_balance(default_account.main_purse());
let double_cost = MintCosts::default().transfer + MintCosts::default().transfer;
let default_expected_balance =
let _default_expected_balance =
U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE) - (MAX_PAYMENT_AMOUNT + (double_cost as u64));
assert_eq!(
default_account_balance,
default_expected_balance,
"default account balance should reflect the transfer ({})",
U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE) - default_expected_balance
);

let account_1_balance = builder.get_purse_balance(account1.main_purse());
assert_eq!(
account_1_balance,
U512::zero(),
"account 1 balance should have been completely consumed"
);
// TODO: Renable when payment logic is wired up.
// assert_eq!(
// default_account_balance,
// default_expected_balance,
// "default account balance should reflect the transfer ({})",
// U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE) - default_expected_balance
// );
//
// let account_1_balance = builder.get_purse_balance(account1.main_purse());
// assert_eq!(
// account_1_balance,
// U512::zero(),
// "account 1 balance should have been completely consumed"
// );

let account_2_balance = builder.get_purse_balance(account2.main_purse());
assert_eq!(
Expand Down
61 changes: 10 additions & 51 deletions execution_engine_testing/tests/src/test/regression/ee_1160.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,14 @@ use casper_engine_test_support::{
LmdbWasmTestBuilder, TransferRequestBuilder, DEFAULT_ACCOUNT_ADDR,
DEFAULT_ACCOUNT_INITIAL_BALANCE, LOCAL_GENESIS_REQUEST,
};
use casper_execution_engine::engine_state::WASMLESS_TRANSFER_FIXED_GAS_PRICE;
use casper_types::{account::AccountHash, Gas, MintCosts, Motes, SystemConfig, U512};
use casper_types::{account::AccountHash, U512};

const ACCOUNT_1_ADDR: AccountHash = AccountHash::new([1u8; 32]);

#[ignore]
#[test]
fn ee_1160_wasmless_transfer_should_empty_account() {
let wasmless_transfer_gas_cost = Gas::from(SystemConfig::default().mint_costs().transfer);
let wasmless_transfer_cost = Motes::from_gas(
wasmless_transfer_gas_cost,
WASMLESS_TRANSFER_FIXED_GAS_PRICE,
)
.expect("gas overflow");

let transfer_amount =
U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE) - wasmless_transfer_cost.value();
let transfer_amount = U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE);

let mut builder = LmdbWasmTestBuilder::default();
builder.run_genesis(LOCAL_GENESIS_REQUEST.clone());
Expand Down Expand Up @@ -53,38 +44,22 @@ fn ee_1160_wasmless_transfer_should_empty_account() {
#[test]
fn ee_1160_transfer_larger_than_balance_should_fail() {
let transfer_amount = U512::from(DEFAULT_ACCOUNT_INITIAL_BALANCE)
- U512::from(MintCosts::default().transfer)
// One above the available balance to transfer should raise an InsufficientPayment already
+ U512::one();

let mut builder = LmdbWasmTestBuilder::default();
builder.run_genesis(LOCAL_GENESIS_REQUEST.clone());

let default_account = builder
.get_entity_by_account_hash(*DEFAULT_ACCOUNT_ADDR)
.expect("should get default_account");

let balance_before = builder.get_purse_balance(default_account.main_purse());

let no_wasm_transfer_request_1 =
TransferRequestBuilder::new(transfer_amount, ACCOUNT_1_ADDR).build();
builder.transfer_and_commit(no_wasm_transfer_request_1);

let balance_after = builder.get_purse_balance(default_account.main_purse());

let wasmless_transfer_gas_cost = Gas::from(MintCosts::default().transfer);
let wasmless_transfer_motes = Motes::from_gas(
wasmless_transfer_gas_cost,
WASMLESS_TRANSFER_FIXED_GAS_PRICE,
)
.expect("gas overflow");

let last_result = builder.get_exec_result_owned(0).unwrap();
assert_eq!(
balance_before - wasmless_transfer_motes.value(),
balance_after
);
// TODO: reenable when new payment logic is added
// assert_eq!(
// balance_before - wasmless_transfer_motes.value(),
// balance_after
// );
//assert_eq!(last_result.cost(), wasmless_transfer_gas_cost);

assert!(
Expand All @@ -106,32 +81,16 @@ fn ee_1160_large_wasmless_transfer_should_avoid_overflow() {
let mut builder = LmdbWasmTestBuilder::default();
builder.run_genesis(LOCAL_GENESIS_REQUEST.clone());

let default_account = builder
.get_entity_by_account_hash(*DEFAULT_ACCOUNT_ADDR)
.expect("should get default_account");

let balance_before = builder.get_purse_balance(default_account.main_purse());

let no_wasm_transfer_request_1 =
TransferRequestBuilder::new(transfer_amount, ACCOUNT_1_ADDR).build();
builder.transfer_and_commit(no_wasm_transfer_request_1);

let balance_after = builder.get_purse_balance(default_account.main_purse());

let wasmless_transfer_gas_cost = Gas::from(MintCosts::default().transfer);
let wasmless_transfer_motes = Motes::from_gas(
wasmless_transfer_gas_cost,
WASMLESS_TRANSFER_FIXED_GAS_PRICE,
)
.expect("gas overflow");

assert_eq!(
balance_before - wasmless_transfer_motes.value(),
balance_after
);

let last_result = builder.get_exec_result_owned(0).unwrap();
// TODO: reenable when new payment logic is added
// assert_eq!(
// balance_before - wasmless_transfer_motes.value(),
// balance_after
// );
// assert_eq!(last_result.cost(), wasmless_transfer_gas_cost);

assert!(
Expand Down
23 changes: 13 additions & 10 deletions execution_engine_testing/tests/src/test/regression/ee_1163.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ use casper_engine_test_support::{
use casper_execution_engine::engine_state::{Error, WASMLESS_TRANSFER_FIXED_GAS_PRICE};
use casper_storage::{data_access_layer::TransferRequest, system::transfer::TransferError};
use casper_types::{
account::AccountHash, system::handle_payment, Gas, Motes, RuntimeArgs, SystemConfig, U512,
account::AccountHash, system::handle_payment, FeeHandling, Gas, Motes, RuntimeArgs,
SystemConfig, U512,
};

// const ACCOUNT_1_ADDR: AccountHash = AccountHash::new([1u8; 32]);
Expand Down Expand Up @@ -40,15 +41,17 @@ fn should_charge_for_user_error(
.expect("should have result");
// TODO: reenable when new payment logic is added
// assert_eq!(response.cost(), transfer_cost);
assert_eq!(
purse_balance_before - transfer_cost_motes.value(),
purse_balance_after
);
assert_eq!(
proposer_purse_balance_before + transfer_cost_motes.value(),
proposer_purse_balance_after
);

let fee_handling = builder.chainspec().core_config.fee_handling;
if fee_handling == FeeHandling::PayToProposer {
assert_eq!(
purse_balance_before - transfer_cost_motes.value(),
purse_balance_after
);
assert_eq!(
proposer_purse_balance_before + transfer_cost_motes.value(),
proposer_purse_balance_after
);
}
// Verify handle payment postconditions

let handle_payment = builder.get_handle_payment_contract();
Expand Down
Loading

0 comments on commit a9a7fff

Please sign in to comment.