我正在尝试反序列化数组:
pixels: [(Pubkey, u8); 1_000 * 1_000],
我添加了以下板条箱属性:
#![feature(trivial_bounds)]
以下是编译错误:
|
76 | #[account]
| ^^^^^^^^^^ the trait `BorshSerialize` is not implemented for `[(anchor_lang::prelude::Pubkey, u8); 1000000]`
|
::: /home/vedantroy/.cargo/registry/src/github.com-1ecc6299db9ec823/borsh-0.9.1/src/ser/mod.rs:44:18
|
44 | fn serialize<W: Write>(&self, writer: &mut W) -> Result<()>;
| - required by this bound in `anchor_lang::AnchorSerialize::serialize`
|
= help: the following implementations were found:
<[T; 0] as BorshSerialize>
<[T; 1024] as BorshSerialize>
<[T; 10] as BorshSerialize>
<[T; 11] as BorshSerialize>
and 37 others
= note: required because of the requirements on the impl of `BorshSerialize` for `GameState`
= note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0277]: the trait bound `[(anchor_lang::prelude::Pubkey, u8); 1000000]: BorshDeserialize` is not satisfied
--> programs/auction/src/lib.rs:76:1
|
76 | #[account]
| ^^^^^^^^^^ the trait `BorshDeserialize` is not implemented for `[(anchor_lang::prelude::Pubkey, u8); 1000000]`
|
= help: the following implementations were found:
<[T; 0] as BorshDeserialize>
<[T; 1024] as BorshDeserialize>
<[T; 10] as BorshDeserialize>
<[T; 11] as BorshDeserialize>
and 36 others
= note: required because of the requirements on the impl of `BorshDeserialize` for `GameState`
= note: required by `anchor_lang::AnchorDeserialize::deserialize`
= note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0277`.
error: could not compile `auction`
是否可以使用Borsh反序列化数组?
在旧版本的RustBorshSerialize
/BorshDeserialize
上,实现了各种数组大小,但不是所有数组大小(这需要const泛型(。这已经稳定下来了,但我想他们不想提高Rust版本的最低要求。
如果您在Cargo.toml中指定了const-generics
功能,这应该会起作用:
borsh = { version = "0.9", features = ["const-generics"] }
也就是说,拥有这样一个非常大的数组通常会因为堆栈溢出而在你的脸上爆炸,所以我建议把它变成Vec<(PubKey, u8)>
。