Skip to content

Commit

Permalink
Add reserve and references count tests (#259)
Browse files Browse the repository at this point in the history
* Fix TODO

* Add reserve test

* Add another case

* Add more samples

* Code clean

* Fix local test error
  • Loading branch information
boundless-forest authored Feb 7, 2023
1 parent 4d1b188 commit 6aa85cd
Showing 1 changed file with 105 additions and 24 deletions.
129 changes: 105 additions & 24 deletions tool/state-processor/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,36 +116,78 @@ where

// --- System & Balances & Assets ---

// TODO: more testcases about the account references and reservations
#[test]
fn solo_chain_substrate_account_adjust() {
run_test(|tester| {
let test_addr = "0xf4171e1b64c96cc17f601f28d002cb5fcd27eab8b6585e296f4652be5bf05550";
// the purest account
{
let test_addr = "0xcefc2d75238c60c67b4b02867f061a7c36f9b37f625854d4e5daac2cbf58f42d";
let solo_account = tester.solo_accounts.get(test_addr).unwrap();
assert_eq!(solo_account.nonce, 0);
assert_eq!(solo_account.consumers, 0);
assert_eq!(solo_account.providers, 1);
assert_eq!(solo_account.sufficients, 0);
assert_ne!(solo_account.data.free, 0);
assert_eq!(solo_account.data.reserved, 0);

let solo_account = tester.solo_accounts.get(test_addr).unwrap();
assert_ne!(solo_account.nonce, 0);
assert_ne!(solo_account.consumers, 0);
assert_ne!(solo_account.providers, 0);
assert_eq!(solo_account.sufficients, 0);
assert_ne!(solo_account.data.free, 0);
assert_ne!(solo_account.data.free_kton_or_misc_frozen, 0);
// after migrate

// after migrate
let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.nonce, 0);
assert_eq!(migrated_account.consumers, 0);
assert_eq!(migrated_account.providers, 1);
assert_eq!(migrated_account.sufficients, 0);
assert_eq!(migrated_account.data.free, solo_account.data.free * GWEI);
assert_eq!(migrated_account.data.reserved, 0);
}

let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.consumers, 2);
assert_eq!(solo_account.providers, migrated_account.providers);
assert_eq!(solo_account.sufficients + 1, migrated_account.sufficients);
// nonce reset
assert_eq!(migrated_account.nonce, 0);
// decimal adjust
assert_eq!(solo_account.data.free * GWEI, migrated_account.data.free);
// the kton part has been removed.
assert_eq!(migrated_account.data.free_kton_or_misc_frozen, 0);
// the kton part moved to the asset pallet
let asset_account = tester.migration_kton_accounts.get(test_addr).unwrap();
assert_eq!(asset_account.balance, solo_account.data.free_kton_or_misc_frozen * GWEI);
assert!(!asset_account.is_frozen);
// account nonce reset
{
let test_addr = "0x82e54b190ef8dbe7864b7cdca3de6b3e8b5483e0a3e9419ba2a41a16531aaa0b";
let solo_account = tester.solo_accounts.get(test_addr).unwrap();
assert_ne!(solo_account.nonce, 0);

// after migrate

let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.nonce, 0);
}

// account staking without deposit items
{
let test_addr = "0x82e54b190ef8dbe7864b7cdca3de6b3e8b5483e0a3e9419ba2a41a16531aaa0b";
let solo_account = tester.solo_accounts.get(test_addr).unwrap();
assert_eq!(solo_account.consumers, 2);

// after migrate

let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.consumers, 1);
}

// account has kton with ledger and deposit items
{
let test_addr = "0xf4171e1b64c96cc17f601f28d002cb5fcd27eab8b6585e296f4652be5bf05550";
let solo_account = tester.solo_accounts.get(test_addr).unwrap();
assert_eq!(solo_account.consumers, 3);
assert_eq!(solo_account.providers, 1);
assert_eq!(solo_account.sufficients, 0);
assert_ne!(solo_account.data.free, 0);
assert_ne!(solo_account.data.free_kton_or_misc_frozen, 0);

// after migrate

let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.consumers, 2);
assert_eq!(migrated_account.providers, 1);
assert_eq!(migrated_account.sufficients, 1);
assert_eq!(migrated_account.data.free, solo_account.data.free * GWEI);
assert_eq!(migrated_account.data.free_kton_or_misc_frozen, 0);
// the kton part moved to the asset pallet
let asset_account = tester.migration_kton_accounts.get(test_addr).unwrap();
assert_eq!(asset_account.balance, solo_account.data.free_kton_or_misc_frozen * GWEI);
assert!(!asset_account.is_frozen);
}
});
}

Expand Down Expand Up @@ -340,6 +382,45 @@ fn asset_metadata() {
});
}

#[test]
fn identities_reservation_adjust() {
run_test(|tester| {
{
// https://crab.subscan.io/account/5CXHjmXetspzSTWci8UKXnPjBeJGpibitrWX7fDDMqbggyap
let test_addr = "0x14466f29bc873ce014367d897940e3a4d4a22c1c70d83469bcd7647e921d1557";

let solo_account = tester.solo_accounts.get(test_addr).unwrap();
let remaining = tester.solo_remaining_ring.get(test_addr).unwrap();
assert_eq!(solo_account.data.reserved, 10000000000);
let total = (solo_account.data.free + solo_account.data.reserved) * GWEI + remaining;

// after migrate

let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.data.reserved, 100025800000000000000);
assert_eq!(migrated_account.data.reserved + migrated_account.data.free, total);
}

// can not afford the latest reservation amount
{
// https://crab.subscan.io/account/5HTysESF4MCRABBJ2Pmm8Sx3JrJToQgz1nwiBctGXGUKZLeP
let test_addr = "0xeeedb4805e781b16db87edc6fc2bb0982bf70a435e6a5acac37ede09131d8b8b";

let solo_account = tester.solo_accounts.get(test_addr).unwrap();
assert_ne!(solo_account.data.free, 0);
assert_eq!(solo_account.data.reserved, 10000000000);
let total = (solo_account.data.free + solo_account.data.reserved) * GWEI;

// after migrate

let migrated_account = tester.migration_accounts.get(test_addr).unwrap();
assert_eq!(migrated_account.data.free, 0);
assert_eq!(migrated_account.data.reserved, 10800000000000000000);
assert_eq!(migrated_account.data.reserved + migrated_account.data.free, total);
}
});
}

// --- EVM & Ethereum ---

#[test]
Expand Down

0 comments on commit 6aa85cd

Please sign in to comment.