transactionrecord

package
v0.6.1 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2017 License: ISC Imports: 10 Imported by: 3

Documentation

Overview

the structure of the transaction records

includes functions to pack/unpack []byte form

Index

Constants

View Source
const (
	// null marks beginning of list - not used as a record type
	NullTag = TagType(iota)

	// valid record type
	BaseDataTag        = TagType(iota)
	AssetDataTag       = TagType(iota)
	BitmarkIssueTag    = TagType(iota)
	BitmarkTransferTag = TagType(iota)

	// this item must be last
	InvalidTag = TagType(iota)
)

enumerate the possible transaction record types this is encoded a Varint64 at start of "Packed"

View Source
const (
	AssetIndexLength = 64
)

limits

Variables

This section is empty.

Functions

func AssetIndexFromBytes

func AssetIndexFromBytes(assetIndex *AssetIndex, buffer []byte) error

convert and validate little endian binary byte slice to a assetIndex

func RecordName

func RecordName(record interface{}) (string, bool)

get the name of a transaction record as a string

Types

type AssetData

type AssetData struct {
	Name        string            `json:"name"`        // utf-8
	Fingerprint string            `json:"fingerprint"` // utf-8
	Metadata    string            `json:"metadata"`    // utf-8
	Registrant  *account.Account  `json:"registrant"`  // base58
	Signature   account.Signature `json:"signature"`   // hex
}

the unpacked Asset Data structure

func (*AssetData) AssetIndex

func (assetData *AssetData) AssetIndex() AssetIndex

compute an asset index

func (*AssetData) Pack

func (assetData *AssetData) Pack(address *account.Account) (Packed, error)

pack AssetData

Pack Varint64(tag) followed by fields in order as struct above with signature last.

Note: the metadata field consists of key value pairs each preceded

by its count (

NOTE: returns the "unsigned" message on signature failure - for

debugging/testing

type AssetIndex

type AssetIndex [AssetIndexLength]byte

the type for an asset index stored as little endian byte array represented as little endian hex text for JSON encoding convert a binary assetIndex to byte slice to get bytes value just use assetIndex[:]

func NewAssetIndex

func NewAssetIndex(record []byte) AssetIndex

create an asset index from a byte slice

SHA3-512 Hash

func (AssetIndex) GoString

func (assetIndex AssetIndex) GoString() string

convert a binary assetIndex to little endian hex string for use by the fmt package (for %#v)

func (AssetIndex) MarshalText

func (assetIndex AssetIndex) MarshalText() ([]byte, error)

convert assetIndex to little endian hex text

func (*AssetIndex) Scan

func (assetIndex *AssetIndex) Scan(state fmt.ScanState, verb rune) error

convert a little endian hex text representation to a assetIndex for use by the format package scan routines

func (AssetIndex) String

func (assetIndex AssetIndex) String() string

convert a binary assetIndex to little endian hex string for use by the fmt package (for %s)

func (*AssetIndex) UnmarshalText

func (assetIndex *AssetIndex) UnmarshalText(s []byte) error

convert little endian hex text into a assetIndex

type BaseData

type BaseData struct {
	Currency       currency.Currency `json:"currency"`       // utf-8 → Enum
	PaymentAddress string            `json:"paymentAddress"` // utf-8
	Owner          *account.Account  `json:"owner"`          // base58
	Nonce          uint64            `json:"nonce,string"`   // unsigned 0..N
	Signature      account.Signature `json:"signature,"`     // hex
}

the unpacked Proofer Data structure

func (*BaseData) Pack

func (baseData *BaseData) Pack(address *account.Account) (Packed, error)

pack BaseData

Pack Varint64(tag) followed by fields in order as struct above with signature last

NOTE: returns the "unsigned" message on signature failure - for

debugging/testing

type BitmarkIssue

type BitmarkIssue struct {
	AssetIndex AssetIndex        `json:"asset"`     // link to asset record
	Owner      *account.Account  `json:"owner"`     // base58: the "destination" owner
	Nonce      uint64            `json:"nonce"`     // to allow for multiple issues at the same time
	Signature  account.Signature `json:"signature"` // hex: corresponds to owner in linked record
}

the unpacked BitmarkIssue structure

func (*BitmarkIssue) Pack

func (issue *BitmarkIssue) Pack(address *account.Account) (Packed, error)

pack BitmarkIssue

Pack Varint64(tag) followed by fields in order as struct above with signature last

NOTE: returns the "unsigned" message on signature failure - for

debugging/testing

type BitmarkTransfer

type BitmarkTransfer struct {
	Link      merkle.Digest     `json:"link"`      // previous record
	Payment   *Payment          `json:"payment"`   // optional payment address
	Owner     *account.Account  `json:"owner"`     // base58: the "destination" owner
	Signature account.Signature `json:"signature"` // hex: corresponds to owner in linked record
}

the unpacked BitmarkTransfer structure

func (*BitmarkTransfer) Pack

func (transfer *BitmarkTransfer) Pack(address *account.Account) (Packed, error)

local function to pack BitmarkTransfer

Pack Varint64(tag) followed by fields in order as struct above with signature last

NOTE: returns the "unsigned" message on signature failure - for

debugging/testing

type Packed

type Packed []byte

packed records are just a byte slice

func (p Packed) MakeLink() merkle.Digest

Create an link for a packed record

func (Packed) MarshalText

func (p Packed) MarshalText() ([]byte, error)

convert a packed to its hex JSON form

func (Packed) Type

func (record Packed) Type() TagType

determine the record type code

func (*Packed) UnmarshalText added in v0.5.7

func (p *Packed) UnmarshalText(s []byte) error

convert a packed to its hex JSON form

func (Packed) Unpack

func (record Packed) Unpack(testing ...bool) (Transaction, int, error)

turn a byte slice into a record

must cast result to correct type

e.g.

registration, ok := result.(*transaction.Registration)

or:

switch tx := result.(type) {
case *transaction.Registration:

type Payment

type Payment struct {
	Currency currency.Currency `json:"currency"`      // utf-8 → Enum
	Address  string            `json:"address"`       // utf-8
	Amount   uint64            `json:"amount,string"` // number as string, in terms of smallest currency unit
}

optional payment record

type PaymentAlternative added in v0.5.0

type PaymentAlternative []*Payment

a single payment possibility - for use in RPC layers up to entries:

  1. issue block owner payment
  2. last transfer block owner payment (can merge with 1 if same address)
  3. optional transfer payment

type TagType

type TagType uint64

type Transaction

type Transaction interface {
	Pack(account *account.Account) (Packed, error)
}

generic transaction interface

Jump to

Keyboard shortcuts

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