主页 > 以太坊imtoken > 干货| 在以太坊上发送交易的九种方式

干货| 在以太坊上发送交易的九种方式

以太坊imtoken 2023-06-26 07:40:50

批量生成以太坊钱包地址_以太坊钱包地址怎么弄_以太坊币钱包

点击上方“统一时代”订阅!

unitimes.io

以太坊币钱包_批量生成以太坊钱包地址_以太坊钱包地址怎么弄

全球视野,独到见解

本文的目的是为以太坊生态系统中用于发送交易的各种技术、模式和机制提供指南。 随着新技术层出不穷,本文也会随之更新,算是未完待续。

针对这个公认的大话题,本文将包括以下内容:

背景知识

以太坊是一个基于账户的系统。 目前有两种类型的账户:普通账户和合约账户。 两种类型的账户都有自己的以太坊地址、交易计数器 Nonce 和余额。 合约账户也有不可变代码和相应的存储空间。 这是一篇介绍这些基本概念的好文章。

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

请注意,上面的关键点是没有“交易发起”地址,因为该地址可以从生成交易哈希签名的公私密钥对中推导出来,其中交易字段适当地使用 RLP(递归长度前缀)编码。

Gas 使用和 Gas 代币

从一个很通俗的角度来看,区块链可以看作是一个共享数据库。 每次从数据库读取或写入数据时,都需要消耗 gas 来防止垃圾邮件等恶意攻击。 具体来说,在以太坊上执行的每个计算步骤都会消耗 gas,以避免可能使以太坊陷入停顿的恶意攻击。 每个操作码的 gas 成本在以太坊黄皮书中都有描述。 但操作码的 gas 成本仍然是一个热议的话题,以太坊社区的成员正在研究引入存储租金机制的可能性,甚至是 gas 和操作码的动态定价方案。

在以太坊区块链中写入数据非常昂贵。 例如,创建一个非空存储单元需要 20,000 gas批量生成以太坊钱包地址,这几乎相当于一次简单的 Ether 转账交易(即交易结构中数据字段为空时)的成本(21000 gas)。 作为缓解区块链数据存储爆炸的激励方案,以太坊协议将退还 10,000 gas 用于清空不再使用的旧存储单元。

这种Ether返还机制最多可以返还一半的合约交易消耗的gas(普通转账交易不能返还,因为已经用完了最低消耗的gas;但是批量调用合约可以享受这个返还机制)。 Gas Token 可以让开发者简单高效地使用这种返还机制,即通过 gas 的代币化,在 gas 价格低的时候囤货,然后在 gas 价格高的时候花掉之前储存的 gas token。

近期,部分交易所发现漏洞,未正确设置交易gas上限。 攻击方式很简单:在交易所申请提现,然后将提现交易的目标地址设置为攻击者部署的恶意合约。 它默认的回退函数(发送以太币到合约会触发函数调用)会借此机会锻造一个新的Gas Token(囤积gas)。

元交易

元交易是一种发送交易的模式:发送方先签署合法的以太坊交易,然后通过链下传输将交易和签名转给中继方,中继方愿意承担这笔gas交易的开销,最后将交易发送到以太坊网络。

以太坊钱包地址怎么弄_批量生成以太坊钱包地址_以太坊币钱包

-以太坊极客喜欢抽象-

这种元交易模型很有用,因为发送方不再需要在发送账户中拥有以太币,这从用户体验的角度来看是有益的。 我之前在这篇文章中提到过元交易及其对用户体验的影响。

元交易的最终目标地址通常是以太坊合约,在某种程度上,合约知道交易的签署者不是交易的实际发送者。 以太坊交易API的msg.sender字段会返回relayer的地址,但它很可能没有代表签名者的权限,所以在这个场景下(只看msg.sender字段)并没有很有意义。 因此,许多元交易依赖于链上签名验证(通过以太坊 API 的 ecRecover 函数)来确保签名者账户确实在适当的白名单中(有权操作交易要执行的指令)。

潜艇发送

矿工抢跑现象是基于区块链经济的交易市场难以根除的老问题,即矿工可以对交易进行重新排序,随意砍单,或者让自己的交易插队获利。 海底交易试图通过强大的保密特性为矿工抢先交易问题提供解决方案。 Submarine Transactions 不仅会隐藏交易金额,还会尝试完全隐藏交易的存在。 当然,如果一个交易总是隐藏起来,那就不是很有趣了。 潜艇交易允许发送方在未来某个时间点披露交易,这就是它被称为“潜艇”交易的原因。

以太坊币钱包_批量生成以太坊钱包地址_以太坊钱包地址怎么弄

-通过使用海底交易,用户的交易不会被矿工抢占-

用户提交包含加密承诺的交易,其中包含一些用户想要发送给目标合约的应用数据,并将交易中涉及的以太币或代币锁定在潜地址中,潜地址与全新的地址(因此很难被矿工识别)。 锁定在该地址中的以太币或代币只能由目标合约解锁。 通过为承诺交易附加币值(除非用户完成承诺的披露,否则额外的币值实际上被销毁且无法找回),我们确保有效的经济约束来防止一些恶意用户选择性地发布承诺(即阻止用户从能够免费提交任意承诺)。 只要承诺交易被成功打包并得到足够多的区块确认,用户就可以向目标合约公开其加密的承诺,合约(在成功验证后)将执行交易中包含的应用逻辑。

反事实合约实例化

反事实一词来自哲学和思辨中的一个概念。 反事实陈述是一连串有根据的推理和相应的结论,但陈述的前提故意与事实相反。 除了这个与事实不符的前提外,整个推理链条都是合理的,所以如果前提正确,最后的结论也就正确了。 应用到区块链交易场景,Conterfactual的逻辑不仅会考虑区块链当前的状态,还会考虑某个合约部署后区块链的状态。

批量生成以太坊钱包地址_以太坊币钱包_以太坊钱包地址怎么弄

更具体地说,在部署之前获取合约的地址,这种模式称为反事实合约实例化,该理论由 L4 在他们的“Counterfactual State Channels”论文中发表,并得到以太坊社区的支持。 广受欢迎。

目前,新的合约地址是由以太坊运行代码CREATE生成的,可以通过合约创建者的账户地址(sender字段)和创建者发送的交易数量(nonce字段)明确判断,即即,sender 和 nonce 字段将通过 RLP 编码和 Keccak256 哈希算法生成一个新的合约地址。

EIP1014 引入的 Skinny CREATE2 操作码更进一步,允许用户与链上尚不存在的地址进行交互; 虽然地址上还没有代码,但可以保证它最终可能只包含由特定初始代码段生成的合约逻辑。 与 CREATE 操作码一般使用 sender-nonce 然后哈希得到合约地址不同,CREATE2 操作码使用以下地址生成公式:keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12: ].

这种模式对于涉及与尚不存在的合约进行交互的状态通道场景尤其重要。 它允许以太坊主链成为争议(解决)层,而无需考虑合约部署的实际开销。 同样,这种模式也可以用于已知函数会创建新地址的场景,比如这里的还款地址。

零确认交易

零确认交易起源于比特币现金社区,并且仍然是一个有趣但未经证实的研究领域,在区块链网络中,块时间可能会大大抑制用户体验。 零确认交易的发送方需要提交保证金,如果出现双花行为,发送方将损失保证金。 在比特币现金中,可以通过重复使用 UTXO 条目来检测双重支出。 任何人(一般假定为矿工)都可以提交发现的两笔双花交易,然后获得押金奖励。

在以太坊的账户网络中,我们可以检查同一发送者是否重复使用了相同的随机数,而不是使用类似比特币的 UTXO。 例如,部署的合约提供了一个 reportDoubleSpend 方法,它接受两个已签名的交易来完成,然后合约会检查它的发送者和随机数,如果它们相等,它会奖励方法调用者一笔押金。 原理很简单:如果存款金额足够大,它是交易发送方防止作弊(双花)的有力武器,因为他们可能会损失所支付的存款。 这类交易被认为最适合小额的一次性单笔支付场景,因为针对该场景存在一系列潜在的攻击模式。

批量转移

与ERC20代币交互的一个主要问题是,一般需要两种不同的交易:一种是调用代币合约的approve方法,另一种是实际调用目标合约(transferFrom方法会在目标合约)使用代币完成具体逻辑(doSomethingForTokens 方法)。 该模型会产生一系列非原子事务问题。 最简单的情况是,如果 doSomethingForTokens 调用交易失败,之前的 approve 调用不会回滚,即 approve 方法允许合约控制的代币配额(配额)仍然持有。

以太坊钱包地址怎么弄_以太坊币钱包_批量生成以太坊钱包地址

- ERC20 代币合约的 approve 和 transferFrom 方法是非原子的 -

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

基于短信的支付

CoinText 可能是最著名的基于短信的加密货币支付服务提供商,目前专注于比特币现金交易。 这种支付机制对发展中国家的移动设备特别有用。 Eth2 还在以太坊上部署了类似的技术,它通过传统的基于移动应用程序的以太坊钱包(如 Trust)工作。

以太坊币钱包_以太坊钱包地址怎么弄_批量生成以太坊钱包地址

- eth2.io 基于短信的加密数字支付解决方案 -

此特定解决方案采用托管合同。 交易发送方生成一个临时公私钥对,然后将以太币存入托管合约,之前生成的临时公钥附在转账上。 使用随机生成的对称密钥对私钥进行加密,然后通过链下方式(电子邮件、短信、Whatsapp 等)将密文发送到中心化验证服务器。 提现时,如果收款人手机号验证成功,验证服务器会将密文发送给收款人,收款人可以解密(即得到临时私钥),然后对提款交易报文进行签名,然后托管合约可以验证该签名批量生成以太坊钱包地址,以确认它是由临时私钥签名的。

中心化服务器用于验证手机号和传递秘钥,但Eth2服务器无法控制托管合约中锁定的以太币。 如果中心化服务器被攻击,支付交易将失败,但以太币仍在托管合约中。 如果此时想要取回锁定的以太币,发送方可以通过调用托管合约取消支付。