「去中心化」Cartesi(CTSI)去中心化应用的通用操作系统

原创 青黛  |  文章来源:币圈达人发布时间:2020-05-24 01:55  阅读 144 次 评论 0 条
众人帮 趣闲赚 牛帮
摘要:

Cartesi是用于开发和部署可扩展DApps(分布式应用)的第2层平台(“位于底层链和DApp之间,通过高性能的链下计算,将Layer 1从执行合约和计算的海量工作中解放出来,专心处理token流转和计算结果存储,从而提升整体可扩展性“)

Cartesi是用于开发和部署可扩展DApps(分布式应用)的第2层平台(“位于底层链和DApp之间,通过高性能的链下计算,将Layer 1从执行合约和计算的海量工作中解放出来,专心处理token流转和计算结果存储,从而提升整体可扩展性“)。 Cartesi DApps由链上及链下两部分模块组成。链下模块在Cartesi节点内运行,代表了每个DApp用户的权益。 Cartesi节点为DApp开发者提供可重现的Cartesi Machine,可以运行大规模可信计算。这些可信计算很容易通过强大的原语集成到智能合约中,这些原语提供了更大的灵活度和复杂逻辑处理能力。更准确地说,任何因Cartesi Machine内部计算产生有争议性的结果,均可在区块链上以相当低的成本进行仲裁(“Gas费用奖善罚恶”)。Cartesi节点还允许DApp开发者运行本地代码。本地计算更可利用节点的全部处理能力,其中包括任何可用的显卡算力。无论是由节点本地执行还是在Cartesi Machines系统内执行,链下模块均会在完整的“Linux”操作系统下运行(“该操作系统提供复杂计算所需的完整生态系统”)。Cartesi使DApp开发者能够使用他们已经熟悉的所有编程语言,工具,库,软件和服务。通过将其DApps的大多数复杂逻辑移动到便捷的链下模块,开发者可以摆脱区块链所固有的限制和特性。 通过这种方式,Cartesi允许开发者能够选择最佳的运行实例环境来托管其DApp的每个部分。

简介

公共区块链是网络可以通过其在共享状态下维持分散共识的机制。 通常,除了其他数据之外,该状态还包含支付系统。在由此产生的经济中,参与者所持有的股份是他们的动机,使国家广泛地向其他国家开放,并拒绝无效的交易。在这种良性循环中,支付系统建立在分散的共识之上,而分散共识的作用只取决于支付系统本身所创造的激励机制。然后,支付系统和共识都可以用于其他目的。

随着区块链技术的新应用的设想,对底层基础设施的需求不断增加。目前,广泛采用区块链技术的两大障碍是其可扩展性差,缺乏稳固的开发环境。 Cartesi对区块链生态系统的主要贡献是克服这两个问题。

可扩展性 目前部署的共识机制基于完全冗余[Nakamoto 2009; Wood 2018]。 它们要求每个交易都永久存储,并由每个参与者进行验证。这种低效率是交易率增长,涉及的数据量以及交易内计算强度的关键限制因素。 高交易成本和增加的延迟已成为许多创新应用的障碍,否则这些应用将受益于智能合约为区块链带来的灵活性。

尝试提高区块链可扩展性可分为第1层和第2层解决方案。第1层可扩展性解决方案改变了底层的区块链基础设施本身。 示例包括区块大小,分片和委托证明(DPoS)的优化。 因为它们在基础设施层面运行,所以这些解决方案受到保持全球共识的要求的负担。国家的某些方面,例如支付系统,对所有各方都至关重要,因此需要全球共识。否则,对于区块链调解的大多数交互,将访问和验证责任限制在可能受影响的少数方面是完全安全的。然后,区块链可用于提供最终结果,并在极少数情况下保证当地达成共识。 换句话说,全球共识是一种宝贵的资源,应该节俭的加以利用。 认识到这一事实,诸如等离子,侧链,TrueBit或状态通道的第2层可扩展性解决方案尽可能多地移动数据和计算。 在第2节中深入讨论了第1层和第2层可扩展性解决方案。

计算环境 无论在链上或是在链下,每当出现影响交易结果的计算执行时,都必须由所有参与验证的角色进行验证。可重现计算模型必须是自包含的和确定的,换句话说,必须完全规定并商定计算的完整状态和对该状态的整个顺序进行修改。但可悲的是,现存真正的计算体系结构并没有考虑到这些条件,因此不可重现。区块链平台通过在处理智能合约时使用自定义虚拟机(VMs)来解决此问题,这些VM是可重现的,但只存在于一些特定情况下。一方面,它们为对智能合约有用的功能,提供了本地支持(例如,交流计数,回滚,关联存储器,认证,密码等)。另一方面,它们缺乏通用体系结构中的有价值的特性(例如,浮点运算,虚拟内存,中断等)。

