簡體   English   中英

如何強制 Solana/Anchor 方法使用 de.net?

[英]How do I force Solana/Anchor methods to use the devnet?

在創建一個簡單的程序時,我無法讓 Solana 將 de.net 用於其 RPC 連接。 我不斷收到以下錯誤:

{
  blockhash: '7TTVjRKApwAqP1SA7vZ2tQHuh6QbnToSmVUA9kc7amEY',
  lastValidBlockHeight: 129662699
}
Error: failed to get recent blockhash: FetchError: request to http://localhost:8899/ failed, reason: connect ECONNREFUSED 127.0.0.1:8899
    at Connection.getRecentBlockhash (/home/simeon/dev/freelance/niels_vacancies/node_modules/@solana/web3.js/lib/index.cjs.js:6584:13)

即使我已經設置了所有可設置的常量,如ANCHOR_PROVIDER_URL=https://api.de.net.solana.com ,或我的 Anchor.toml 文件中的相關條目。 我還明確指定以下內容:

const connection = new anchor.web3.Connection("https://api.devnet.solana.com/", {commitment: "max"});
const wallet = anchor.Wallet.local();

const provider = new anchor.Provider(
    connection,
    wallet,
    {
        commitment: "max",
        preflightCommitment: "max",
        skipPreflight: false
    }
)

我什至測試console.log(await anchor.getProvider().connection.getLatestBlockhash()); 以確保我實際上可以從 de.net 獲得區塊哈希。 我可以做些什么來強制 RPC 調用也這樣做?

您只需將Anchor.toml集群設置為 devnet 和programs.devnet ,然后使用帶有 devnet-sol 的錢包部署程序。 我將為 devnet 刪除一個Anchor.toml

[features]
seeds = false
[programs.devnet]
first_program = "FPT...bd3"

[registry]
url = "https://anchor.projectserum.com"

[provider]
cluster = "devnet"
wallet = "PATH/TO/WALLET/WHO/WILL/PAY/FOR/DEPLOY.json"

[scripts]
test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"

在這種情況下, first_program是在declare_id宏上聲明的program_id

然后你可以使用你的測試文件完全正常的anchor.setProvider(anchor.Provider.env());

如果您已經將 anchor.toml 更新為使用 de.net,並且在使用program.provider.connection.whateverprogram.account.whatever.fetch.whatever時遇到這個問題,請確保在創建之前設置了錨點提供程序程序,例如:

  const provider = AnchorProvider.env();
  anchor.setProvider(provider);

必須在const program: Program<Whatever> = workspace.Whatever;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM