主页 > 安卓手机怎么安装imtoken > 纯干货|深入剖析以太坊(三):交易手续费和消息
纯干货|深入剖析以太坊(三):交易手续费和消息
1.汽油费
以太坊中一个非常重要的概念是费用。 以太坊网络上的每笔交易都会产生费用,以“Gas”的名义支付。
Gas用于衡量特定计算中所需的成本单位。 gas 价格是您愿意为每个 gas 花费的以太币数量以太坊最新消息分析,以“gwei”为单位。 “Wei”是Ether的最小单位,1Ether表示10^18Wei。 1gwei 是 1,000,000,000 魏。
对于每笔交易,发件人设置气体限额和气体价格。 gas limit 和 gas price 代表发送方愿意为执行交易支付的 Wei 的最大值。
例如,假设发送方将 gas limit 设置为 50,000,gas price 为 20gwei。 这意味着发送方愿意支付最多 50,000*20gwei = 1,000,000,000,000,000 Wei = 0.001 Ether 来执行此交易。
请记住,gas limit 表示用户愿意在 gas 上花费的最大金额。 如果他们的账户余额中有足够的以太币来支付这个最高费用,那就没问题了。 交易结束时任何未使用的气体都将退还给发送者,并以原始费率赎回。
如果发件人没有提供执行交易所需的气体,则交易“耗尽气体”并被视为无效。 在这种情况下,交易处理被中止,并且发生的任何状态变化都被逆转,这样我们最终回到交易前的以太坊状态。 此外,还有交易失败的记录,显示尝试了什么交易以及失败的地方。 而且,由于机器在耗尽 gas 之前已经用尽了计算能力,因此从逻辑上讲,不会将 gas 退还给发送者。
这种气体到底在哪里? 发件人在 gas 上花费的所有资金都会发送到“受益人”地址,通常是矿工的地址。 矿工获得天然气作为他们为计算和确认交易所消耗的能量的奖励。
一般来说,发送方愿意支付的 gas 价格越高,矿工从交易中获得的价值就越大。 因此,矿工更有可能选择它。 这样,矿工可以自由选择要验证或忽略哪些交易。 为了引导发送者设定 gas 价格,矿工可以选择公布他们将执行交易的最低 gas 价格。
1.1 存储也是有成本的
Gas 不仅用于支付计算步骤,还用于存储。 存储的总成本与使用的 32 字节的最小倍数成正比。
仓储费有一些微妙的方面。 例如,由于增加存储会增加所有节点上以太坊状态数据库的大小,因此有动机保持较小的数据存储。 因此,如果交易执行中的一个步骤是清除存储实体,则免除执行此操作的费用,并将释放存储空间的退款退还给发送方。
1.2 充电的目的是什么?
以太坊工作方式的一个重要方面是网络执行的每个操作都会同时受到每个完整节点的影响。 然而,以太坊虚拟机上的计算步骤非常昂贵。 因此,以太坊智能合约最适用于简单的任务,例如运行简单的业务逻辑或验证签名和其他加密对象,而不是更复杂的用途,例如文件存储、电子邮件或会给网络带来压力的机器学习。 收取费用可以防止用户使网络负担过重。
以太坊是一种图灵完备的语言。 (简而言之,图灵机就是可以模拟任何计算机算法的机器,这样就可以实现循环,而以太坊容易出现停滞问题,无法判断程序是否无限运行,如果不收费,恶意参与者可以通过在交易中执行无限循环而不会产生任何影响来轻松破坏网络,从而保护网络免受蓄意攻击。
您可能会想,“为什么我们还要为存储付费?” 好吧,就像计算一样,以太坊网络上的存储成本是整个网络必须承担的成本。
2. 交易及消息
前面我们指出,以太坊是一个基于交易的状态机。 换句话说,不同账户之间发生的交易将以太坊的全球状态从一个国家转移到另一个国家。
从最基本的意义上讲,交易是由外部拥有的账户生成的加密签名指令,序列化,然后提交到区块链。
有两种类型的交易:消息调用和合约创建(即创建新的以太坊合约的交易)。
所有交易,无论其类型如何,都包含以下组件:
nonce:发送方发送的交易数量的计数
gasPrice:发送方愿意为执行交易所需的每种gas支付的Wei数量
gasLimit:发送方愿意为执行交易支付的最大gas量。设置此量后,将在任何计算完成之前提前扣除
to:收件人地址。在合约创建交易中,合约账户地址还不存在,所以该值先为空
value:从发送方转移到接收方的Wei数量。在合约创建交易中,value作为新合约账户的起始余额
v, r, s:用于生成签名以识别正在发生的交易
init(只存在于合约创建交易中):用于初始化新合约账户的EVM代码片段。 初始值执行一次然后丢弃。 init在第一次执行时,会返回一个账户代码体以太坊最新消息分析,这是一段与合约账户永久关联的代码。
data(可选字段,仅存在于消息通信中):消息调用中的输入数据(即参数)。例如,如果智能合约是域名注册服务,那么调用合约可能期望输入域如域名和IP地址
正如我们在“账户”部分中了解到的,交易(包括消息调用和创建合约的交易)始终由外部拥有的账户发起并提交给区块链。 另一种思考方式是,交易是外部世界与以太坊内部状态之间的桥梁。
但这并不意味着合同不能与其他合同协商。 存在于以太坊国家全球范围内的合约可以与同一范围内的其他合约进行协商。 他们这样做的方式是通过向其他合约发送“消息”或“内部交易”。 我们可以将消息或内部交易视为类似于交易,主要区别在于它们不是由外部拥有的帐户生成的。 相反,它们是由合同生成的。 它们是虚拟对象,与交易不同,它们没有序列化,只存在于以太坊执行环境中。
当一个合约向另一个合约发送内部交易时,执行接收方合约账户上存在的关联代码。
需要注意的重要一点是,内部交易或消息不包含气体限制。 这是因为气体限制是由原始交易的外部创建者(即一些外部拥有的账户)决定的。
外部拥有账户设置的气体限制必须足够高以执行交易,包括作为该交易的结果发生的任何子执行,例如合约到合约的消息。 如果在事务和消息链中,某个特定消息执行耗尽,则该消息的执行将与执行触发的任何后续消息一起恢复。 但是,不需要恢复父执行。
伯尼区块链
拥抱区块链未来
打造最具价值的区块链学习交流社区