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