[英]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.whatever
或program.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.