以太坊钱包可能很快进行一次重大升级。部署了提案的变更后,外部账户(EOA)将马上可以发送批量交易、逾期交易、无序交易等。
我的同事@_SamWilsn_和@adietrichs和我一直致力于改善与以太坊交互的用户体验。经过了多次迭代,我们提出了"EIP-3074:AUTHandAUTHCALLopcodes"。
这些操作码是这样使用的:外部账户对一条链下信息签名,给一个中继器提供消息,这个中继器把签名和调用数据传给一个链上合约(被称为invoker,调用器),合约用操作码AUTH验证签名,随后用操作码AUTHCALL发送外部账户的调用。
操作码AUTHCALL的功能基本与CALL相同,除了它把CALLER(即msg.sender信息发送者)设为外部账户的地址,需要通过AUTH来恢复。这使得用户可以无须ETH也能与以太坊交互。也就是说,他们的交易可以由一个中继器来“资助”。
PuddingSwap布丁美食帝国原材料合成任务已于4月28日正式上线:据官方消息,PuddingSwap布丁美食帝国原材料合成功能体验版已于4月28日下午15时正式上线。用户无需质押即可无门槛体验布丁合成功能,体验版布丁制作时间约12分钟。
据官方介绍,用户参与“布丁合成体验版”可合成巧克力布丁及复活蛋布丁。还可参与PuddingSwap和跨链桥ESBridge联合活动。
PuddingSwap布丁美食帝国作为以烘焙布丁为主题的NFT卡牌游戏,为玩家提供八个动物厨师角色卡牌,通过利用原材料烘焙布丁的方式,加成到锁仓池收益,后续将逐步加入厨具、厨艺对战模式、美食NFT广场等板块。[2022/4/28 2:37:17]
这个方案听上去可能很熟悉。实际上,它与meta-txs(元交易)的工作机制几乎相同。一个重要区别是meta-txs无法随意设置msg.sender。因此,合约必须明确支持meta-txs。EIP-3074旨在去除meta-txs,减少合约复杂性。
Coinbase Pro推迟USDT交易至北京时间4月28日:据Coinbase Pro官方推特消息,Coinbase Pro推迟开启USDT交易活动,原因是平台API持续存在问题,未达到流动性标准。交易将在太平洋标准时间4月27日下午6点(北京时间4月28日上午9点)后开始。此前Coinbase于4月23日发布公告,表示将于太平洋时间4月26日上线稳定币USDT,并鼓励用户将USDT从Coinbase转移到Coinbase Pro。截至目前,Coinbase仅支持ERC-20的USDT。[2021/4/27 21:02:26]
为了更深入它的工作机制,一起来了解我们正在构建什么吧。我们想要一个机制允许没有ETH的外部账户可以无须信任地发送交易。“无须信任”是关键。用户不应该给中继器任何可以被利用的特权。
中国银行自4月22日起暂停客户原油宝新开仓交易:中国银行发布《关于我行原油宝业务近期结算和交易安排的公告》,其中称美国时间2020年4月20日,WTI原油5月期货合约CME官方结算价-37.63美元/桶为有效价格。根据客户与中国银行签署的《中国银行股份有限公司金融市场个人产品协议》,中国银行原油宝产品的美国原油合约将参考CME官方结算价进行结算或移仓。同时,鉴于当前的市场风险和交割风险,自4月22日起暂停客户原油宝(包括美油、英油)新开仓交易,持仓客户的平仓交易不受影响。据金色财经此前报道,本周二(4月21日),WTI五月原油期货报价历史首次跌至负值,本周三(4月22日),WTI六月原油期货结算价收报11.57美元/桶,创下自1999年2月以来新低。[2020/4/22]
EIP-3074允许通过谨慎选择加入到外部账户签名的参数来构建去信任系统。用户需要对keccak(0x03invoker_addresscommit_hash)哈希函数签名。
“typebyte(类型字节)"是EIP-2718里值为0x03的恒定字节。这是用来防止与其他签名规则冲突的,比如EIP-2930的访问列表交易、EIP-1559的费用市场交易、EIP-191的0x19签名消息等。
调用器地址把用户的调用与一个特定合约进行捆绑。签名只对该合约有效,即调用者。这使得用户可以选择一个他们信任的调用器——就像选择一个智能合约钱包托管资产一样。
我们预想调用器的数量不会多,因为如果他们实现出错的话(注意调用器的使用是选择性的),用户的利益会受损。开发一个安全的调用器花费会很高。它需要接受多方的审计,并在静态证明上是可靠的。
这与现状其实没有太大区别。智能合约钱包在被用来托管大额资产前应该通过了全面的审计与证明。很多大型DeFi项目也是这样做的。
要签名的最后一个参数是commit_hash。这就是给调用器设计师很大灵活性,以及允许非常多不同签名规则得以开发的地方。
委托参数限定调用者只能执行某些操作,并为处理一次调用建立了一定的有效性要求。用户可以信任调用器会遵循这个程序,因为代码可以在链上得到验证。这是区块链很好的一个特性。
现在来看一个简单的案例。假设一个用户想通过调用器发送一个调用。为了避免调用被传送,他们提供一个随机数。他们还提供其他不可篡改的数值。用户对这些数值进行哈希以获得委托,并在用于AUTH的签名信息里使用该委托。
调用器会用收到的值重新生成委托哈希值。这样,如果资助方修改了一个值,调用器会计算出一个不同于外部账户签名的委托哈希值,导致AUTH恢复一个垃圾地址。会出现下图的情况:
希望现在你相信调用器能像一个智能合约钱包那样运作,任何外部账户都可以使用。现在看一下如何用委托哈希构建更多有趣的方案。
总的来说,最重要的是”一个操作一个签名“。这是看待事情的一个简单方法。一个签名由一笔交易的哈希创造,为什么不对多笔交易进行哈希呢?其实EIP-3074是可以实现的。
当一个账户已经用AUTH验证了,调用器就可以进行该账户想要的、尽可能多次的AUTHCALL。因为我们信任该调用器会没有偏差地执行它的代码,这很好。我们还可以设计出委托哈希是多个调用的哈希值的方案。
在上文的方案里,调用者会用到全部的数值(随机数1、随机数2等),并把它们合起来进行哈希,生成一个委托哈希值。它用委托哈希值和用户签名来调用AUTH。AUTH会验证用户是否都对那些参数签名了。
然后,调用器会对所有调用逐个验证其随机数和其他参数,然后把鉴别过的调用数据发送到鉴别过的地址。
在这个基础上可以构建更多的方案。假如你添加了一个新参数”expiration"。这个参数会被哈希成委托哈希值,且在验证过程中,调用者会验证是否expiration<block.number。这样外部账户就可以有逾期交易了!
EIP-3074提供的是功能强大的基元,能为更多顺滑用户体验打开可能性而无须引入额外的信任假设。如果你想阅读这份EIP的完整版,你可以点击这里:
https://eips.ethereum.org/EIPS/eip-3074
用go-ethereum编写的原型实现可以在这里看到:
https://t.co/XWhlX9C4Y5?amp=1
原文链接:
https://twitter.com/lightclients/status/1371911245561917441
来源|@lightclients
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。