paritytech / parity-common

Collection of crates used in Parity projects
https://www.paritytech.io/
Apache License 2.0
290 stars 218 forks source link

Implement BoundedVec with bound on both end #779

Open sudipghimire533 opened 1 year ago

sudipghimire533 commented 1 year ago

Is there an existing issue?

Experiencing problems? Have you tried our Stack Exchange first?

Motivation

BoundedVec will not only bound its size in maximum limit but there shall also be minimum limit. This is useful in many case where pallet is expecting a vector within certain bounds eg: Some Name shall be greater than 3 element long but less than 500 and so on

Request

Extend BoundedVec implementation in frame_support to include another type Paramater LowerBound and all the operation in BoundedVec gurantee this bound ( and also the current upperbound ).

If required, default LowerBound can be 0 so it does not change the behavior in places where lower bound is not required

Solution

Explain Above

( I can also take the responsibility to implement and raise the PR, but first i need confirmation if everyone else thinks this is worth having )

Are you willing to help with this request?

Yes!

sudipghimire533 commented 1 year ago

If changing the implementation of Current BoundedVec is problematic we can also create new struct DoubleBoundedVec to wrap BoundedVec and inner limit

xlc commented 1 year ago

You should implement DoubleBoundedVec (I don't like this name but also can't think of a better one) and then implement BoundedVec on top of it. This way we can minimize the breaking change (no breaking change for existing BondedVec user) and code duplications.