使用 solana program deploy 在 testnet/devnet 部署程序时会失败(部署到 localhost 没问题),并报如下错误
thread 'main' panicked at cli/src/program.rs:2809:26:
Should return a valid tpu client: PubsubError(ConnectionError(Io(Os { code: 60, kind: TimedOut, message: "Operation timed out" })))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
CLI 选用 v1.18.18 或以上。
可供安装的版本列表: https://github.com/solana-labs/solana/releases
CLI 安装命令: sh -c "$(curl -sSfL https://release.solana.com/v1.18.18/install)"
查看当前安装的 CLI 版本: solana --version
选择一个可靠的的 RPC node
节点选择可以参考: https://soldev.cn/topics/14
设置 solana CLI 默认的 RPC_URL: solana config set --url <RPC_URL>
使用 --with-compute-unit-price 参数,设置一个合适的优先费。
优先费的数值可以参考: https://www.quicknode.com/gas-tracker/solana
部署程序的完整命令为 (如果在步骤 2 中已经设置了默认的 RPC_URL,--url 可以省略)。
solana program deploy <PROGRAM_FILEPATH> --with-compute-unit-price <compute-unit-price> --url <RPC_URL>
https://solana.com/docs/core/fees#prioritization-fees
solana 中每笔交易除了固定的签名费用之外,还可以设置一项可选费用"Prioritization fee"称为"优先费"。可以提高交易相对于其他交易的优先级,从而缩短执行时间。
//rust solana-sdk crate
let instruction = ComputeBudgetInstruction::set_compute_unit_limit(300_000);
let instruction = ComputeBudgetInstruction::set_compute_unit_price(1);
//@solana/web3.js
const instruction = ComputeBudgetProgram.setComputeUnitLimit({
units: 300_000,
});
const instruction = ComputeBudgetProgram.setComputeUnitPrice({
microLamports: 1,
});