火星链 火星链
Ctrl+D收藏火星链

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

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

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

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

MetaXKCD

什么是元交易?

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

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

概述

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

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

高盛:探索如何确定比特币和其他加密资产的“基本面”:本周,高盛经济研究团队的Zach Pandl和Isabella Rosenberg发布报告,探索了如何确定加密资产的基本面问题。报告指出,将加密资产等同于黄金是确定其基本面的常见框架,但除此之外,加密货币价格也与其底层分布式网络的价值有关。报告使用区块链地址估算网络用户数量,并与货币市值进行比较,观察到:“市值与网络规模之间存在明显的相关性”,且相关性超过1。他们基于历史数据计算出的平均增长曲线接近价值=用户数的1.4次幂,这给出了一个利用基本面作为市值参考的基准比率。基于该推断,报告指出BTC的市值远大于基本面,其基于用户增量的价值(基本面)与市值相比存在严重偏差。过去几年,比特币市值较2018年平均水平上涨520%,但网络仅增长60-100%。报告认为这一偏差意味着要么比特币现在被高估,要么2018年被低估,要么兼而有之。但报告也指出,除基本面因素外,加密货币上涨还有众多其他因素,包括情绪,以及它作为一种快速致富的新方式的吸引力。但投机交易带来的网络活动增加并不能完全反应基本面的改善,因为平台并未获得更高的经济价值,要使加密货币网络具备可持续价值,活动需要由非投机性用例驱动,而目前此类用例十分缺乏。(雅虎财经)[2021/7/21 1:06:15]

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

俄罗斯彼尔姆地区一家法院屏蔽解释如何交易比特币的网站:俄罗斯彼尔姆地区的一家法院决定屏蔽一些描述如何将加密货币兑换成法定货币的网站,当地检察官声称,在俄罗斯传播此类信息是违法的,违反了俄罗斯打击犯罪收益合法化的立法,可能会促进非法行为。(Bitcoin.com)[2021/6/11 23:30:46]

结构化交易哈希

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

这是交易schema的哈希值:

EIP712_TRANSACTION_SCHEMA_HASH=keccak256(abi

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

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

设置正确的msg

大咖零距离 | 如何通过消息面获取市场暴利:2月19日16:00,金色盘面邀请数字货币正规军TLAB Terry做客金色财经《大咖零距离》直播间,将分享《如何通过消息面获取市场暴利》,敬请关注,欲进群观看直播扫描海报二维码报名即可![2020/2/19]

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

你在合约中使用msg

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

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

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

分析 | 2018年美国用户搜索“如何购买Ripple”的次数高于“如何购买比特币”:据bitcoinexchangeguide消息,去年收集的一项数据显示,美国用户对于“如何购买Ripple”这一短语的搜索次数高于“如何购买比特币”。不过全球范围内,“比特币”词语本身仍然比“ XRP ”或“ Ripple ” 的搜索次数更多。但XRP社区粉丝依旧认为XRP距离成为领先的数字资产并不太远。[2019/4/3]

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

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

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

高级签名方案

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

声音 | 奥斯汀市雇员退休制度CIO:应关注加密资产如何适应现有的投资组合:据coindesk消息,今日在彭博社举办的Institutional Crypto会议上,美国德州奥斯汀市雇员退休制度首席投资官(CIO)David Veal表示:“我不确定加密资产是否需要被定位为可替代资产,我们应该看看它如何适应现有的投资组合。加密资产可以通过使如此多事物获得流动性来消除非流动性。我们的投资组合多样化正慢慢受到侵蚀,而加密可以带来回报。”[2018/10/16]

这就是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.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

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

标签:IONHTTTPSTURJSB FoundationBHTTtps币行情futuremine

比特币价格热门资讯
SDT:Bitmex创始人Arthur Hayes:从Tether到Facebook,能为中央银行数字货币提供哪些参考价值?

本文转自DeFi之道,星球日报经授权转载本文作者:BitMex创始人ArthurHayes北半球盛夏已至,又到了派对时间.

1900/1/1 0:00:00
Gate.io直播:今晚19:30 Tranche Finance首席运营官Talal Tabbaa 聊聊Tranche协议与市场节目即将开播

为丰富直播互动,提升直播访谈价值,Gate.io直播间将定期邀请区块链行业从业者带来优质的内容知识,共同探讨行业发展.

1900/1/1 0:00:00
CAP:2.38 万亿美元资产规模投资机构 Capital Group 购买 MicroStrategy12.2% 股份,成为其第二大股东

链闻消息,根据美国上市公司、商业智能软件提供商MicroStrategy提交至美国证券交易委员会的文件显示.

1900/1/1 0:00:00
GATE:Gate.io直播:短线杀手,学会狠.准.稳,匿名分析等节目即将开播

Gate.io直播间作为行业内首个交易所内置直播功能,通过多样性的直播形式为平台用户带来具有深度、有趣、开放的信息内容.

1900/1/1 0:00:00
Chain:DeFi安全史的黑暗一天:Chainswap超20个项目被盗

本文系链捕手原创文章,作者胡韬。今日凌晨,跨链桥项目Chainswap再次遭到黑客攻击,在该桥梁部署智能合约的超20个项目代币都遭遇黑客盗取,几乎酿成DeF发展史上影响范围最大的一次安全事故.

1900/1/1 0:00:00
DIC:关于WBF上线AT的公告

尊敬的用户:WBF将上线AT/USDT交易对,具体上线时间如下:充值时间:2021/7/2017:00提币时间:2021/7/2017:00交易时间:2021/7/2017:00项目介绍:AT是.

1900/1/1 0:00:00