一个合约可以拥有另一个合约的代币

时间:2018-03-13 21:49:37

标签: ethereum solidity erc20

如果我说得对,智能合约没有私钥,所以他们无法签署交易。第一笔交易是签署购买用户,如果合同调用另一个合同等,那些交易也签署购买用户。那么,如果我们有两个ERC20合同A,B和B持有一些A代币,那该怎么办呢。

contract A{
....
//balance of contract B
balanceOf[0xE4e5a16C8fx207a07f7df98e3a85e2067feacB9w]=500;

function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender, _to, _value);
    }
....
}

contract B{
    //address this=0xE4e5a16C8fx207a07f7df98e3a85e2067feacB9w
}

如果某个用户伪装成合同B呼叫合同A怎么办? 我的意思是他将签署最后一个不会来自合同B的交易顺序,但合同A会这样认为。

看起来像这样:

{
  data: "0xa9059cbb000000000000000000000000cf2ee9c0dccd39aac2fd44b744270f50f8af13b00000000000000000000000000000000000000000000000000000000000000064",
  from: "0xE4e5a16C8fx207a07f7df98e3a85e2067feacB9w ",//address B
  gas: 210000,
  gasPrice: 1,
  nonce: "24",
  to: "0xa6d90569018967c5esc7d056f74eg4hc3j8ae93" //address A
}

如果他这样做,他可以使用合同A中的功能转移并传递他自己的地址来从合同A中的合同B余额中窃取代币。

我是对的,这是真的可能,或者我在某个地方犯了错误?如果有可能,在这种情况下合同如何拥有其他合同的代币?

2 个答案:

答案 0 :(得分:0)

是的,合同可以拥有代币。

您指定的交易无法运作;你不能只选择一个s3.part.size地址。从外部拥有的帐户(EOA)发送交易,这意味着具有私钥的帐户。并且只有拥有该私钥的人才能签署此类交易。看看这篇博文有助于:https://github.com/confluentinc/kafka-connect-storage-cloud/issues/29

答案 1 :(得分:0)

我想我找到了问题的答案。 签署一系列消息的第一个人不能作弊并替换第二个消息,因为当节点验证他的行为时,他们将在他们的EVM上运行这一系列消息,如果第二个消息无效(即它不是来自合同)国家不会改变。