首页 > 热点资讯 > 正文

以太坊交易实用指南

2024-03-03 04:04 来源:网络

本文旨在为以太坊生态中的各种交易技术、模式和机制提供一份全面的指南。由于新技术不断涌现,本文也将不断更新,因此请持续关注!本文将涵盖以下内容:

以太坊交易简介

Gas使用和gasToken

元交易

潜艇交易

反事实合约实例化

零确认交易

批量转账

基于短信的付款

重复订阅付款

通过预言机合同为批量交易节省Gas

使用一次性地址进行多笔交易

尽管本文涵盖了多种交易方式,但仍有许多有待探索的内容。让我们一起深入探讨以太坊交易的各种可能性吧!

以太坊交易简介

以太坊是一种基于账户的系统,包括普通账户和合约账户。这两种账户都具有以太坊地址、交易计数器(Nonce)和余额。合约账户还包括不可变的代码和相关的存储空间。了解这些基本概念的文章有很多。

一个以太坊交易包含以下几个关键字段:

Nonce:交易计数器,表示该帐户主动发起的交易数量,从0开始计数

gas Price:决定了交易所需的ether数量

gas Limit:处理交易的最大gas数量

目标地址:接受交易的对象,如果为空,则会创建新的合约

交易金额:发送的ether数量

数据:可以是任意文本消息或合约调用,或创建新合约的代码

需要注意的是,交易发起地址可以从生成交易哈希签名的公钥-私钥对推导出来,其中交易字段使用适当的RLP(递归长度前缀)编码。

Gas使用和gasToken

从宏观上看,区块链可以被视为一个共享数据库。每次从数据库中读取或写入数据都需要消耗gas,以防止恶意攻击。换句话说,以太坊上执行的每一个计算步骤都需要消耗gas,以避免可能导致以太坊瘫痪的恶意攻击。每个操作码的gas费用在以太坊黄皮书中都有详细说明。然而,操作码的gas费用仍然是一个活跃的话题,以太坊社区正在研究引入存储租金机制和gas和操作码的动态定价方案的可能性。

在以太坊区块链中写入数据非常昂贵,例如,创建一个非空的存储单元需要花费20000 gas,几乎等于一次简单的Ether转账交易的费用(当交易结构中的数据字段为空时),即21000 gas。为了缓解区块链数据存储的增长,以太坊协议将退还10000个gas用于清除不再使用的旧存储单元。

此Ether退款机制最多可以退还合约交易一半的gas(普通转账交易无法获得退款,因为它们已经达到了gas的最低消费;但是针对合约的批量调用可以享受此退款机制)。Gas Token使开发人员能够简单有效地利用此退款机制,即通过gas代币化在gas价格低时积累gas,在gas价格高时消耗以前储存的gas代币。

元交易

元交易是一种发送交易的方式,发送方首先签署一个有效的以太坊交易,然后通过链外的方式将其与签名一起传递给一个愿意承担交易gas费用的中继方,然后将交易发送到以太坊网络中。

这种方法的优点是发送方无需在其发送帐户中持有ether,这对用户来说非常方便。我在另一篇文章中提到了元交易及其对UX的影响。

元交易的目标地址通常是某个以太坊合约,而且在一定程度上,该合约知道交易的签名方并非实际发送方。因此,msg.sender字段返回的中继方地址实际上并没有代表签名方执行操作的权限。因此,在这种情况下,仅查看msg.sender字段的意义并不大。因此,许多元交易依赖于链上的签名验证(通过以太坊API的ecRecover函数),以确保签名方帐户实际上是具有合适权限的操作员白名单的一部分(即有权执行交易想要执行的命令)。

潜艇交易

矿工抢跑(frontrunning)是一个难以根除的问题,特别是在基于区块链经济的交易市场上。矿工可以重新排列交易,随意删除或插入他们自己的交易以获利。潜艇交易试图通过极强的保密特性来解决矿工抢跑问题。不仅隐藏交易金额,潜艇交易还试图完全隐藏交易的存在。然而,如果一笔交易总是被隐藏,那就没有什么意义了。潜艇交易允许发送方在未来某一时刻公开这笔交易,这就是为什么它被称为"潜艇"交易的原因。