在过去几十年里,全球软件行业的变革,可归结于两个关键因素。 首先是现代硬件平台处理大量数据的速度呈指数级增长。第二个同样重要的是软件开发环境不断增强的表现力。 实际上,通用计算并非计算孤岛。 相反,它更依赖于全球软件开发者的通力协作,参与共建模块相互间的组合。这些模块和服务依赖于底层操作系统(内存管理,进程管理,文件系统,网络等)托管的标准库工具。它可理解为一个“将所有内容联系在一起的操作系统”。这些设施不能通过典型区块链为智能合约开发者提供的独立编程语言和编译器提供。可重现性和可扩展性问题使得链上计算环境非常严格,所以,为了提高效率并扩大区块链开发的范围,我们需要一个支持现代操作系统的可重现计算模型。

本文介绍了Cartesi用于开发和部署可扩展DApps(分布式应用)的第2层平台。 Cartesi DApps是一种混合模式,包括链上和链下两个部分。

链下模块在Cartesi节点网络(第6节)中运行,每个节点代表DApp用户的权益。链下部分可再细分为两个模块。 本地计算直接在主机硬件中运行。尽管本地计算可以访问节点的全部处理能力(包括GPU),但计算不可重现,至少不是pri-ori。可重现计算运行在Cartesi Machine中,受Cartesi 节点控制。这是一种完整的,运行在确定性的RISC-V平台上的自包含的Linux系统(self-contained deterministic linux system),节点通过一些确定的主机接口和Cartesi Machine进行交互。

在区块链中,Cartesi DAppDApp开发者可以指定链下计算采用可重现方式,Cartesi 节点会自动根据所指定方式执行链下计算。DApp开发者可以请求节点提交结果,验证交易和辩论其他节点提交的结果。从链的角度来说,处理有争议的计算只需占用微不足道的资源。 当争议发生,争议处理成本只是存储和时间的对数复杂度,即O(logN),离线部分的Cartesi 节点计算复杂度,也只是线性开销O(n),且常数不超过2。

把计算移到链下会获得除了伸缩性之外的另外的好处。 Cartesi Machine让开发者使用其所熟练的开发语言,工具,库,软件和服务变得可能了。此外,由于Cartesi就其本质来说,计算的组织形式和底层区块链类型并无关连,那么通过把现有的复杂的合约逻辑隔离到链下进行可重现计算,开发者甚至可以使其DApp能够做到跨链交互。

本文件的重点是Cartesi的核心。 它包括Cartesi的完整规范,用于控制它的主机接口,用于指定复杂的链下计算的区块链接口,以及用于执行和验证这些计算的Cartesi 节点接口。在此核心功能之上构建的高级工具,接口和各种用例将在之后的文档[Teixeira和Nehab 2019a]中描述。Cartesi SDK [Teixeira和Nehab 2019b]将提供关于所有接口的详细文档,以及Cartesi节点和Cartesi的开发环境。

Cartesi Machine规格

Cartesi Machine是一个独立的,确定性的计算模型,可以托管现代操作系统。发生在操作系统内部有充分的理由的真实世界的计算。 开发者接受过使用工具链的培训,这些工具链可以在任何给定的工作中以尽可能高的抽象级别运行。 这些工具链将它们与不相关的硬件细节隔离开来,甚至与给定操作系统的细节隔离开来。 因此,发明一种特殊的新架构需要移植工具链和操作系统。 相反,Cartesi Machines基于经过验证的架构,其标准工具链和操作系统已经是可用的。

另一方面,Cartesi Machines执行的链下计算必须通过区块链进行验证。 因此,区块链必须承载整个架构的参考和实施。 如果它永远值得信任,那么这种实施必须易于审计。为此,架构和实施都必须是开放的并且相对简单。 这些要求共同指向RISC-V。 RISC-VISA基于最小的32位整数指令集,可以添加几个扩展[Waterman和Asanovic'2017a]。 正交地,操作数和地址空间宽度可以扩展到64位(甚至128位)。 此外,该标准还定义了一种特权架构[Waterman和Asanovic'2017b],它具有现代操作系统常用的功能,例如基于分页的多个权限级别。

