6DGS云-数据结构

6DGS云,本质上是一套的区块链云帐本

帐本的意思是交易双方转帐,数据结构可表达为:token_x send token_y money extra_data timestamp
token_x是扣款帐户,token_y是收款帐户,send字段是转帐指令,money是转帐金额,extra_data可以附带订单信息(可以是json或者文本,例如:支付宝充值、会员付款等),timestamp为付款时间戳。

6DGS云帐本的扩展需求

1、不仅仅是转帐,能不能在交易双方之单发送消息(如微信、邮箱一样)。
2、不仅仅是数值,能不能存储文本信息甚至是JSON表单信息(就如数据库或者MongoDB一样)。
3、既然是区块链云帐本,要考虑创建一个子帐户,这个子帐户的交易纪录要能被父帐户查询,以便监管帐户使用。

6DGS云帐本-基础数据结构定义

一行交易纪录:token_x opcode token_y opval extra_data timestamp;
其中:
1、opcode是包含了send(转帐)等更多的指令字段,例如fork指令可分叉token子帐户等
2、opval是操作的值(如果转帐的时候,opval就是一个数值;如是发送消息,opval就是一段短文本等)。
经过上述的opcode字段与opval字段的抽象,opcode字段包含了send指令,也引入了新的指令如fork;opval字段当转帐时可以是数值,不是转帐时可以是更多的内容(如文字,JSON等)。从而大大扩展了区块链云帐本的功能。

6DGS云帐本-FORK/无限分叉的万向树

