如果我说得对,智能合约没有私钥,所以他们无法签署交易。第一笔交易是签署购买用户,如果合同调用另一个合同等,那些交易也签署购买用户。那么,如果我们有两个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余额中窃取代币。
我是对的,这是真的可能,或者我在某个地方犯了错误?如果有可能,在这种情况下合同如何拥有其他合同的代币?
答案 0 :(得分:0)
是的,合同可以拥有代币。
您指定的交易无法运作;你不能只选择一个s3.part.size
地址。从外部拥有的帐户(EOA)发送交易,这意味着具有私钥的帐户。并且只有拥有该私钥的人才能签署此类交易。看看这篇博文有助于:https://github.com/confluentinc/kafka-connect-storage-cloud/issues/29。
答案 1 :(得分:0)
我想我找到了问题的答案。 签署一系列消息的第一个人不能作弊并替换第二个消息,因为当节点验证他的行为时,他们将在他们的EVM上运行这一系列消息,如果第二个消息无效(即它不是来自合同)国家不会改变。