账本模块
为什么要有《账本模块》
账本模块是区块链的数据中枢,所有账户的余额、交易都保存在账本模块中,
每一个全网节点上都会保存一个全网账本,保证了数据的完整、公开、透明,同时保证了数据不可篡改、可追溯
《账本模块》要做什么
为组装交易提供数据支撑,主要就是记账和查账,验证交易的合法性,如:是否有充足的余额,是否重复支付(双花)
《账本模块》在系统中的定位
账本模块是数据中枢,保存系统所有存在交易的结果数据,它不依赖任何业务模块,其他模块按需依赖它。
##《账本模块》中名词解释
- 交易的随机数(nonce,交易hash值的后8byte)
- nonce:与此地址发送的交易数量相等的标量值,用户发起的每一笔交易中都会包含该nonce。
- 在该账户每笔交易都需要保存前一笔花费交易的nonce。
- 严格地说,nonce是始发地址的一个属性(它只在发送地址的上下文中有意义)。但是,该nonce并未作为账户状态的一部分显式存储在区块链中。
- nonce值也用于防止帐户余额的错误计算。例如,假设一个账户有10个NULS的余额,并且签署了两个交易,都花费6个NULS,分别具有nonce 1和nonce 2。这两笔交易中哪一笔有效?在区块链分布式系统中,节点可能无序地接收交易。nonce强制任何地址的交易按顺序处理,不管间隔时间如何,无论节点接收到的顺序如何。这样,所有节点都会计算相同的余额。支付6以太币的交易将被成功处理,账户余额减少到4 ether。无论什么时候收到,所有节点都认为与带有nonce 2的交易无效。如果一个节点先收到nonce 2的交易,会持有它,但在收到并处理完nonce 1的交易之前不会提交它。
- 使用nonce确保所有节点计算相同的余额,并正确地对交易进行排序,相当于比特币中用于防止“双重支付”的机制。但是,因为以太坊跟踪账户余额并且不会单独跟踪独立的币(在比特币中称为UTXO),所以只有在账户余额计算错误时才会发生“双重支付”。nonce机制可以防止这种情况发生。
接口列表
blockValidate
整区块入账校验
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
txList | list<string> | []交易Hex值列表 | 是 |
blockHeight | long | 区块高度 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true处理成功,false处理失败 |
verifyCoinData
未确认交易校验
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
tx | string | 交易Hex值 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
orphan | boolean | true孤儿,false非孤儿 |
rollbackTxValidateStatus
回滚打包校验状态
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
tx | string | 交易Hex值 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true回滚成功,false回滚失败 |
verifyCoinDataBatchPackaged
打包交易校验
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
txList | list<string> | []交易列表(HEX值列表) | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
fail | list<string> | 校验失败Hash值列表 |
orphan | list<string> | 校验为孤儿的Hash值列表 |
success | list<string> | 校验成功的Hash值列表 |
batchValidateBegin
开始批量打包:状态通知
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true处理成功,false处理失败 |
commitUnconfirmedTx
未确认交易提交账本(校验并更新nonce值)
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | string | 运行的链Id,取值区间[1-65535] | 是 |
tx | string | 交易Hex值 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
orphan | boolean | true 孤儿交易,false 非孤儿交易 |
commitBatchUnconfirmedTxs
未确认交易批量提交账本(校验并更新nonce值)
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | string | 运行的链Id,取值区间[1-65535] | 是 |
txList | string | []交易Hex值列表 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
orphan | list<string> | 孤儿交易Hash列表 |
fail | list<string> | 校验失败交易Hash列表 |
rollBackUnconfirmTx
回滚提交的未确认交易
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
tx | string | 交易Hex值 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true 成功,false 失败 |
clearUnconfirmTxs
清除所有账户未确认交易
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true 成功,false 失败 |
commitBlockTxs
提交区块
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
txList | list<string> | 交易Hex值列表 | 是 |
blockHeight | long | 区块高度 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true 成功,false 失败 |
rollBackBlockTxs
区块回滚
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
txList | list<string> | []交易Hex值列表 | 是 |
blockHeight | string | 区块高度 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
value | boolean | true 成功,false 失败 |
getNonce
获取账户资产NONCE值
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
assetChainId | int | 资产链Id,取值区间[1-65535] | 是 |
assetId | int | 资产Id,取值区间[1-65535] | 是 |
address | string | 资产所在地址 | 是 |
isConfirmed | boolean | 选填项,默认false. 填true,则必须从已确认交易里获取 | 否 |
返回值
字段名 | 字段类型 | 参数描述 |
nonce | string | 账户资产nonce值 |
nonceType | integer | 1:已确认的nonce值,0:未确认的nonce值 |
getBalance
获取账户资产(已入区块)
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行链Id,取值区间[1-65535] | 是 |
assetChainId | int | 资产链Id,取值区间[1-65535] | 是 |
assetId | int | 资产Id,取值区间[1-65535] | 是 |
address | string | 资产所在地址 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
total | biginteger | 总金额 |
freeze | biginteger | 冻结金额 |
available | string | 可用金额 |
getBalanceNonce
获取账户资产余额与NONCE值
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
assetChainId | int | 资产链Id,取值区间[1-65535] | 是 |
assetId | int | 资产Id,取值区间[1-65535] | 是 |
address | string | 资产所在地址 | 是 |
isConfirmed | boolean | 选填项,默认false. 填true,则必须从已确认交易里获取 | 否 |
返回值
字段名 | 字段类型 | 参数描述 |
nonce | string | 账户资产nonce值 |
nonceType | integer | 1:已确认的nonce值,0:未确认的nonce值 |
available | biginteger | 可用金额 |
permanentLocked | biginteger | 永久锁定金额 |
timeHeightLocked | biginteger | 高度或时间锁定金额 |
getFreezeList
分页获取账户锁定资产列表
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行链Id,取值区间[1-65535] | 是 |
assetChainId | int | 资产链Id,取值区间[1-65535] | 是 |
assetId | int | 资产Id,取值区间[1-65535] | 是 |
address | string | 资产所在地址 | 是 |
pageNumber | int | 起始页数 | 是 |
pageSize | int | 每页显示数量 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
totalCount | integer | 记录总数 |
pageNumber | integer | 起始页数 |
pageSize | integer | 每页显示数量 |
list | list<object> | 锁定金额列表 |
txHash | string | 交易hash |
amount | biginteger | 锁定金额 |
lockedValue | long | 锁定时间或高度,-1为永久锁定 |
time | long | 交易产生时间,秒 |
getAssetsById
查询链下指定资产集合的金额信息
scope:public
version:1.0
参数列表
参数名 | 参数类型 | 参数描述 | 是否非空 |
chainId | int | 运行的链Id,取值区间[1-65535] | 是 |
assetIds | string | 资产id,逗号分隔 | 是 |
返回值
字段名 | 字段类型 | 参数描述 |
assetId | integer | 资产id |
availableAmount | biginteger | 可用金额 |
freeze | biginteger | 冻结金额 |
Last Updated: 2019/9/23 上午11:37:24