随着通讯和可视化移动终端设备的逐渐普及,人们簇拥于web3或元宇宙的概念。而对于通往全新世界的道路要怎么走?却没有很明晰的答案。DFINITY在5年的探索经验中,摸索出了”互联网计算机“的道路,它会成为一个行之有效的解决方案吗?
8月19日晚,DFINITY核心技术工程师PaulLiu做客Odaily星球日报“超话社区”,从技术底层为我们解读Dfinity。加入Dfinity之前,Paul在英特尔实验室的研究科学家岗位工作了7年。在英特尔实验室时期,他为X86架构构建了一个性能高度优化的Haskell编译器。Paul拥有耶鲁大学博士学位,师从Haskell编译器的发明者之一的PaulHudak博士。Paul是Haskell研讨会和IFL成员,发表过大量学术论文。除了Paul的分享之外,社区小伙伴对DFINITY进行了激烈的讨论,文末附社区提问。
以下为AMA精华整理,enjoy~
Odaily星球日报:DFINITY的定位是“InternetComputer互联网计算机”,在物理层和互联网基础协议层面,与传统计算机网络相比,InternetComputer会有哪些不同?
PaulLiu:首先我介绍一下DFINITY。这是一个总部在瑞士的非盈利组织,所有的收入只能用于一个目的,就是参与研发和推动InternetComputer这个去中心化的开源网络项目。虽然这个项目是由DFINITY主导研发的,但自从上线那一天起,治理系统就已经启动了,而且网络的实际物理节点也是许多个第三方独立运营商自主运营。目前上线三个月,已经有53个运营商在20个数据中心部署了209个节点。
整个项目归属于治理代币的持有人,也就是整个社区。DFINITY会作为主要的技术贡献者继续参与开发和推广整个平台,但我们只是贡献者之一。在上线短短三个多月的时间,已经有不少其它的社区团队参与进来。这个平台的发展离不开整个社区的贡献。进一步推动去中心化,是我们当下最主要的目标。
作为InternetComputer这个平台的创建者,DFINITY的愿景是blockchainsingularity,也就是说所有能在互联网上面跑的应用,都应该用区块链的技术构建。
为了做到这一点,我们在TCP/IP层面之上,应用层面之下,添加了一层基于区块链共识技术的协议,我们把它叫做InternetComputerProtocol(ICP)。这一套协议是通过在多个物理节点之间交换数据,构建一个虚拟的子网。子网内部的节点对输入输出达成共识,相互验证计算结果,并可以和其它子网之间通讯。多个子网组合在一起共同构建出一个虚拟的计算机,容量可以随着子网的增加而增加,谁都可以在上面跑程序,访问其它人的程序,等等。
不过这听起来和我们现在的互联网好像也没什么差别,尤其是microservice的概念。那为什么现在的互联网不能叫做InternetComputer呢?这个差别就在于这一套ICP的协议。这个协议的目的是确保所有程序都被正确执行,它们的状态无法被篡改,当一个程序调用另一个程序时,它是可以信任这个调用会被正确执行的。目前的互联网因为缺少这一层协议,导致所有的程序都要自行解决可用性、可靠性以及相互之间的授权等等繁琐的问题,并因此带来各种不兼容和安全性上的包袱。
这里面的核心就是可信任计算,有个说法叫trustlesstrust我觉得很贴切,无需信任的信任。区块链从比特币开始到今天的发展,也应证了可信任计算的威力。但绝大部分应用还是集中在金融领域,而我们的目的是拓展到更广阔的互联网领域上去。为什么区块链上不可以直接跑网站?为什么验证区块链上的计算需要整个链的历史数据?只有正面解决这些问题,才能让区块链成为互联网的核心技术,而不仅仅是停留在记录和转账的层面。
Odaily星球日报:InternetComputer提供了全新的程序构建范式,有自己的一套“行话”,可否简单介绍这些“行话”以及你认为对于开发者来说,最有用的基础设施有哪些?
动态 | Upbit黑客钱包地址转移了11001枚以太坊至未知钱包地址:据Whale Alert监测显示,北京时间15:46:59,被标记为Upbit黑客钱包地址(0x4d53dad4b开头)转移了1001 枚ETH(价值约148,911美元)至0x519a3b21开头的未知钱包地址。随后在北京时间15:52:48,Upbit这一黑客钱包地址又转移10000枚ETH(价值1490311美元)至该未知钱包地址。[2019/12/3]
PaulLiu:可以从几个不同的角度来聊一下。从终端用户来看,访问一个InternetComputer上的应用和访问一个普通网站基本上没有什么不同,使用者并不需要支付任何费用。这和使用传统云服务的时候,费用由项目方承担是同一个意思。其它大多数区块链都是要向使用者收取gas费用,需要预装钱包软件,门槛比较高。
运营一个应用的成本,包括计算和存储等,是以InternetComputer的原生代币cycles来衡量。cycles的价格锚定SDR,1SDR=1TrillionCycles。SDR的价格是国际货币基金组织设定的一篮子货币加权得来的,包括美元人民币等,相对稳定。
回到用户角度,他们不必在意cycles这个概念。但很多应用需要处理用户登录,为此InternetComputer上面也推出了一套匿名的身份管理系统,我们把它做InternetIdentity。这套系统完全是基于web标准,用户不需要安装钱包软件也能使用。所有这些都是为了降低用户使用的门槛,让区块链的应用能够真正走出去。InternetIdentity主要是为了解决一个身份在多个设备登录的问题。而且这个身份在不同的应用中,应用所拿到的代号是不一样的,这可以防止用户的行为被恶意跟踪。最后,InternetIdentity本身也是一个上层应用,在整个系统里也没有特殊的权限,其它应用可以选择用它也可以不用。我们现在也看到由其它的开发者开发的钱包和的身份认证系统,都可以选择,都是可行的。
最后,用户可能也有兴趣参与InternetComputer的治理。这是一个叫做NNS的神经元投票系统,算是我们的一个创新吧。它也是应用层面的,不过它有一个比较特殊的权限,那就是能够管理所有InternetComputer的子网和整个系统的方方面面,包括节点运行的代码,版本升级,创建新子网,接入新节点等等。要参与投票,首先需要持有ICP代币,锁定一定数量的ICP来得到一个神经元,投票的权重和锁仓数量,锁仓时长,以及神经元的年龄都相关。参与投票也会得到奖励,奖励的多少和投了赞成还是反对无关。还可以跟随其它神经元的决策,自动进行投票。总体这些设定上是为了让用户投票的行为和平台的长期利益挂钩,并奖励用户做出的贡献。
谈了用户角度,那我们再从开发者角度来看一下。跑在InternetComputer上的应用程序,是封装在一个叫canister的轻量级容器里面。这个通常大家比较熟悉的docker容器的概念有点不太一样,canister不仅仅是封装了代码,而且自动对容器的状态做持久化。可以简单理解为一个长期运行的操作系统进程,进程的状态包括内存和消息队列,都是自动保存了,不会因为开机关机而丢失。这意味着在InternetComputer上面已经剥离文件系统的概念,开发者不需要考虑读写文件和硬盘来保存数据,这是一个相当大的简化。
Canister的代码是采用了WebAssembly(Wasm)的字节码,这个一个最新的轻量级虚拟机的技术。任何能够编译到Wasm的语言都可以作为开发语言。目前支持比较好的两种语言是Rust和Motoko,但用C语言也是可以的。Motoko是我们开发的编程语言,利用了一些InternetComputer的特性,附带自动内存管理,不像Rust和C那么底层,属于Javascript,TypeScript或者Swift这个抽象层次,上手比较容易。当然目前生态还在发展中,库函数还有待丰富。
动态 | 以太坊游戏Gods Unchained交易量激增 超过CryptoKitties顶峰时期交易量:11月12日,区块链研究平台Coin Metrics发布文章指出,以太坊集换式卡牌游戏Gods Unchained于过去一个月活动激增,其代币交易量超过CryptoKitties 2017年顶峰时期的交易量。上周末,Gods Unchained每天交易量超50万笔,而CryptoKitties最火爆时也不够10万笔。此前8月消息,Gods Unchained曾称其卡牌拍卖价达到146枚ETH。[2019/11/13]
另一个开发者需要了解的是canister之间的通信模式是异步的,属于actormodel。也就是每个canister都是自己的进程,和其它canister发消息来通信,也就是异步方法调用。一个canister内部消息队列的处理都是单线程,不需要考虑锁,每一个方法调用都是满足原子性的。熟悉actormodel编程的很容易上手。
开发一个应用,通常canister容器是作为后端的,前端交互可以是在浏览器里,也可以是单独的APP。之前也提到InternetComputer可以直接跑网站,这里就是说canister可以自行实现httprequest的接口,返回网页包括Javascript到用户的终端。前端后端可以一起打包成canister部署到InternetComputer上。前端开发我们有现成的库可以使用,Javascript和Rust都有。前端需要调用后端代码的时候,直接做一个异步函数await调用就好了,底层都已由库函数实现。如果需要了解更多的话,这里面有一个接口和数据编码的格式,叫做Candid,支持多个语言的实现。Canister对外部的接口和数据类型,都是用Candid来描述的。
总的来看,开发者需要了解的都是围绕着Canister这个概念展开的。WebAssembly,Actormodel,OrthogonalPersistence,Motoko,Candid。我还推荐了解一下SystemAPI也就是InternetComputer接口的标准https://sdk.dfinity.org/docs/interface-spec/
这个资料很详细,涉及了整个系统的方方面面,而且我们做了不少形式化的努力,定义了接口的语义,方便开发者深入理解系统的行为。
如果是做系统层面的开发,比如共识协议,虚拟机,等等,那可以谈的就更多了,可以去看DFINITY官网上技术图书馆的视频系列https://dfinity.org/technicals
Odaily星球日报:与传统的阿里云、腾讯云、AWS等平台相比,InternetComputer有什么不同?它们也是公司自建的私有云服务,也是用的数据中心,异地备援,多节点运行的。
PaulLiu:目前的云服务平台,都是基于一个基础的假设,你必须依赖这个平台的提供者能够维护平台的安全性,保持网络联通,计算不间断,数据不丢失,等等。商业平台自身的利益和它所服务的用户之间的利益,虽然多数时候不冲突,但也不是完全一致的。有一个大家应该都比较熟悉的概念PlatformRisk,这里就不展开讲了。但最重要的一点,这些云平台基础设施提供商,都不希望自己成为commodity,都在各尽所能留存和锁住客户。
InternetComputer首先是作为一个去中心的网络存在的。里面的节点都是由第三方运营,跑在不同的数据中心里。而真个网络的治理,是交给用户的,并不由节点运营商,或者是数据中心来主导。所以这里面并没有一个中心化的商业机构来做所有的决策。整个治理系统的设计,也是尽量从长远的角度出发,希望保持用户的利益和平台发展的一致性。这个平台是付费给节点运营商的,某一个节点到底是由张三还是李四来运行根本不影响,这是一个自由市场。所以对于InternetComputer而言,硬件和网络这些基础设施,已经成为了commodity。
动态 | 意大利金融机构Banca Mediolanum在以太坊上证明非金融可行性:据Coinidol消息,意大利金融机构之一Banca Mediolanum宣布,它已经证明了在以太坊(ETH)区块链上的非金融报表(DNF)的非金融可行性(hash)。该金融机构透露,它将很快在其官方网站上发布哈希表,以确保其内容绝对不变。[2019/4/8]
回顾整个PC行业的发展史,我们其实可以看到,基础设施成为commodity是历史的必然规律,在云服务这里我相信也不会是一个例外。
可以说InternetComputer这样的计算平台,已经和硬件的基础设施建设剥离开了。这种商业模式,如果没有去中心化,如果没有区块链的技术,是没法想象的。但今天它已可以成为一个现实,这是时代进步的最好诠释。从比特币以太坊一路走来,有的人只是看到了币价炒作和旁氏局就对这个新兴事物持否定态度,其实时代的变革就在眼前。
除开利益方面的一致性,另一个方面用要更先进的技术来简化系统冗余,从而节省整个平台开销,也意味着为用户带来节省。前面我们也说了不少可信任计算的优势,其实这里面还要加上一个分布式的优势,和一个使用前沿的加密技术的优势。它们意味着很多传统的技术维护方面的工作,比如防火墙这种,基本上已经不再必要。一个客户要想使用好目前这些云平台,它必须要在运维上投入很多。而InternetComputer则能够节省很多这方面的成本。
第三点则是tokenization,也就是应用的代币化。这可以说是整个互联网应用发展的下一个趋势,不可阻挡。传统的云服务商也最多是提供和区块链之间的桥接组件,一整套做下来它的架构不可避免还是相当臃肿的。InternetComputer既然能够直接跑网站,跑应用,作为原生区块链,做tokenization的整合是非常容易的。
Odaily星球日报:InternetComputer上的每个智能合约都是“可扩展”的,具体说说协议的扩展在技术层面是如何运行的,目前有无扩展的案例?
PaulLiu:扩展性有好几个维度,一个是存储空间上的,一个是网络流量上的,还有一个是计算能力,单位时间能够处理多少事务。是否可扩展主要是看能否绕过已知的瓶颈。在一个公共平台上,我们还要考虑不同用户之间,不同应用之间,有限的资源如何分配的问题。
InternetComputer在设计上主要的思路是scaleout,也就是遇到瓶颈时通过增添资源,创建新的子网来解决。这个和主流的web应用的思路基本上是一致的,当一个应用无法通过一个canister来处理所有用户请求的时候,合理的做法是在应用层面上使用多个canister各自处理一部分的用户请求。也就是说在设计应用的时候,需要考虑到这一点,至少要留出一个迁移到新架构的可能性。目前我知道OpenChat的设计是走多个canister的,DSCVR也留有这样的余地,但目前还是集中在一个canister。
从系统层面,通过canister扩容,可以超越目前4G内存的门槛。计算方面,也是从并发的指导思想出发,没有选择以太坊那种全局原子性的设计。所以不同canister处理各自的消息,都是在自己的线程里面,只要硬件负载容许,是不影响其它canister的性能的。至于网络方面,基本上带宽决定了扩展的上限,任何一个区块链都无法避免这个物理瓶颈,只能通过分片,对应到InternetComputer这里就是不同的子网。
当然系统层面也有各种各样的优化方案可以带来性能的提升,我们一直也在做这方面的工作,希望能够充分发挥硬件的性能。
Odaily星球日报:哪些类型的Dapp更适合搭载于其上?我们发现目前InternetComputer上的DeFi协议比较少,未来InternetComputer上Dapp的赛道都有哪些方向?
PaulLiu:DeFi主要还是需要流动性来推动,出于安全考虑,目前尚未开放canister转账ICP的功能,这同时也限制了流动性。不过这个限制是暂时的,目前来看整个网络自从上线后,稳定性还是不错的,在适当的时机相信会通过NNS投票来解除这个限制。我相信已经有不少开发者都做好了准备,DeFi应用的爆发只是时间问题。
我个人对目前InternetComputer上面的socialdapp还是很看好的。这个赛道一旦有了tokenization的加持,会非常迅速成长,绝对不会逊于DeFi和NFT游戏这类的。其它区块链上也有一些社交属性的dapp,但都受制于起步的门槛,毕竟正确使用钱包这一步,就已经难倒了很多用户了。在InternetComputer上面的dapp,使用Web标准的技术,任意浏览器均可访问。
另外一个我看好的方向是面向个人用户和面向中小企业的应用。像项目管理,文件共享,创作者经济这种,虽然目前互联网上已经都有比较成熟的解决方案了,但平台风险始终存在。前面也提到云服务的平台风险,相信大家对各种其它领域的巨头垄断都有一定的切身体会。现在去中心化的结构是一个新的可能,平台本身应该变成透明的存在,而不是盘踞在食物链的上游用霸王条款来吞噬用户的利益。
归根结底,哪个赛道有前途,取决它的应用能否快速汇集价值。这个价值,不是说你的项目锁仓有多少,因为这个量它随时都可以在变。而是说有你建立了多少和用户之间的联系,建立了多少和其它应用之间的联系,这种关联随着信任加深,随着用途增多,它会越来越有价值。代码可以粘贴,但这种关联是无法拷贝的。而如果运用得当,代币在一定程度上可以加速价值的聚集,但最终还是取决于项目本身的内在价值。
Odaily星球日报:Canister作为Webassembly运行的容器,承载了Dapp链上运行的环境。最近关于Canister有哪些新进展?
PaulLiu:就在这周一,DFINITY发布了开发路线图,欢迎社区的参与。https://dfinity.org/roadmap
其中和canister相关的的有:
·Stablememory扩容
·CanisterECDSA签名
·应用AMDSEV保护数据隐私
扩容目前主要是针对stablememory也就是不受代码升级影响的内存管理。之前是受到Wasm虚拟机4GB的限制,不过现在已经可以放开,上限受制于子网的内存总量,目前大约在300GB左右吧。
ECDSA阈值签名技术,简单讲就是让每个canister在不存储私钥的前提下,也能对数据做出签名,并且此签名可以通过公钥验证,每个canister都可以得到一个唯一的公钥。这个是和我们已经实现的ChainKey技术一脉相承的,它的应用也很广泛,比如canister可以直接发起一个比特币或者以太坊的交易并且签名。这意味着原来必须在私密环境下才能把私钥交给程序做的事情,现在可以放到一个去中心化的环境里来做。还可以应用在颁发SSL证书,DNS定制域名等等方面。
使用AMDSEV的技术主要是为了在一定程度上保护Canister的数据隐私,这样就算是节点运营商也无法窥探用户数据。我们一直在做这方的准备,难度也比较大。好在目前节点所采用的硬件都已经支持SEV技术了,所以到时候希望是一个平稳的升级。
Odaily星球日报:“开放互联服务”可以实现永久性API,可以让开发者放心地构建依赖于其他服务提供的数据或功能,并且不会存在撤销的风险。“开放互联服务”如何部署到互联网计算机上?
PaulLiu:提供永久API最简单的做法是通过把canister控制者设定为空集,来让它的代码成为不可修改的。我个人也做了一个很简单的canister,叫做blackhole。它的主要目的是让其它canister可以把控制者设成blackhole,这样不仅代码成为不可修改的了,blackhole还提供额外的查询功能,比如查看账面cycles的余额,或者查看代码的哈希值。blackhole本身的控制者被设成它自己,它的代码也是公开,很容易验证哈希值的正确性。如果有需要让自己的canister被其它人信任,把它的控制者设置成blackhole是一个简洁的方法。
但如果还需要保持代码升级功能的话,这就需要引入社区治理功能了。我们正在开发中的ServiceNeuronSystem可以让应用通过锁定代币创建神经元,然后进行投票,来管理应用的方方面面,包括代码升级。当然我们做的这套SNS系统还在开发中,尚无实例。而且它只是候选方案之一,社区现在已经项目有在这方面做其它的尝试,相信都会逐渐成熟起来。
Odaily星球日报:安全性是计算机的重要议题,InternetComputer运用哪些机制来替代类似防火墙等功能?在防篡改上,DFINITY与其他区块链底层相比有哪些特点?
PaulLiu:防火墙的一个主要功能是防止黑客入侵系统,取得内网权限,从而达到盗取或者篡改数据的目的。首先,这个内网外网权限的划分,就很有问题。它相当脆弱,因为一旦被攻破,内网所有默认的权限都被暴露在攻击者面前了。所以我们看到不少公司已经抛弃了这种做法,改成给每个服务设置权限,使用统一身份管理的技术来对用户授权。
与之对应的则是InternetComputer上面的身份管理。一个公钥对应一个用户的身份,然后每个canister都能够获得调用者的身份。这个身份是无法被第三方篡改的,无论是用户调用canister还是canister之间的调用。之所以能够做到这一点,是因为这种调用必须通过共识协议,尤其是跨子网的调用,在发起方和回应方都要通过共识协议,经过验证才会被认可与执行。而要快速高效地认证任意子网签名的有效性,就必须用到我们研发的chainkey的技术。它能够在保证阈值签名公钥不变的同时,支持动态的节点连入和移出。这一点其它区块链目前都无法做到,所以在验证交易这方面InternetComputer目前是领先的,它的子网之间基本上不需要同步数据。
想在InternetComputer上面篡改数据,仅仅攻破一个节点的权限是不够的。必须要能够控制一个子网的2/3以上的节点数才能做到。所以子网的安全性在一定程度上取决于节点数量。而且通过节点的不定期轮换,也能进一步加强这方面的安全性。就算是一个子网被攻破,它也无法假冒其它子网的身份,所以损失的范围也是可控的。
保障数据真实可靠不被篡改是一方面,对数据隐私的保障则是另一方面。大多数区块链都是公开数据,所以也谈不上什么隐私保护。真正的隐私保护可以通过应用层面来实现,用同态加密这样的技术,但目前效率不够。所以我们目前的计划是应用AMDSEV技术,在硬件层面加密。但整个InternetComputer的安全性并不依赖于硬件,有SEV的保障是一个加分项。
Odaily星球日报:DFINITY的名号其实早在6年前就已经打响了,虽然主网上线的过程比较慢,但我们可以看到DFINITY团队是真的想做一些颠覆性的东西,共识也是十分强大的。从“以太坊的姐妹链”到“世界级互联网计算机“的转变受到了哪些因素的影响?
PaulLiu:WorldComputer的口号是以太坊最先提出来的,也激励了很多人,虽然现在它更多的是在数DeFi和数字资产方向发力。“世界级互联网计算机”方向也一直是DFINITY努力的目标,并不是融资以后才更改的路线。起初由于团队条件的限制,只是在BLS和共识协议方面有明确的创新,所以开始第一步是打算先从这方面入手,推出一个链再逐步迭代。但后来我们意识到,不解决跨子网通信的问题,那我们将永远停留在“又一个区块链”的窠臼中,难以创新。也正是因为团队的坚持,才有了在chainkey方面的突破,解决了跨子网验证的难题,实现了scalability的承诺。
回头来看,其实我们只要不断地问自己一个问题:为什么去中心化的区块链不可以跑网站?首先要解决一个效率问题,就是访问网站是需要毫秒级的响应的,怎么能做到?我们的答案是把只读的查询和状态的修改分开,那么99%的网络流量都是只读的,是可以做到毫秒级响应的。修改状态我们也通过共识协议方面的创新做到两到三秒之内的响应。效率达到了,那如何验证内容的正确性?如何让普通的浏览器也能做到?那就必须精简验证的所需要的条件。能不能抛弃历史区块,仅仅通过一个公钥?用BLS公钥的话,怎么解决节点动态变化的问题?怎么解决中心化域名和SSL证书的问题?访问流量增多的话,如何扩容?扩容的瓶颈和边界在哪里?扩容的需求和同步合约调用的方式冲突了怎么办?
只要你不停地追问下去,不停地寻找答案,相信一个切实可行的方案会逐步浮现出来。这也是DFINITY过去几年坚持在做的事情。
Odaily星球日报:以太坊刚完成EIP-1559升级,迈出了通缩的第一步,代币价格也逐渐走高。你认为对于去中心化基础设施来说,代币的表现给支持者激励更大还是技术上的颠覆性更重要?怎么做到两者的相对平衡?
PaulLiu:我是这样看的,代币的短期表现取决于市场参与者的信心与预期,长期表现还是要回归平台的价值本身。以太坊的技术可以说是经历了时间的检验,尽管有各种不足之处,还是得到了加密货币整个市场的认可。至于通缩还是通胀,各有弊端,我是不太能够认同BTCmaximalist那套说辞的。DeFi在流动性和激励方面的创新也是非常精彩,不过放长来看,多数项目其实并没有增加价值,更多的是一场数字的游戏。短期通过代币价格的提升得到的用户,也可能因为价格回落,或者另一个项目的崛起而流失用户。
技术的创新,也很容易被竞争对手拷贝过去。不过我们从整体来看,这些创新是一直推动整个行业向前的。落到单个项目上,到底能否因为纯粹技术创新而获益,还真不好说。业内都在说生态建设,生态项目在一个平台上到底能有多少保障,尤其是初创平台,怎么能说服开发者来投入,不是一件容易的事情。
我觉得最值得努力的方向就是把尽力圈子扩大,从支付转账,到DeFi,到NFT和游戏,就是一个不断开疆扩土的进程。在这个大趋势下,尽力把区块链技术拓展到更广泛的领域中去,比如让原生网站跑在区块链上这种目标。用技术的创新和代币的激励,一起来获取新的用户,才能繁荣生态,提升价值。
Odaily星球日报:很多人认为InternetComputer是web3应用的主要阵地。每条公链或多或少都有自己对于web3的见解和技术实现路径,如波卡、以太。DFINITY对于通往web3之路的见解和未来规划/Roadmap是怎样的?
PaulLiu:DFINITY的宗旨是抛开一切不必要的包袱,向BlockchainSingularity的目的地进发。InternetComputer这个项目还有许多未能完善的地方,离完全实现这个目标还有一定的距离,我们希望更多的人能加入进来,一起推进平台本身的技术进步和构建更丰富多彩的上层项目,来赢得客户。每个的公链侧重点不太一样,我们相信一切能用区块链构建的,最终一定会用区块链实现。所以也并不排斥结合其它公链的技术,比如我们周一发布的路线图中,有和以太坊、比特币的深度整合项目,对双方而言都是一个完美的互补。这会进一步激发资产跨链的流动与融合,简化应用架构,抛弃云服务这种中心化的包袱,从而提升应用整体的安全性和强壮性。跑网站是重要的一步,但它只是InternetComputer的第一步。我相信当下InternetComputer所打下的基础,一定会在未来成为BlockchainSingularity这个宏伟拼图的一部分。
Q1:请问下CanisterSignature是什么?Canister用于签名的私钥存放在哪里?另外,Canister里是否支持类似以太坊智能合约的Event机制,可以通过订阅来获取某个updatecall是否是caller根据返回值获取?最后,普通Canister什么时候可以处理ICP代币?
回答:CanisterSignature是指用子网的公钥给canister的计算结果做签名。目前我们使用的是BLS阈值签名,它有一个很好的特性就是公钥和签名的唯一性,是其它聚合签名的技术不具备的。阈值签名,简单讲就是各个不同的节点,它们有各自的私钥对计算结果签名,一旦集齐了达到限定数量的签名,则可以得出一个唯一的阈值签名,用一个公钥即可验证,所以这个公钥被当作是子网的公钥。这里是没有一个相对应的子网私钥的,节点的私钥是各存各的,都不一样。一个子网上可以跑很多canister,用merkletree的方法,很容易得到指向其中一个canister计算结果的路径,所以可以把子网的签名加上这个路径看作是Canister对某条数据的签名。
Canistersignature一定程度上相当于eventlog或者收据。因为我们不要求节点保留所有的历史区块,单独为了eventlog做这些也没有很大意义。毕竟通过querycall和certifiedvar也能实现这样的功能,并且更强大。
Canister处理ICP代币在技术上早就不是问题,是因为安全的考量才没有放开权限。随着系统的稳定我们的信心也增强不少,所以如果没有意外,估计近期就会通过社区投票来决定。
Q2:我发现DFINITY的开发者比较喜欢开发社交应用,请问DFINITY为什么适用于开发社交应用或者开发者为什么喜欢在DFINITY开发社交应用?
回答:我的理解,价值的聚集,首先是来自人的聚集。所以一旦一个区块链平台可以直接把人聚集起来,一定会有这样社交类的项目诞生。但现在的Web环境下想要做出一个社交类的爆款相当不易,所以这些项目一定会去尝试不同的玩法。tokenization代币化还没有固定的套路,我也很期待看到这里面的创新。
Q3:开发中有个担心,举个例子A容器调用B容器,B容器调用C容器,如果在C容器更新了状态,正常返回值给B容器之后,B容器挂了,此次A容器也会失败但是,C容器的状态已经变更了,有没有推荐的方案解决类似的原子性问题?
回答:以太坊的原子性设计是一旦调用栈上的一个合约发生状态回滚,所有的合约都必须状态回滚。这意味着有一个全局锁,在处理一条用户事务会锁住所有相关的合约,直到它全部处理完成,在此期间被锁住的合约不能处理任何其它事务。这样的设计虽然开发者编程方便,但是先天缺陷是性能无法扩展。所以我们在最初设计canister的模型时就摒弃了这种做法。
如果需要这方面的组合性,传统数据库已经有很成熟的解决方案了,比如两步提交(two-phasecommit)。这在完全可以在应用层面商议一个标准经由canister接口实现,不一定需要在系统层面支持。
系统设计上总是要做一定的取舍,有时候添加限制比较好,有时候提供选择比较好。我们的看法是单个方法调用符合原子性是一个比较合适的粒度,没有必要强制整个调用栈一起做原子化。
Q4:我是一名正在互联网计算机上构建应用的开发者。我想问后端何时可以进行外部http/https调用?此外,由于每个容器4GB的限制,我必须实现我的分布式存储系统,那么BigMap什么时候发布或有其他更好的可扩展文件存储方式吗?
回答:对外部进行http/https调用可以分开看,一个是读,一个是写。前者需要预言机,后者如果对方满足ren-entrancy则完全是可行的。
Q5:stoic钱包助记词不能导入plug钱包,问了一下stoic开发者,说是加密算法选择的不同。同时我看官方的钱包助记词更不一样,这个后续会有统一的标准吗?能够实现像以太坊那样的一个助记词多个钱包导入吗?
回答:的确会造成一个不通用的问题,所以短期内只能提醒用户标注一下哪个助记词是哪家的。长期来看,希望社区能够协商达成一个通用标准。
更多精彩内容,欢迎各位加入星球电报社区
星球电报频道:https://t.me/Odaily_News
星球电报社区:https://t.me/Odaily_CyptoPunk
DFINITY中国官方的联系邮箱:,大家有问题需求合作等欢迎联系此邮箱。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。