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 在 魔法豆
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 的 MaxEncodedLen
或 ConstEncodedLen
。如果您在 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