随着走向成熟的以太坊Layer-2解决方案多了起来,ENS也要能为整个生态系统提供服务,同时让ENS用户能够获得Layer-2解决方案给他们带来的效率提升。自Vitalik的一篇帖子提出了一种可能的方法之后,ENS团队和广大的ENS和L2社区也一直在开发一种通用的“Layer-2桥”,让包括ENS在内的应用,能够以免信任的方式在多个链下信源处检索数据,进而使跨平台的互操作性成为可能。
在10月27号最新的一次工作会议上,我演示了这个想法的一个初步实现。本文中我会详细讲解这种解决方案。
目标
概要来说,Layer-2和其它相关系统的工作原理都是减少与以太坊交互的需要,它们将原本需要在链上保存和访问的状态移到了别的地方,同时,保证在以太坊区块链上有足够多的信息能验证数据的正确性。举个例子,在Rollup这种常见的方案中,状态会存储在另外一个系统中,只有witness数据例如默克尔根会存储在以太坊区块链上。有了这些witness数据和Layer-2解决方案的访问权,一个参与者就可以构建出对任意保护在Layer-2系统中的数据的有效性证明,并且可以由以太坊来验证。
这个定义比大多数人所认为的“Layer-2”要更加广泛——它还包括了其它一些减少链上数据存储的工具,比如使用账户余额默克尔树的空投,以及会触发事件但并不在链上存储余额的代币。
对于ENS和其它应用来说,关键问题在于,在一个存在许多互不兼容的Layer-2方案的世界里,如何能以信任最小化的方式——也就是不引入任何新的信任假设——从某个系统中检索数据,且不需要变成所有Layer-2方案的客户端、自己来存储可能有用的数据。
欧科云链集团正式启动区块链科普行动“星途计划”:欧科云链集团于4月26日,正式宣布启动了区块链科普行动——“星途计划”,行动包括将在全国范围展开系列沙龙,加大力度推进区块链科普进机关、进国企、进校园等,联合政府部门、行业协会等共同构建起更加完善和有效的区块链科普教育生态,与此同时,直击区块链科普现存痛点,推出简单易懂的“秒懂区块链”公益短视频课。
该计划旨在全维度推动社会建立对产业更清晰的认知,与“鲲鹏计划”一道助力数字经济及区块链产业本身健康发展夯实“人才”和“产业认知”两大基础。[2021/4/26 20:59:37]
一个幼稚的方法是,要求所有的系统都使用同样的witness数据格式。但这一点是不可能的,两个原因:第一,witness数据的格式和类型都高度依赖于相关系统的实现细节,ZKRollup和OptimisticRollup使用的元件必定不同;第二,客户端仍然无法实际获得数据。
实用的方法必须满足下列条件:
客户端不需要为它们可能与之交互的每一个系统提供显式支持。
客户端必须能够验证返回的数据是有效的,最好无需引入除相关L2方案自带假设以外的信任模型。
解决方案不会要求接入的L2平台产生结构性的变更。
第三方必须能够为L2平台开发接口,无需平台维护者的支持和参与。
解决方案概览
我们提议的方案的核心是一种标准化的工具,让客户端能够从一个外部系统——一个网关服务——处检索数据;以及一种标准化的方法,来验证返回的数据是正确的。
IMF今日发布的加密货币科普视频实为两年前旧闻,且存在诸多疏漏:国际货币基金组织IMF今日在推特上发布了一条关于加密货币的科普视频,这段时长两分钟的视频最初发布于2018年6月。该视频称加密货币是“货币进化的下一步”,但没有特别提到DLT、区块链,甚至是代币名称等术语。BTC、XRP和ETH只出现在说明加密交易的图形中。尽管这段视频到目前为止已经获得了超过13
functionclaim(addressaddr)external{if(preload>0){_mint(addr,preload);preload=0;}}}
动态 | 央行官微旧文重发“再科普”:范一飞详解数字货币:据中国经济网消息,今日,央行官微公众号头条重新发布央行副行长范一飞在2018年1月25日题为《关于央行数字货币的几点考虑》的文章,对央行数字货币再次进行科普。同时,微信公众号第二条发布支付司副司长穆长春8月10日在第三届中国金融四十人伊春论坛上的演讲。近年来,各主要国家和地区央行及货币当局均在对发行央行数字货币开展研究,新加坡央行和瑞典央行等已经开始进行相关试验,人民银行也在组织进行积极探索和研究。[2019/8/21]
这个简单的解决方案有一个显而易见的问题:部署者必须在部署时将所有余额填充到preload映射中,这是一种非常昂贵的操作。他们会更愿意把数据存储在链下,然后让能够证明自己拥有余额的用户来提取自己的数额。用默克尔树很容易就能实现这一点:
contractPreloadedTokenisERC20{bytes32merkleRoot;mapping(address=>bool)claimed;functionclaimableBalanceWithProof(addressaddr,uintbalance,bytesproof)externalviewreturns(uint){require(verifyProof(keccak256(addr,balance),proof));if(!claimed){returnbalance;}return0;}functionclaimWithProof(addressaddr,uintbalance,bytesproof)external{require(verifyProof(keccak256(addr,balance),proof);if(claimed){return;}_mint(addr,balance);claimed=true;}}
的实现)
这个方法非常有效,合约的作者也不再需要花费大量的eth来预加载所有余额,一个默克尔根就足够了,而且调用者想申领余额的时候,可以自己支付证明token所有权的开销。
不过,现在调用者必须理解生成证明的具体流程,并且知道要到哪儿去获取余额清单来生成自己账户的证明。如果我们可以把第一个方案的接口,与第二个方案的效率结合起来,那就完美了。这就是我们的方案。
首先,我们加入了匹配初始claim的签名和claimbleBalance的方法:
stringgateway;functionclaimableBalance(addressaddr)externalviewreturns(bytesprefix,stringurl){return(abi
functionclaim(addressaddr)externalviewreturns(bytesprefix,stringurl){return(abi.encodeWithSelector(claimWithProof.selector,addr),gateway);
这些函数的调用者可以得到两个值:第一个值是一个后续callback的前缀;第二个值是一个网关服务的URL。该前缀保证了两件事:callback会用相关的proof函数来响应,并且其第一个参数会是所提供的地址。这防止了网关用给另一个地址的数据来响应请求。
接下来,我们需要实现一个网关服务来,可以满足客户端的查询请求。以claim1为例,很直接就能实现:
constargs=tokenInterface.decodeFunctionData("claim",data);constbalance=balances;constproof=merkleTree.getProof(addr,balance);returnmerkleInterface.encodeFunctionData("claimWithProof",);
这里的网关服务只需要为客户端所发送的claim调用解码函数调用数据,组装一个证明——或者,在一个实际的L2方案中,参考L2来组装出一个证明——然后将结果编码放在对claimWithProof的调用中,返回给客户端。
最后,客户端验证返回的calldata是否以合约所断言的前缀开始,如果是,则使用交易发送calldata给合约。
claimableBalance的实现也差不多,只是客户端使用calldata来调用合约,将返回值作为调用的最终结果。
安全考虑和信任模型
假设客户端信任了原始合约——我们的意思是,期望该合约会以特定的方式运行,而这可以通过检查它发布的源代码来验证——那么这个系统就不会引入任何新的信任假设。虽然网关的响应是一个外部流程,但其不良行为的范围仅限于拒绝服务。
首先,如果我们信任合约,我们同样也会信任它来制定一个网关URL来回应我们的查询请求。其次,我们也可以信任它来实现充分的验证、保证网关的响应是准确的,既可以通过在第一步中指定calldata前缀、也可以通过在最后一步中验证网关的响应来保证。
因此,一个尝试用不正确的值来响应的网关——无论是提交了不正确的数据,还是不正确的证明——都会被执行验证步骤的合约发现。一个尝试正确响应、但使用非用户所发出请求的对应结果来响应的网关,会在用户的calldata前缀检查中发现。客户端可以通过检查合约的行为来保证这些——或者依赖于某些人对合约的检查——都可以在开始交互前实现。
网关可以完全拒绝响应,也就是拒绝服务,而且这种情况确实可能因为网关恶意或者故障而发生。因为这一点,我们提议,任意最终规范,都应该让用户易于fork服务,并提供自己的网关;就像现在用户能够forkdApp的前端一样。
ENS应用
ENS使用这套系统也会相对直接一些。解析器可以实现本文所述的协议,用于解析任何的数据字段,然后每一个希望支持ENS数据的存储和检索的L2都可以部署新的解析器实现和相应的网关。希望使用L2的用户只需存储自己的记录到合适的L2中,并在以太坊上发送一笔一次性的交易来指定相关的解析器地址,来使用自己的域名。
为了让这个方案更通用,ENS也应该改进,以支持某种形式的通配符解析,使得搜索域名失败时会向解析器咨询该域名的父域名——如果“foo.example.eth”不存在,那客户端就会在解析器内搜索“example.eth”。这一功能使得其它系统可以存储ENS的整个子树,而不仅仅是单个域名的记录。
未解决的问题
虽然某些应用可以从合约指定网关URL所创造的额外间接层中获益,另一些应用,比如上文所示的token合约,最好把这些编码为该合约ABI的一部分来,使得用户更容易fork。一个终极的解决方案最好能支持两种选择,且不会强加不必要的负担。
目前,客户端无法分别出一个返回无效calldata的网关和一个无论如何都会回滚的调用。需要作出一些规定来区分这两种情况——举个例子,如果证明数据的验证不通过的话,要求合约使用一个特定的回滚理由。
它需要一个比“以太坊L2通用桥”更吸引人的名字。
自己试试
我文章所有demo的源代码都可以在这里找到。
来源:科技司广电办发〔2020〕277号各省、自治区、直辖市广播电视局,新疆生产建设兵团文化体育广电和旅游局,总局直属有关单位,中央广播电视总台办公厅、电影频道节目中心、中国教育电视台.
1900/1/1 0:00:00原文:DappRadar译者:Odaily星球日报余顺遂11月5日,DappRadar发布2020年10月DApp生态系统报告。根据报告,2020年10月,以太坊交易量超过470亿美元.
1900/1/1 0:00:00特约作者:不盹编辑:吴说区块链主网上线之后,Filecoin团队于10月21日面向社区发起AMA活动.
1900/1/1 0:00:00在近日举行的一场网络研讨会上,MicroStrategy首席执行官迈克尔?塞勒向Kraken交易所的丹?荷尔德表示,市值2500亿美元的比特币“可以解决价值250万亿美元的问题”.
1900/1/1 0:00:00这两天再次被同一个项目炸群。这是YFI创始人、号称“DeFi之王”的AndreCronje不到4个月时间里发起的第4个项目.
1900/1/1 0:00:0011月7日,CFTC公布了最新一期的CME比特币期货周报,统计周期内BTC保持高位震荡,整周内价格实际波动幅度有限,不过值得注意的是,该统计周期结束后BTC随即走出了一波强度相当可观的加速上涨.
1900/1/1 0:00:00