百度超级链XChain(4)核心数据结构
注意为“区块”、“交易”、“UTXO”和“读写集”。
1. 区块
区块以DAG方式链接起来形成的链。因此,区块是区块链的基本单元。
- 功能
区块是区块链的基本单元,通常为了提高区块链网络的吞吐,矿工会在一个区块中打包若干个交易。一个区块通常由区块头以及区块体组成。
- 代码
区块的Proto如下
1message InternalBlock {2 // block version3 // 区块版本4 int32 version = 1;5 // Random number used to avoid replay attacks6 // 随机数,用来避免重放攻击7 int32 nonce = 2;8 // blockid generate the hash sign of the block used by sha2569 // 区块的唯一标识
10 bytes blockid = 3;
11 // pre_hash is the parent blockid of the block
12 // 区块的前置依赖区块ID
13 bytes pre_hash = 4;
14 // The miner id
15 // 矿工ID
16 bytes proposer = 5;
17 // 矿工对区块的签名
18 // The sign which miner signed: blockid + nonce + timestamp
19 bytes sign = 6;
20 // The pk of the miner
21 // 矿工公钥
22 bytes pubkey = 7;
23 // The Merkle Tree root
24 // 默克尔树树根
25 bytes merkle_root = 8;
26 // The height of the blockchain
27 // 区块所在高度
28 int64 height = 9;
29 // Timestamp of the block
30 // 打包区块的时间戳
31 int64 timestamp = 10;
32 // Transactions of the block, only txid stored on kv, the detail information
33 // stored in another table
34 // 交易内容
35 repeated Transaction transactions = 11;
36 // The transaction count of the block
37 // 区块中包含的交易数量
38 int32 tx_count = 12;
39 // 所有交易hash的merkle tree
40 repeated bytes merkle_tree = 13;
41 // 采用DPOS共识算法时,当前是第几轮
42 int64 curTerm = 16;
43 int64 curBlockNum = 17;
44 // 区块中执行失败的交易以及对应的失败原因
45 map<string, string> failed_txs = 18; // txid -> failed reason
46 // 采用POW共识算法时,对应的挖矿难度值
47 int32 targetBits = 19;
48 // 下面的属性会动态变化
49 // If the block is on the trunk
50 // 该区块是否在主干上
51 bool in_trunk = 14;
52 // Next next block which on trunk
53 // 当前区块的后继区块ID
54 bytes next_hash = 15;
55}
2. 交易
- 背景
区块链网络中的每个节点都是一个状态机,为了给每个节点传递状态,系统引入了交易,作为区块链网络状态更改的最小操作单元。 - 功能
通常表现为普通转账以及智能合约调用。 - 代码
交易的Proto如下
1message Transaction {2 // txid is the id of this transaction3 // 交易的唯一标识4 bytes txid = 1;5 // the blockid the transaction belong to6 // 交易被打包在哪个区块中7 bytes blockid = 2;8 // Transaction input list9 // UTXO来源
10 repeated TxInput tx_inputs = 3;
11 // Transaction output list
12 // UTXO去处
13 repeated TxOutput tx_outputs = 4;
14 // Transaction description or system contract
15 // 交易内容描述或系统合约
16 bytes desc = 6;
17 // Mining rewards
18 // 矿工奖励
19 bool coinbase = 7;
20 // Random number used to avoid replay attacks
21 // 随机数
22 string nonce = 8;
23 // Timestamp to launch the transaction
24 // 发起交易的时间戳
25 int64 timestamp = 9;
26 // tx format version; tx格式版本号
27 int32 version = 10;
28 // auto generated tx
29 // 该交易是否属于系统自动生成的交易
30 bool autogen = 11;
31 // 读写集中的读集
32 repeated TxInputExt tx_inputs_ext = 23;
33 // 读写集中的写集
34 repeated TxOutputExt tx_outputs_ext = 24;
35 // 该交易包含的合约调用请求
36 repeated InvokeRequest contract_requests = 25;
37 // 权限系统新增字段
38 // 交易发起者, 可以是一个Address或者一个Account
39 string initiator = 26;
40 // 交易发起需要被收集签名的AddressURL集合信息,包括用于utxo转账和用于合约调用
41 repeated string auth_require = 27;
42 // 交易发起者对交易元数据签名,签名的内容包括auth_require字段
43 repeated SignatureInfo initiator_signs = 28;
44 // 收集到的签名
45 repeated SignatureInfo auth_require_signs = 29;
46 // 节点收到tx的时间戳,不参与签名
47 int64 received_timestamp = 30;
48 // 统一签名(支持多重签名/环签名等,与initiator_signs/auth_require_signs不同时使用)
49 XuperSignature xuper_sign = 31;
50}
3. UTXO
- 背景
区块链中比较常见的两种操作,包括普通转账以及合约调用,这两种操作都涉及到了数据状态的引用以及更新。为了描述普通转账涉及到的数据状态的引用以及更新,引入了UTXO(Unspent Transaction Output)。 - 功能
一种记账方式,用来描述普通转账时涉及到的数据状态的引用以及更新。通常由转账来源数据(UtxoInput)以及转账去处数据(UtxoOutput)组成。 - 代码
UTXO的Proto如下
1message Utxo {2 // 转账数量3 bytes amount = 1;4 // 转给谁5 bytes toAddr = 2;6 // 转给谁的公钥7 bytes toPubkey = 3;8 // 该Utxo属于哪一个交易9 bytes refTxid = 4;
10 // 该Utxo数据哪一个交易的哪一个offset
11 int32 refOffset = 5;
12}
13// UtxoInput query info to query utxos
14// UTXO的转账来源
15message UtxoInput {16 Header header = 1;
17 // which bcname to select
18 // UTXO来源属于哪一条链
19 string bcname = 2;
20 // address to select
21 // UTXO来源属于哪个address
22 string address = 3;
23 // publickey of the address
24 // UTXO来源对应的公钥
25 string publickey = 4;
26 // totalNeed refer the total need utxos to select
27 // 需要的UTXO总额
28 string totalNeed = 5;
29 // userSign of input
30 // UTXO来源的签名
31 bytes userSign = 7;
32 // need lock
33 // 该UTXO是否需要锁定(内存级别锁定)
34 bool needLock = 8;
35}
36// UtxoOutput query results
37// UTXO的转账去处
38message UtxoOutput {39 Header header = 1;
40 // utxo list
41 // UTXO去处
42 repeated Utxo utxoList = 2;
43 // total selected amount
44 // UTXO去处总额
45 string totalSelected = 3;
46}
4. 读写集
- 背景:区块链中比较常见的两种操作,包括普通转账以及合约调用,这两种操作都涉及到了数据状态的引用以及更新。为了描述合约调用涉及到的数据状态的引用以及更新,引入了读写集。
- 功能:一种用来描述合约调用时涉及到的数据状态的引用以及更新的技术。通常由读集(TxInputExt)以及写集(TxOutputExt)组成。
- 代码:读写集的Proto如下
1// 扩展输入2message TxInputExt {3 // 读集属于哪一个bucket4 string bucket = 1;5 // 读集对应的key6 bytes key = 2;7 // 读集属于哪一个txid8 bytes ref_txid = 3;9 // 读集属于哪一个txid的哪一个offset
10 int32 ref_offset = 4;
11}
12// 扩展输出
13message TxOutputExt {14 // 写集属于哪一个bucket
15 string bucket = 1;
16 // 写集对应的key
17 bytes key = 2;
18 // 写集对应的value
19 bytes value = 3;
20}
百度超级链XChain(4)核心数据结构相关推荐
- 百度超级链XChain(8)部署开发
1. 文件夹说明 在output下,主要目录有data, logs, conf, plugins等, 二进制文件有xchain,xchain-cli 目录名 功能 output/ 节点根目录 ├─ c ...
- 百度超级链XChain(5)XuperBridge 智能合约接口
1. 内核设计 应用程序可以用各种语言实现,比如go,c.类比到合约上就是各种合约的功能,如KV访问,QueryBlock, QueryTx等,这些请求都会通过跟xchain通信的方式来执行 2. 提 ...
- 百度超级链XChain(12)平行链与群组
1. 定义 平行链还具备群组特性,能够一定程度上实现平行链隐私数据的隔离,只有群组内的节点才能有这个平行链的数据 ● 平行链 :相对于主链而言,运行在 XuperChain 中的用户级区块链实例,用户 ...
- 百度超级链XChain(3)平台特点
采用经典的UTXO记账模式,并且支持丰富的智能合约开发语言,交易处理支持并发执行,拥有完善的账号与权限体系,采用DPOS作为共识算法 1. 权限系统 实现一个去中心化,区块链内置的合约账号权限系统. ...
- 百度超级链XChain(2)p2p网络
1. 定义 非结构化p2p网络 结构化p2p网络:结构化p2p最普遍的实现方案是使用分布式哈希表(DHT),eg. 以太坊网络. 1.1 NAT技术 通过将局域网内的主机地址映射为互联网上的有效ip地 ...
- 百度超级链XChain(1)系统架构
1. 架构图 智能合约的并行执行和验证 通过自研的WASM虚拟机,做到了指令集级别的极致优化 2. 模块 模块 特性 存储 XuperChain的底层存储基于KV数据库,存储的数据包括区块数据.交易数 ...
- 百度超级链XChain(7)数据模型
1. XuperModel数据模型 是比特币utxo模型的一个演变. 每个事务读取的数据需要引用上一个事务写入的数据. 事务的输入表示在执行智能合约期间读取的数据源,即事务的输出来源. 事务的输出表示 ...
- 百度超级链XChain(6)XVM虚拟机
XVM跟XuperBridge对接主要靠两个函数 call_method,这个函数向Bridge传递需要调用的方法和参数 fetch_response,这个函数向Bridge获取上次调用的结果 ext ...
- 百度超级链正式发布开放网络白皮书,致力于构建开放共赢区块链新生态
阅读原文获取"白皮书" 8月4日,百度超级链开放网络白皮书线上发布会正式启动.发布会深度揭秘百度超级链的产品战略.开放网络技术理念和生态合作方案. 百度一直相信区块链是未来链接信任 ...
最新文章
- 位置相关属性offset(),position(),scrollTop()等
- Impala使用笔记(一)
- IELE:区块链的一个新虚拟机
- 灾备还缺一套评价体系
- 在Nutz中如何配置多个数据库源,并且带事务控制
- 在linux系统中 用户的主目录可以不在,在Linux系统中,root用户的家目录是 答案:/root...
- R语言_驾驶员事故预测
- 摄像机跟随以及注视旋转和角度变化
- cad指示箭头快捷键命令_47个快捷键+50个CAD技巧助你玩转CAD
- ycf 梗_抖音三个汤勺放在筷子上是什么梗 抖音三个汤勺放在筷子上出处介绍[多图]...
- 三菱FX系列PLC以太网通讯
- 【双拼打字】双拼对照表
- Ultraiso制作Centos7 优盘Udisk 启动镜像
- hadoop之mapreduce教程+案例学习(一)
- 2061:【例1.2】梯形面积
- python format()用法详解
- PTA题目——奇偶分家
- VHDL语言基础-数据类型及运算符
- android studio lua插件,android Studio 配置LUA 开发环境
- 博客质量分计算(二)
热门文章
- 多线程:一些好的编程建议
- Android Studio——字体大小的修改
- xmlstreamexception 参数实体未进行声明_命名实体识别研究进展概述
- -%3e运算符在c语言中的作用,C语言逻辑运算符知识整理
- 数据中心告别柴发还需要多久?
- AI:2020年6月21日北京智源大会演讲分享之20:00-21:00邱锡鹏教授《如何学习深度学习》
- 成功解决Instructions for updating: Use `tf.global_variables_initializer` instead.
- 成功解决TypeError: ‘float’ object cannot be interpreted as an index
- ML之MaL: 流形学习MaL的概念认知、算法分类、案例应用、代码实现之详细攻略
- ML之FE:Kaggle比赛之根据城市自行车共享系统数据进行FE+预测在某个时间段自行车被租出去的个数