首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么智能契约输出与普通交易不同?

为什么智能契约输出与普通交易不同?
EN

Ethereum用户
提问于 2016-05-24 18:57:24
回答 2查看 6.3K关注 0票数 16

Coinbase交换工程师说:

“从智能合约中存钱是很困难的。智能合约的输出不像正常的ETH交易,当我们收到智能合约的硬币时,我们得到通知也不是件容易的事。”

同样,Bitfinex交易所说:

“目前,Bitfinex不支持智能合同生成的ETH交易。为了避免存款丢失或存款延迟,ETH只能在传统交易中发送。如果您不确定您的押金不会作为ETH合同执行的一部分发送,请在发送押金之前确定一下。”

智能契约生成的事务与人类生成的事务之间的技术区别是什么?为什么在从智能契约收到硬币时很难得到通知(当交易所收到人类的硬币时,如何通知他们,以及当他们从智能契约收到硬币时如何得到通知,为什么这是不同的)?以太设计师选择这一设计的动机是什么?我可以去哪里读更多的细节?

我浏览了一下https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions,但没有看到答案。

EN

回答 2

Ethereum用户

回答已采纳

发布于 2016-05-25 01:17:45

这是直觉。Ethereum中最简单的交易费用为21000瓦斯,看起来像这是:

代码语言:javascript
复制
{from: '0x from', to: '0x to', value: web3.toWei(1, "ether")}

当您将to存入交易所时,交易所可以监视发送给to的事务--这个存款地址。例如,对于块99,它们可以使用web3.eth.getBlock(99, true, ...),对于每个事务对象检查,to是否等于存款地址,以及发送的value (以太的数量)。对交易所来说比较简单,看你存了什么。

但是,如果您使用合同进行存款,to不再是交易所给您的存款地址。to是您的合同地址,在事务中将有一个额外的data字段。此data向合同提供指令,以执行代码,然后代码可以将以太转移到存款地址。如果交易所想确保从这种执行中获得资金,那么它也必须执行代码。(交易所可以使用web3.eth.getBalance来监控存款地址的余额,但如果它想知道资金的确切来源,就必须执行所有交易的代码。)

这是一个概述,要阅读更多,伊瑟姆·维基有链接到其他材料,如黄纸和白皮书。阅读这个StackExchange获得高投票权的问题和答案,使用交易记录气体这样的标记也是有帮助的。

从技术上讲,事务只由人类发起:调用另一个合同的合同是一个message call (如黄纸中所定义的),而不是一个事务。只有事务记录在区块链上,因为所有进一步的执行都可以从事务派生出来。

为什么从交易所退到合同钱包/账户并不简单,这是因为需要更多的汽油,而不是基本的21000汽油。不同的合同可能消耗不同数量的天然气,交易所必须提供足够的天然气,否则交易无效:资金将留在交易所。

票数 14
EN

Ethereum用户

发布于 2018-01-23 06:38:12

ETHEREUM有两种汇款方式:

正常交易:由外部行为者签署的一段数据。它表示消息或新的自治对象。事务被记录到区块链的每个块中。

这意味着事务要么代表消息,要么代表新合同。

内部事务(消息):在两个帐户之间传递的数据(作为一组字节)和值(指定为以太),可通过自治对象的确定性操作或事务的加密安全签名传递。

这意味着内部事务是在两个帐户之间传递的以太的数据和数量。内部事务是由相互交互的合同或事务创建的。

合同只能发送内部事务。

有些Exchange钱包只能接收正常事务。不要把资金从一个聪明的合同发送给那些。与钱包地址交互的交换软件不会接收内部事务。

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

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

复制
相关文章

相似问题

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