git.delta.rocks / unique-network / refs/commits / 8e203a5f1b32

difftreelog

Merge pull request #42 from usetech-llc/feature/NFTPAR-197_errors_in_ui

str-mv2020-12-21parents: #ed290c7 #7481ebb.patch.diff
in: master
Fix tx validity check in signed extension (NFTPAR-197)

3 files changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -29,10 +29,10 @@
 use sp_runtime::sp_std::prelude::Vec;
 use sp_runtime::{
     traits::{
-        DispatchInfoOf, Dispatchable, PostDispatchInfoOf, Saturating, SignedExtension, Zero,
+        DispatchInfoOf, Dispatchable, PostDispatchInfoOf, Saturating, SaturatedConversion, SignedExtension, Zero,
     },
     transaction_validity::{
-        InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction,
+        TransactionPriority, InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction,
     },
     FixedPointOperand, FixedU128,
 };
@@ -2302,6 +2302,13 @@
         <transaction_payment::Module<T>>::compute_fee(len as u32, info, tip)
     }
 
+	fn get_priority(len: usize, info: &DispatchInfoOf<T::Call>, final_fee: BalanceOf<T>) -> TransactionPriority {
+		let weight_saturation = T::MaximumBlockWeight::get() / info.weight.max(1);
+		let len_saturation = T::MaximumBlockLength::get() as u64 / (len as u64).max(1);
+		let coefficient: BalanceOf<T> = weight_saturation.min(len_saturation).saturated_into::<BalanceOf<T>>();
+		final_fee.saturating_mul(coefficient).saturated_into::<TransactionPriority>()
+	}
+
     fn withdraw_fee(
         &self,
         who: &T::AccountId,
@@ -2525,12 +2532,16 @@
 
     fn validate(
         &self,
-        _who: &Self::AccountId,
-        _call: &Self::Call,
-        _info: &DispatchInfoOf<Self::Call>,
-        _len: usize,
+        who: &Self::AccountId,
+        call: &Self::Call,
+        info: &DispatchInfoOf<Self::Call>,
+        len: usize,
     ) -> TransactionValidity {
-        Ok(ValidTransaction::default())
+		let (fee, _) = self.withdraw_fee(who, call, info, len)?;
+		Ok(ValidTransaction {
+			priority: Self::get_priority(len, info, fee),
+			..Default::default()
+		})
     }
 
     fn pre_dispatch(
modifiedtests/src/accounts.tsdiffbeforeafterboth
--- a/tests/src/accounts.ts
+++ b/tests/src/accounts.ts
@@ -1,2 +1,3 @@
 export const bobsPublicKey = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty';
 export const alicesPublicKey = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY';
+export const ferdiesPublicKey = '5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL';
modifiedtests/src/transfer.test.tsdiffbeforeafterboth
1import { expect } from "chai";1import { expect, assert } from "chai";
2import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api";2import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api";
3import { alicesPublicKey, bobsPublicKey } from "./accounts";3import { alicesPublicKey, bobsPublicKey, ferdiesPublicKey } from "./accounts";
4import privateKey from "./substrate/privateKey";4import privateKey from "./substrate/privateKey";
5import getBalance from "./substrate/get-balance";5import getBalance from "./substrate/get-balance";
66
21 });21 });
22 });22 });
23
24 it('Inability to pay fees error message is correct', async () => {
25 await usingApi(async api => {
26 const pk = privateKey('//Ferdie');
27
28 console.log = function () {};
29 console.error = function () {};
30
31 const badTransfer = api.tx.balances.transfer(bobsPublicKey, 1n);
32 const badTransaction = async function () {
33 const result = await submitTransactionAsync(pk, badTransfer);
34 };
35 await expect(badTransaction()).to.be.rejectedWith("Inability to pay some fees");
36
37 delete console.log;
38 delete console.error;
39 });
40 });
23});41});
2442