#serialization #scale #arkworks #parity #wrapped #codec #traits

无std ark-scale

Arkworks序列化封装在Parity SCALE编解码器中

7个版本

0.0.12 2023年12月5日
0.0.11 2023年9月23日
0.0.10 2023年8月29日
0.0.3 2023年5月16日
0.0.2 2023年4月14日

1049魔法豆

Download history 54433/week @ 2024-03-14 66379/week @ 2024-03-21 70064/week @ 2024-03-28 84790/week @ 2024-04-04 75764/week @ 2024-04-11 66814/week @ 2024-04-18 54136/week @ 2024-04-25 52359/week @ 2024-05-02 49825/week @ 2024-05-09 48874/week @ 2024-05-16 75148/week @ 2024-05-23 64553/week @ 2024-05-30 45375/week @ 2024-06-06 54362/week @ 2024-06-13 56889/week @ 2024-06-20 39650/week @ 2024-06-27

206,513 每月下载量
17crate (10 个直接使用)

MIT/Apache

34KB
611

Arkworks序列化封装在Parity SCALE编解码器中

ArkScale(T) 可以使用 parity-scale-codec 进行序列化和反序列化,前提是 T 可以使用 ark-serialize 进行序列化和反序列化。

Arkworks 通过 std::io::{Read,Write} 特性进行序列化,或者使用这些特性的无std分支,就像其他zcash sapling衍生品一样。在其核心,Parity SCALE 编解码器也由类似 {Input,Output} 的特性组成,分别对应于 std::io::{Read,Write},以及与 ark-serialize::{CanonicalDeserialize,CanonicalSerialize} 非常相似的 {Decode,Encode} 特性。我们只需在这些极其相似的特性之间进行转换,包括适当地封装和展开错误。

ArkScale 由于孤儿规则,难以轻松实现来自 SCALE 的 MaxEncodedLenConstEncodedLen。如果您在 Frame 中使用权重,则需要这些功能,因此通常应该在 ArkScale 周围创建包装类型。一般来说,每当您选择曲线时,您都会有一个条件性的 ark-substrate 依赖,因此包装类型不应变得过于繁琐,并且它们很可能在文档、错误等方面有所改善。

ArkScale 在序列化失败时会导致 panic,因为 SCALE 不会传播序列化失败。由于缩放输出无法失败,ark-scale-derive 也不会引入失败,因此我们无法通过一些显式的 impl CanonicalSerialize for T 介入来触发此 panic,从而引入失败。因此,ArkScale 用户应负责审查其依赖中的非推导 CanonicalSerialize。特别是,arkworks/algebra 中没有新的失败。

git clone https://github.com/arkworks-rs/algebra
cd algebra
grep -r --include '*.rs' 'CanonicalSerialize for' -A 10 ff* ec* poly/ | less

如果 实现可变特质的别名 被实现,这会变得更加困难。

依赖项

~4–5MB
~107K SLoC