用户提交一个包含加密承诺的交易,其中包含用户希望发送到目标合约的某些应用程序数据,并将Ether或令牌锁定在一个类似于新地址的新潜艇地址中。锁定在该地址的Ether或令牌只能由目标合约解锁。通过在承诺交易中添加货币价值(除非用户完成承诺的发布,否则会销毁附加货币价值),我们确保了有效的经济约束,以防某些恶意用户选择性地发布承诺(即防止用户免费提交任何承诺)。只要承诺交易被成功包装并经过足够的块确认,用户就可以向目标合约发布其加密承诺,然后合约(成功验证后)将执行交易中包含的应用程序逻辑。

反事实合约实例化

Counterfactual是一个来自哲学和辩论中的概念。一条counterfactual声明是一系列有理由的推理和相关结论,但声明的前提是有意与事实相反的。除了这个违背事实的前提,整个推理链都是合理的,因此如果前提正确,结论也是正确的。在区块链交易场景中,counterfactual的理念不仅考虑了区块链当前的状态,还考虑了如果某个合约部署完成后区块链的状态。

具体地说,在合约部署之前获取其地址称为counterfactual合约实例化。这一理论最初发表在L4的"counterfactual状态通道"论文中,并受到了以太坊社区的广泛关注。

目前,新的合约地址由CREATE操作码生成,并可通过合约创建者的帐户地址(sender字段)和创建者发送的交易数量(nonce字段)明确确定,即sender和nonce字段将通过RLP编码并通过Keccak256散列生成新的合约地址。

EIP1014引入的Skinny CREATE2操作码更进一步,允许用户与其尚不存在的地址进行交互。尽管该地址上还没有代码,但可以保证它最终只会包含通过特定的初始化代码生成的合约逻辑。与CREATE操作码通常使用sender-nonce然后散列来生成合约地址不同,CREATE2操作码使用以下地址生成公式:

keccak256(0xff++address++salt++keccak256(init_code))[12:]。

这种方法对于涉及与尚未存在的合约交互的状态渠道场景特别重要。它使得以太坊主链可以成为争议层,并且不需要考虑实际的合约部署成本。类似地,如果知道功能将创建新地址,也可以在这种场景中使用此方法。

零确认交易

零确认交易起源于Bitcoin Cash社区,目前仍是一个有趣但未经证实的研究领域,在这种区块链网络中,出块时间本质上可能对用户体验不利。零确认交易的发送方需要提交保证金,如果有双重支出,发送方将失去保证金。在比特币现金中,双重支出可以通过UTXO的输入项重用来检测。

在以太坊的帐户网络中,与使用类似的比特币UTXO相比,我们可以检查同一发送方是否重用了相同的nonce。例如,一个已部署的合约提供了reportDoubleSpend方法,该方法接受两个待完成的已签名交易,然后合约将检查其发送方和nonce,如果相同,将向方法调用者支付保证金。这个原则很简单:如果保证金金额足够大,那么对于交易发送方来说,这是一种强大的威慑力,因为他们可能会损失保证金。这种交易类型被认为最适合一次性小额支付场景,因为这些场景存在一系列潜在的攻击模式。

批量转账

与ERC20代币交互的主要问题是,通常需要两次不同的交易:一次调用代币合约的approve方法,另一次真正调用目标合约(doSomethingForTokens方法)使用代币执行特定逻辑。这种情况会产生非原子性交易的一系列问题。最简单的情况是,如果doSomethingForTokens调用交易失败,先前的approve调用不会回滚,也就是说,approve方法允许合约控制的代币额度(allowance)仍然有效。

Limechain实现了一种特殊类型的批量转账方法。这种方法借鉴了元交易中链上签名验证的原则,如果doSomethingForTokens调用交易失败,将回滚相应的approve调用,从而改进了ERC20代币原有的approve和transferFrom方法的非原子性。

基于短信的付款

CoinText可能是最有名的基于短信

以太坊交易实用指南

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系多特删除。(联系邮箱:[email protected]