HOO:如何实现广义的元交易(Meta Transaction)_GLO

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊?

但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。

MetaXKCD

什么是元交易?

元交易是一个普通的以太坊交易,它包含另一个交易,即实际交易。实际交易由用户签署,然后发送给运营商,用户不需要Gas和区块链交互。而是由运营商支付费用签署交易,提交给区块链。

合约确保在实际交易上有一个有效的签名,然后执行它。

概述

如果我们想在合约中支持广义的元交易,可以通过几个简单的步骤完成。从高层次上讲,有两个步骤:

第1步:验证元交易的签名。按照EIP-712标准和ecrecover创建一个哈希值来完成:

孙宇晨对话MarketAcross执行合伙人:加密货币更多的机会在于解决现实问题:7月25日消息,WebX大会在日本东京举行,波场TRON创始人、火币Huobi全球顾问委员会成员孙宇晨受邀出席,并与MarketAcross 执行合伙人Itai Elizur进行了对话。双方就加密领域热点话题进行了探讨和回应,孙宇晨表示,加密货币需要为全球用户服务,而不仅仅是行业内的交易者。他相信加密货币未来会像支付宝一样普及,有很多机会可以挖掘,且不仅限于基础设施。

孙宇晨认为,目前更多的机会在于实际应用和解决现实问题层面。他对加密货币行业的发展前景充满信心,同时他表示愿意倾听新人观点,并希望通过充分交流和合作,共同推动行业的发展。[2023/7/25 15:57:39]

boolisValidSignature=ecrecover(hash(transaction),v,r,s)==transaction

结构化交易哈希

我们还需要在所有这些数据上计算一个哈希值。这将用于签名schema和防止同一交易的重复执行。关于这方面的细节,请看最后的签名解释。

Coinbase首席法务官:众议院新法案最终将使美国参与数字资产监管的全球对话:金色财经报道,针对美众议院刚刚宣布的《21世纪金融创新和技术法案》,Coinbase首席法务官paulgrewal.eth在社交媒体发表评论称,如果我们想作为一个国家受到认真对待,我们就必须作为一个国家认真行事,这项立法最终将使美国参与数字资产监管的全球对话,国会应立即通过并颁布该法案。[2023/7/21 11:08:16]

这是交易schema的哈希值:

