将 Solana PDA 相互连接

All*_*ing 4 rust solana anchor-solana

我使用 Solana PDA 构建类似哈希图的结构,使用用户的钱包地址作为种子之一。PDA 称为 MyNodes,包含一些特定于用户的数据,包括应计奖励。

现在我正在尝试建立一个推荐系统。我有一个用户的 MyNodes PDA,并且我想将另一个用户的 PDA 的地址存储在第一个 PDA 中。因此,一个用户的 PDA 将指向另一用户的 PDA,即其“推荐人”或“附属机构”。我需要这种联系,以便为推荐者和被推荐者正确处理联属奖励。

但是,当尝试使用锚点构建帐户结构时,我遇到了问题。

#[account]
pub struct MyNodes {
    xyz: u32,
    abc: u32,
    etc: u64,
    aff_account: Account<MyNodes>,
}
Run Code Online (Sandbox Code Playgroud)

但它给出了我的编译错误:

BPF SDK: /Users/bb/solana/bin/sdk/bpf
cargo-build-bpf child: rustup toolchain list -v
cargo-build-bpf child: cargo +bpf build --target bpfel-unknown-unknown --release
warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
package:   /Users/bb/app/nodestore/programs/nodeshop/Cargo.toml
workspace: /Users/bb/app/nodestore/Cargo.toml
   Compiling nodeshop v0.1.0 (/Users/bb/app/nodestore/programs/nodeshop)
error[E0106]: missing lifetime specifier
   --> programs/nodeshop/src/lib.rs:129:26
    |
129 |     aff_account: Account<MyNodes>,
    |                          ^ expected named lifetime parameter
    |
help: consider introducing a named lifetime parameter
    |
123 ~ pub struct MyNodes<'a> {
128 |     last_unclaimed: u64,
  ...

error[E0106]: missing lifetime specifier
   --> programs/nodeshop/src/lib.rs:129:26
    |
129 |     aff_account: Account<MyNodes>,
    |                          ^ expected named lifetime parameter
    |
help: consider introducing a named lifetime parameter
    |
122 ~ #[account]<'a>
123 | pub struct MyNodes {
  ...

For more information about this error, try `rustc --explain E0106`.
error: could not compile `nodeshop` due to 3 previous errors

Run Code Online (Sandbox Code Playgroud)

编译器的建议都不起作用。会导致新的错误。

如何使用 Anchor 正确地将 PDA 相互链接?

per*_*ish 6

您可以存储其他PDA的Pubkey,并在指令中传递Pubkey来访问数据