虚拟内存,定时器,中断,异常和陷阱等。自由选择更适合其需求的扩展组合得以实现。

RISC-VRISC-V于2010年始于加州大学伯克利分校,并于2015年成立基金会。包括谷歌,三星和特斯拉在内的大型企业最近也开始使用该项技术[Tilley 2018]。 该平台由高活跃度的社区开发者提供支持,他们耗费大量精力搭建了软件的基础底层,最着名的是Linux操作系统的端口和GNU工具链[RISC-V 2018d]。但关键的是,RISC-V并不是耍花枪的技术架构。它已在本地硬件之上运行,而且SiFive公司目前已将其商业化。这意味着,未来Cartesi将不仅限于仿真或二进制链下翻译。

Cartesi Machine可以分为处理器和“主板B”,处理器执行计算,执行传统的获取 - 执行循环同时,保留了各种寄存器。该“主板B”通过各种存储器(ROM,RAM,闪存)和设备定义周围环境。 为了使验证成为可能,Cartesi Machines以明确定义的方式将其整个状态映射到物理内存。这包括处理器,主板和所有连接设备的内部状态。幸运的是,此修改不会以任何重要方式限制操作系统或其承载的应用程序。

1. 处理器

遵循RISC-V术语,Cartesi Machines实施RV64IMASU ISA。 RV之后的字母指定扩展集。 此选择对应于64位计算机,具有乘法和除法的整数算术,原子操作以及可选的Supervisor和用户权限级别。 此外,Cartesi Machines支持Sv48地址转换和内存模式。

图1:iflags寄存器提供当前权限级别,并指定机器是暂时空闲等待中断还是已永久停止。

保护。 Sv48提供48位受保护的虚拟地址空间,分为4KiB页面,由四级页表组成。 这组功能在区块链实施所要求的简单性和链下计算所期望的灵活性之间创造了平衡的折衷。

总共有99条指令,其中28条指令分别缩小或加宽,分别为64位或32位指令。 表1分解了每个扩展的指令计数。 这是一个RISC ISA,大多数指令非常简单,可以在几行高级代码中进行模拟。实际上,唯一复杂的操作是虚拟到物理地址转换。由于格式数量减少(仅为4,占用32位),指令解码变得特别简单。

整个处理器状态适合512字节,分为n至64个寄存器,每个寄存器保持64位。这些寄存器中的大多数由RISC-V ISA定义,由32个通用nteger寄存器和26个控制和状态寄存器组成。 剩下的是Cartesi特有的。 处理器通过将各个寄存器映射到物理存储器中的最低512字节,使其整个状态可用,外部和只读。 相邻的1.5KiB保留供将来使用。整个映射在表2中给出。

名称以i开头的寄存器是特定于Cartesi的,并具有以下语义。 寄存器iflags的布局如图1所示.PRV给出当前的权限级别,当处理器空闲时(即,等待中断),I设置为1,H设置为1,表示处理器已永久存在暂停。 寄存器ilrsc保存LR / SC原子存储器操作的保留地址默认初始化使用以下值填充状态:

•iflags中的PRV设置为3(对于机器权限级别);

•misa设置为RV64IMASU;

•mstatus中的SXL和UXL设置为2(64位);

•pc从0x1000开始(指向ROM);

•marchid设置为ASCII格式的cartesi␣。

mvendorid用于测试匹配的链上和链外实施。 每次更新匹配对时,mimplid都会递增。剩余的默认状态设置为零。

2. 主板

主板和处理器之间的交互通过映射到处理器物理地址空间的设备进行。 表3显示了这种映射。 从地址0x1000开始有64KiB的ROM,执行开始。 这个ROM的核心作用是持有描述系统硬件的设备[DTSpec 2017]。 此外,ROM-base的引导程序将x10寄存器设置为0(mhartid的值),x11指向设备,然后跳转到RAM-base为0x80000000。 这是启动映像的入口点所在的位置。 最后,可以为闪存设备留出一些额外的物理内存范围。 这些通常会预先加载文件系统映像。

2 x86 ISA定义了至少2000条(可能很复杂的)指令

图2:物理内存属性。每个范围的istart和ilength与4KiB边界对齐。 每个64位字的12个LSB给出了该范围的属性。

两个非内存设备映射到地址空间。 核心本地中断器(或CLINT)控制定时器中断。有效地址分别为0x0200bff8和0x02004000,映射到寄存器mtime和mtimecmp。 只要mtime等于mtimecmp,CLINT就会发出硬件中断。 为了确保可重复性,处理器的时钟和定时器标接口(HTIF)调解与外部世界的通信。其活动地址为0x40000000(tohost)和0x40000008(fromhost)。它在写入tohost时停止机器,位63-48设置为0,位0设置为1.(位47-1可以设置为任意退出代码。)它也可以作为交互式部分的基本通信端口。

物理内存映射由物理内存属性记录(PMA)描述。每个PMA由2个64位字组成。 第一个单词给出一个范围的开头,第二个单词给出它的长度。 由于范围必须与4KiB页边界对齐,因此每个字的最低12位可用于属性。 图2显示了每个属性字段的含义。 M,IO和E位是互斥的,分别将范围标记为内存,I / O映射或排除。 R,W和X位分别授予读,写和执行权限。 最后,IR和IW位分别将读取和写入的范围标记为幂等。

该主板支持总共32个PMA,并使它们以只读方式可用,从物理内存中的偏移量2KiB开始。 另外2KiB留作将来使用。 PMA 0描述RAM,PMA 16-23描述闪存设备0-7。 这些PMA在初始化期间是用户可配置的,之后是只读的。 (RAM istart字段被硬编码为

0x80000000。)这些记录一起限制了计算期间可访问的最大存储量。

3. 状态转换函数

机器计算的序列是s0 , s1 , . . . , sh,由过渡函数管理,使得在这里,s0是初始状态,sh是停止状态。 前面的部分详细描述了Cartesi machine的状态空间和过渡功能。

回想一下,此状态由Cartesi machine的64位地址空间中每个字的值组成。 实际上,表示一个状态需要的花费少于2 个字节。 只有表3中描述的区域必须明确定义。 所有剩余值都可以隐含地用零填充。

