首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合同帐户可以向EOA发送消息吗?

合同帐户可以向EOA发送消息吗?
EN

Ethereum用户
提问于 2018-04-13 20:59:38
回答 1查看 577关注 0票数 0

我经常听到以下的说法:

代码语言:javascript
复制
Contract Accounts cannot send Messages to EOAs. They can only:
  1. send Messages to other Contract Accounts
  2. send Ether to EOAs

..。参见,例如,这里:合同能够向EOA发送信息吗?

这句话对我来说没什么意义。根据Ethereum (见http://www.ethdocs.org/en/latest/contracts-and-transactions/account-types-gas-and-transactions.html#what-is-a-message),一条消息包含: 1.消息的发送方(隐式) 2.消息的接收方3. VALUE字段--用于传输4.可选数据字段5. STARTGAS值的数量

因此,当合同帐户将以太发送到EOA时,它会发送一条带有空数据字段的消息,并包含要在VALUE字段中传输的以太/魏的数量,对吗?

也就是说,契约帐户确实向EOAs发送消息,但是这些消息的数据字段是空的,对吗?

EN

回答 1

Ethereum用户

发布于 2018-04-14 03:34:37

事实是这两种说法在某种程度上都是正确的。

合同在转帐到外部拥有的帐户时可以附加一条消息。但是,对于外部帐户来说,要读取该消息并不容易。

代码语言:javascript
复制
pragma solidity ^0.4.19;

contract A {
    // Make a transfer to who and attach message m
    function bar(address who, bytes m) public payable returns (bytes32) {
        address a = who;
        uint l = m.length;
        uint v = msg.value;
        assembly {
            if iszero(call(gas, a, v, add(m, 0x20), l, 0, 0)) {
                revert(0, 0)
            }
        }
        return 0;
    }
}

外部帐户可以检测其余额是否发生了变化,以及从什么事务中进行了更改。但是要读取消息,它必须执行事务。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/45625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档