Conflux-Chain / sirius

confluxscan
https://confluxscan.io
27 stars 7 forks source link

How to setAdmin to zero in contract? #990

Open wdl000001 opened 10 months ago

wdl000001 commented 10 months ago

需要注意的细节:

1,默认管理者(交易发送者)是在合约开始创建时设置的。因此,如果发送者 A 创建合约 B 并在合约构建时设置管理者为 C ,在合约部署后合约的管理者为 C 。 2,然而,如果发送者 A 调用合约 B ,随后合约 B 创建合约 C 并在合约创建时将管理者设置为 D ,则该设置会失败,原因是: C 合约的管理者是 A ,但创建合约 C 的发起者是 B 。 3,Conflux会引入一种特别的规则。在案例2中,如果 D 是零地址,则管理者设置成功。这意味着合约创建时可以显示地声明其不需要管理者。

按照这个文档,应该是可以在合约B的函数中直接把合约C的管理者设置为0地址,但是我无论用 (bool success, ) = address(0x0888000000000000000000000000000000000000).call(abi.encodeWithSignature("setAdmin(address,address)", addr, "cfxtest:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6f0vrcsw")); 或者 (bool success, ) = address(0x0888000000000000000000000000000000000000).call(abi.encodeWithSignature("setAdmin(address,address)", addr, 0x0000000000000000000000000000000000000000)); 还是 admin = AdminControl(0x0888000000000000000000000000000000000000); admin.setAdmin(addr, 0x0000000000000000000000000000000000000000); 执行都成功了,但是最终创建出来的合约C从区块链浏览器看管理者都没有成功设置为0地址。请问应该怎么做才可以?

wdl000001 commented 10 months ago

另外追加一个问题,一旦我在函数中执行了上述代码,在js-conflux-sdk中,调用const receipt = await cfxClient.getTransactionReceipt(txHash); 获得的 receipt返回都会变成null,但从区块链浏览器上看我调用的函数是成功并且有返回值的。