Skip to content
Snippets Groups Projects
  • 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 <linningde25@gmail.com>
    Unverified
    5bc571b0
Code owners
Assign users and groups as approvers for specific file changes. Learn more.