cli 部署合约未指定 --keys, 并没有使用默认账户,(msg.sender)调用地址是合约账户转化, 指定 keys也是用的合约账户转化地址
userInner opened this issue · comments
userInner commented
共识:single
测试合约:
pragma solidity ^0.4.25;
contract InvokeAddress{
address[] arr;
constructor() public {
arr.push(msg.sender);
}
function put() public returns(address[]) {
arr.push(msg.sender);
return arr;
}
部署命令(未指定用户名录)
bin/xchain-cli evm deploy --account XC4944044147631208@xuper --cname invokeAddress testInvokeAddress/InvokeAddress.bin --abi testInvokeAddress/InvokeAddress.abi --fee 2000
SDK调用合约,查询地址(使用的是默认data/keys用户)
解释:第一次调用地址, 是由合约地址转化的,后续是sdk调用,使用的keys目录下address转化的evm地址
第二次部署,部署命令(指定用户目录)
bin/xchain-cli evm deploy --account XC4944044147631208@xuper --cname invokeAddress2 testInvokeAddress/InvokeAddress.bin --abi testInvokeAddress/InvokeAddress.abi --fee 2000 --keys ./data/
调用地址查询
解释: 第一个地址是由cli部署,第二个是由sdk查询,第三个由cli查询,第四个为sdk查询
解决方案: 只有用sdk部署,sdk调用,(msg.sender)地址才是一样的。
litian commented
部署时候必须指定合约账户,如果此次调用/部署 指定了合约账户,那么这一次的 msg.sender 为合约账户,反之,为普通账户
userInner commented
我用bin/xchain-cli 部署可以不指定合约账户吗?
litian commented
我用bin/xchain-cli 部署可以不指定合约账户吗?
部署合约必须指定合约账户
userInner commented
sdk啥时候搞一个合约账户调用合约
Go语言之美 commented
sdk啥时候搞一个合约账户调用合约
go sdk 支持合约账户调用合约