solana-test-validator 部署失败。区块哈希过期

solana-test-validator deploy fail. Blockhash expired

我正在尝试在本地 solana-test-validator 上部署一个简单的程序

我启动验证器

docker run -it --entrypoint solana-test-validator -p 8899:8899 -p 8900:8900 -p 9900:9900 solanalabs/solana:v1.8.11

然后我用一个钱包创建了一个账户,里面有一些 SOL

solana config set --url http://localhost:8899
KEYPAIR_ACCOUNT1="/root/.config/solana/id1.json"
solana-keygen new -o $KEYPAIR_ACCOUNT1 --force
PUBKEY_ACCOUNT1=`solana-keygen pubkey $KEYPAIR_ACCOUNT1`
solana-keygen verify $PUBKEY_ACCOUNT1 $KEYPAIR_ACCOUNT1

solana balance $PUBKEY_ACCOUNT1
solana airdrop 10 $PUBKEY_ACCOUNT1

我正在构建这个简单的程序: https://gitlab.com/rahasak-labs/solana-localnet/-/tree/master/contract

我确保本地 solana 也是 1.8.11(我也尝试使用 1.9.2)

cd solanaworkspace/contract_helloworld
# lib for building smartcontract
cargo install rustfilt

# build helloworld
cargo build-bpf --dump

部署我做的程序: 我使用 --keypair $KEYPAIR_ACCOUNT1 部署 /solanaworkspace/contract_helloworld/target/deploy/helloworld.so,它将使用 $KEYPAIR_PROGRAM1

处的默认 .json 密钥对
KEYPAIR_PROGRAM1=/solanaworkspace/contract_helloworld/target/deploy/helloworld-keypair.json
PUBKEY_PROGRAM1=`solana-keygen pubkey $KEYPAIR_PROGRAM1`

# solana account $PUBKEY_PROGRAM1

solana program deploy --keypair $KEYPAIR_ACCOUNT1 /solanaworkspace/contract_helloworld/target/deploy/helloworld.so

这将尝试提交 5 次,直到失败 Blockhash expired 在尝试部署时,我看到了这样的日志:

Waiting for next block, 60 pending...    [block height 693; re-sign in 285 ] 

它还说直到 60 但随后重置为 Waiting for next block:

Sending 36/60 transactions

我做错了什么?

我想用 docker 容器复制起来很容易。 非常感谢。

编辑:嗯,当它不在 运行 容器中时,它可以工作。 我还在想with是不是错了。

程序部署是通过验证器的 TPU(事务处理单元)完成的,它监听不同的端口,8003。如果该端口不可访问,则发送程序部署事务将失败。

您可以先在启动中添加端口 8003,如果仍然失败,请打开 Dockerfile 中列出的每个端口:https://github.com/solana-labs/solana/blob/005592998dd107b3d54d9203babe24da681834f5/sdk/docker-solana/Dockerfile#L3