EIP712_TRANSACTION_SCHEMA_HASH=keccak256(abi

通过hash所有相关的值,我们可以确保只有原用户签名的交易才会成功执行。例如,即使运营商只是改变了expirationTimeSeconds中的1秒,它也不能成功执行。

这只是哈希值的第一部分,要了解包括安全签名要求在内的全部细节,请阅读下面关于签名的部分。

设置正确的msg

function_getCurrentContextAddress()privateviewreturns(address){returncurrentContextAddress==address(0)?msg

印度正与全球多家央行就CBDC跨境支付进行对话:7月5日消息,印度储备银行(RBI)目前正与至少18个其他国家的央行就“数字卢比”跨境支付的可能性进行对话。根据印度《经济时报》6月27日的报道,印度央行行长Shaktikanta Das于6月份在伦敦的演讲中,强调了外贸基础设施对“数字卢比”的重要性,该数字卢比将于7月初在当地达到100万用户。Das表示,“但跨境支付也将变得更快、更无缝、更具成本效益。这是另一个需要给予大量关注的领域。我们一直在与其他已经推出或正在推出CBDC的央行进行对话。”

报道称,自2022年7月以来,已有18个国家的银行开设卢比Vostro账户。Das解释称,印度希望提供其CBDC作为各国进口印度商品的支付方式,以帮助那些因美元供应而苦苦挣扎的国家。[2023/7/5 22:19:21]

你在合约中使用msg

将额外的信息放入我们的哈希值中,因此,一个已签署的交易只能准确地用于该合约与给定的链Id。所有的细节,请查看EIP或我之前关于ERC20-Permit的文章。

好了,现在我们有了完整的交易哈希值和用户的签名。我们可以通过一个辅助工具提取byte32值来获得三个值r、s、v,这三个值是签名中的椭圆曲线签名值。uint8的v值只需要一个简单的转换。

赵长鹏:正在与 50 多家加密公司进行收购对话:金色财经消息,币安首席执行官赵长鹏在接受采访时表示,目前持有大量现金储备,正在积极寻求支持陷入困境的加密公司。赵长鹏强调并非所有项目都值得拯救,不想救助管理不善的公司,希望帮助大多数有一些流动性紧缩的公司度过这个周期,目前正在与 50 多家加密公司进行收购对话。(BlockWorks)[2022/7/3 1:46:59]

使用ecrecover与给定的签名和交易哈希,可计算出一个签名者地址。如果这个地址与transaction

function_readBytes32(bytesmemoryb,uint256index)privatepurereturns(bytes32result){require(b

这就是常规的签名方案。如果你需要用户签署他自己的交易,它就能完美地工作。

但如果你想让智能合约创建有效的签名呢?

高级签名方案

一个更高级的使用场景是让智能合约签署元交易,但想象一下,用户把他的资金放在一个多签名的智能合约里面。这对于某些钱包来说已经很常见了。这个用户不能用EIP-712方案签署交易来创建一个有效的v、r、s签名。

对话李东荣:区块链是好技术,在金融领域应用仍需探索:博鳌亚洲论坛2018年年会”于4月8-11日在海南博鳌举行,在分论坛“金融的未来:改变,还是被改变 ”上,中国互联网协会会长李东荣针他表示区块链是一个很好的技术,在金融领域肯定有它应用的场景,而且也在做这个尝试。但毕竟一个新东西出来,如何选择跟它适用的场景,目前还在研究、探索和逐步推广的阶段。也有一些实践证明在一些小的场景下做得还是不错的。[2018/4/11]

这就是EIP-1271的作用,它允许智能合约来验证签名。标准本身没有说明合约如何做到这一点。唯一的定义是函数签名,其定义是:

functionisValidSignature(bytes32hash,bytesmemorysignature)publicviewreturns(bytes4);

其中有效签名的返回值为0x1626ba7e。如何实现签名逻辑则取决于智能合约开发者。

那么,我们怎样才能验证这样的签名呢?

你可以在下边看到一个实现的例子。使用staticcall,我们可以确保在调用过程中没有进一步的状态修改发生。如果结果成功并且有一个有效的returnData长度,我们可以检查返回值是否符合0x1626ba7e。

function_staticCallEIP1271Wallet(addressverifyingContractAddress,bytesmemorydata,bytesmemorysignature)privateviewreturns(bool){bytesmemorycallData=abi

你可能想允许更多的签名方法,比如预签名或拥有可以代表用户签名的运营商。请看0x这里中的现有类型,以获得一些灵感。

自己实现

到目前为止,我们已经看到了所有实现的关键部分,这应该让你对如何实现它有一个好的启发。我还建议你看一下:

0x元交易的实现

OpenzeppelinEIP-712支持

实现签名部分的npmeip-712库

OpenzeppelinEIP-712库仍然是一个草案,但对链ID可能改变的分叉情况有额外支持。也可以看看0x代码,本博文中的很多实现都来自于此。

本翻译由CellNetwork赞助支持。

来源:https://soliditydeveloper.com/meta-transactions

参考资料

登链翻译计划:https://github.com/lbc-team/Pioneer

翻译小组:https://learnblockchain.cn/people/412

Tiny熊:https://learnblockchain.cn/people/15

EIP-712:https://eips.ethereum.org/EIPS/eip-712

EIP-712:https://eips.ethereum.org/EIPS/eip-712

ERC20-Permit:https://learnblockchain.cn/article/1790

EIP-1271:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1271.md

这是非常关键的,见之前的0xbug:https://samczsun.com/the-0x-vulnerability-explained/

这里:https://0x.org/docs/guides/v3-specification#signature-types

0x元交易的实现:https://github.com/0xProject/0x-monorepo/blob/development/contracts/exchange/contracts/hide/MixinTransactions.sol

OpenzeppelinEIP-712支持:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/drafts/EIP712.sol

eip-712库:https://github.com/Mrtenz/eip-712

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10155700.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

巨鲸的资金涌向哪里,哪里就是热点!

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

火必APPFIL:Smooth Love Potion (SLP)_KAMAX Vault (NFTX)

一、项目介绍 Axies是一种凶猛的生物,喜欢战斗、建造和寻找宝藏!玩家可以建立一系列Axies并在不断扩大的游戏世界中使用它们!AxieInfinity使用区块链的尖端技术来奖励玩家的参与度.

[0:15ms0-4:70ms