1

我正在按照这篇文章作为练习。

ts-node packages/cli/src/candy-machine-cli.ts verify --env devnet --keypair "C:\Windows\System32\~\.config\solana\devnet.json"

在尝试验证糖果机时,我遇到了

TypeError:无法在 isPublicKeyData (C:\Users\my-userName\Source\Repos\metaplex\js\node_modules@solana\web3.js\src\publickey.ts:29:35 读取未定义的属性(读取'_bn') ) 在 C:\Users\my-userName\ 的新 PublicKey (C:\Users\my-userName\Source\Repos\metaplex\js\node_modules@solana\web3.js\src\publickey.ts:45:9) Source\Repos\metaplex\js\packages\cli\src\candy-machine-cli.ts:326:27 在步骤(C:\Users\my-userName\Source\Repos\metaplex\js\packages\cli\src \candy-machine-cli.ts:64:23) 在 Object.next (C:\Users\my-userName\Source\Repos\metaplex\js\packages\cli\src\candy-machine-cli.ts:45 :53) 在 processTicksAndRejections (node:internal/process/任务队列:96:5)

在网上快速搜索,有人说我需要先创建糖果机。所以我跑了

ts-node packages/cli/src/candy-machine-cli.ts create_candy_machine --env devnet --keypair "C:\Windows\System32\~\.config\solana\devnet.json"

但它给了我同样的错误。

感谢有关我如何解决此问题的任何建议。

4

3 回答 3

1

在尝试解决另一个问题时,我发现问题与ts-node我使用的版本有关。

使用以下命令更新后问题解决

npm i ts-node@latest
于 2021-12-11T17:13:03.103 回答
1

对于从现在开始看到此内容的任何人(至少在任何其他更新使其过时之前),您也可能会收到此错误,因为您正在尝试创建 Candy Machine v1,我在 Metaplex discord 上被告知不会工作了。

确保您遵循使用 v2 的步骤(截至我写这篇文章的日期),如此处的官方文档中所述:https ://docs.metaplex.com/candy-machine-v2/configuration 。您只需对 v2 包使用不同的命令。

查看文档以确认您已准备好,但作为保证,如果您的资产已设置并准备就绪,请从第 2 步配置开始(您可以在任何地方创建配置文件,只要您粘贴正确的到它的路径),然后转到第 4 步。

于 2022-02-10T18:17:57.537 回答
1

您需要提供一个公钥getNameAccountKey,例如

import { Connection, PublicKey } from '@solana/web3.js';
import { getHashedName, getNameAccountKey, NameRegistryState } from '@solana/spl-name-service';
...
class SomeClass {

  constructor(private readonly configService: ConfigService) {
    this.publicKey = new PublicKey(
      this.configService.get('SOLANA_NAME_SERVICE_PUBLIC_KEY'), // that public key taken from `.env` config file
    );
  }

  ...

  private async resolveSnsName(name: string, connection: Connection): Promise<string> {
    try {
      const parsedName = name.replace('.sol', '');
      const hashedName = await getHashedName(parsedName);
      const domainKey = await getNameAccountKey(hashedName, undefined, this.publicKey);
      const registry = await NameRegistryState.retrieve(connection, domainKey);
      return registry.owner.toBase58();
    } catch {
      return null;
    }
  }
}
于 2022-01-25T21:18:57.717 回答