Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用同一组私钥地址,在多个群组中部署同一份合约,只有最先部署的可以正常使用 #4310

Open
fellbot opened this issue Mar 20, 2024 · 8 comments

Comments

@fellbot
Copy link

fellbot commented Mar 20, 2024

环境
实体机 vmware esxi 6.7.0
虚拟机 ubuntu-20.04.3
Docker version 20.10.16
官方提供的镜像 fiscoorg/fiscobcos v2.9.0

在同一个虚拟机中用docker镜像起了5个bcos节点

复现过程
(以下调用JSON-RPC接口都是访问的节点1)
调用JSON-RPC接口generateGroup和startGroup,创建并启用3个群组(每个群组都包含节点1,其他节点任选)
调用JSON-RPC接口sendRawTransaction,在每个群组中部署合约(用的同一组私钥地址,部署的是同一份合约)
发现在3个群组中部署合约得到的合约地址相同,只有最先部署的合约可以正常使用,后2个群组部署的合约使用都报错。
INTERNAL_ERROR: : INTERNAL_ERROR: : /FISCO-BCOS/libtxpool/TxPool.cpp(185): Throw in function virtual std::pair<h256, Address> dev::txpool::TxPool::submitTransactions(dev::eth::Transaction::Ptr) Dynamic exception type: boost::exception_detail::clone_impl<dev::eth::TransactionRefused> std::exception::what: std::exception [dev::tag_comment*] = InvalidGroupId, txHash=31d6e1da...
再次调用JSON-RPC接口sendRawTransaction,在后2个群组中再次部署合约(用的还是同之前一样的私钥地址,部署的也还是同一份合约)
发现这一轮部署得到的合约地址也相同,但与第一轮部署的合约地址不同。这一轮还是先部署的合约(群组2)可以正常使用,之后部署的合约(群组3)使用报错(错误信息同上)。
最后调用JSON-RPC接口sendRawTransaction,在第3个群组中再次部署合约,得到了一个新的合约地址,与前两轮的合约地址不同,至此第3个群组也可以正常使用合约了。

群组1 群组2 群组3
第1轮部署 合约地址1 OK 合约地址1 X 合约地址1 X
第2轮部署 合约地址2 OK 合约地址2 X
第3轮部署 合约地址3 OK

期望
使用同一组私钥地址,在多个群组中部署同一份合约。期望每个群组首次部署的合约都可以正常使用。

@JimmyShi22
Copy link
Member

交易中包含群组信息,至针对特定群组有效。可以检查一下这个交易的群组id,是不是发送到另一个群组上了?

@fellbot
Copy link
Author

fellbot commented Mar 26, 2024

@JimmyShi22 群组ID没有设置错误。同样的交易,换成新部署的合约地址就能执行成功

@JimmyShi22
Copy link
Member

谢谢反馈!控制台用的是哪个版本?

@JimmyShi22
Copy link
Member

可以把节点配置和控制台配置发出来一起看一下。看看控制台连接了哪些节点,每个节点属于哪些群组? 😄

@fellbot
Copy link
Author

fellbot commented Apr 16, 2024

@JimmyShi22 不好意思最近没有上来跟进问题。我们所有的操作都是调用JSON-RPC接口完成的,没有用控制台。今天看到回复后,让运维用控制台(v2.9.0)部署执行合约没有出现上述问题。过程中发现用控制台部署合约需要传一个版本号,而我们调用JSON-RPC接口部署合约过程中没有用到什么版本号。是不是跟这个有关系?如果有关系的话,调用JSON-RPC接口部署合约该怎么用上版本号?

@JimmyShi22
Copy link
Member

交易的数据结构里面包含groupID的字段,从报错来看,是因为交易二进制和发送到的群组未对应上
[dev::tag_comment*] = InvalidGroupId

@JimmyShi22
Copy link
Member

可以检查一下生成交易的逻辑,是不是设置的是固定的groupID?

@fellbot
Copy link
Author

fellbot commented May 11, 2024

@JimmyShi22 我们使用群组ID的方式肯定没有问题,如果群组ID弄错了,不管再部署多少次合约也一样会报错的。但实际情况是多部署几次合约就没问题了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants