1. 链一财经首页
  2. 资讯

1 YEAR | 领先全球的本体分片测试网正式上线

YEAR

2018年12月27日,我们发布本体分片设计,作为面向广大技术社区的开源新年献礼。

2019年6月30日,时值本体主网上线一周年纪念日,经过研发人员半年多来紧锣密鼓的筹备与反复测试,本体分片测试网正式上线,开发者现在可以开始体验并留下您宝贵的意见与建议。

YEAR

GitHub 链接:

https://github.com/ontio/documentation/blob/sharding/sharding/Testnet_Dev_Manual_CN.md

本体分片概述

本体致力于创建一个组件化可自由配置、提供跨链支持、具备高性能和横向可扩展特性的区块链底层基础设施,从而让部署及调用去中心化应用变得更加便捷。

具备以下几大特性:

多层分片的网络架构

基于智能合约的分片策略

支持分片间智能合约消息通讯

支持分片间的原子调用

测试网环境

本体分片测试网包含三个分片,分片之间可以完成跨链业务。

YEAR

从上表中可以看出,整个分片网络中有21个节点。

如图所示: 

YEAR

所有21个节点都参与到 root shard 中,另外7个节点组建 Shard-A,7个节点组建 Shard-B。 整个分片网络形成了两层的结构,有7个节点只参与最上层的 Root Shard。第二层中由两个分片子网络构成。

测试方式

测试申请入口:

https://developer.ont.io/applyOng

(该入口可供一个地址申请一次1000 ONT 和10 ONG 的分片测试 token)

获取分片测试网步骤

首先通过从 github.com/ontio/ontology.git 获取本体源代码

YEAR

从中 checkout sharding 分支

YEAR

用管理工具 glide 拉取依赖库

YEAR

如果项目有新的第三方依赖包,使用 glide 更新依赖库

YEAR

用 make 编译源码

YEAR

成功编译后会生成 ontology 应用程序即为支持 Ontology Sharding 的节点程序。

获取本体分片管理工具

首先通过从 https://github.com/qiluge/ontology-tool.git 获取 Ontology-tool 的代码

YEAR

通过 go build 编译源码

YEAR

配置 Ontology tool 目录中的 config_test.json,更新如下字段。

YEAR

启动分片节点

(可选操作) 下载 Ontology Sharding 测试网的配置文件 config.json。保存到应用程序相同的目录中。启动本体分片测试网的同步节点。

YEAR

一个分片的完整启动流程为:

1. 创建分片:在 Root Shard 中申请 Shard ID

2. 配置分片:配置新的 Shard 的参数,包括共识,Gas 相关参数

3. 节点加入分片:Root Shard 中的节点通过质押 stake 加入到新的分片网络中

4. 启动分片

分片智能合约开发

Ontology Sharding 采用了面向智能合约的分片策略,将 root shard 中的智能合约分配到 sharding 中,而资产可以保持在 root shard 中,因此同时实现业务智能合约性能提高和保证区块链资产的安全。

在 Ontology Sharding 中,所有智能合约都部署在 root shard 中,而智能合约的运行有两种模式:

All-Shard : 智能合约将可以同时运行在所有分片上

One-Shard : 智能合约同一时刻只能运行在某一个分片上

运行在 All-Shard 的智能合约状态将由其运行的所有分片中保存的对应状态,因此 All-Shard 智能合约的状态将必须以帐户形式保存。在当前 Ontology Sharding 网络中,基于 shardAsset 合约的智能合约可以实现帐户形式的智能合约状态管理,具体可以参考 OEP-9:https://github.com/ontio/OEPs/pull/50。

跨分片智能合约开发

分片智能合约开发与当前本体的智能合约开发基本一致,分片中添加了跨分片智能合约调用的接口。在分片的网络环境中,本体提供了两个跨分片通信的接口:NotifyRemoteShard InvokeRemoteShard,分别用来进行异步调用和同步调用。因为跨分片调用中的通信过程依赖于网络传输,所以跨分片调用时传输的参数应序列化成 byte array。

NotifyRemoteShard-进行分片异步调用

InvokeRemoteShard-进行跨分片同步调用

部署分片智能合约

分片环境下支持了新的智能合约特性,最重要的两个特性以 OEP 的形式提出了,可以参阅 OEP-9 以及 OEP-11了解详情。

为了支持这些新的特性,智能合约的编译器也做了升级,增加了新的分片的特有的Runtime API。目前只有 Python 版本的编译器做了升级,升级之后的编译器参阅Ontology Sharding Compiler,使用方法与之前一致。

同样的,在分片环境下,为了支持分片的特性,交易的结构发生了变化,目前暂时只有 ontology-go-sdk 对分片交易作出了支持。

调用分片智能合约

目前提供了两种方式调用分片合约:ontology-cli ontology-go-sdk

使用 cli 调用

使用 ontology-cli 调用的方法与已有的 cli 一致,只是需要多加一个参数——ShardID。新增的 ShardID 参数用来指明调用哪个分片上的合约,不指定则默认为0。使用 ontology-cli 调用分片智能合约有两点限制:

cli 程序需要使用 ontology sharding 分支的代码编译;

必须在本机启动分片测试网的同步节点才能使用,要调用哪个分片的合约,则需要同步哪个分片的区块。

调用示例如下:

./ontology contract invoke --address 8ae002c5c3fe5bf8c3ef8a043fc618645c314c42 --params string:init,[int:0] --gasprice 0 --gaslimit 3000000 --ShardID 1 --rpcport 30336

使用 ontology-go-sdk 调用

使用 ontology-go-sdk 调用智能合约时,没有 ontology-cli 的限制。例如,调用示例智能合约xshardassetdemo.py的跨分片转账的示例代码如下:

txHash, err := ctx.Ont.NeoVM.InvokeShardNeoVMContract(shardId, gasPrice, gasLimit, user, contractAddress, []interface{}{"xshardTransfer", []interface{}{from, toAddr, toShard, num}})

如有其它问题,可添加研究院小秘书:ontresearch 随时沟通

欢迎广发开发者进行体验!

根据国家《关于防范代币发行融资风险的公告》,大家应警惕代币发行融资与交易的风险隐患。

本文来自LIANYI转载,不代表链一财经立场,转载请联系原作者。

发表评论

登录后才能评论