RISC-V ISA手册[Waterman和and Asanovic'2017a,b]指定了与每个结构执行相对应的状态转换。 这意味着在执行的指令之间很好地定义了状态。 由于所有指令都可以在O(1)时间内实现,因此Cartesi将每个状态转换定义为恰好1个周期。 可以从相应的序列中读取序列中给定状态的索引。

表3:Cartesi machine的物理内存布局。

mcycle的价值。 (请注意,由于机器偶尔会空闲,因此minstret不会跟踪mcycle。)唯一显著的是Cartesi特定修改涉及停止机器。当iflags中的字段H设置为1时,不允许进一步的状态转换。 当指示HTIF停止机器时,将显式设置条件。

4. Linux端口

从头开始设置Linux系统涉及到的各个步骤。与独立系统不同,嵌入式系统通常不是自托管。相反,组件构建在单独的主机系统中,在该系统上安装了目标体系结构的交叉编译工具链。 关键组件是GNU编译器集合和GNU C库。 此基础结构可在RISC-V GNU工具链存储库[RISC-V 2018a]中找到。第一步是要创建这种基础项设置。

然后可以使用工具链交叉编译Linux内核。 内核源代码可以在RISC-V Linux存储库[RISC V 2018b]中找到。内核以管理模式运行,位于在机器模式填充程序提供的Supervisor二进制接口(SBI):Berkeley引导加载程序(BBL)。 BBL可以在RISC-V代理内核库[RISC-V 2018e]中找到。由此产生的引导映像被预加载到RAM中。 SBI提供了一个简单的接口,内核通过该接口与CLINT和HTIF协同工作。除了实现SBI之外,BBL还安装了捕获无效指令异常的陷阱。此机制可用于模拟浮点指令。 安装陷阱后,BBL切换到管理员模式并将控制权交给内核入口点。

最后一步是创建根文件系统。 此过程从主机系统中的根目录开始,该目录包含一些子目录(sbin,lib,var等)和文本文件(sbin / init,etc / fstab,etc / passwd等)。 许多常见的UNIX实用程序(ls,cd,rm等)的微小版本可以组合成单个二进制文件[Vlasenko2018]。 目标可执行文件通常依赖于工具链(lib / libm.so,lib / ld.so和lib / libc.so)提供的共享库。当然,必须将这些库复制到根文件系统。一旦根目录准备继续,就将其复制到实际的文件系统映像中(例如,使用gene2fs)。

这些步骤可以自动化。Cartesi的SDK以便捷的Docker容器形式为开发者提供了预配置的主机环境。复杂的Linux系统可以在Sifive的Buildroot [Petazzoni 2018]的分支,或Yocto项目的RISC-V端口[RISC-V 2018c]的帮助下构建。容器中的环境使开发者能够根据应用程序的需要自定义启动映像和根文件系统。成千上万的软件包可供安装。

图3:使用128MiB RAM和64MiB闪存设备进行简单设置的部分设备,作为根文件系统安装。

在完成自己的初始化后,内核最终将控制权交给/ sbin / init。 在Cartesi DApps中,这通常是一个shell脚本,它调用适当的命令序列来执行以形成所需的计算。内核在bootargs中的分隔符␣-after之后将所有参数作为命令行参数传递给/ sbin / init。这些参数可用于为要执行的计算定义附加参数。完成后,/ sbin / init使用HTIF通过可选的退出代码暂停机器。 这可以用作计算输出的一部分。 任意复杂的输入,参数和输出都可以作为闪存设备传递。

cartesi机器的非链实现有两个目的,它们的主要作用是执行计算本身。第二个作用是支持解决有关计算结果的争议。为了提供这些服务,cartesi机器的非链实现必须公开可编程接口。

区块链中的Cartesi Machine

回想一下,Cartesi是一个开发分散应用程序的平台。Cartesi DApps使不相互信任的各方能够在区块链中签订一份取决于链下计算结果的约束性合同。使用”Alice”和”Bob”这些角色代表这些派对很方便。请注意,”Alice”和”Bob”是角色,而不是人。它们甚至可能代表相互竞争的集体利益。实际上,这两个角色都将由Cartesi节点自动播放,以捍卫控制节点运行的链下计算机的人的利益。因此,Cartesi DApps是在区块链中运行的一组智能合约与在”Alice”和”Bob”的节点上运行的链下软件之间的协作。作为一般规则,同一DApp开发者负责智能合约和DApp特定的链下软件。查理将扮演DApp开发者的角色。”Alice”和”“Bob””信任查理,否则他们不会与他的DApp交往。然而,查理既不信任”Alice”也不信任”“Bob””。当然,”Alice”和”“Bob””也不相互信任。

Cartesi的角色是支持查理的工作。为此,Cartesi提供了各种原语,Charlie用它来调解”Alice”和”Bob”之间潜在的对抗性交互。一些原语不需要交互,可以在区块链中从输入中自主地进行评估。然而,有趣的原语是那些虽然完全由它们的输入定义但只能在链外进行评估的原语。通过构造,当使用Cartesi DApp时,”Alice”和”Bob”总是同意这些原语的输入。在不失一般性的情况下,”Bob”评估原始的离线链并提交结果。然后”Alice”有机会接受或拒绝”“Bob””的结果。查理的DApp可以使用无可争议的结果来达到他选择的目的。如果被拒绝,Cartesi将与”Alice”和”Bob”一起参与争议解决协议,该协议以正当理由对仲裁方进行仲裁。这种判断总是在几次交互中完成,并且对区块链的计算成本可以忽略不计。

Cartesi以对查理极为方便的方式自动化大部分过程。

这些原语中最重要的是Cartesi机器。智能合约无法在区块链中存储Cartesi机器的状态,更不用说执行隐含的计算了。毕竟,处理能力和存储容量方面的成本都是令人望而却步的。为了解决这些问题,Cartesi使用加密哈希来简洁地表示区块链中的机器状态。从区块链的角度来看,计算只是一对与机器的初始和最终状态相对应的散列。由这种散列所对应的存储器的内容仅在链外已知。 Cartesi定义了各种附加原语,允许智能契约方便地操纵与这些哈希相对应的状态的内容。

未来的工作

本文档的重点是核心功能,以及DApps用于直接指定,控制和验证链外计算的接口。Cartesi平台将提供在核心上构建的几个附加组件,或扩展其范围。这些将在未来的出版物[Teixeira和Nehab 2019a,b]中更详细地描述。

数据可用性 Cartesi通过保持仅链上Merkel树的离线数据哈希来弥补区块链的严重存储限制。如第5.2节所述,Cartesi假定参与验证角色的所有各方都可以访问这些数据。在某些应用中,这很难保证。特别是,必须减轻数据扣留攻击的风险,其中一方向区块链提交哈希值,同时拒绝向其他人提供此数据。

数据可用性问题是区块链共识算法设计中的一个主要问题[Buterin 2012]。但是,在地方共识的背景下,这个问题变得更加简单。 Teixeira和Nehab [2019a]提供了几种设计模式,用于在验证期间处理数据可用性。数据通道,设备加密和数据分类帐可确保Cartesi DApps可能遇到的所有情况下的可用性。

可用性 广泛采用块链技术的主要障碍之一是DApp用户遇到的不便。尽管关于集中式应用程序可用性的文献仍然适用于分散式应用程序,但从用户体验的角度来看,区块链特性还没有得到充分解决。 Teixeira和Nehab [2019a]描述了开发简单直观的DApps的几种设计模式。

例如,Cartesi将为交易代币提供自动化基础设施。这将使用户免于担心每个DApp内使用的不同令牌。还将提供外包延期行动的系统。这将使用户即使在参与需要在严格期限内与区块链交互的协议时也可以关闭他们的机器。在这种情况下,代理方将代表用户行事以换取费用。 (与第6.2节中描述的争议委托市场非常相似。)使用加密时间锁[Rivest等.1996年]还将适应用户必须在未来揭示不应立即传递给代理方的秘密的情况。将描述其他可用性构造以促进文件传输并降低Gas成本。这些设施将使Cartesi DApps的用户体验更接近当前的集中式解决方案。

Cartesi SDK 随着Cartesi SDK的发布,可以使用各种更高级别的API来封装核心的典型用例。这些将包括上述可用性和数据可用性解决方案,以及Cartesi节点的容器和CartesiMachine的开发。随着时间的推移,SDK中可用的API将大大减少DApps区块链组件的大小和复杂性。相反,这将显着增加DApps对多条区块链的跨链可移植性。Cartesi SDK将在开源中分发并广泛记录[Teixeira和Nehab 2019b]。

Cartesi Machine的扩展 Cartesi Machine可以通过两个令人兴奋的新设备进行扩展。

Dehashing设备为应用程序提供了遍历散列指针数据结构的能力。在Cartesi Machine内运行的程序可以使用Dehashing设备来读取仅给定其散列的区块的内容。虽然这种操作一般是不可能的,但是当所有各方事先知道允许区块的范围时,它变得可能。最直接的应用是区块链本身。当Cartesi Machine运行时,Dehashing设备查询预加载在主机中的哈希表,查找与哈希匹配的区块。如果出现争议,任何一方都可以提出该区块作为与所需哈希匹配的证据。通过这种方式,dehashing设备可以实现区块链内省。缔约方可以签订合同,这些合同取决于合同本身定义的区块链的整个状态。这就有很多有价值的应用,特别是在期货市场。

另一个计划的设备是及时的数据端口。该端口通过将进入或离开机器的数据包与事件中的mcycle值绑定,实现Cartesi Machine之间的可重复通信。 DApps可以安排在给定的未来mcycle发生数据包传送。 Cartesi Machine也可以回滚到mcycle进行交付。及时的数据端口在向Web 3.0的发展方面开辟了新天地。它将启用涉及多个Cartesi Machine之间直接协作的DApps。

群体争议 可以设想涉及许多独立参与者的应用程序,每个参与者在链外计算的结果中都有一些利益。 在这种情况下,至关重要的是要防止一群不诚实的参与者使用连续的争议而不是诚实的结果作为对合同的拒绝服务攻击。 我们开发了一种验证游戏的变体,使任何诚实的参与者能够以可忽略的成本为整个人群辩护他的结果。 当需求变得明显时,Cartesi平台将扩展为支持这种变体。

结论

本文为Cartesi平台奠定了理论基础。 Cartesi的使命是帮助DApp开发者为他们的用户构建更加有竞争力的产品。伴随任意范式的转变,区块链为实际创新和风险带来了机遇“车轮改造”。秉持着“简约而简单”的开发原则,Cartesi的核心目的是要使开发者更容易的上手,更简便的提升开发效率。未来的文档[Teixeira和Nehab 2019a]中描述的Cartesi平台的剩余组件将帮助开发者在利用区块链的独特潜力时释放他们的创造力。

关于更多Cartesi信息:https://cartesi.io/

更多区块链项目介绍:http://www.qukuaiwang.com.cn/news/xiangmu

风险提示:区块链投资具有极大的风险,项目披露可能不完整或有欺骗。请在尝试投资前确定自己承受以上风险的能力。区块网只做项目介绍,项目真假和价值并未做任何审核!

历史上的今天:

本文地址:https://www.u5881.com/8087.html
版权声明:本站推荐的部分活动具有时效性,老淘本人并不能保证当您看到本文时,该项活动是否仍在继续。

发表评论


表情