Expand description
§Arkworks serialization wrapped in Parity SCALE codec
ArkScale(T)
can be serialized or deserialized using parity-scale-codec,
provided T
can be serialized or deserialized using ark-serialize.
Arkworks serializes via the std::io::{Read,Write}
traits, or its
no_std fork of those traits, as do other zcash sapling derivatives.
At its core, Parity SCALE codec also consists of traits {Input,Output}
analogous to std::io::{Read,Write}
respectively, as well as traits
{Decode,Encode}
also quite similar to
ark-serialize::{CanonicalDeserialize,CanonicalSerialize}
.
We simply translate between these extremely similar traits, including
wrapping and unwrapping errors appropriately.
ArkScale
cannot easily implement MaxEncodedLen
or ConstEncodedLen
from SCALE, due to the orphan rules. You’ll need these if using weights
in Frame, so you should usually create wrapper types around ArkScale
.
As a rule, anytime you choose curves then you’ll have a conditionanl
ark-substrate dependence anyways, so wrapper types should not become
too onerous, and they likely improve documentation, errors, etc anyways.
ArkScale
panics if serialization fails because SCALE does not propogate
serialization failures. As scale outputs cannot fail, and ark-scale-derive
does not introduce failures, we therefore cannot trigger this panic except
by some explicit impl CanonicalSerialize for T
intrpducing a failure.
ArkScale
users should therefore be responcible for reviewing non-derived
CanonicalSerialize
in their dependencies. In particular, there are no
fresh failures in arkworks/algebra:
git clone https://github.com/arkworks-rs/algebra
cd algebra
grep -r --include '*.rs' 'CanonicalSerialize for' -A 10 ff* ec* poly/ | less
This becomes slightly harder if Implementable trait aliases lands.
Re-exports§
pub use ark_serialize;
pub use scale_codec as scale;
Modules§
Macros§
- impl_
body_ max_ encode_ len - Implement body of
scale::MaxEncodedLen
by delegation toark_std::Zero
andCanonicalSerialize
, usable from polymorphic code. - impl_
decode_ via_ ark - Implement body of
scale::Decode
by delegation toArkScale
, usable from polymorphic code. - impl_
encode_ via_ ark - Implement body of
scale::Encode
by delegation toArkScale
, usable from polymorphic code. - impl_
scale_ via_ ark - Implement
scale::{Encode,Decode}
by delegation toArkScale
, but lacks support for polymorphic code.
Structs§
- ArkScale
- Arkworks type wrapped for serialization by Scale
- ArkScale
Len - Arkworks type wrapped for serialization by Scale
- ArkScale
Ref
Constants§
- HOST_
CALL - ArkScale usage which neither compresses nor validates inputs, only for usage in host calls and on-chain storage where the runtime already performed validation checks.
- WIRE
- ArkScale usage for typical wire formats, like block data and gossip messages. Always safe.
Traits§
- ArkScale
MaxEncoded Len - An orphan rules helper which provides
impl scale::MaxEncodedLen for ArkScale<T,WIRE>
- MaxEncoded
Len - Items implementing
MaxEncodedLen
have a statically known maximum encoded size.
Functions§
- is_
compressed - is_
validated - iter_
ark_ to_ ark_ bytes - Arkworks’
CanonicalSerialize
cannot consumeIterator
s directly, butiter_ark_to_ark_bytes
serializes exactly likeVec<T>
,&'a [T]
, or[T]
do withCanonicalSerialize
. - iter_
ark_ to_ scale_ bytes - Arkworks’
CanonicalSerialize
cannot consumeIterator
s directly, butiter_ark_to_scale_bytes
serializes exactly likeArkScale(Vec<T>)
,ArkScale(&'a [T])
, orArkScale([T])
do underparity_scale_codec::Encode
. - make_
usage - Arkworks’ serialization modes hack.
Type Aliases§
- Usage
- Arkworks’ serialization modes, morally (Compress, Validate) but
const generics only supports integers,
bool
andchar
right now.
Derive Macros§
- MaxEncoded
Len - Derive
parity_scale_codec::MaxEncodedLen
for struct and enum.