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
1export const bobsPublicKey = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty';1export const bobsPublicKey = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty';
2export const alicesPublicKey = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY';2export const alicesPublicKey = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY';
3export const ferdiesPublicKey = '5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL';
34
modifiedtests/src/transfer.test.tsdiffbeforeafterboth
--- a/tests/src/transfer.test.ts
+++ b/tests/src/transfer.test.ts
@@ -1,6 +1,6 @@
-import { expect } from "chai";
+import { expect, assert } from "chai";
 import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api";
-import { alicesPublicKey, bobsPublicKey } from "./accounts";
+import { alicesPublicKey, bobsPublicKey, ferdiesPublicKey } from "./accounts";
 import privateKey from "./substrate/privateKey";
 import getBalance from "./substrate/get-balance";
 
@@ -20,4 +20,22 @@
       expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;
     });
   });
+
+  it('Inability to pay fees error message is correct', async () => {
+    await usingApi(async api => {
+      const pk = privateKey('//Ferdie');
+
+      console.log = function () {};
+      console.error = function () {};
+  
+      const badTransfer = api.tx.balances.transfer(bobsPublicKey, 1n);
+      const badTransaction = async function () { 
+        const result = await submitTransactionAsync(pk, badTransfer);
+      };
+      await expect(badTransaction()).to.be.rejectedWith("Inability to pay some fees");
+
+      delete console.log;
+      delete console.error;
+    });
+  });
 });