mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-16 12:01:12 +00:00
002d9260f9
**Update:** Pushed additional changes based on the review comments. **This pull request fixes various spelling mistakes in this repository.** Most of the changes are contained in the first **3** commits: - `Fix spelling mistakes in comments and docs` - `Fix spelling mistakes in test names` - `Fix spelling mistakes in error messages, panic messages, logs and tracing` Other source code spelling mistakes are separated into individual commits for easier reviewing: - `Fix the spelling of 'authority'` - `Fix the spelling of 'REASONABLE_HEADERS_IN_JUSTIFICATION_ANCESTRY'` - `Fix the spelling of 'prev_enqueud_messages'` - `Fix the spelling of 'endpoint'` - `Fix the spelling of 'children'` - `Fix the spelling of 'PenpalSiblingSovereignAccount'` - `Fix the spelling of 'PenpalSudoAccount'` - `Fix the spelling of 'insufficient'` - `Fix the spelling of 'PalletXcmExtrinsicsBenchmark'` - `Fix the spelling of 'subtracted'` - `Fix the spelling of 'CandidatePendingAvailability'` - `Fix the spelling of 'exclusive'` - `Fix the spelling of 'until'` - `Fix the spelling of 'discriminator'` - `Fix the spelling of 'nonexistent'` - `Fix the spelling of 'subsystem'` - `Fix the spelling of 'indices'` - `Fix the spelling of 'committed'` - `Fix the spelling of 'topology'` - `Fix the spelling of 'response'` - `Fix the spelling of 'beneficiary'` - `Fix the spelling of 'formatted'` - `Fix the spelling of 'UNKNOWN_PROOF_REQUEST'` - `Fix the spelling of 'succeeded'` - `Fix the spelling of 'reopened'` - `Fix the spelling of 'proposer'` - `Fix the spelling of 'InstantiationNonce'` - `Fix the spelling of 'depositor'` - `Fix the spelling of 'expiration'` - `Fix the spelling of 'phantom'` - `Fix the spelling of 'AggregatedKeyValue'` - `Fix the spelling of 'randomness'` - `Fix the spelling of 'defendant'` - `Fix the spelling of 'AquaticMammal'` - `Fix the spelling of 'transactions'` - `Fix the spelling of 'PassingTracingSubscriber'` - `Fix the spelling of 'TxSignaturePayload'` - `Fix the spelling of 'versioning'` - `Fix the spelling of 'descendant'` - `Fix the spelling of 'overridden'` - `Fix the spelling of 'network'` Let me know if this structure is adequate. **Note:** The usage of the words `Merkle`, `Merkelize`, `Merklization`, `Merkelization`, `Merkleization`, is somewhat inconsistent but I left it as it is. ~~**Note:** In some places the term `Receival` is used to refer to message reception, IMO `Reception` is the correct word here, but I left it as it is.~~ ~~**Note:** In some places the term `Overlayed` is used instead of the more acceptable version `Overlaid` but I also left it as it is.~~ ~~**Note:** In some places the term `Applyable` is used instead of the correct version `Applicable` but I also left it as it is.~~ **Note:** Some usage of British vs American english e.g. `judgement` vs `judgment`, `initialise` vs `initialize`, `optimise` vs `optimize` etc. are both present in different places, but I suppose that's understandable given the number of contributors. ~~**Note:** There is a spelling mistake in `.github/CODEOWNERS` but it triggers errors in CI when I make changes to it, so I left it as it is.~~
150 lines
4.6 KiB
Rust
150 lines
4.6 KiB
Rust
// This file is part of Substrate.
|
|
|
|
// Copyright (C) Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Tests for transaction-storage pallet.
|
|
|
|
use super::{Pallet as TransactionStorage, *};
|
|
use crate::mock::*;
|
|
use frame_support::{assert_noop, assert_ok};
|
|
use frame_system::RawOrigin;
|
|
use sp_runtime::{DispatchError, TokenError::FundsUnavailable};
|
|
use sp_transaction_storage_proof::registration::build_proof;
|
|
|
|
const MAX_DATA_SIZE: u32 = DEFAULT_MAX_TRANSACTION_SIZE;
|
|
|
|
#[test]
|
|
fn discards_data() {
|
|
new_test_ext().execute_with(|| {
|
|
run_to_block(1, || None);
|
|
let caller = 1;
|
|
assert_ok!(TransactionStorage::<Test>::store(
|
|
RawOrigin::Signed(caller).into(),
|
|
vec![0u8; 2000 as usize]
|
|
));
|
|
assert_ok!(TransactionStorage::<Test>::store(
|
|
RawOrigin::Signed(caller).into(),
|
|
vec![0u8; 2000 as usize]
|
|
));
|
|
let proof_provider = || {
|
|
let block_num = <frame_system::Pallet<Test>>::block_number();
|
|
if block_num == 11 {
|
|
let parent_hash = <frame_system::Pallet<Test>>::parent_hash();
|
|
Some(
|
|
build_proof(parent_hash.as_ref(), vec![vec![0u8; 2000], vec![0u8; 2000]])
|
|
.unwrap(),
|
|
)
|
|
} else {
|
|
None
|
|
}
|
|
};
|
|
run_to_block(11, proof_provider);
|
|
assert!(Transactions::<Test>::get(1).is_some());
|
|
let transactions = Transactions::<Test>::get(1).unwrap();
|
|
assert_eq!(transactions.len(), 2);
|
|
assert_eq!(ChunkCount::<Test>::get(1), 16);
|
|
run_to_block(12, proof_provider);
|
|
assert!(Transactions::<Test>::get(1).is_none());
|
|
assert_eq!(ChunkCount::<Test>::get(1), 0);
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn burns_fee() {
|
|
new_test_ext().execute_with(|| {
|
|
run_to_block(1, || None);
|
|
let caller = 1;
|
|
assert_noop!(
|
|
TransactionStorage::<Test>::store(
|
|
RawOrigin::Signed(5).into(),
|
|
vec![0u8; 2000 as usize]
|
|
),
|
|
DispatchError::Token(FundsUnavailable),
|
|
);
|
|
assert_ok!(TransactionStorage::<Test>::store(
|
|
RawOrigin::Signed(caller).into(),
|
|
vec![0u8; 2000 as usize]
|
|
));
|
|
assert_eq!(Balances::free_balance(1), 1_000_000_000 - 2000 * 2 - 200);
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn checks_proof() {
|
|
new_test_ext().execute_with(|| {
|
|
run_to_block(1, || None);
|
|
let caller = 1;
|
|
assert_ok!(TransactionStorage::<Test>::store(
|
|
RawOrigin::Signed(caller).into(),
|
|
vec![0u8; MAX_DATA_SIZE as usize]
|
|
));
|
|
run_to_block(10, || None);
|
|
let parent_hash = <frame_system::Pallet<Test>>::parent_hash();
|
|
let proof =
|
|
build_proof(parent_hash.as_ref(), vec![vec![0u8; MAX_DATA_SIZE as usize]]).unwrap();
|
|
assert_noop!(
|
|
TransactionStorage::<Test>::check_proof(RuntimeOrigin::none(), proof,),
|
|
Error::<Test>::UnexpectedProof,
|
|
);
|
|
run_to_block(11, || None);
|
|
let parent_hash = <frame_system::Pallet<Test>>::parent_hash();
|
|
|
|
let invalid_proof = build_proof(parent_hash.as_ref(), vec![vec![0u8; 1000]]).unwrap();
|
|
assert_noop!(
|
|
TransactionStorage::<Test>::check_proof(RuntimeOrigin::none(), invalid_proof,),
|
|
Error::<Test>::InvalidProof,
|
|
);
|
|
|
|
let proof =
|
|
build_proof(parent_hash.as_ref(), vec![vec![0u8; MAX_DATA_SIZE as usize]]).unwrap();
|
|
assert_ok!(TransactionStorage::<Test>::check_proof(RuntimeOrigin::none(), proof));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn renews_data() {
|
|
new_test_ext().execute_with(|| {
|
|
run_to_block(1, || None);
|
|
let caller = 1;
|
|
assert_ok!(TransactionStorage::<Test>::store(
|
|
RawOrigin::Signed(caller).into(),
|
|
vec![0u8; 2000]
|
|
));
|
|
let info = BlockTransactions::<Test>::get().last().unwrap().clone();
|
|
run_to_block(6, || None);
|
|
assert_ok!(TransactionStorage::<Test>::renew(
|
|
RawOrigin::Signed(caller).into(),
|
|
1, // block
|
|
0, // transaction
|
|
));
|
|
assert_eq!(Balances::free_balance(1), 1_000_000_000 - 4000 * 2 - 200 * 2);
|
|
let proof_provider = || {
|
|
let block_num = <frame_system::Pallet<Test>>::block_number();
|
|
if block_num == 11 || block_num == 16 {
|
|
let parent_hash = <frame_system::Pallet<Test>>::parent_hash();
|
|
Some(build_proof(parent_hash.as_ref(), vec![vec![0u8; 2000]]).unwrap())
|
|
} else {
|
|
None
|
|
}
|
|
};
|
|
run_to_block(16, proof_provider);
|
|
assert!(Transactions::<Test>::get(1).is_none());
|
|
assert_eq!(Transactions::<Test>::get(6).unwrap().get(0), Some(info).as_ref());
|
|
run_to_block(17, proof_provider);
|
|
assert!(Transactions::<Test>::get(6).is_none());
|
|
});
|
|
}
|