mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 04:01:10 +00:00
Deprecate Currency; introduce holds and freezing into fungible traits (#12951)
* First reworking of fungibles API * New API and docs * More fungible::* API improvements * New ref-counting logic for old API * Missing files * Fixes * Use the new transfer logic * Use fungibles for the dispatchables * Use shelve/restore names * Locking works with total balance. * repotting and removal * Separate Holds from Reserves * Introduce freezes * Missing files * Tests for freezing * Fix hold+freeze combo * More tests * Fee-free dispatchable for upgrading accounts * Benchmarks and a few fixes * Another test * Docs and refactor to avoid blanket impls * Repot * Fit out ItemOf fully * Add events to Balanced traits * Introduced events into Hold traits * Fix Assets pallet tests * Assets benchmarks pass * Missing files and fixes * Fixes * Fixes * Benchmarks fixes * Fix balance benchmarks * Formatting * Expose fungible sub modules * Move NIS to fungible API * Fix broken impl and add test * Fix tests * API for `transfer_and_hold` * Use composite APIs * Formatting * Upgraded event * Fixes * Fixes * Fixes * Fixes * Repot tests and some fixed * Fix some bits * Fix dust tests * Rename `set_balance` - `Balances::set_balance` becomes `Balances::force_set_balance` - `Unbalanced::set_balance` becomes `Unbalances::write_balance` * becomes * Move dust handling to fungibles API * Formatting * Fixes and more refactoring * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Fixes * Use reducible_balance for better correctness on fees * Reducing hold to zero should remove entry. * Add test * Docs * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Update frame/support/src/traits/tokens/fungibles/regular.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Update frame/support/src/traits/tokens/fungible/regular.rs Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> * Docs * Docs * Docs * Fix NIS benchmarks * Doc comment * Remove post_mutation * Fix some tests * Fix some grumbles * Enumify bool args to fungible(s) functions * Fix up assets and balances * Formatting * Fix contracts * Fix tests & benchmarks build * Typify minted boolean arg * Typify on_hold boolean arg; renames * Fix numerous tests * Fix dependency issue * Privatize dangerous API mutate_account * Fix contracts (@alext - please check this commit) * Remove println * Fix tests for contracts * Fix broken rename * Fix broken rename * Fix broken rename * Docs * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * remove from_ref_time * Update frame/executive/src/lib.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/executive/src/lib.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Reenable test * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/currency.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/lottery/src/tests.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/mod.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/regular.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/freeze.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungible/regular.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Update frame/support/src/traits/tokens/fungibles/hold.rs Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> * Rename UnwantedRemoval to UnwantedAccountRemoval * Docs * Formatting * Update frame/balances/src/lib.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update primitives/runtime/src/lib.rs Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> * handle_raw_dust oes nothing * Formatting * Fixes * Grumble * Fixes * Add test * Add test * Tests for reducible_balance * Fixes * Fix Salary * Fixes * Disable broken test * Disable nicely * Fixes * Fixes * Fixes * Rename some events * Fix nomination pools breakage * Add compatibility stub for transfer tx * Reinstate a safely compatible version of Balances set_balance * Fixes * Grumble * Update frame/nis/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_balances * disable flakey tests * Update frame/balances/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Grumbles * Grumble --------- Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com> Co-authored-by: Alexander Theißen <alex.theissen@me.com> Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Keith Yeung <kungfukeith11@gmail.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: command-bot <>
This commit is contained in:
@@ -688,13 +688,10 @@ mod tests {
|
||||
|
||||
use frame_support::{
|
||||
assert_err, parameter_types,
|
||||
traits::{
|
||||
ConstU32, ConstU64, ConstU8, Currency, LockIdentifier, LockableCurrency,
|
||||
WithdrawReasons,
|
||||
},
|
||||
traits::{fungible, ConstU32, ConstU64, ConstU8, Currency},
|
||||
weights::{ConstantMultiplier, IdentityFee, RuntimeDbWeight, Weight, WeightToFee},
|
||||
};
|
||||
use frame_system::{Call as SystemCall, ChainContext, LastRuntimeUpgradeInfo};
|
||||
use frame_system::{ChainContext, LastRuntimeUpgradeInfo};
|
||||
use pallet_balances::Call as BalancesCall;
|
||||
use pallet_transaction_payment::CurrencyAdapter;
|
||||
|
||||
@@ -899,6 +896,10 @@ mod tests {
|
||||
type MaxReserves = ();
|
||||
type ReserveIdentifier = [u8; 8];
|
||||
type WeightInfo = ();
|
||||
type FreezeIdentifier = ();
|
||||
type MaxFreezes = ConstU32<1>;
|
||||
type HoldIdentifier = ();
|
||||
type MaxHolds = ConstU32<1>;
|
||||
}
|
||||
|
||||
parameter_types! {
|
||||
@@ -972,7 +973,7 @@ mod tests {
|
||||
}
|
||||
|
||||
fn call_transfer(dest: u64, value: u64) -> RuntimeCall {
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest, value })
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest, value })
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1025,13 +1026,13 @@ mod tests {
|
||||
block_import_works_inner(
|
||||
new_test_ext_v0(1),
|
||||
array_bytes::hex_n_into_unchecked(
|
||||
"216e61b2689d1243eb56d89c9084db48e50ebebc4871d758db131432c675d7c0",
|
||||
"65e953676859e7a33245908af7ad3637d6861eb90416d433d485e95e2dd174a1",
|
||||
),
|
||||
);
|
||||
block_import_works_inner(
|
||||
new_test_ext(1),
|
||||
array_bytes::hex_n_into_unchecked(
|
||||
"4738b4c0aab02d6ddfa62a2a6831ccc975a9f978f7db8d7ea8e68eba8639530a",
|
||||
"5a19b3d6fdb7241836349fdcbe2d9df4d4f945b949d979e31ad50bff1cbcd1c2",
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -1116,7 +1117,7 @@ mod tests {
|
||||
let mut t = new_test_ext(10000);
|
||||
// given: TestXt uses the encoded len as fixed Len:
|
||||
let xt = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 33, value: 0 }),
|
||||
sign_extra(1, 0, 0),
|
||||
);
|
||||
let encoded = xt.encode();
|
||||
@@ -1139,7 +1140,10 @@ mod tests {
|
||||
|
||||
for nonce in 0..=num_to_exhaust_block {
|
||||
let xt = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death {
|
||||
dest: 33,
|
||||
value: 0,
|
||||
}),
|
||||
sign_extra(1, nonce.into(), 0),
|
||||
);
|
||||
let res = Executive::apply_extrinsic(xt);
|
||||
@@ -1164,15 +1168,15 @@ mod tests {
|
||||
#[test]
|
||||
fn block_weight_and_size_is_stored_per_tx() {
|
||||
let xt = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 33, value: 0 }),
|
||||
sign_extra(1, 0, 0),
|
||||
);
|
||||
let x1 = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 33, value: 0 }),
|
||||
sign_extra(1, 1, 0),
|
||||
);
|
||||
let x2 = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 33, value: 0 }),
|
||||
sign_extra(1, 2, 0),
|
||||
);
|
||||
let len = xt.clone().encode().len() as u32;
|
||||
@@ -1258,50 +1262,30 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_pay_for_tx_fee_on_full_lock() {
|
||||
let id: LockIdentifier = *b"0 ";
|
||||
let execute_with_lock = |lock: WithdrawReasons| {
|
||||
let mut t = new_test_ext(1);
|
||||
t.execute_with(|| {
|
||||
<pallet_balances::Pallet<Runtime> as LockableCurrency<Balance>>::set_lock(
|
||||
id, &1, 110, lock,
|
||||
);
|
||||
let xt = TestXt::new(
|
||||
RuntimeCall::System(SystemCall::remark { remark: vec![1u8] }),
|
||||
sign_extra(1, 0, 0),
|
||||
);
|
||||
let weight = xt.get_dispatch_info().weight +
|
||||
<Runtime as frame_system::Config>::BlockWeights::get()
|
||||
.get(DispatchClass::Normal)
|
||||
.base_extrinsic;
|
||||
let fee: Balance =
|
||||
<Runtime as pallet_transaction_payment::Config>::WeightToFee::weight_to_fee(
|
||||
&weight,
|
||||
);
|
||||
Executive::initialize_block(&Header::new(
|
||||
1,
|
||||
H256::default(),
|
||||
H256::default(),
|
||||
[69u8; 32].into(),
|
||||
Digest::default(),
|
||||
));
|
||||
fn can_not_pay_for_tx_fee_on_full_lock() {
|
||||
let mut t = new_test_ext(1);
|
||||
t.execute_with(|| {
|
||||
<pallet_balances::Pallet<Runtime> as fungible::MutateFreeze<u64>>::set_freeze(
|
||||
&(),
|
||||
&1,
|
||||
110,
|
||||
)
|
||||
.unwrap();
|
||||
let xt = TestXt::new(
|
||||
RuntimeCall::System(frame_system::Call::remark { remark: vec![1u8] }),
|
||||
sign_extra(1, 0, 0),
|
||||
);
|
||||
Executive::initialize_block(&Header::new(
|
||||
1,
|
||||
H256::default(),
|
||||
H256::default(),
|
||||
[69u8; 32].into(),
|
||||
Digest::default(),
|
||||
));
|
||||
|
||||
if lock == WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT) {
|
||||
assert!(Executive::apply_extrinsic(xt).unwrap().is_ok());
|
||||
// tx fee has been deducted.
|
||||
assert_eq!(<pallet_balances::Pallet<Runtime>>::total_balance(&1), 111 - fee);
|
||||
} else {
|
||||
assert_eq!(
|
||||
Executive::apply_extrinsic(xt),
|
||||
Err(InvalidTransaction::Payment.into()),
|
||||
);
|
||||
assert_eq!(<pallet_balances::Pallet<Runtime>>::total_balance(&1), 111);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
execute_with_lock(WithdrawReasons::all());
|
||||
execute_with_lock(WithdrawReasons::except(WithdrawReasons::TRANSACTION_PAYMENT));
|
||||
assert_eq!(Executive::apply_extrinsic(xt), Err(InvalidTransaction::Payment.into()),);
|
||||
assert_eq!(<pallet_balances::Pallet<Runtime>>::total_balance(&1), 111);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1443,7 +1427,7 @@ mod tests {
|
||||
#[test]
|
||||
fn custom_runtime_upgrade_is_called_when_using_execute_block_trait() {
|
||||
let xt = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 33, value: 0 }),
|
||||
sign_extra(1, 0, 0),
|
||||
);
|
||||
|
||||
@@ -1569,7 +1553,7 @@ mod tests {
|
||||
#[should_panic(expected = "Invalid inherent position for extrinsic at index 1")]
|
||||
fn invalid_inherent_position_fail() {
|
||||
let xt1 = TestXt::new(
|
||||
RuntimeCall::Balances(BalancesCall::transfer { dest: 33, value: 0 }),
|
||||
RuntimeCall::Balances(BalancesCall::transfer_allow_death { dest: 33, value: 0 }),
|
||||
sign_extra(1, 0, 0),
|
||||
);
|
||||
let xt2 = TestXt::new(RuntimeCall::Custom(custom::Call::inherent_call {}), None);
|
||||
|
||||
Reference in New Issue
Block a user