随着通讯和可视化移动终端设备的逐渐普及,人们簇拥于web3或元宇宙的概念。而对于通往全新世界的道路要怎么走?却没有很明晰的答案。DFINITY在5年的探索经验中,摸索出了”互联网计算机“的道路,它会成为一个行之有效的解决方案吗?
我们邀请到DFINITY核心技术工程师PaulLiu来从其技术底层为我们进行解读。PaulLiu是Dfinity的核心技术工程师,加入Dfinity之前,Paul在英特尔实验室的研究科学家岗位工作了7年。在英特尔实验室时期,他为X86架构构建了一个性能高度优化的Haskell编译器。Paul拥有耶鲁大学博士学位,师从Haskell编译器的发明者之一的PaulHudak博士。Paul是Haskell研讨会和IFL成员,发表过大量学术论文。
介绍
DFINITY是一个总部在瑞士的非盈利组织,所有的收入只能用于一个目的,就是参与研发和推动InternetComputer这个去中心化的开源网络项目。虽然这个项目是由DFINITY主导研发的,但自从上线那一天起,治理系统就已经启动了,而且网络的实际物理节点也是许多个第三方独立运营商自主运营。
整个项目归属于治理代币的持有人,也就是整个社区。DFINITY会作为主要的技术贡献者继续参与开发和推广整个平台,但我们只是贡献者之一。在上线短短三个多月的时间,已经有不少其它的社区团队参与进来。这个平台的发展离不开整个社区的贡献。进一步推动去中心化,是我们当下最主要的目标。
作为InternetComputer这个平台的创建者,DFINITY的愿景是blockchainsingularity,也就是说所有能在互联网上面跑的应用,都应该用区块链的技术构建。
为了做到这一点,我们在TCP/IP层面之上,应用层面之下,添加了一层基于区块链共识技术的协议,我们把它叫做InternetComputerProtocol(ICP)。这一套协议是通过在多个物理节点之间交换数据,构建一个虚拟的子网。
子网内部的节点对输入输出达成共识,相互验证计算结果,并可以和其它子网之间通讯。多个子网组合在一起共同构建出一个虚拟的计算机,容量可以随着子网的增加而增加,谁都可以在上面跑程序,访问其它人的程序,等等。
第三点则是tokenization,也就是应用的代币化。这可以说是整个互联网应用发展的下一个趋势,不可阻挡。传统的云服务商也最多是提供和区块链之间的桥接组件,一整套做下来它的架构不可避免还是相当臃肿的。InternetComputer既然能够直接跑网站,跑应用,作为原生区块链,做tokenization的整合是非常容易的。
问题3
InternetComputer上的每个智能合约都是“可扩展”的,具体说说协议的扩展在技术层面是如何运行的,目前有无扩展的案例?
回答:扩展性有好几个维度,一个是存储空间上的,一个是网络流量上的,还有一个是计算能力,单位时间能够处理多少事务。是否可扩展主要是看能否绕过已知的瓶颈。在一个公共平台上,我们还要考虑不同用户之间,不同应用之间,有限的资源如何分配的问题。
InternetComputer在设计上主要的思路是scaleout,也就是遇到瓶颈时通过增添资源,创建新的子网来解决。这个和主流的web应用的思路基本上是一致的,当一个应用无法通过一个canister来处理所有用户请求的时候,合理的做法是在应用层面上使用多个canister各自处理一部分的用户请求。也就是说在设计应用的时候,需要考虑到这一点,至少要留出一个迁移到新架构的可能性。目前我知道OpenChat的设计是走多个canister的,DSCVR也留有这样的余地,但目前还是集中在一个canister。
从系统层面,通过canister扩容,可以超越目前4G内存的门槛。计算方面,也是从并发的指导思想出发,没有选择以太坊那种全局原子性的设计。所以不同canister处理各自的消息,都是在自己的线程里面,只要硬件负载容许,是不影响其它canister的性能的。至于网络方面,基本上带宽决定了扩展的上限,任何一个区块链都无法避免这个物理瓶颈,只能通过分片,对应到InternetComputer这里就是不同的子网。
当然系统层面也有各种各样的优化方案可以带来性能的提升,我们一直也在做这方面的工作,希望能够充分发挥硬件的性能。
问题4
哪些类型的Dapp更适合搭载于其上?我们发现目前InternetComputer上的DeFi协议比较少,未来InternetComputer上Dapp的赛道都有哪些方向?
回答:DeFi主要还是需要流动性来推动,出于安全考虑,目前尚未开放canister转账ICP的功能,这同时也限制了流动性。不过这个限制是暂时的,目前来看整个网络自从上线后,稳定性还是不错的,在适当的时机相信会通过NNS投票来解除这个限制。我相信已经有不少开发者都做好了准备,DeFi应用的爆发只是时间问题。
我个人对目前InternetComputer上面的socialdapp还是很看好的。这个赛道一旦有了tokenization的加持,会非常迅速成长,绝对不会逊于DeFi和NFT游戏这类的。其它区块链上也有一些社交属性的dapp,但都受制于起步的门槛,毕竟正确使用钱包这一步,就已经难倒了很多用户了。在InternetComputer上面的dapp,使用Web标准的技术,任意浏览器均可访问。
Circle CEO:将通过减少银行存款来保护自己:金色财经报道,在美国联邦政府出手保护现已倒闭的硅谷银行储户几天后,Circle首席执行官Jeremy Allaire在接受CNBC采访时表示,USDC虽恢复锚定但银行系统风险并未完全消失,他解释说,美国金融体系受到更广泛影响的风险似乎是系统性的,我不认为这些风险此时已经完全消散。Circle将通过减少银行存款来保护自己,从Circle的角度来看,主要的预防措施是让我们确保尽可能少地暴露在部分准备金银行系统中的隐含风险。(dailyhodl)[2023/3/16 13:08:23]
另外一个我看好的方向是面向个人用户和面向中小企业的应用。像项目管理,文件共享,创作者经济这种,虽然目前互联网上已经都有比较成熟的解决方案了,但平台风险始终存在。前面也提到云服务的平台风险,相信大家对各种其它领域的巨头垄断都有一定的切身体会。现在去中心化的结构是一个新的可能,平台本身应该变成透明的存在,而不是盘踞在食物链的上游用霸王条款来吞噬用户的利益。
归根结底,哪个赛道有前途,取决它的应用能否快速汇集价值。这个价值,不是说你的项目锁仓有多少,因为这个量它随时都可以在变。而是说有你建立了多少和用户之间的联系,建立了多少和其它应用之间的联系,这种关联随着信任加深,随着用途增多,它会越来越有价值。代码可以粘贴,但这种关联是无法拷贝的。而如果运用得当,代币在一定程度上可以加速价值的聚集,但最终还是取决于项目本身的内在价值。
问题5
Canister作为Webassembly运行的容器,承载了Dapp链上运行的环境。最近关于Canister有哪些新进展?
回答:就在这周一,DFINITY发布了开发路线图,欢迎社区的参与。https://dfinity.org/roadmap。其中和canister相关的的有:
1、Stablememory扩容
2、CanisterECDSA签名
3、应用AMDSEV保护数据隐私
扩容目前主要是针对stablememory也就是不受代码升级影响的内存管理。之前是受到Wasm虚拟机4GB的限制,不过现在已经可以放开,上限受制于子网的内存总量,目前大约在300GB左右吧。
ECDSA阈值签名技术,简单讲就是让每个canister在不存储私钥的前提下,也能对数据做出签名,并且此签名可以通过公钥验证,每个canister都可以得到一个唯一的公钥。这个是和我们已经实现的ChainKey技术一脉相承的,它的应用也很广泛,比如canister可以直接发起一个比特币或者以太坊的交易并且签名。
这意味着原来必须在私密环境下才能把私钥交给程序做的事情,现在可以放到一个去中心化的环境里来做。还可以应用在颁发SSL证书,DNS定制域名等等方面。
当前DeFi全网锁仓量(TVL)达485.3亿美元:金色财经报道,据defillama数据,当前DeFi全网锁仓量(TVL)达485.3亿美元,24小时跌幅为2.18 %。其中,以太坊链上锁仓量283.8亿美元,BSC锁仓量48.9亿美元,Avalanche锁仓量0.937亿美元。Solana锁仓量0.2577亿美元,Polygon锁仓量1.14亿美元。[2023/2/26 12:29:34]
使用AMDSEV的技术主要是为了在一定程度上保护Canister的数据隐私,这样就算是节点运营商也无法窥探用户数据。我们一直在做这方的准备,难度也比较大。好在目前节点所采用的硬件都已经支持SEV技术了,所以到时候希望是一个平稳的升级。
问题6
“开放互联服务”可以实现永久性API,可以让开发者放心地构建依赖于其他服务提供的数据或功能,并且不会存在撤销的风险。“开放互联服务”如何部署到互联网计算机上?
回答:提供永久API最简单的做法是通过把canister控制者设定为空集,来让它的代码成为不可修改的。
我个人也做了一个很简单的canister,叫做blackhole。它的主要目的是让其它canister可以把控制者设成blackhole,这样不仅代码成为不可修改的了,blackhole还提供额外的查询功能,比如查看账面cycles的余额,或者查看代码的哈希值。blackhole本身的控制者被设成它自己,它的代码也是公开,很容易验证哈希值的正确性。如果有需要让自己的canister被其它人信任,把它的控制者设置成blackhole是一个简洁的方法。
但如果还需要保持代码升级功能的话,这就需要引入社区治理功能了。我们正在开发中的ServiceNeuronSystem可以让应用通过锁定代币创建神经元,然后进行投票,来管理应用的方方面面,包括代码升级。
当然我们做的这套SNS系统还在开发中,尚无实例。而且它只是候选方案之一,社区现在已经项目有在这方面做其它的尝试,相信都会逐渐成熟起来。
问题7
安全性是计算机的重要议题,InternetComputer运用哪些机制来替代类似防火墙等功能?在防篡改上,DFINITY与其他区块链底层相比有哪些特点?
回答:防火墙的一个主要功能是防止黑客入侵系统,取得内网权限,从而达到盗取或者篡改数据的目的。首先,这个内网外网权限的划分,就很有问题。它相当脆弱,因为一旦被攻破,内网所有默认的权限都被暴露在攻击者面前了。所以我们看到不少公司已经抛弃了这种做法,改成给每个服务设置权限,使用统一身份管理的技术来对用户授权。
与之对应的则是InternetComputer上面的身份管理。一个公钥对应一个用户的身份,然后每个canister都能够获得调用者的身份。这个身份是无法被第三方篡改的,无论是用户调用canister还是canister之间的调用。之所以能够做到这一点,是因为这种调用必须通过共识协议,尤其是跨子网的调用,在发起方和回应方都要通过共识协议,经过验证才会被认可与执行。
而要快速高效地认证任意子网签名的有效性,就必须用到我们研发的chainkey的技术。它能够在保证阈值签名公钥不变的同时,支持动态的节点连入和移出。这一点其它区块链目前都无法做到,所以在验证交易这方面InternetComputer目前是领先的,它的子网之间基本上不需要同步数据。
想在InternetComputer上面篡改数据,仅仅攻破一个节点的权限是不够的。必须要能够控制一个子网的2/3以上的节点数才能做到。所以子网的安全性在一定程度上取决于节点数量。而且通过节点的不定期轮换,也能进一步加强这方面的安全性。就算是一个子网被攻破,它也无法假冒其它子网的身份,所以损失的范围也是可控的。
保障数据真实可靠不被篡改是一方面,对数据隐私的保障则是另一方面。大多数区块链都是公开数据,所以也谈不上什么隐私保护。真正的隐私保护可以通过应用层面来实现,用同态加密这样的技术,但目前效率不够。所以我们目前的计划是应用AMDSEV技术,在硬件层面加密。但整个InternetComputer的安全性并不依赖于硬件,有SEV的保障是一个加分项。
问题8
DFINITY的名号其实早在6年前就已经打响了,虽然主网上线的过程比较慢,但我们可以看到DFINITY团队是真的想做一些颠覆性的东西,共识也是十分强大的。从“以太坊的姐妹链”到“世界级互联网计算机“的转变受到了哪些因素的影响?
回答:WorldComputer的口号是以太坊最先提出来的,也激励了很多人,虽然现在它更多的是在数DeFi和数字资产方向发力。“世界级互联网计算机”方向也一直是DFINITY努力的目标,并不是融资以后才更改的路线。
起初由于团队条件的限制,只是在BLS和共识协议方面有明确的创新,所以开始第一步是打算先从这方面入手,推出一个链再逐步迭代。但后来我们意识到,不解决跨子网通信的问题,那我们将永远停留在“又一个区块链”的窠臼中,难以创新。也正是因为团队的坚持,才有了在chainkey方面的突破,解决了跨子网验证的难题,实现了scalability的承诺。
回头来看,其实我们只要不断地问自己一个问题:为什么去中心化的区块链不可以跑网站?
首先要解决一个效率问题,就是访问网站是需要毫秒级的响应的,怎么能做到?我们的答案是把只读的查询和状态的修改分开,那么99%的网络流量都是只读的,是可以做到毫秒级响应的。修改状态我们也通过共识协议方面的创新做到两到三秒之内的响应。
效率达到了,那如何验证内容的正确性?如何让普通的浏览器也能做到?那就必须精简验证的所需要的条件。能不能抛弃历史区块,仅仅通过一个公钥?用BLS公钥的话,怎么解决节点动态变化的问题?怎么解决中心化域名和SSL证书的问题?访问流量增多的话,如何扩容?扩容的瓶颈和边界在哪里?扩容的需求和同步合约调用的方式冲突了怎么办?
只要你不停地追问下去,不停地寻找答案,相信一个切实可行的方案会逐步浮现出来。这也是DFINITY过去几年坚持在做的事情。
问题9
以太坊刚完成EIP-1559升级,迈出了通缩的第一步,代币价格也逐渐走高。你认为对于去中心化基础设施来说,代币的表现给支持者激励更大还是技术上的颠覆性更重要?怎么做到两者的相对平衡?
回答:我是这样看的,代币的短期表现取决于市场参与者的信心与预期,长期表现还是要回归平台的价值本身。以太坊的技术可以说是经历了时间的检验,尽管有各种不足之处,还是得到了加密货币整个市场的认可。至于通缩还是通胀,各有弊端,我是不太能够认同BTCmaximalist那套说辞的。DeFi在流动性和激励方面的创新也是非常精彩,不过放长来看,多数项目其实并没有增加价值,更多的是一场数字的游戏。短期通过代币价格的提升得到的用户,也可能因为价格回落,或者另一个项目的崛起而流失用户。
技术的创新,也很容易被竞争对手拷贝过去。不过我们从整体来看,这些创新是一直推动整个行业向前的。落到单个项目上,到底能否因为纯粹技术创新而获益,还真不好说。业内都在说生态建设,生态项目在一个平台上到底能有多少保障,尤其是初创平台,怎么能说服开发者来投入,不是一件容易的事情。
我觉得最值得努力的方向就是把尽力圈子扩大,从支付转账,到DeFi,到NFT和游戏,就是一个不断开疆扩土的进程。在这个大趋势下,尽力把区块链技术拓展到更广泛的领域中去,比如让原生网站跑在区块链上这种目标。用技术的创新和代币的激励,一起来获取新的用户,才能繁荣生态,提升价值。
问题10
很多人认为InternetComputer是web3应用的主要阵地。每条公链或多或少都有自己对于web3的见解和技术实现路径,如波卡、以太。DFINITY对于通往web3之路的见解和未来规划/Roadmap是怎样的?
回答:DFINITY的宗旨是抛开一切不必要的包袱,向BlockchainSingularity的目的地进发。InternetComputer这个项目还有许多未能完善的地方,离完全实现这个目标还有一定的距离,我们希望更多的人能加入进来,一起推进平台本身的技术进步和构建更丰富多彩的上层项目,来赢得客户。
每个的公链侧重点不太一样,我们相信一切能用区块链构建的,最终一定会用区块链实现。所以也并不排斥结合其它公链的技术,比如我们周一发布的路线图中,有和以太坊、比特币的深度整合项目,对双方而言都是一个完美的互补。这会进一步激发资产跨链的流动与融合,简化应用架构,抛弃云服务这种中心化的包袱,从而提升应用整体的安全性和强壮性。
跑网站是重要的一步,但它只是InternetComputer的第一步。我相信当下InternetComputer所打下的基础,一定会在未来成为BlockchainSingularity这个宏伟拼图的一部分。
问题11
请问下CanisterSignature是什么?Canister用于签名的私钥存放在哪里?Canister里是否支持类似以太坊智能合约的Event机制,可以通过订阅来获取某个updatecall是否是caller根据返回值获取?最后,普通Canister什么时候可以处理ICP代币?
回答:CanisterSignature是指用子网的公钥给canister的计算结果做签名。目前我们使用的是BLS阈值签名,它有一个很好的特性就是公钥和签名的唯一性,是其它聚合签名的技术不具备的。
阈值签名,简单讲就是各个不同的节点,它们有各自的私钥对计算结果签名,一旦集齐了达到限定数量的签名,则可以得出一个唯一的阈值签名,用一个公钥即可验证,所以这个公钥被当作是子网的公钥。这里是没有一个相对应的子网私钥的,节点的私钥是各存各的,都不一样。
一个子网上可以跑很多canister,用merkletree的方法,很容易得到指向其中一个canister计算结果的路径,所以可以把子网的签名加上这个路径看作是Canister对某条数据的签名。
Canistersignature一定程度上相当于eventlog或者收据。因为我们不要求节点保留所有的历史区块,单独为了eventlog做这些也没有很大意义。毕竟通过querycall和certifiedvar也能实现这样的功能,并且更强大。
Canister处理ICP代币在技术上早就不是问题,是因为安全的考量才没有放开权限。随着系统的稳定我们的信心也增强不少,所以如果没有意外,估计近期就会通过社区投票来决定。
社区提问
提问:我发现icp的开发者比较喜欢开发社交应用,请问icp为什么适用于开发社交应用或者开发者为什么喜欢在icp开发社交应用?
回答:我的理解,价值的聚集,首先是来自人的聚集。所以一旦一个区块链平台可以直接把人聚集起来,一定会有这样社交类的项目诞生。但现在的Web环境下想要做出一个社交类的爆款相当不易,所以这些项目一定会去尝试不同的玩法。tokenization代币化还没有固定的套路,我也很期待看到这里面的创新。
提问:开发中有个担心,举个例子A容器调用B容器,B容器调用C容器,如果在C容器更新了状态,正常返回值给B容器之后,B容器挂了,此次A容器也会失败但是,C容器的状态已经变更了,有没有推荐的方案解决类似的原子性问题?
回答:以太坊的原子性设计是一旦调用栈上的一个合约发生状态回滚,所有的合约都必须状态回滚。这意味着有一个全局锁,在处理一条用户事务会锁住所有相关的合约,直到它全部处理完成,在此期间被锁住的合约不能处理任何其它事务。这样的设计虽然开发者编程方便,但是先天缺陷是性能无法扩展。所以我们在最初设计canister的模型时就摒弃了这种做法。
如果需要这方面的组合性,传统数据库已经有很成熟的解决方案了,比如两步提交(two-phasecommit)。这在完全可以在应用层面商议一个标准经由canister接口实现,不一定需要在系统层面支持。
系统设计上总是要做一定的取舍,有时候添加限制比较好,有时候提供选择比较好。我们的看法是单个方法调用符合原子性是一个比较合适的粒度,没有必要强制整个调用栈一起做原子化。
提问:我是个币圈小白,觉得Dfinity生态上的钱包太难用,后期会改变吗?
回答:首先现在的钱包,所谓的互联网身份II不是必须的,它是一个可选项。我自己做的App就没有用它。其次,我的理解是现在各个设备使用浏览器的支持比较好,但是手机上App的支持有一定难度,这需要进一步的研发工作。在中国使用安卓手机的用户,如果上面不能安装GooglePlay服务的话,会导致无法使用WebAuthn,这也需要一个合适的解决方案,我们正在调研。
提问:我是一名正在互联网计算机上构建应用的开发者。我想问后端何时可以进行外部http/https调用?此外,由于每个容器4GB的限制,我必须实现我的分布式存储系统,那么BigMap什么时候发布或有其他更好的可扩展文件存储方式吗?
回答:对外部进行http/https调用可以分开看,一个是读,一个是写。前者需要预言机,后者如果对方满足ren-entrancy则完全是可行的。
提问:以太坊上的DAPP可以直接转到IC上用吗?
回答:solidity可以编译到Wasm了,但编程模式不太一样,而且需要支持的系统接口也不一样,所以还需要做一定的工作才能支持。
提问:问一个共识的问题,子网中共识属于PoS吗?子网节点共识中作恶的话,是否有惩罚机制呢?
回答:是PoS,目前没有要求节点质押代币。因为是准入机制,节点不可以匿名,所以相关的惩罚机制比较容易实现。节点需要定期领代币作为工资,目前的惩罚机制是从中扣除。
提问:stoic钱包助记词不能导入plug钱包,问了一下stoic开发者,说是加密算法选择的不同。同时我看官方的钱包助记词更不一样,这个后续会有统一的标准吗?能够实现像以太坊那样的一个助记词多个钱包导入吗?
回答:的确会造成一个不通用的问题,所以短期内只能提醒用户标注一下哪个助记词是哪家的。长期来看,希望社区能够协商达成一个通用标准。
如果你对于Dfinity生态感兴趣,请关注星际视界公众号并回复“ICP”,进入Dfinity生态探索交流群。
——End——
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。