diff --git a/substrate/primitives/arithmetic/src/biguint.rs b/substrate/primitives/arithmetic/src/biguint.rs
index 906c4d0cfd316f25e33dcda5d0ece117daf07e8f..bfbd57f57013bd4b55b71312e25bb6a6e386d636 100644
--- a/substrate/primitives/arithmetic/src/biguint.rs
+++ b/substrate/primitives/arithmetic/src/biguint.rs
@@ -19,6 +19,7 @@
 
 use num_traits::{Zero, One};
 use sp_std::{cmp::Ordering, ops, prelude::*, vec, cell::RefCell, convert::TryFrom};
+use codec::{Encode, Decode};
 
 // A sensible value for this would be half of the dword size of the host machine. Since the
 // runtime is compiled to 32bit webassembly, using 32 and 64 for single and double respectively
@@ -78,7 +79,7 @@ fn div_single(a: Double, b: Single) -> (Double, Single) {
 }
 
 /// Simple wrapper around an infinitely large integer, represented as limbs of [`Single`].
-#[derive(Clone, Default)]
+#[derive(Encode, Decode, Clone, Default)]
 pub struct BigUint {
 	/// digits (limbs) of this number (sorted as msb -> lsb).
 	pub(crate) digits: Vec<Single>,