Documentation ¶
Overview ¶
@Title block.go @Description 区块头数据结构 @Author Niels 2020/3/26
@Title @Description @Author Niels 2020/3/27
@Title @Description @Author Niels 2020/3/25
@Title @Description @Author Niels 2020/3/27
@Title transaction.go @Description 定义交易的基本结构和常用方法 @Author Niels 2020/3/25
@Description 这里列举了所有NULS网络支持的交易类型
Index ¶
Constants ¶
const ( //coinbase 共识奖励交易类型 TX_TYPE_COIN_BASE = 1 //the type of the transfer transaction TX_TYPE_TRANSFER = 2 //设置账户别名 //*Set the transaction type of account alias. TX_TYPE_ACCOUNT_ALIAS = 3 //新建共识节点 TX_TYPE_REGISTER_AGENT = 4 //委托参与共识 TX_TYPE_DEPOSIT = 5 //取消委托 TX_TYPE_CANCEL_DEPOSIT = 6 //黄牌惩罚交易 TX_TYPE_YELLOW_PUNISH = 7 //红牌惩罚交易 TX_TYPE_RED_PUNISH = 8 //注销共识节点交易类型 TX_TYPE_STOP_AGENT = 9 //跨链转账交易类型 TX_TYPE_CROSS_CHAIN = 10 //注册平行链交易类型 TX_TYPE_REGISTER_CHAIN_AND_ASSET = 11 //从NULS网络中注销一条平行链的交易的类型 TX_TYPE_DESTROY_CHAIN_AND_ASSET = 12 //为平行链登记一种资产的交易类型 TX_TYPE_ADD_ASSET_TO_CHAIN = 13 //删除链上资产交易类型 TX_TYPE_REMOVE_ASSET_FROM_CHAIN = 14 //创建智能合约交易的类型 TX_TYPE_CREATE_CONTRACT = 15 //调用智能合约的交易的类型 TX_TYPE_CALL_CONTRACT = 16 //删除智能合约交易的类型 TX_TYPE_DELETE_CONTRACT = 17 //合约内部转账交易的类型 //contract transfer tx type TX_TYPE_CONTRACT_TRANSFER = 18 //合约执行手续费返还交易的类型 //合约在调用时,会模拟执行一次,用来估算需要花费的手续费金额,实际在调用过程中,给出了更多的手续费(出于一定要执行成功的目的), //当合约实际执行时,可能会出现手续费富余,这部分gas将以“合约手续费返回交易”的方式返回给调用者 TX_TYPE_CONTRACT_RETURN_GAS = 19 //合约创建共识节点交易 TX_TYPE_CONTRACT_CREATE_AGENT = 20 //合约委托交易 TX_TYPE_CONTRACT_DEPOSIT = 21 //合约撤销委托交易 TX_TYPE_CONTRACT_CANCEL_DEPOSIT = 22 //合约停止节点交易 TX_TYPE_CONTRACT_STOP_AGENT = 23 //跨链验证人变更交易 TX_TYPE_VERIFIER_CHANGE = 24 //跨链验证人初始化交易 TX_TYPE_VERIFIER_INIT = 25 //token跨链转账 CONTRACT_TOKEN_CROSS_TRANSFER = 26 //账本注册本来新增资产 LEDGER_ASSET_REG_TRANSFER = 27 //追加节点保证金 APPEND_AGENT_DEPOSIT = 28 REDUCE_AGENT_DEPOSIT = 29 // 喂价交易 QUOTATION = 30 // 最终喂价交易 FINAL_QUOTATION = 31 // 批量退出staking交易 BATCH_WITHDRAW = 32 // 合并活期staking记录 BATCH_STAKING_MERGE = 33 // 创建交易对 COIN_TRADING = 228 // 挂单委托 TRADING_ORDER = 229 // 挂单撤销 TRADING_ORDER_CANCEL = 230 // 挂单成交 TRADING_DEAL = 231 // 修改交易对 EDIT_COIN_TRADING = 232 // 撤单交易确认 ORDER_CANCEL_CONFIRM = 233 // 确认 虚拟银行变更交易 CONFIRM_CHANGE_VIRTUAL_BANK = 40 // 虚拟银行变更交易 CHANGE_VIRTUAL_BANK = 41 // 链内充值交易 RECHARGE = 42 // 提现交易 WITHDRAWAL = 43 // 确认提现成功状态交易 CONFIRM_WITHDRAWAL = 44 // 发起提案交易 PROPOSAL = 45 // 对提案进行投票交易 VOTE_PROPOSAL = 46 // 异构链交易手续费补贴 DISTRIBUTION_FEE = 47 // 虚拟银行初始化异构链 INITIALIZE_HETEROGENEOUS = 48 // 异构链合约资产注册等待 HETEROGENEOUS_CONTRACT_ASSET_REG_PENDING = 49 // 异构链合约资产注册完成 HETEROGENEOUS_CONTRACT_ASSET_REG_COMPLETE = 50 // 确认提案执行交易 CONFIRM_PROPOSAL = 51 // 重置异构链(合约)虚拟银行 RESET_HETEROGENEOUS_VIRTUAL_BANK = 52 // 确认重置异构链(合约)虚拟银行 CONFIRM_HETEROGENEOUS_RESET_VIRTUAL_BANK = 53 //修改跨链注册信息 REGISTERED_CHAIN_CHANGE = 60 )
const HashLength = 32
hash的字节长度,默认为32
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Block ¶
type Block struct { //区块头 Header *BlockHeader //交易列表 Txs []*Transaction }
区块结构体,包含区块头和交易列表两个部分
type BlockHeader ¶
type BlockHeader struct { PreHash *NulsHash MerkleRoot *NulsHash Time uint32 Height uint32 TxCount uint32 Extend []byte PackagerPubkey []byte SignData []byte // contains filtered or unexported fields }
区块头结构图
func (*BlockHeader) GetHash ¶
func (h *BlockHeader) GetHash() *NulsHash
func (*BlockHeader) Parse ¶
func (h *BlockHeader) Parse(reader *seria.ByteBufReader) error
从reader中读取所有字段的值,并赋值到结构体中
func (*BlockHeader) SerializeForHash ¶
func (h *BlockHeader) SerializeForHash() ([]byte, error)
type Coin ¶
type Coin struct { //账户地址 Address []byte //资产发行链的id AssetsChainId uint16 //资产的唯一标识 AssetsId uint16 //资产的数量,将小数位左移为整数 Amount *big.Int }
资产信息结构体
type CoinData ¶
type CoinData struct { //转出数据结构,可以包含多个账户,多种资产 //每个账户可以重复出现多次,但必须是不同的资产 //from中的每个账户都必须对交易签名,否则交易不合法 Froms []CoinFrom //转出数据结构,可以包含多个账户,多种资产 Tos []CoinTo }
trandaction的coindata的预定义结构体
type CoinFrom ¶
type CoinFrom struct { Coin //账户状态的nonce值,用来避免双花交易 Nonce []byte //使用的资产是否是锁定资产 //0普通交易,-1解锁金额交易(退出共识,退出委托) Locked byte }
资产转出信息结构体
type CoinTo ¶
type CoinTo struct { Coin //是否将资产锁定 //0:代表不锁定 //<0 :代表业务锁定 //lockValue < 10,000,000时,代表区块高度,当网络高度超过这个数值时,自动解锁(可以使用) //10,000,000<lockValue<1,000,000,000,000时,代表当前时间(秒),当时间晚于此值时,自动解锁(可以使用) //lockValue>1,000,000,000,000时,代表当前时间(毫秒),当时间晚于此值时,自动解锁(可以使用) LockValue uint64 }
资产转入结构体
type CommonSignData ¶
type CommonSignData struct {
Signatures []P2PHKSignature
}
func (*CommonSignData) Parse ¶
func (s *CommonSignData) Parse(reader *seria.ByteBufReader) error
反序列化方法
type MultiAddressesSignData ¶
type MultiAddressesSignData struct { //多签地址的最小签名数量 M byte //组成多签地址的公钥列表,顺序不能变 PubkeyList [][]byte //签名列表,不限制顺序 CommonSignData }
func (*MultiAddressesSignData) Parse ¶
func (s *MultiAddressesSignData) Parse(reader *seria.ByteBufReader) error
反序列化方法
func (*MultiAddressesSignData) Serialize ¶
func (s *MultiAddressesSignData) Serialize() ([]byte, error)
序列化方法
type NulsHash ¶
type NulsHash struct {
// contains filtered or unexported fields
}
交易hash和区块hash的结构体
type P2PHKSignature ¶
type Transaction ¶
type Transaction struct { //交易类型,@txtype.go中对网络支持的交易类型做了常量 TxType uint16 //交易发生时间,精确到秒 Time uint32 //交易的备注,默认为UTF-8编码的字符串 Remark []byte //交易业务扩展字段,任何需要上链的数据都可以放在这里 Extend []byte //资产交易数据,资产的转入、转出都需要在这里进行 CoinData []byte //交易签名数据,支持多个签名,每个签名包含一个公钥和一个签名数据 SignData []byte // contains filtered or unexported fields }
基础交易结构,NULS生态中所有的交易都是已次结构组成的
func ParseTransaction ¶
func ParseTransaction(bytes []byte, cursor int) *Transaction
将字节slice反序列化为交易结构体 @bytes 包含交易的完整的序列化数据的字节slice @cursor 游标,从此开始解析交易
func ParseTransactionByReader ¶
func ParseTransactionByReader(reader *seria.ByteBufReader) *Transaction
从Reader中解析交易 @reader 字节slice数据阅读器,其中包含交易的完整序列化数据,且cursor刚好处于交易数据的起始点
func (*Transaction) CalcHash ¶
func (t *Transaction) CalcHash() error
计算交易本身的hash,交易hash通过TxType,Time,Remark,Extend,CoinData共5个字段进行计算
func (*Transaction) Parse ¶
func (t *Transaction) Parse(reader *seria.ByteBufReader) (errResult error)
func (*Transaction) SerializeForHash ¶
func (t *Transaction) SerializeForHash() ([]byte, error)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
@Title @Description @Author Niels 2020/9/15 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25
|
@Title @Description @Author Niels 2020/9/15 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 @Title @Description @Author Niels 2020/9/25 |