GoQuorum快速入门教程私有交易环节执行失败求助
解决GoQuorum私有交易环节"method handler crashed"问题
问题核心原因
日志中的PrivateTransactionManager is not enabled是关键诱因——尽管你在初始化时选择启用私有交易,但WSL2环境下可能存在容器服务启动异常、配置生成错误或端口映射失效,导致私有交易管理器(PTM,即Tessera)未正常运行;而address was not present in access list during sstore op是PTM未工作引发的连锁错误,私有交易的访问列表无法正确生成。
分步修复方案
1. 检查Tessera服务状态
进入quickstart生成的根目录(默认是quorum-dev-quickstart),执行命令验证Tessera容器状态:
docker-compose ps | grep tessera
- 若容器状态为
Exited或Restarting,重启服务:docker-compose restart tessera
2. 验证节点PTM配置
查看节点配置文件(比如quorum-dev-quickstart/configs/node1/config.toml),确认存在以下配置段:
[PrivateTransactionManager] enabled = true url = "http://tessera-node1:9081"
- 若配置缺失,说明初始化时配置生成出错,彻底重置环境后重新初始化:
cd quorum-dev-quickstart docker-compose down -v rm -rf ./quorum-dev-quickstart npx quorum-dev-quickstart # 重新执行初始化步骤,务必确认选择"启用私有交易"选项
3. 修正私有交易脚本的访问列表
修改smart_contracts/privacy/scripts/private_tx.js中的交易参数,确保privateFor字段包含正确的参与节点公钥:
- 节点公钥可从
tessera容器的密钥目录获取,比如quorum-dev-quickstart/configs/tessera-node2/keys/publicKey - 示例修正后的交易代码:
const tx = { from: accounts[0], to: contractAddress, data: contract.methods.set(100).encodeABI(), privateFor: ["替换为实际的Tessera节点公钥"] };
4. 排查WSL2 Docker集成问题
确保Docker Desktop与WSL2的集成已正确开启:
- 打开Docker Desktop → 设置 → Resources → WSL Integration,勾选你正在使用的Ubuntu发行版
- 重启Docker Desktop和WSL2终端后,重新执行私有交易脚本
内容的提问来源于stack exchange,提问作者Andres Olivares
相关产品推荐
相关产品推荐

