1

構造体を pub mod xyz {...} 内に移動した後、My Rust コード:

#[state]
#[derive(Default)]
#[derive(Copy)]//index as pid
pub struct Ppool {
  pub alloc_point: u64,
}
#[state]
pub struct Counter {
    pub authority: Pubkey,
    pub count: u64,
    pub pool_array: [Ppool; 20],
}

impl Counter {
    pub fn new(ctx: Context<Auth>) -> Result<Self> {
        Ok(Self {
            authority: *ctx.accounts.authority.key,
            count: 0,
            pool_array: [
              Ppool {
              alloc_point: 0,
            }; 20],
        })
    }

私のRustプログラムはコンパイルできますが、アンカーはエラーで実行されません:

await program.state.rpc.new({
  accounts: {
    authority: provider.wallet.publicKey,
  },
});

TypeError: 未定義のプロパティ 'rpc' を読み取れません

私はこのチュートリアル Basic1: https://project-serum.github.io/anchor/tutorials/tutorial-1.html#defining-a-programから知っています。命令ハンドラへの入力の場合、#[program] モジュールと同じ src/lib.rs ファイルで定義して、IDL パーサーがそれを取得できるようにする必要があります。」、および状態構造体に関するチュートリアル Basic4...

さらに、Ppool 構造体を mod の外に移動すると、Rust はコンパイルされますが、Anchor は「エラー: ユーザー定義型が提供されていません」と言うので、Ppool 構造体は mod 内にとどめるべきだと思います

しかし、私の Ppool 構造体を mod に移動した後、私の Ppool 構造体は #[state] を持つことができません ... 以下のエラーを参照してください:

error[E0277]: the trait bound Ppool: Clone is not satisfied
--> programs/basic-4/src/lib.rs:11:14
|
11 | #[derive(Copy)]//index as pid
| ^^^^ the trait Clone is not implemented for Ppool
|
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound Ppool: anchor_lang::AnchorDeserialize is not satisfied
--> programs/basic-4/src/lib.rs:16:5
|
16 | #[state]
| ^^^^^^^^ the trait anchor_lang::AnchorDeserialize is not implemented for Ppool
|
= note: required because of the requirements on the impl of anchor_lang::AnchorDeserialize for [Ppool; 20]
= help: see issue #48214
= help: add #![feature(trivial_bounds)] to the crate attributes to enable
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound Ppool: anchor_lang::AnchorSerialize is not satisfied
--> programs/basic-4/src/lib.rs:16:5
|
16 | #[state]
| ^^^^^^^^ the trait anchor_lang::AnchorSerialize is not implemented for Ppool
|
= note: required because of the requirements on the impl of anchor_lang::AnchorSerialize for [Ppool; 20]
= help: see issue #48214
= help: add #![feature(trivial_bounds)] to the crate attributes to enable
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

mod 内の Ppool 構造体にどのようなマクロを追加すればよいですか?

4

1 に答える 1