NULS Protocol--TX

NULS协议之交易Transaction

原文地址:https://niels.wang/2019/06/16/NULS-Protocol-TX
NULS采用通用的交易协议格式,主要由以下字段组成:

LenFieldsData TypeRemark
2typeuint16交易类型
4timeuint32时间,精确到秒
txDataVarByte业务数据
coinDataVarByte资产数据
remarkVarString备注
sigDataVarByte包含公钥和签名数据

type

用于区分不同的业务交易,每个模块可以注册多个交易类型,每个交易类型可以有不同的验证逻辑、处理逻辑。取值范围是1~65535。
不同的交易类型不应该设置重复的type,系统不允许重复的type进行注册。
系统对扩展的支持:大于100的type

time

交易发生的时间,精确到秒,不做强制限制,取值范围可以是任何uint32内的数字。

txData

用于扩展业务数据,账本不验证txData内容,这里可以存放任何数据。目前NULS内置的交易类型中的业务数据都是存储在txData字段中。业务模块在注册了交易类型后,会提供三个接口来验证和处理txData中的数据(verifyTx,commitTx,rollbackTx)。

CoinData

交易的资产数据,NULS目前定义了一套通用的CoinData格式,具体如下

froms://List<CoinForm>格式,
tos://List<CoinTo>格式

注:支持多个账户同一笔交易中转出不同资产到不同的账户中

CoinForm结构[40]

address:  //byte[24] 账户地址
assetsChainId://uint16 资产发行链的id
assetsId: //uint16 资产id
amount:  //uint128,转出数量
nonce  : //byte[8] 交易顺序号,前一笔交易的hash的后8个字节
locked : //byte 是否是锁定状态(locktime:-1),1代表锁定,0代表非锁定

CoinTo结构[44]

address:  //byte[24],目标地址
assetsChainId://uint16 资产发行链的id
assetsId: //uint16 资产id
amount :  //uint128,转账金额
lockTime://uint32,解锁高度或解锁时间,-1为永久锁定

手续费

forms-tos剩余的部分就是手续费(模型中支持多种资产缴纳手续费,约束条件由经济模型设计决定)

remark

备注,此内容的数据,会通过utf-8编码转换为字符串显示在浏览器和钱包中。也可以用remark字段进行交易的业务扩展。

sigData

签名数据支持多个账户的签名,每个签名包括四个部分:公钥长度、公钥、签名数据长度、签名数据。

交易的Hash计算

将交易除sigData外的数据进行序列化,获得完整的字节数组。使用Sha-256对数据进行两次计算,得到32位的Hash值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值