译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
在合约内启用元交易是一个强大的补充。要求用户持有ETH来支付Gas一直以来都是而且仍然是新用户进入的最大挑战之一。如果只是简单的点击,谁知道现在会有多少人在使用以太坊?
但有时,解决方案可以在你的合约中加入元交易能力。实现起来可能比你想象的要容易。
MetaXKCD
什么是元交易?
元交易是一个普通的以太坊交易,它包含另一个交易,即实际交易。实际交易由用户签署,然后发送给运营商,用户不需要Gas和区块链交互。而是由运营商支付费用签署交易,提交给区块链。
合约确保在实际交易上有一个有效的签名,然后执行它。
概述
如果我们想在合约中支持广义的元交易,可以通过几个简单的步骤完成。从高层次上讲,有两个步骤:
第1步:验证元交易的签名。按照EIP-712标准和ecrecover创建一个哈希值来完成:
Bibox创新区将于7月6日上线AMIX:Bibox官网公告称,将于创新区上线AMIX,7月6日16:00开放AMIX充值,20:00开放AMIX/USDT交易及提现。据悉,AMIX是基于AMINO NETWORK的基础设施架构发行的通证。基础设施建设者通过燃烧销毁AMIX的方式获得边缘计算节点(矿机),并将低功耗多任务的边缘运算节点部署在家中或者企业,为5G边缘计算提供就近运算和网络优化服务,并获得收益。[2020/7/6]
boolisValidSignature=ecrecover(hash(transaction),v,r,s)==transaction
结构化交易哈希
我们还需要在所有这些数据上计算一个哈希值。这将用于签名schema和防止同一交易的重复执行。关于这方面的细节,请看最后的签名解释。
这是交易schema的哈希值:
EIP712_TRANSACTION_SCHEMA_HASH=keccak256(abi
通过hash所有相关的值,我们可以确保只有原用户签名的交易才会成功执行。例如,即使运营商只是改变了expirationTimeSeconds中的1秒,它也不能成功执行。
Bibox“AI数字资产托管”星空探险区部分产品开启运营:据官方消息,6月17日,Bibox“AI数字资产托管”星空探险区部分产品已达运行标准,开启运营。“旅行者1号”中部分托管将持续到6月30日。Bibox“AI数字资产托管”运行半年以来,共计接受托管数字资产折合4563.2395BTC,服务了236位高净值客户,致力于为用户提供与专业金融机构服务媲美的高端数字资产投顾服务。[2020/6/17]
这只是哈希值的第一部分,要了解包括安全签名要求在内的全部细节,请阅读下面关于签名的部分。
设置正确的msg
function_getCurrentContextAddress()privateviewreturns(address){returncurrentContextAddress==address(0)?msg
你在合约中使用msg
将额外的信息放入我们的哈希值中,因此,一个已签署的交易只能准确地用于该合约与给定的链Id。所有的细节,请查看EIP或我之前关于ERC20-Permit的文章。
公告 | Bibox将于2月25日上线GBK:据官方消息,2月24日,Bibox发布公告称,将于2月25日在创新区上线项目Goldblock(GBK)并开启GBK空投,增持、交易GBK用户均可获得空投奖励。据了解,Goldblock的代币经济是以金块经济为中心的。黄金砖块生态系统由GBK土地交易所,GBK土地挂件,金块基金会三个主体组成。[2020/2/24]
好了,现在我们有了完整的交易哈希值和用户的签名。我们可以通过一个辅助工具提取byte32值来获得三个值r、s、v,这三个值是签名中的椭圆曲线签名值。uint8的v值只需要一个简单的转换。
使用ecrecover与给定的签名和交易哈希,可计算出一个签名者地址。如果这个地址与transaction
function_readBytes32(bytesmemoryb,uint256index)privatepurereturns(bytes32result){require(b
这就是常规的签名方案。如果你需要用户签署他自己的交易,它就能完美地工作。
动态 | 金色沙龙深圳站“量化市场暗流涌动 如何破冰”将拉开序幕:由金色财经主办,贝壳公关承办,节点资本、Nodeplus、引力波G-Wave协办的金色沙龙深圳站第一期将于1月24日拉开序幕。本期沙龙以“论生态·量化市场 | 暗流涌动如何破冰”为主题,邀请臻云科技、Amber AI、BQuant、共盈资本、Tokenpanda等量化企业,再次聊聊量化,与你共同面对熊市,了解量化交易策略。金色财经将对此次活动进行全程图文直播,敬请留意。报名点击链接。[2019/1/16]
但如果你想让智能合约创建有效的签名呢?
高级签名方案
一个更高级的使用场景是让智能合约签署元交易,但想象一下,用户把他的资金放在一个多签名的智能合约里面。这对于某些钱包来说已经很常见了。这个用户不能用EIP-712方案签署交易来创建一个有效的v、r、s签名。
这就是EIP-1271的作用,它允许智能合约来验证签名。标准本身没有说明合约如何做到这一点。唯一的定义是函数签名,其定义是:
functionisValidSignature(bytes32hash,bytesmemorysignature)publicviewreturns(bytes4);
传真格基金创始人徐小平呼吁各CEO了解区块链 学习如何拥抱这场革命:据某互联网知名博主爆料,真格基金创始人徐小平在真格基金投资组合微信群呼吁各CEO积极了解区块链,并立即动员全体高管和员工,学习如何拥抱这场革命。[2018/1/9]
其中有效签名的返回值为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.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
巨鲸的资金涌向哪里,哪里就是热点!
这段时间,监管力度加强,币圈也全面遭遇“滑铁卢”。比特币、以太坊相继退场,前有黑马Chia被“央视财经”点名严重影响市场健康,算力持续下跌,XCH暴跌51%,之后一蹶不振.
作者?|?DavidHoffman亲爱的Bankless社区。当以太坊被推出时,与ETH没有任何关系。但后来DeFi诞生了.
尊敬的Bibox用户:?Bibox将支持BitcoinCashABC(BCHA)品牌升级为eCash(XEC)及1:1,000,000代币增量计划.
链闻消息,IBM与非营利组织HeiferInternational利用区块链技术帮助洪都拉斯农民改善供应链并将农产品带入国际市场.
亲爱的大币网(Dcoin)用户:为了提升服务质量,进一步优化交易体验,大币网(Dcoin)将于2021年7月12日16:00(UTC8)进行永续合约系统流动性升级,预计时长为10分钟.
公告编号2021070901各位关心ZBG.kim的投资者们和项目方:ZBG平台现已恢复SOL,XMR和XCH的提币.