Skip to content
  1. Nov 14, 2024
    • NingLin-P's avatar
      Support more types in TypeWithDefault (#6411) · 5bc571b0
      NingLin-P authored
      
      
      # Description
      
      When using `TypeWithDefault<u32, ..>` as the default nonce provider to
      overcome the [replay
      attack](https://wiki.polkadot.network/docs/transaction-attacks#replay-attack)
      issue, it fails to compile due to `TypeWithDefault<u32, ..>:
      TryFrom<u64>` is not satisfied (which is required by trait
      `BaseArithmetic`).
      
      This is because the blanket implementation `TryFrom<U> for T where U:
      Into<T>` only impl `TryFrom<u16>` and `TryFrom<u8>` for `u32` since
      `u32` only impl `Into` for `u16` and `u8` but not `u64`.
      
      This PR fixes the issue by adding `TryFrom<u16/u32/u64/u128>` and
      `From<u8/u16/u32/u64/u128>` impl (using macro) for
      `TypeWithDefault<u8/u16/u32/u64/u128, ..>` and removing the blanket impl
      (otherwise the compiler will complain about conflicting impl), such that
      `TypeWithDefault<u8/u16/u32/u64/u128, ..>: AtLeast8/16/32Bit` is
      satisfied.
      
      ## Integration
      
      This PR adds support to more types to be used with `TypeWithDefault`,
      existing code that used `u64` with `TypeWithDefault` should not be
      affected, an unit test is added to ensure that.
      
      ## Review Notes
      
      This PR simply makes `TypeWithDefault<u8/u16/u32/u64/u128, ..>:
      AtLeast8/16/32Bit` satisfied
      
      ---------
      
      Signed-off-by: default avatarlinning <[email protected]>
      5bc571b0