Coinbase交换工程师说:
“从智能合约中存钱是很困难的。智能合约的输出不像正常的ETH交易,当我们收到智能合约的硬币时,我们得到通知也不是件容易的事。”
同样,Bitfinex交易所说:
“目前,Bitfinex不支持智能合同生成的ETH交易。为了避免存款丢失或存款延迟,ETH只能在传统交易中发送。如果您不确定您的押金不会作为ETH合同执行的一部分发送,请在发送押金之前确定一下。”
智能契约生成的事务与人类生成的事务之间的技术区别是什么?为什么在从智能契约收到硬币时很难得到通知(当交易所收到人类的硬币时,如何通知他们,以及当他们从智能契约收到硬币时如何得到通知,为什么这是不同的)?以太设计师选择这一设计的动机是什么?我可以去哪里读更多的细节?
我浏览了一下https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions,但没有看到答案。
发布于 2016-05-25 01:17:45
这是直觉。Ethereum中最简单的交易费用为21000瓦斯,看起来像这是:。
{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汽油。不同的合同可能消耗不同数量的天然气,交易所必须提供足够的天然气,否则交易无效:资金将留在交易所。
发布于 2018-01-23 06:38:12
ETHEREUM有两种汇款方式:
正常交易:由外部行为者签署的一段数据。它表示消息或新的自治对象。事务被记录到区块链的每个块中。
这意味着事务要么代表消息,要么代表新合同。
内部事务(消息):在两个帐户之间传递的数据(作为一组字节)和值(指定为以太),可通过自治对象的确定性操作或事务的加密安全签名传递。
这意味着内部事务是在两个帐户之间传递的以太的数据和数量。内部事务是由相互交互的合同或事务创建的。
合同只能发送内部事务。
有些Exchange钱包只能接收正常事务。不要把资金从一个聪明的合同发送给那些。与钱包地址交互的交换软件不会接收内部事务。
https://ethereum.stackexchange.com/questions/4270
复制相似问题