txprotocal

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2020 License: MIT Imports: 7 Imported by: 2

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

View Source
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
)
View Source
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
}

区块结构体,包含区块头和交易列表两个部分

func ParseBlock

func ParseBlock(bytes []byte) *Block

根据序列化数据,反序列化区块结构体

func (*Block) Parse

func (b *Block) Parse(reader *seria.ByteBufReader)

从reader中读取所有字段的值,并赋值到结构体中

func (*Block) Serialize

func (b *Block) Serialize() []byte

将区块完整数据序列化为字节数组

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) Serialize

func (h *BlockHeader) Serialize() ([]byte, error)

将区块头完整数据序列化为字节数组

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的预定义结构体

func (*CoinData) Parse

func (c *CoinData) Parse(reader *seria.ByteBufReader) error

func (*CoinData) Serialize

func (c *CoinData) Serialize() ([]byte, error)

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

反序列化方法

func (*CommonSignData) Serialize

func (s *CommonSignData) Serialize() ([]byte, 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的结构体

func ImportNulsHash

func ImportNulsHash(hashHex string) *NulsHash

创建一个新的hash对象

func NewNulsHash

func NewNulsHash(bytes []byte) *NulsHash

创建一个新的hash对象

func (*NulsHash) Parse

func (hash *NulsHash) Parse(reader *seria.ByteBufReader) error

从reader中读取32个字节,赋值到hash中

func (*NulsHash) Serialize

func (hash *NulsHash) Serialize() ([]byte, error)

序列化hash字节数组,长度为32位

func (*NulsHash) String

func (hash *NulsHash) String() string

type P2PHKSignature

type P2PHKSignature struct {
	SignValue []byte
	PublicKey []byte
}

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) GetHash

func (t *Transaction) GetHash() *NulsHash

获取交易hash

func (*Transaction) Parse

func (t *Transaction) Parse(reader *seria.ByteBufReader) (errResult error)

func (*Transaction) Serialize

func (t *Transaction) Serialize() ([]byte, error)

将交易序列化为字节slice

func (*Transaction) SerializeForHash

func (t *Transaction) SerializeForHash() ([]byte, error)

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL