以太坊上发送交易的九种办法

2019-02-03 19:13 栏目:经验之谈 来源: 查看()
本文的目的是提供用于在以太坊生态系统中发送交易的各种技术,模型和机制的指南。随着新技术层出不穷,本文将相应更新,因此可以将其视为尚未完成的状态。

对于这个公认的重要主题,本文将包含以下内容:

·以太坊交易的简要介绍
·燃气使用和燃气代币
·元交易
·潜艇交易
·反事实合同实例化
·零确认交易
·批量转移
·基于短信的支付
·订阅付款
·通过预测合同保存气体
进行批量交易 ·使用一次性地址进行多次付款

背景知识

以太坊是一个基于帐户的系统,目前有两种类型的帐户:常规帐户和合同帐户。两个账户都有自己的以太坊地址,交易柜台Nonce和余额。合同帐户还有一个额外的不可变代码和相应的存储空间。这是一篇关于这些基本概念的好文章。

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

·Nonce或交易计数器,即帐户发起的交易数量,从0开始计算 ·燃气价格,决定交易需要支付的洗衣机数量
·气体限制,即允许处理交易的最大气体量
·目标地址,接受交易的对象,如果是空的,交易将创建新合同
·交易金额,即发送的Ethers数量
·数据,可以是任何文本消息,也可以是对合同或一段代码的调用以创建新合同

请注意,上面的关键点是没有“事务启动”地址,因为地址可以从生成事务散列签名的公钥 - 私钥对派生,其中事务字段使用适当的RLP(递归长度前缀)编码。

燃气使用和燃气代币

站在一个非常普遍的角度,区块链可以看作是一个共享的数据库。每次从数据库读取或写入数据时,都需要花费天然气来防止垃圾邮件等恶意攻击。具体而言,在以太坊上执行的每个计算步骤都需要使用气体以避免可能导致以太坊停止的恶意攻击。每个操作码的气体成本在以太坊黄皮书中描述。然而,操作码的燃气成本仍然是一个活跃的讨论话题。以太坊社区成员正在研究引入存储租赁机制的可能性,甚至是燃气和操作码的动态定价方案。

在以太坊区块链中写入数据是很昂贵的。例如,创建非空存储单元需要20,000个气体,这几乎等同于简单的以太传输事务(即,当事务结构中的数据字段为空时)。 21000气)。为了减轻暴涨的区块链数据存储,以太坊将向不再使用的旧存储单元退还10,000个气体。

这种以太币的退款机制可以退还合同交易成本的一半(正常的转账交易不可退还,因为他们已经使用了最低限度的天然气消费;但是合同的批量调用可以享受这种退款机制)。 Gas Token允许开发人员简单有效地使用这种退款机制,即通过天然气的代币化,当天然气价格低,库存,然后在天然气价格高时花费先前存储的天然气令牌。

最近,一些交易所存在一些漏洞,这些漏洞没有正确设定交易限额。攻击方法很简单:在交换机申请现金提取,然后将提款目标地址设置为攻击者部署的恶意合同。默认的回退功能(向合同发送以太将触发函数调用)将抓住机会投出一个新的。 Gas Token(卖气)。 (校对说明:详细信息可以在文本超链接的末尾找到《蚂蚁巢》)

元交易

元交易是一种发送交易的方式:发送方首先签署合法的以太坊交易,然后通过链转移将交易和签名转发给中继方。接力方愿意承担交易。交易的天然气成本最终被发送到以太坊网络。

以太坊上发送交易的九种办法

这种元交易模式很有用,因为发送方不再需要在发送帐户中使用以太网,这从用户体验的角度来看是有益的。我在本文中提到了元事务及其对用户体验的影响。

元交易的最终目的地地址通常是以太坊合约,并且在某种程度上,合同知道交易的签字人不是交易的实际发件人。以太坊交易API的msg.sender字段返回中继方的地址,但它可能无权代表签约方行事,因此在这种情况下(仅查看msg.sender字段)不会没有多大意义。因此,许多元交易依赖于链上的签名验证(通过以太坊API的ecRecover功能),以确保签名方的帐户确实在合适的白名单中(具有操作交易想要执行的订单的指令)。

潜艇发送

(不要与这个潜艇交易网站混淆<https://submarineswaps.org/>)矿工前沿是一个老问题,难以在基于区块链的交易市场中结束,即矿工可以随意交易重新订购裁缝或让自己的交易切入团队以赚取利润。潜艇交易试图通过强大的安全功能提供解决矿工问题的解决方案。不仅仅是隐藏交易金额,潜艇贸易将试图完全隐藏交易的存在。当然,如果一个事务总是被隐藏,那么它就没有任何问题。潜艇交易允许发送者在将来的某个时间点披露交易,这就是为什么它被称为“潜艇”交易。

以太坊上发送交易的九种办法

用户提交包含加密承诺的交易,该加密承诺包含用户希望发送到目标合同的多个应用数据,并锁定潜艇地址中交易中涉及的以太币或令牌,其中潜艇地址与品牌没有区别新地址(因此难以被矿工认可)。锁定在此地址中的以太币或令牌只能由目标合同解锁。通过将货币价值附加到承诺的交易(除非用户完成承诺的披露,额外的货币价值实际上被烧毁且无法收回),我们保证有效的经济约束,以防止某些恶意用户有选择地做出公开承诺。 (即阻止用户免费提交任何承诺)。只要承诺的事务被成功打包并通过足够的块确认,用户就可以向目标合同公开其加密承诺,然后合同(在成功验证之后)将执行事务中包含的应用程序逻辑。

反事实合同实例化

反事实一词源于哲学和推测中的概念。反事实陈述是一系列有根据的推理和相应的结论,但陈述的前提是它故意违背事实。除了这与事实不一致的前提外,整个推理链是合理的,所以如果前提是正确的,最终的结论是正确的。应用于区块链交易场景,Conterfactual的逻辑不仅会考虑区块链的当前状态,还会考虑部署合同时区块链的状态。

以太坊上发送交易的九种办法

更具体地说,合同是在部署合同之前获得的。该模型称为反事实合同实例化。该理论由L4在其“反国家频道”论文中发表,并被以太坊社区所接受。广受欢迎。

目前,新的合同地址由以太坊操作码CREATE生成,并且可以由合同的创建者帐户地址(发件人字段)和创建者发送的交易数量(nonce字段)明确确定,即发件人和nonce字段将是新的合同地址由RLP编码生成,然后由Keccak256散列算法生成。

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

对于涉及与尚不存在的合同交互的状态通道场景,此模式尤其重要。它允许以太坊骨干网成为一个有争议的(解决方案)层,而不需要考虑合同部署的实际成本。同样,此模式也可用于已知功能将创建新地址的情况,例如此处的贷款还款地址。

零确认交易

零确认交易起源于比特币现金社区,仍然是一个有趣但未经证实的研究领域。在这种区块链网络中,阻止时间对于用户体验(UX抑制)可能实质上更不利。零确认交易的发送方需要提交保证金,如果存在双花行为,发送方将失去保证金。在比特币现金中,UTXO的输入重用可以检测到双重开花行为。任何人(通常是矿工)都可以提交两份双花交易并获得保证金奖励。

在以太坊的帐户网络中,与使用比特币的UTXO不同,我们可以检查相同的发送者是否重用相同的随机数。例如,已部署的合同提供了一个reportDoubleSpend方法,该方法接受两个已完成的已签名事务,然后合同将检查其发件人和现时。如果它们相等,则将保证金授予方法调用者。原则很简单:如果保证金金额足够大,这是交易发件人防止作弊(双花)的有力武器,因为他们可能会失去支付的保证金。此类交易被认为最适合小型一次性单一支付方案,因为此方案存在一系列潜在的攻击模式。

批量转移

ERC20令牌交互的一个主要问题是它通常需要两个不同的事务:一个是调用令牌契约的批准方法,另一个是实际调用目标契约(目标契约将在内部调用transferFrom方法)使用令牌。完成特定逻辑(doSomethingForTokens方法)。此模型会针对非原子事务创建一系列问题。在最简单的情况下,如果doSomethingForTokens调用事务失败,则不会回滚先前的批准调用,即grant方法允许以合约为主的令牌仍然保留。

以太坊上发送交易的九种办法

Limechain实施了一种特殊的批量转移方法。参考元事务中链签名验证的原理,失败的doSomethingForTokens调用事务将回滚相应的批准调用,从而提高原始批准的非原子性和从ERC20令牌的transferFrom方法。

基于短信的付款

CoinText可能是最着名的基于SMS的加密货币支付服务提供商,目前专注于提供比特币现金交易。这种支付机制对发展中国家和地区的移动设备特别有用。 Eth2还在以太坊上部署了类似的技术,该技术可与基于移动应用程序的传统基于EW的钱包(如Trust)配合使用。

以太坊上发送交易的九种办法

此特定程序使用托管合同。事务的发送方生成一个临时的公钥 - 私钥对,然后将其存入以太网,并伴有先前生成的临时公钥。私钥由随机生成的对称密钥加密,然后通过链(邮件,SMS,Whatsapp等)将密文发送到集中验证服务器。目前,如果收件人的手机号码被成功验证,验证服务器会将密文发送给接收者,接收者可以对其进行解密(即获取临时私钥),然后签署提取交易消息,然后可以验证托管合同。验证签名以确认它是由临时私钥完成的签名。

集中式服务器用于验证电话号码并传递密钥,但Eth2的服务器无法控制托管合同中锁定的以太网。如果集中式服务器受到攻击,则支付交易将失败,但Ether仍在托管合同中。如果您想在此时取回锁定的以太网,发件人可以通过致电托管合同取消付款。

订阅付款

基于退出订阅服务的付款是在Web 2.0时代实现互联网服务的主流方式。例如,Spotify,Netflix,Headspace和Tinder都基于订阅付款来构建其业务收入模型。

加密货币中的订阅支付概念也不是新概念。在比特币中,nLocktime字段可用于确保在指定的块高度之前不会打包(即消耗)已签名的事务。但是,在以太坊中,未来付款的预签名交易意义不大,因为帐户的随机数将随着帐户继续发布交易而增长,这将导致预签名中使用的随机数过小,这反过来会使交易无效。

幸运的是,以太坊的图灵完整性提供了一个解决方案:有一些用于重复订阅类型交易的架构解决方案。这些架构在保证金(流动性),用户体验复杂性,可选功能,燃气开销和可扩展性之间有不同的权衡。

基于oracle预测方法的方法

发送事务的另一种更具体的方法是使用oracle服务,例如Oraclize,以便通过适当的集中化来交换减少燃气使用,请参阅本文。

以太坊上发送交易的九种办法

此类型适用于非事务性的方法调用(返回常量)。已与以太坊主网络同步的节点可以通过以太坊JSON-RPC的eth_call接口调用上述方法。只要您继承usingOraclize,就可以在合同中使用Oraclize的oraclize_query方法进行常量查询。此外,您必须在合同中为__callback(bytes32 queryId,string results)定义回调函数。 Oraclize查询将调用该函数并保存查询结果。获取和计算这些状态常量的直接链查询可能比调用Oraclize更昂贵。

使用一次性地址进行多次付款

如背景技术中所述,事务字段中没有“初始地址”。可以使用ecRecover函数计算此地址。所以问题是:我们可以在交易签名中填写我们想要的数据吗?事实表明,一半的签名是正确的,即ecRecover仍然返回一个有效的公钥(因此也对应于以太坊地址)。由于我们无法控制生成的地址,我们实际上是通过设置字段值来设置事务:事务的成本就像是随机生成的地址一样。

如果我们创建这样的事务(发送者是我们想要生成的地址)并用多个Ethers重新填充生成的地址,则事务可以像普通事务一样执行。这样我们实际上创建了一次性地址,因为余额只能由事务使用。如果我们以可预测的方式选择交易签名中的字段值并发布交易,我们可以向任何人证明发送到发件人地址的金额只能由交易使用,而不能由任何其他使用的交易使用。

以太坊上发送交易的九种办法

如上图所示,该场景尝试将事务发送到11140个目标地址,包括一系列将Ether发送到多个地址的事务,每个事务发送到110个地址,其中发送者的地址由上述方法生成。对于签名字段,我们填写'0xDA0DA0DA0 ...',这是一个可预测的值,因此我们确信没有人可以获得与这些签名对应的地址的私钥。

这会创建一组带有“一次性地址”的交易,可用于提供交易所需的交易金额。但是对于委托自然人来说,要签署的104个交易仍然太多,所以我们重复上述过程形成一个级联结构:我们先构造104个事务,每个事务都有其对应的唯一地址,然后构造一个发送的转移以太网到相应的104个地址。通过验证代码确实可以按预期运行,然后任何人都可以将这些构建的事务发送到以太坊网络,整个过程就像多米诺骨牌一样:列表上的11400地址将接收以太网,但我们只使用了一个手动签名。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发