前面提到,为了考虑到子帐户是由父帐户分叉(fork指令)分叉出来的,以提供子帐户的交易纪录的同步至父节点的功能。
故定义:所有的token帐户,都是由父帐户分叉而来(fork),在发生其他操作之前(如send转帐,发送消息),必须先fork创建一个合规的token-id帐户。
根节点:标记为token-root({token-name}_0000000000000000 ),下划线之后的16个0是token-id(16位数字或者英文构成,根结点的token-id全部为0
万向树:所有的token-ID(token帐户),都是由token-root({token-name}_0000000000000000 )分叉出来的,或者由token-root的子帐户或者子孙帐户分叉出来的。
由此,形成了一个万向树(一个节点,可以fork无限的子帐户子节点,子帐户子节点也可以继续fork新的帐户/节点)。
六度共识同步:
1、token_x给token_y转帐,先在x与y自身帐本完成记帐
2、向token_x的父链递归同步该交易纪录
3、向token_y的父链递归同步该交易纪录
完成上述同步过程之后,该交易纪录完全实现写同步,然后进行读同步(订阅者同步)。
故:六度共识算法,是基于fork指令而形成了区块链帐户同步过程,从而实现一般情况下,完成一次记帐,可以在6个节点(token-ID)之内完成帐本同步,从而大大提升了帐户同步的效率,同时不降低记帐安全性(依赖于博弈论)

6DGS云帐本-每一个token-id就是一条链

fork指令不仅仅是形成万向树,也构建了六度共识算法同步的路径。并且让每一个token-id(token帐户)都形成自己的一条链。
数据结构定义为:token height txid txjson hash sign timestamp;
其中:
1、token:当前链的token-id(token帐户)
2、height:当前token子链的高度
3、txid:当前height链高度所对应的唯一交易纪录ID
4、txjson:链纪录,即一条交易纪录(token_x opcode token_y opval extra_data timestamp)的json文本
5、hash:链纪录的文本hash值(sha256)
6、sign:链纪录的文本hash值的数字签名(采用secp256k1椭圆加密签名算法)
7、timestamp:链纪录在该token子链上完成校验并且记录上链的时间戳
所以,上述谈到的fork以及send等指令产生的交易纪录,都会在万向树实现六度共识同步,从而在所有与token_x和token_y相关的父链节点形成多节点-多链同步(从G节点的数据管理,可以看到每一个txid交易纪录都会实现六度共识同步)。

至此,关于6DGS云的基础数据结构已经介绍完全。下面还有关于合约组件、指令组件、关系组件等更深入和详细的介绍。

6DGS云-合约组件

合约组件--帐本合约状态机

智能合约本身是一种状态机(FSM),其中COIN/SCORE记帐型合约是天然的金额管理状态机,可以方便地收支金额,形成可靠的交易流水帐和帐户余额。
  • COIN-记帐型(发行数量有上限)
  • SCORE-记帐型(发行数量无上限)
  • MSG-消息型(短消息)
  • TEXT-内容型(长文本)
  • CLT-合约型(合约树)
合约组件声明了6DGS云-G节点的核心状态机逻辑,如COIN-记帐型管理类似股权的股数一样有上限的数值合约,SCORE-记帐型则用于管理类似积分、人民币、美元等不限上限的数值。
合约组件在创建6DGS云-G节点的时候需要配置,一旦配置不可更改。

该配置会影响该G节点云帐本的具体状态机逻辑,如opcode、opval字段都会受到影响。
例如:
1、COIN-记帐型以及SCORE-记帐型的情况下,opcode为send是转帐操作,opval只能是数值(可以是小数)
2、COIN-记帐型:可由token-root给任意帐户转帐任意不超过上限的数额;但是token-root不能接受转帐---接收意味着销毁
3、SCORE-记帐型:可由token-root给任意帐户转帐任意数值的金额,也可以接收转帐(意味着提现或者收入)
4、COIN以及SCORE-记帐型:每次opcode为send操作时,都会影响到交易双方(token_x以及token_y)的余额
5、MSG-消息型以及TEXT-内容型:opcode为send时,opval可以是文本,不会被识别为数值,也不会对token_x与token_y转帐双方进行余额操作(因为没有余额)

合约组件,目前最大的区分就是数值型和非数值型的区别,还有就是名称不同(建议不同类型的合约用于相应的用途,避免团队之间沟通困难)。


6DGS云-指令组件

指令空间

指令组件或者指令空间,是指opcode的所有指令构成的指令空间(如fork、send等)
  • fork分叉/创建子帐户指令
  • send转帐和发送指令
  • assert声明或赋值指令
  • config配置声明指令
  • notice公告指令
  • setkey/chkey指令(未启用)
  • phone指令(未启用)
  • fsm指令(未启用)
  • relate/hold/join关系指令
  • rela-relz关系指令
  • sms云短信指令
  • mail云邮件指令
  • pay云支付指令
说明:
1、fork分叉指令:是每一个子链的首行纪录;当写入帐本时,每一个token-id都是先fork(创建帐户)出来,然后再进行其他指令操作。但token_root除外,因为它是一条root指令
2、转帐指令:send转帐指令对于记帐型合约(COIN以及SCORE),会形成金额流水帐,其中txjson中的token_state字段是余额;非记帐型合约不会有token_state余额字段。
3、流水帐:不管是fork,send,还是assert等任何指令,都会形成所谓的流水帐(即帐本); 但有记帐型合约在send操作之下,余额才会符合复式记帐法,保证+与-余额会和为0(余额平衡的意思,钱不能无中生有,也不会消亡,都是在一个帐本的帐户之间流动)。
4、赋值指令:assert以及config、notice、setkey、chkey以及phone和FSM;当为前述几个指令的时候,【建议】查询被赋值的token-id的对应的opcode的最后一条交易纪录,拿到opval即为所赋的值
5、赋值指令与send转帐或发送指令并无不同,都会形成流水帐,只不过在采用这些指令的时候,默认为使用最后一条交易纪录的opval的值作为其token-id的文本或JSON值
6、转帐/发送指令:send是指记帐合约(如COIN、SCORE)情况下,发送指令send是指在非记帐合约之下;无论如何,send指令操作纪录都会形成不可篡改流水帐存在链上。
7、关系指令:relate/hold/join分别代表关系/拥有/参与,其中hold一般情况下意味着token_id拥有另一个token_id(如user-id拥有order-id,亦即一个用户有多条订单纪录)
8、关系指令:join代表参与,意味着token-id参与某一事件id。例如群聊id(如一个user-id参与一个群聊id)
9、关系指令:rela、relb、relc、reld...relz共26条关系指令(为两个token-id建立关系,注意必须同属一套云帐户-亦即可一个G节点之下,否则会无法写到链纪录上)
10、关系指令:当opcode为上述3+26(relate/hold/join和rela-relz),opval为add时,为建立关系;opval为del时删除关系

除了上述指令,未来还会根据需要进一步进行扩展(详见指令扩展)。对于关系指令,还有内置的状态表以方便查询关系映射表,形成E-R关系模型。

6DGS云-关系组件

关系组件--轻松构建E-R实体关系模型

通过关系组件,可以通过关系指令轻松创建关系映射表(内置FSM状态表),从而建立1对多和多对多的映射关系;有了它,开发应用可以完全不使用关系型数据库了。
目前已经支持3+26个关系指令(relate/hold/join以及rela-relz),大大方便了关系建立和查询。
  • relate/hold/join关系指令
  • rela、relb、relc、reld...relz等26个关系指令
使用方式:当opcode为上述3+26个指令,且opval为add时,将token_x、token_y添加到关系表,建立1对1映射关系(当已存在token_x和token_y的关系时,不会重复创建)
映射关系表数据结构:token_x token_y opcode txid timestamp;

建立token_x与多个tokne-id的映射关系,只需要使用关系指令多添加(opval为add)几次即可,结果如下:
token_x token_y relate txid1 timestamp1;
token_x token_z relate txid2 timestamp2;
token_x token_q relate txid3 timestamp3;
token_x token_w relate txid4 timestamp4;
token_x token_v relate txid5 timestamp5;
删除token_x与token_v的relate关系,只需要使用/op接口,发送{token_x,token_y:token_v,opcode:relate,opval:"del"}即可。
该映射表,本质上也是一种基于6DGS云帐本FSM状态表。通过/chain/relations接口API可查询。


6DGS云-扩展指令

扩展指令

opcode字段的强扩展性让6DGS云无所不能
  • setkey/chkey指令(未启用)
  • phone指令(未启用)
  • fsm指令(未启用)
  • file指令:扩展文件存储功能(待开发)
  • sms指令:短信发送指令(2019-8-15新增,已可用)
  • mail指令:邮件发送指令(2019-8-16新增,已可用)
  • pay指令:聚合云支付充值指令(2019-8-16新增,已可用)
  • idcard指令:身份证号码检验指令(待开发)
setkey原定为初始化设置public_key(公钥)和private_key(私钥);phone设置手机号码,fsm设置合约状态机;目前均未启用这些指令功能。
由于opcode可以任意扩展,例如2019-8-6日扩展了26个关系指令(rela-relz),意味着未来6DGS云的功能扩展还可以做得极度强大。

6DGS云-云函数

云函数--让指令可以派生

云函数可以在指令执行的事前和事后触发,从而扩展了每一条指令操作的功能。夸张点说,甚至可以重新定义软件开发。
  • file指令:扩展文件存储功能(待开发)
  • sms指令:短信发送指令(2019-8-15新增,已可用)
  • mail指令:邮件发送指令(2019-8-16新增,已可用)
  • pay指令:集成的支付充值指令(2019-8-16新增,已可用)
  • idcard指令:身份证号码检验指令(待开发)
例如:在sms指令存储一条纪录到链上时,先通过外部短信模块发送短信,成功后写入到链上,发送失败将失败结果纪录到链上。
上述几个指令,按照功能需求,预计将采用云函数的机制来开发。从而将云帐本与外部的软件功能组件深刻结合在一起,发挥更强大的作用。

6DGS云-云组件

云组件--使用6DGS云可实现无限可能性

前述数据结构定义、5个合约、指令组件、关系组件、云函数等,已经可以看到六度共识云(6DGS云)强大的地方:强大的扩张性和简单可靠的的数据结构。
正是6DGS云的匠心设计,可以让【云组件】的开发变得极为简单。 6DGS云--NODB(无关系型数据库)的软件开发模式
基于统一的6DGS云帐本架构,可以带来规范的程序设计、软件工程实现;可以说6DGS云是一种基于区块链云帐本的领先的云中台技术。

一些云组件实例:
  • 用户系统(云组件)
  • 积分商城(云组件)
  • 交易订单(云组件)
  • 会员系统(云组件)
  • 任务商城(云组件)
  • 文章系统(云组件)
  • 社区系统(云组件)
  • 充值支付(云组件)
  • 客户管理(云组件)
  • 图片系统(云组件)
  • 文件系统(云组件)
  • 实名系统(云组件)
  • 提现系统(云组件)
  • 发票系统(云组件)
后续开源云组件,在社区的努力下将持续更新和迭代,敬请关注!



Copyright © 2012-2019 广州六度共识科技有限公司. All Rights Reserved.
粤ICP备14035184号-2