首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一个帐户不接受以太发送给它的帐户?

为什么一个帐户不接受以太发送给它的帐户?
EN

Ethereum用户
提问于 2016-01-25 20:09:04
回答 2查看 1.2K关注 0票数 8

如果您签出帐户0xe358b3b9f29c67cb810c5184e6fde27d66ce036c,您将看到多个传入事务,每个交易有100个Finney。然而,总体收支平衡是31芬尼。那件事怎么可能?

如果我想象这是我的帐户,我只是在确认与一个块资源管理器的交易,我如何才能弄清楚一个交易是否真的是我的帐户的资金?100芬尼去哪了?为什么?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2016-01-25 20:19:35

如果您查看VM跟踪,您可以看到100个Finney事务遇到了耗尽气体的异常。在出现异常的情况下,事务中包含的所有值都将返回给发件人。

要回答您问题的第二部分,我将使用http://live.ether.camp作为您的块资源管理器,因为它显示了合同生成的事务和错误。

要明确的是,虽然合同不能启动事务,但它们可以将以太发送到其他地址。由于这些操作不是单独的事务,而是合同执行的副作用,因此它们通常不与其他事务一起列出,从而造成混乱。

在ether.camp资源管理器上,这些余额转移被列为“内部事务”,位于产生它们的事务之下。

醚链资源管理器上,它们被列为“合同调用事务”,直接位于发起它们的合同之下。不太清楚的是,这些是上述事务的一部分,但是如果您单击父事务拥有,您将看到“被调用的”事务挂牌

票数 10
EN

Ethereum用户

发布于 2016-01-29 04:31:16

这笔交易用光了,就像在https://live.ether.camp/transaction/abddd676a2dc65dc4790463121bd77cafce4e0fb878d0b386556b055e0cae2d0/vmtrace#0上看到的那样

这是发送100个Finney的交易,它显示“气体限制”为21000:https://live.ether.camp/transaction/abddd676a2dc65

所以用户(0xbf27f.)指定事务最多可消耗21000。

21000气体正是边疆价值转移所需要的。您可以从这里 (除“值传输”之外的其他过滤器)中看到,21000气体足以发送任何数量的以太。

那么,为什么这笔交易没有汽油了呢?

因为事务是契约调用(见图像的右上方)

让我们看一下接收地址:0xe358b3b9f29c67cb810c5184e6fde27d66ce036c

看到它有什么代码了吗?每当事务被发送到带有代码的地址时,该代码就会被调用,开始执行并消耗汽油,就像汽车消耗燃料一样。如果在事务能够完成之前就耗尽了气体,则会产生一个Out of gas异常,并且基本上事务所做的所有操作都是撤消的。这就是为什么100芬尼留在寄件人那里的原因。

事务中,如果单击"vmtrace",您将看到无气。这个事务甚至没有足够的Gas来执行一个计算步骤,但是如果提供了更多的气体,那么vmtrace应该会执行一些计算,直到gas结束为止。

指定更多的气体可以防止这一问题。指定更多的气体是安全的,因为任何未使用的气体都留在发件人手中。

例如,如果指定了123456个气体,而交易只消耗了50000个气体,那么剩下的气体(73456)将留在发送者手中。

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

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

复制
相关文章

相似问题

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