types

package
v0.0.13 Latest Latest
Warning

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

Go to latest
Published: Jun 30, 2022 License: LGPL-3.0 Imports: 38 Imported by: 2

Documentation

Overview

Package types contains data types related to Ethereum consensus.

Index

Constants

View Source
const (
	// BloomByteLength represents the number of bytes used in a header log bloom.
	BloomByteLength = 256

	// BloomBitLength represents the number of bits used in a header log bloom.
	BloomBitLength = 8 * BloomByteLength
)
View Source
const (
	// ReceiptStatusFailed is the status code of a transaction if execution failed.
	ReceiptStatusFailed = uint64(0)

	// ReceiptStatusSuccessful is the status code of a transaction if execution succeeded.
	ReceiptStatusSuccessful = uint64(1)
)
View Source
const (
	//MaxP2PNodeDataSize is a 1.25Mb heuristic data limit for DOS prevention on node message
	MaxP2PNodeDataSize = 1280 * 1024
	//MaxPoolTransactionDataSize is a 128KB heuristic data limit for DOS prevention on txn
	MaxPoolTransactionDataSize = 128 * 1024
	//MaxEncodedPoolTransactionSize is a heuristic raw/encoded data size limit. It has an additional 10KB for metadata
	MaxEncodedPoolTransactionSize = MaxPoolTransactionDataSize + (10 * 1024)
)

Variables

View Source
var (
	EmptyRootHash  = DeriveSha(Transactions{})
	EmptyUncleHash = CalcUncleHash(nil)
)

Constants for block.

View Source
var Bloom9 = bloom9

Bloom9 type.

View Source
var BodyRegistry = taggedrlp.NewRegistry()

BodyRegistry is the tagged RLP registry for block body types.

View Source
var (
	ErrInvalidChainID = errors.New("invalid chain id for signer")
)

Constants for transaction signing.

View Source
var (
	ErrInvalidSig = errors.New("invalid transaction v, r, s values")
)

Errors constants for Transaction.

View Source
var (
	// ErrUnknownPoolTxType is returned when attempting to assert a PoolTransaction to its concrete type
	ErrUnknownPoolTxType = errors.New("unknown transaction type in tx-pool")
)

StakingTypeMap is the map from staking type to transactionType

Functions

func BloomLookup

func BloomLookup(bin ethtypes.Bloom, topic bytesBacked) bool

BloomLookup checks if a topic may belong to the Bloom.

func BytesToBloom

func BytesToBloom(b []byte) ethtypes.Bloom

BytesToBloom converts a byte slice to a bloom filter. It panics if b is not of suitable size.

func CalcUncleHash

func CalcUncleHash(uncles []*block.Header) common.Hash

CalcUncleHash returns rlp hash of uncles.

func CopyHeader

func CopyHeader(h *block.Header) *block.Header

CopyHeader creates a deep copy of a block header to prevent side effects from modifying a header variable.

func CreateBloom

func CreateBloom(receipts Receipts) ethtypes.Bloom

CreateBloom creates a Bloom given the receipts.

func DeriveMultipleShardsSha

func DeriveMultipleShardsSha(list DerivableList) common.Hash

DeriveMultipleShardsSha calcualtes the root hash of tries generated by DerivableList of multiple shards If the list is empty, then return EmptyRootHash else, return |shard0|trieHash0|shard1|trieHash1|...| for non-empty destination shards

func DeriveOneShardSha

func DeriveOneShardSha(list DerivableList, shardID uint32) common.Hash

DeriveOneShardSha calculates the hash of the trie of cross shard transactions with the given destination shard

func DeriveSha

func DeriveSha(list ...DerivableBase) common.Hash

DeriveSha calculates the hash of the trie generated by DerivableList.

func LogsBloom

func LogsBloom(logs []*Log) *big.Int

LogsBloom ...

func Number

func Number(b1, b2 *Block) bool

Number checks if block b1 is less than block b2.

func Sender

func Sender(signer Signer, tx InternalTransaction) (common.Address, error)

Sender returns the address derived from the signature (V, R, S) using secp256k1 elliptic curve and an error if it failed deriving or upon an incorrect signature.

Sender may cache the address, allowing it to be used regardless of signing method. The cache is invalidated if the cached signer does not match the signer used in the current call.

Types

type Block

type Block struct {

	// These fields are used by package eth to track
	// inter-peer block relay.
	ReceivedAt   time.Time
	ReceivedFrom interface{}
	// contains filtered or unexported fields
}

Block represents an entire block in the Harmony blockchain.

func NewBlock

func NewBlock(
	header *block.Header, txs []*Transaction,
	receipts []*Receipt, outcxs []*CXReceipt, incxs []*CXReceiptsProof,
	stks []*staking.StakingTransaction) *Block

NewBlock creates a new block. The input data is copied, changes to header and to the field values will not affect the block.

The values of TxHash, UncleHash, ReceiptHash and Bloom in header are ignored and set to values derived from the given txs, and receipts.

func NewBlockWithHeader

func NewBlockWithHeader(header *block.Header) *Block

NewBlockWithHeader creates a block with the given header data. The header data is copied, changes to header and to the field values will not affect the block.

func (*Block) AddVdf

func (b *Block) AddVdf(vdf []byte)

AddVdf add vdf into block header

func (*Block) AddVrf

func (b *Block) AddVrf(vrf []byte)

AddVrf add vrf into block header

func (*Block) Bloom

func (b *Block) Bloom() ethtypes.Bloom

Bloom returns header bloom.

func (*Block) Body

func (b *Block) Body() *Body

Body returns the non-header content of the block.

func (*Block) Coinbase

func (b *Block) Coinbase() common.Address

Coinbase returns header coinbase.

func (*Block) DecodeRLP

func (b *Block) DecodeRLP(s *rlp.Stream) error

DecodeRLP decodes the Ethereum

func (*Block) DeprecatedTd

func (b *Block) DeprecatedTd() *big.Int

DeprecatedTd is an old relic for extracting the TD of a block. It is in the code solely to facilitate upgrading the database from the old format to the new, after which it should be deleted. Do not use!

func (*Block) EncodeRLP

func (b *Block) EncodeRLP(w io.Writer) error

EncodeRLP serializes b into the Ethereum RLP block format.

func (*Block) Epoch

func (b *Block) Epoch() *big.Int

Epoch is the header Epoch

func (*Block) Extra

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

Extra returns header extra.

func (*Block) GasLimit

func (b *Block) GasLimit() uint64

GasLimit returns header gas limit.

func (*Block) GasUsed

func (b *Block) GasUsed() uint64

GasUsed returns header gas used.

func (*Block) GetCurrentCommitSig

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

GetCurrentCommitSig get the commit group signature that signed on this block.

func (*Block) Hash

func (b *Block) Hash() common.Hash

Hash returns the keccak256 hash of b's header. The hash is computed on the first call and cached thereafter.

func (*Block) Header

func (b *Block) Header() *block.Header

Header returns a copy of Header.

func (*Block) IncomingReceipts

func (b *Block) IncomingReceipts() CXReceiptsProofs

IncomingReceipts returns verified outgoing receipts

func (*Block) IsLastBlockInEpoch

func (b *Block) IsLastBlockInEpoch() bool

IsLastBlockInEpoch returns if its the last block of the epoch.

func (*Block) Logger

func (b *Block) Logger(logger *zerolog.Logger) *zerolog.Logger

Logger returns a sub-logger with block contexts added.

func (*Block) MixDigest

func (b *Block) MixDigest() common.Hash

MixDigest is the header mix digest.

func (*Block) Number

func (b *Block) Number() *big.Int

Number returns header number.

func (*Block) NumberU64

func (b *Block) NumberU64() uint64

NumberU64 is the header number in uint64.

func (*Block) OutgoingReceiptHash

func (b *Block) OutgoingReceiptHash() common.Hash

OutgoingReceiptHash returns header cross shard receipt hash.

func (*Block) ParentHash

func (b *Block) ParentHash() common.Hash

ParentHash return header parent hash.

func (*Block) ReceiptHash

func (b *Block) ReceiptHash() common.Hash

ReceiptHash returns header receipt hash.

func (*Block) Root

func (b *Block) Root() common.Hash

Root returns header root.

func (*Block) SetCurrentCommitSig

func (b *Block) SetCurrentCommitSig(sigAndBitmap []byte)

SetCurrentCommitSig sets the commit group signature that signed on this block.

func (*Block) SetLastCommitSig

func (b *Block) SetLastCommitSig(sig []byte, signers []byte)

SetLastCommitSig sets the last block's commit group signature.

func (*Block) ShardID

func (b *Block) ShardID() uint32

ShardID is the header ShardID

func (*Block) Size

func (b *Block) Size() common.StorageSize

Size returns the true RLP encoded storage size of the block, either by encoding and returning it, or returning a previsouly cached value.

func (*Block) StakingTransactions

func (b *Block) StakingTransactions() staking.StakingTransactions

StakingTransactions returns stakingTransactions.

func (*Block) String

func (b *Block) String() string

func (*Block) Time

func (b *Block) Time() *big.Int

Time is header time.

func (*Block) Transactions

func (b *Block) Transactions() Transactions

Transactions returns transactions.

func (*Block) TxHash

func (b *Block) TxHash() common.Hash

TxHash returns header tx hash.

func (*Block) Uncles

func (b *Block) Uncles() []*block.Header

Uncles return uncles.

func (*Block) Vdf

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

Vdf returns header Vdf.

func (*Block) Vrf

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

Vrf returns header Vrf.

func (*Block) WithBody

func (b *Block) WithBody(transactions []*Transaction, stakingTxns []*staking.StakingTransaction, uncles []*block.Header, incomingReceipts CXReceiptsProofs) *Block

WithBody returns a new block with the given transaction and uncle contents.

type BlockBy

type BlockBy func(b1, b2 *Block) bool

BlockBy is the func type.

func (BlockBy) Sort

func (blockBy BlockBy) Sort(blocks Blocks)

Sort sorts blocks.

type BlockNonce

type BlockNonce [8]byte

A BlockNonce is a 64-bit hash which proves (combined with the mix-hash) that a sufficient amount of computation has been carried out on a block.

func EncodeNonce

func EncodeNonce(i uint64) BlockNonce

EncodeNonce converts the given integer to a block nonce.

func (BlockNonce) MarshalText

func (n BlockNonce) MarshalText() ([]byte, error)

MarshalText encodes n as a hex string with 0x prefix.

func (BlockNonce) Uint64

func (n BlockNonce) Uint64() uint64

Uint64 returns the integer value of a block nonce.

func (*BlockNonce) UnmarshalText

func (n *BlockNonce) UnmarshalText(input []byte) error

UnmarshalText implements encoding.TextUnmarshaler.

type BlockTxsCounts

type BlockTxsCounts map[common.Address]uint64

BlockTxsCounts is a transactions counts map of the number of transactions made by each account in a block on this node.

func (BlockTxsCounts) String

func (btc BlockTxsCounts) String() string

String returns the string formatted representation of BlockTxsCounts

type Blocks

type Blocks []*Block

Blocks is an array of Block.

type Body

type Body struct {
	BodyInterface
}

Body is a simple (mutable, non-safe) data container for storing and moving a block's data contents (transactions and uncles) together.

func NewBodyForMatchingHeader

func NewBodyForMatchingHeader(h *block.Header) (*Body, error)

NewBodyForMatchingHeader returns a new block body struct whose implementation matches the version of the given field.

TODO ek – this is a stopgap, and works only while there is a N:1 mapping

between header and body versions.  Replace usage with factory.

func NewTestBody

func NewTestBody() *Body

NewTestBody creates a new, empty body object for epoch 0 using the test factory. Use for unit tests.

func (*Body) DecodeRLP

func (b *Body) DecodeRLP(s *rlp.Stream) error

DecodeRLP decodes a block body out of the given RLP stream into the receiver. It uses tagged RLP encoding for non-Genesis body formats.

func (*Body) EncodeRLP

func (b *Body) EncodeRLP(w io.Writer) error

EncodeRLP RLP-encodes the block body onto the given writer. It uses tagged RLP encoding for non-Genesis body formats.

func (*Body) With

func (b *Body) With() BodyFieldSetter

With returns a field setter context for the receiver.

type BodyFieldSetter

type BodyFieldSetter struct {
	// contains filtered or unexported fields
}

BodyFieldSetter is a body field setter.

func (BodyFieldSetter) Body

func (bfs BodyFieldSetter) Body() *Body

Body ends the field setter chain and returns the underlying body itself.

func (BodyFieldSetter) IncomingReceipts

func (bfs BodyFieldSetter) IncomingReceipts(newIncomingReceipts CXReceiptsProofs) BodyFieldSetter

IncomingReceipts sets the IncomingReceipts field of the body.

func (BodyFieldSetter) StakingTransactions

func (bfs BodyFieldSetter) StakingTransactions(newStakingTransactions []*types.StakingTransaction) BodyFieldSetter

StakingTransactions sets the StakingTransactions field of the body.

func (BodyFieldSetter) Transactions

func (bfs BodyFieldSetter) Transactions(newTransactions []*Transaction) BodyFieldSetter

Transactions sets the Transactions field of the body.

func (BodyFieldSetter) Uncles

func (bfs BodyFieldSetter) Uncles(newUncles []*block.Header) BodyFieldSetter

Uncles sets the Uncles field of the body.

type BodyInterface

type BodyInterface interface {
	// Transactions returns a deep copy the list of transactions in this block.
	Transactions() []*Transaction

	// StakingTransactions returns a deep copy of staking transactions
	StakingTransactions() []*staking.StakingTransaction

	// TransactionAt returns the transaction at the given index in this block.
	// It returns nil if index is out of bounds.
	TransactionAt(index int) *Transaction

	// StakingTransactionAt returns the staking transaction at the given index in this block.
	// It returns nil if index is out of bounds.
	StakingTransactionAt(index int) *staking.StakingTransaction

	// CXReceiptAt returns the CXReceipt given index (calculated from IncomingReceipts)
	// It returns nil if index is out of bounds
	CXReceiptAt(index int) *CXReceipt

	// SetTransactions sets the list of transactions with a deep copy of the
	// given list.
	SetTransactions(newTransactions []*Transaction)

	// SetStakingTransactions sets the list of staking transactions with a deep copy of the
	// given list.
	SetStakingTransactions(newStakingTransactions []*staking.StakingTransaction)

	// Uncles returns a deep copy of the list of uncle headers of this block.
	Uncles() []*block.Header

	// SetUncles sets the list of uncle headers with a deep copy of the given
	// list.
	SetUncles(newUncle []*block.Header)

	// IncomingReceipts returns a deep copy of the list of incoming cross-shard
	// transaction receipts of this block.
	IncomingReceipts() CXReceiptsProofs

	// SetIncomingReceipts sets the list of incoming cross-shard transaction
	// receipts of this block with a dep copy of the given list.
	SetIncomingReceipts(newIncomingReceipts CXReceiptsProofs)
}

BodyInterface is a simple accessor interface for block body.

type BodyV0

type BodyV0 struct {
	// contains filtered or unexported fields
}

BodyV0 is the V0 block body

func (*BodyV0) CXReceiptAt

func (b *BodyV0) CXReceiptAt(index int) *CXReceipt

CXReceiptAt returns the CXReceipt at given index in this block It returns nil if index is out of bounds V0 will just return nil because we don't support CXReceipt

func (*BodyV0) DecodeRLP

func (b *BodyV0) DecodeRLP(s *rlp.Stream) error

DecodeRLP RLP-decodes a block body from the given RLP stream into the receiver.

func (*BodyV0) EncodeRLP

func (b *BodyV0) EncodeRLP(w io.Writer) error

EncodeRLP RLP-encodes the block body into the given writer.

func (*BodyV0) IncomingReceipts

func (b *BodyV0) IncomingReceipts() (incomingReceipts CXReceiptsProofs)

IncomingReceipts returns a deep copy of the list of incoming cross-shard transaction receipts of this block.

func (*BodyV0) SetIncomingReceipts

func (b *BodyV0) SetIncomingReceipts(newIncomingReceipts CXReceiptsProofs)

SetIncomingReceipts sets the list of incoming cross-shard transaction receipts of this block with a dep copy of the given list.

func (*BodyV0) SetStakingTransactions

func (b *BodyV0) SetStakingTransactions(newTransactions []*staking.StakingTransaction)

SetStakingTransactions sets the list of staking transactions with a deep copy of the given list. (not supported by Body V0)

func (*BodyV0) SetTransactions

func (b *BodyV0) SetTransactions(newTransactions []*Transaction)

SetTransactions sets the list of transactions with a deep copy of the given list.

func (*BodyV0) SetUncles

func (b *BodyV0) SetUncles(newUncle []*block.Header)

SetUncles sets the list of uncle headers with a deep copy of the given list.

func (*BodyV0) StakingTransactionAt

func (b *BodyV0) StakingTransactionAt(index int) *staking.StakingTransaction

StakingTransactionAt returns the staking transaction at the given index in this block. It returns nil if index is out of bounds. (not supported by Body V0)

func (*BodyV0) StakingTransactions

func (b *BodyV0) StakingTransactions() (txs []*staking.StakingTransaction)

StakingTransactions returns the list of staking transactions. The returned list is a deep copy; the caller may do anything with it without affecting the original.

func (*BodyV0) TransactionAt

func (b *BodyV0) TransactionAt(index int) *Transaction

TransactionAt returns the transaction at the given index in this block. It returns nil if index is out of bounds.

func (*BodyV0) Transactions

func (b *BodyV0) Transactions() (txs []*Transaction)

Transactions returns the list of transactions.

The returned list is a deep copy; the caller may do anything with it without affecting the original.

func (*BodyV0) Uncles

func (b *BodyV0) Uncles() (uncles []*block.Header)

Uncles returns a deep copy of the list of uncle headers of this block.

type BodyV1

type BodyV1 struct {
	// contains filtered or unexported fields
}

BodyV1 is the V1 block body

func (*BodyV1) CXReceiptAt

func (b *BodyV1) CXReceiptAt(index int) *CXReceipt

CXReceiptAt returns the CXReceipt at given index in this block It returns nil if index is out of bounds

func (*BodyV1) DecodeRLP

func (b *BodyV1) DecodeRLP(s *rlp.Stream) error

DecodeRLP RLP-decodes a block body from the given RLP stream into the receiver.

func (*BodyV1) EncodeRLP

func (b *BodyV1) EncodeRLP(w io.Writer) error

EncodeRLP RLP-encodes the block body into the given writer.

func (*BodyV1) IncomingReceipts

func (b *BodyV1) IncomingReceipts() (incomingReceipts CXReceiptsProofs)

IncomingReceipts returns a deep copy of the list of incoming cross-shard transaction receipts of this block.

func (*BodyV1) SetIncomingReceipts

func (b *BodyV1) SetIncomingReceipts(newIncomingReceipts CXReceiptsProofs)

SetIncomingReceipts sets the list of incoming cross-shard transaction receipts of this block with a dep copy of the given list.

func (*BodyV1) SetStakingTransactions

func (b *BodyV1) SetStakingTransactions(newTransactions []*staking.StakingTransaction)

SetStakingTransactions sets the list of staking transactions with a deep copy of the given list. (not supported by Body V1)

func (*BodyV1) SetTransactions

func (b *BodyV1) SetTransactions(newTransactions []*Transaction)

SetTransactions sets the list of transactions with a deep copy of the given list.

func (*BodyV1) SetUncles

func (b *BodyV1) SetUncles(newUncle []*block.Header)

SetUncles sets the list of uncle headers with a deep copy of the given list.

func (*BodyV1) StakingTransactionAt

func (b *BodyV1) StakingTransactionAt(index int) *staking.StakingTransaction

StakingTransactionAt returns the staking transaction at the given index in this block. It returns nil if index is out of bounds. (not supported by Body V1)

func (*BodyV1) StakingTransactions

func (b *BodyV1) StakingTransactions() (txs []*staking.StakingTransaction)

StakingTransactions returns the list of staking transactions. The returned list is a deep copy; the caller may do anything with it without affecting the original.

func (*BodyV1) TransactionAt

func (b *BodyV1) TransactionAt(index int) *Transaction

TransactionAt returns the transaction at the given index in this block. It returns nil if index is out of bounds.

func (*BodyV1) Transactions

func (b *BodyV1) Transactions() (txs []*Transaction)

Transactions returns the list of transactions.

The returned list is a deep copy; the caller may do anything with it without affecting the original.

func (*BodyV1) Uncles

func (b *BodyV1) Uncles() (uncles []*block.Header)

Uncles returns a deep copy of the list of uncle headers of this block.

type BodyV2

type BodyV2 struct {
	// contains filtered or unexported fields
}

BodyV2 is the V2 block body

func (*BodyV2) CXReceiptAt

func (b *BodyV2) CXReceiptAt(index int) *CXReceipt

CXReceiptAt returns the CXReceipt at given index in this block It returns nil if index is out of bounds

func (*BodyV2) DecodeRLP

func (b *BodyV2) DecodeRLP(s *rlp.Stream) error

DecodeRLP RLP-decodes a block body from the given RLP stream into the receiver.

func (*BodyV2) EncodeRLP

func (b *BodyV2) EncodeRLP(w io.Writer) error

EncodeRLP RLP-encodes the block body into the given writer.

func (*BodyV2) IncomingReceipts

func (b *BodyV2) IncomingReceipts() (incomingReceipts CXReceiptsProofs)

IncomingReceipts returns a deep copy of the list of incoming cross-shard transaction receipts of this block.

func (*BodyV2) SetIncomingReceipts

func (b *BodyV2) SetIncomingReceipts(newIncomingReceipts CXReceiptsProofs)

SetIncomingReceipts sets the list of incoming cross-shard transaction receipts of this block with a dep copy of the given list.

func (*BodyV2) SetStakingTransactions

func (b *BodyV2) SetStakingTransactions(newStakingTransactions []*staking.StakingTransaction)

SetStakingTransactions sets the list of staking transactions with a deep copy of the given list.

func (*BodyV2) SetTransactions

func (b *BodyV2) SetTransactions(newTransactions []*Transaction)

SetTransactions sets the list of transactions with a deep copy of the given list.

func (*BodyV2) SetUncles

func (b *BodyV2) SetUncles(newUncle []*block.Header)

SetUncles sets the list of uncle headers with a deep copy of the given list.

func (*BodyV2) StakingTransactionAt

func (b *BodyV2) StakingTransactionAt(index int) *staking.StakingTransaction

StakingTransactionAt returns the staking transaction at the given index in this block. It returns nil if index is out of bounds.

func (*BodyV2) StakingTransactions

func (b *BodyV2) StakingTransactions() (txs []*staking.StakingTransaction)

StakingTransactions returns the list of staking transactions. The returned list is a deep copy; the caller may do anything with it without affecting the original.

func (*BodyV2) TransactionAt

func (b *BodyV2) TransactionAt(index int) *Transaction

TransactionAt returns the transaction at the given index in this block. It returns nil if index is out of bounds.

func (*BodyV2) Transactions

func (b *BodyV2) Transactions() (txs []*Transaction)

Transactions returns the list of transactions.

The returned list is a deep copy; the caller may do anything with it without affecting the original.

func (*BodyV2) Uncles

func (b *BodyV2) Uncles() (uncles []*block.Header)

Uncles returns a deep copy of the list of uncle headers of this block.

type CXMerkleProof

type CXMerkleProof struct {
	BlockNum      *big.Int      // blockNumber of source shard
	BlockHash     common.Hash   // blockHash of source shard
	ShardID       uint32        // shardID of source shard
	CXReceiptHash common.Hash   // root hash of the cross shard receipts in a given block
	ShardIDs      []uint32      // order list, records destination shardID
	CXShardHashes []common.Hash // ordered hash list, each hash corresponds to one destination shard's receipts root hash
}

CXMerkleProof represents the merkle proof of a collection of ordered cross shard transactions

func (*CXMerkleProof) Copy

func (cxmp *CXMerkleProof) Copy() *CXMerkleProof

Copy makes a deep copy of the receiver.

func (CXMerkleProof) MarshalJSON

func (r CXMerkleProof) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*CXMerkleProof) UnmarshalJSON

func (r *CXMerkleProof) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type CXReceipt

type CXReceipt struct {
	TxHash    common.Hash // hash of the cross shard transaction in source shard
	From      common.Address
	To        *common.Address
	ShardID   uint32
	ToShardID uint32
	Amount    *big.Int
}

CXReceipt represents a receipt for cross-shard transaction

func (*CXReceipt) Copy

func (r *CXReceipt) Copy() *CXReceipt

Copy makes a deep copy of the receiver.

func (CXReceipt) MarshalJSON

func (r CXReceipt) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*CXReceipt) UnmarshalJSON

func (r *CXReceipt) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type CXReceipts

type CXReceipts []*CXReceipt

CXReceipts is a list of CXReceipt

func (CXReceipts) ComputeMerkleRoot

func (cs CXReceipts) ComputeMerkleRoot() common.Hash

ComputeMerkleRoot computes the merkle root of this list of receipts The root is the hash of [shardID, receiptsRoot, shardID, receiptsRoot...] The receiptRoot is the merkle root hash of the receipts for a specific shards.

func (CXReceipts) Copy

func (cs CXReceipts) Copy() (cpy CXReceipts)

Copy makes a deep copy of the receiver.

func (CXReceipts) GetRlp

func (cs CXReceipts) GetRlp(i int) []byte

GetRlp implements Rlpable and returns the i'th element of s in rlp.

func (CXReceipts) GetToShardReceipts

func (cs CXReceipts) GetToShardReceipts(shardID uint32) CXReceipts

GetToShardReceipts filters the cross shard receipts with given destination shardID

func (CXReceipts) Len

func (cs CXReceipts) Len() int

Len returns the length of s.

func (CXReceipts) MaxToShardID

func (cs CXReceipts) MaxToShardID() uint32

MaxToShardID returns the maximum destination shardID of cxReceipts

func (CXReceipts) Swap

func (cs CXReceipts) Swap(i, j int)

Swap swaps the i'th and the j'th element in s.

func (CXReceipts) ToShardID

func (cs CXReceipts) ToShardID(i int) uint32

ToShardID returns the destination shardID of the cxReceipt

type CXReceiptsProof

type CXReceiptsProof struct {
	Receipts     CXReceipts
	MerkleProof  *CXMerkleProof
	Header       *block.Header
	CommitSig    []byte
	CommitBitmap []byte
}

CXReceiptsProof carrys the cross shard receipts and merkle proof

func (*CXReceiptsProof) ContainsEmptyField

func (cxp *CXReceiptsProof) ContainsEmptyField() bool

ContainsEmptyField checks whether the given CXReceiptsProof contains empty field

func (*CXReceiptsProof) Copy

func (cxp *CXReceiptsProof) Copy() *CXReceiptsProof

Copy makes a deep copy of the receiver.

func (*CXReceiptsProof) GetToShardID

func (cxp *CXReceiptsProof) GetToShardID() (uint32, error)

GetToShardID get the destination shardID, return error if there is more than one unique shardID

func (CXReceiptsProof) MarshalJSON

func (r CXReceiptsProof) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*CXReceiptsProof) UnmarshalJSON

func (r *CXReceiptsProof) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type CXReceiptsProofs

type CXReceiptsProofs []*CXReceiptsProof

CXReceiptsProofs is a list of CXReceiptsProof

func (CXReceiptsProofs) Copy

func (cs CXReceiptsProofs) Copy() (cpy CXReceiptsProofs)

Copy makes a deep copy of the receiver.

func (CXReceiptsProofs) GetRlp

func (cs CXReceiptsProofs) GetRlp(i int) []byte

GetRlp implements Rlpable and returns the i'th element of s in rlp.

func (CXReceiptsProofs) Len

func (cs CXReceiptsProofs) Len() int

Len returns the length of s.

func (CXReceiptsProofs) MaxToShardID

func (cs CXReceiptsProofs) MaxToShardID() uint32

MaxToShardID returns the maximum destination shardID of cxReceipts Not used

func (CXReceiptsProofs) Swap

func (cs CXReceiptsProofs) Swap(i, j int)

Swap swaps the i'th and the j'th element in s.

func (CXReceiptsProofs) ToShardID

func (cs CXReceiptsProofs) ToShardID(i int) uint32

ToShardID returns the destination shardID of the cxReceipt Not used

type CoreTransaction

type CoreTransaction interface {
	From() *atomic.Value
	Nonce() uint64
	GasPrice() *big.Int
	GasLimit() uint64
	ShardID() uint32
	ToShardID() uint32
	To() *common.Address
	Value() *big.Int
	Data() []byte

	Hash() common.Hash
	Protected() bool
	ChainID() *big.Int
}

CoreTransaction defines the core funcs of any transactions

type CrossLink struct {
	HashF        common.Hash
	BlockNumberF *big.Int
	ViewIDF      *big.Int
	SignatureF   [96]byte //aggregated signature
	BitmapF      []byte   //corresponding bitmap mask for agg signature
	ShardIDF     uint32   //will be verified with signature on |blockNumber|blockHash| is correct
	EpochF       *big.Int
}

CrossLink is only used on beacon chain to store the hash links from other shards signature and bitmap correspond to |blockNumber|parentHash| byte array Capital to enable rlp encoding Here we replace header to signatures only, the basic assumption is the committee will not be corrupted during one epoch, which is the same as consensus assumption

func DeserializeCrossLink(bytes []byte) (*CrossLink, error)

DeserializeCrossLink rlp-decode the bytes into cross link object.

func NewCrossLink(header *block.Header, parentHeader *block.Header) *CrossLink

NewCrossLink returns a new cross link object

func (*CrossLink) Bitmap

func (cl *CrossLink) Bitmap() []byte

Bitmap returns bitmap

func (*CrossLink) BlockNum

func (cl *CrossLink) BlockNum() uint64

BlockNum returns blockNum

func (*CrossLink) Epoch

func (cl *CrossLink) Epoch() *big.Int

Epoch returns epoch with big.Int format

func (*CrossLink) Hash

func (cl *CrossLink) Hash() common.Hash

Hash returns hash

func (*CrossLink) MarshalJSON

func (cl *CrossLink) MarshalJSON() ([]byte, error)

MarshalJSON ..

func (*CrossLink) Number

func (cl *CrossLink) Number() *big.Int

Number returns blockNum with big.Int format

func (*CrossLink) Serialize

func (cl *CrossLink) Serialize() []byte

Serialize returns bytes of cross link rlp-encoded content

func (*CrossLink) ShardID

func (cl *CrossLink) ShardID() uint32

ShardID returns shardID

func (*CrossLink) Signature

func (cl *CrossLink) Signature() [96]byte

Signature returns aggregated signature

func (*CrossLink) ViewID

func (cl *CrossLink) ViewID() *big.Int

ViewID returns viewID with big.Int format

type CrossLinks []CrossLink

CrossLinks is a collection of cross links

func (CrossLinks) IsSorted

func (cls CrossLinks) IsSorted() bool

IsSorted checks whether the cross links are sorted

func (CrossLinks) Sort

func (cls CrossLinks) Sort()

Sort crosslinks by shardID and then tie break by blockNum then by viewID

type CrosslinkHeartbeat

type CrosslinkHeartbeat struct {
	ShardID                  uint32
	LatestContinuousBlockNum uint64
	Epoch                    uint64
	PublicKey                []byte
	Signature                []byte
}

type DerivableBase

type DerivableBase interface {
	Len() int
	GetRlp(i int) []byte
}

DerivableBase ..

type DerivableList

type DerivableList interface {
	DerivableBase
	ToShardID(i int) uint32
	MaxToShardID() uint32 // return the maximum non-empty destination shardID
}

DerivableList is the interface of DerivableList.

type EIP155Signer

type EIP155Signer struct {
	// contains filtered or unexported fields
}

EIP155Signer implements Signer using the EIP155 rules.

func NewEIP155Signer

func NewEIP155Signer(chainID *big.Int) EIP155Signer

NewEIP155Signer creates a EIP155Signer given chainID.

func (EIP155Signer) Equal

func (s EIP155Signer) Equal(s2 Signer) bool

Equal checks if the given EIP155Signer is equal to another Signer.

func (EIP155Signer) Hash

Hash returns the hash to be signed by the sender. It does not uniquely identify the transaction.

func (EIP155Signer) Sender

Sender returns the sender address of the given signer.

func (EIP155Signer) SignatureValues

func (s EIP155Signer) SignatureValues(tx InternalTransaction, sig []byte) (R, S, V *big.Int, err error)

SignatureValues returns signature values. This signature needs to be in the [R || S || V] format where V is 0 or 1.

type EthTransaction

type EthTransaction struct {
	// contains filtered or unexported fields
}

EthTransaction ethereum-compatible transaction

func NewEthTransaction

func NewEthTransaction(nonce uint64, to common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *EthTransaction

NewEthTransaction returns new ethereum-compatible transaction, which works as a intra-shard transaction

func SignEthTx

func SignEthTx(tx *EthTransaction, s Signer, prv *ecdsa.PrivateKey) (*EthTransaction, error)

SignEthTx signs the eth transaction using the given signer and private key

func (*EthTransaction) AsMessage

func (tx *EthTransaction) AsMessage(s Signer) (Message, error)

AsMessage returns the transaction as a core.Message.

AsMessage requires a signer to derive the sender.

XXX Rename message to something less arbitrary?

func (*EthTransaction) ChainID

func (tx *EthTransaction) ChainID() *big.Int

ChainID returns which chain id this transaction was signed for (if at all)

func (*EthTransaction) CheckNonce

func (tx *EthTransaction) CheckNonce() bool

CheckNonce returns check nonce from Transaction.

func (*EthTransaction) ConvertToHmy

func (tx *EthTransaction) ConvertToHmy() *Transaction

ConvertToHmy converts eth txn to hmy txn by filling in ShardID and ToShardID fields.

func (*EthTransaction) Copy

func (tx *EthTransaction) Copy() *EthTransaction

Copy returns a copy of the transaction.

func (*EthTransaction) Cost

func (tx *EthTransaction) Cost() (*big.Int, error)

Cost returns amount + gasprice * gaslimit.

func (*EthTransaction) Data

func (tx *EthTransaction) Data() []byte

Data returns data payload of Transaction.

func (*EthTransaction) DecodeRLP

func (tx *EthTransaction) DecodeRLP(s *rlp.Stream) error

DecodeRLP implements rlp.Decoder

func (*EthTransaction) EncodeRLP

func (tx *EthTransaction) EncodeRLP(w io.Writer) error

EncodeRLP implements rlp.Encoder

func (*EthTransaction) From

func (tx *EthTransaction) From() *atomic.Value

From returns the sender address of the transaction

func (*EthTransaction) Gas

func (tx *EthTransaction) Gas() uint64

Gas returns gas of Transaction.

func (*EthTransaction) GasLimit

func (tx *EthTransaction) GasLimit() uint64

GasLimit of the transcation

func (*EthTransaction) GasPrice

func (tx *EthTransaction) GasPrice() *big.Int

GasPrice returns gas price of Transaction.

func (*EthTransaction) Hash

func (tx *EthTransaction) Hash() common.Hash

Hash hashes the RLP encoding of tx. It uniquely identifies the transaction.

func (*EthTransaction) IsEthCompatible

func (tx *EthTransaction) IsEthCompatible() bool

IsEthCompatible returns whether the txn is ethereum compatible

func (*EthTransaction) MarshalJSON

func (tx *EthTransaction) MarshalJSON() ([]byte, error)

MarshalJSON encodes the web3 RPC transaction format.

func (*EthTransaction) Nonce

func (tx *EthTransaction) Nonce() uint64

Nonce returns account nonce from Transaction.

func (*EthTransaction) Protected

func (tx *EthTransaction) Protected() bool

Protected returns whether the transaction is protected from replay protection.

func (*EthTransaction) R

func (tx *EthTransaction) R() *big.Int

R value of the transaction signature

func (*EthTransaction) RawSignatureValues

func (tx *EthTransaction) RawSignatureValues() (v, r, s *big.Int)

RawSignatureValues returns the V, R, S signature values of the transaction. The return values should not be modified by the caller.

func (*EthTransaction) S

func (tx *EthTransaction) S() *big.Int

S value of the transaction signature

func (*EthTransaction) SenderAddress

func (tx *EthTransaction) SenderAddress() (common.Address, error)

SenderAddress returns the address of transaction sender Note that mainnet has unprotected transactions prior to Epoch 28

func (*EthTransaction) ShardID

func (tx *EthTransaction) ShardID() uint32

ShardID returns which shard id this transaction was signed for (if at all)

func (*EthTransaction) Size

func (tx *EthTransaction) Size() common.StorageSize

Size returns the true RLP encoded storage size of the transaction, either by encoding and returning it, or returning a previsouly cached value.

func (*EthTransaction) Time

func (tx *EthTransaction) Time() time.Time

Time returns the time at which the transaction was received by the node

func (*EthTransaction) To

func (tx *EthTransaction) To() *common.Address

To returns the recipient address of the transaction. It returns nil if the transaction is a contract creation.

func (*EthTransaction) ToShardID

func (tx *EthTransaction) ToShardID() uint32

ToShardID returns the destination shard id this transaction is going to

func (*EthTransaction) UnmarshalJSON

func (tx *EthTransaction) UnmarshalJSON(input []byte) error

UnmarshalJSON decodes the web3 RPC transaction format.

func (*EthTransaction) V

func (tx *EthTransaction) V() *big.Int

V value of the transaction signature

func (*EthTransaction) Value

func (tx *EthTransaction) Value() *big.Int

Value is the amount of ONE token transfered (in Atto)

func (*EthTransaction) WithSignature

func (tx *EthTransaction) WithSignature(signer Signer, sig []byte) (*EthTransaction, error)

WithSignature returns a new transaction with the given signature. This signature needs to be in the [R || S || V] format where V is 0 or 1.

type EthTransactions

type EthTransactions []*EthTransaction

EthTransactions is a Transaction slice type for basic sorting.

func (EthTransactions) GetRlp

func (s EthTransactions) GetRlp(i int) []byte

GetRlp implements Rlpable and returns the i'th element of s in rlp.

func (EthTransactions) Len

func (s EthTransactions) Len() int

Len returns the length of s.

func (EthTransactions) Swap

func (s EthTransactions) Swap(i, j int)

Swap swaps the i'th and the j'th element in s.

type FrontierSigner

type FrontierSigner struct{}

FrontierSigner ...

func (FrontierSigner) Equal

func (fs FrontierSigner) Equal(s2 Signer) bool

Equal checks if the s2 signer is equal to the given signer.

func (FrontierSigner) Hash

Hash returns the hash to be signed by the sender. It does not uniquely identify the transaction.

func (FrontierSigner) Sender

Sender returns the sender address of the given transaction.

func (FrontierSigner) SignatureValues

func (fs FrontierSigner) SignatureValues(tx InternalTransaction, sig []byte) (r, s, v *big.Int, err error)

SignatureValues returns signature values. This signature needs to be in the [R || S || V] format where V is 0 or 1.

type HomesteadSigner

type HomesteadSigner struct{ FrontierSigner }

HomesteadSigner implements InternalTransaction using the homestead rules.

func (HomesteadSigner) Equal

func (hs HomesteadSigner) Equal(s2 Signer) bool

Equal checks if it is equal to s2 signer.

func (HomesteadSigner) Sender

Sender returns the address of the sender.

func (HomesteadSigner) SignatureValues

func (hs HomesteadSigner) SignatureValues(tx InternalTransaction, sig []byte) (r, s, v *big.Int, err error)

SignatureValues returns signature values. This signature needs to be in the [R || S || V] format where V is 0 or 1.

type InternalTransaction

type InternalTransaction interface {
	CoreTransaction

	// Signature values
	V() *big.Int
	R() *big.Int
	S() *big.Int

	IsEthCompatible() bool
	AsMessage(s Signer) (Message, error)
}

InternalTransaction defines the common interface for harmony and ethereum transactions.

type InternalTransactions

type InternalTransactions []InternalTransaction

InternalTransactions is a InternalTransaction slice type for basic sorting.

func (InternalTransactions) GetRlp

func (s InternalTransactions) GetRlp(i int) []byte

GetRlp implements Rlpable and returns the i'th element of s in rlp.

func (InternalTransactions) Len

func (s InternalTransactions) Len() int

Len returns the length of s.

func (InternalTransactions) MaxToShardID

func (s InternalTransactions) MaxToShardID() uint32

MaxToShardID returns 0, arbitrary value, NOT use

func (InternalTransactions) Swap

func (s InternalTransactions) Swap(i, j int)

Swap swaps the i'th and the j'th element in s.

func (InternalTransactions) ToShardID

func (s InternalTransactions) ToShardID(i int) uint32

ToShardID returns the destination shardID of given transaction

type Log

type Log struct {
	// Consensus fields:
	// address of the contract that generated the event
	Address common.Address `json:"address" gencodec:"required"`
	// list of topics provided by the contract.
	Topics []common.Hash `json:"topics" gencodec:"required"`
	// supplied by the contract, usually ABI-encoded
	Data []byte `json:"data" gencodec:"required"`

	// Derived fields. These fields are filled in by the node
	// but not secured by consensus.
	// block in which the transaction was included
	BlockNumber uint64 `json:"blockNumber"`
	// hash of the transaction
	TxHash common.Hash `json:"transactionHash" gencodec:"required"`
	// index of the transaction in the block
	TxIndex uint `json:"transactionIndex" gencodec:"required"`
	// hash of the block in which the transaction was included
	BlockHash common.Hash `json:"blockHash"`
	// index of the log in the block
	Index uint `json:"logIndex" gencodec:"required"`

	// The Removed field is true if this log was reverted due to a chain reorganisation.
	// You must pay attention to this field if you receive logs through a filter query.
	Removed bool `json:"removed"`
}

Log represents a contract log event. These events are generated by the LOG opcode and stored/indexed by the node.

func FindLogsWithTopic

func FindLogsWithTopic(
	receipt *Receipt, targetTopic ethcommon.Hash,
) []*Log

FindLogsWithTopic returns all the logs that contain the given receipt

func (*Log) DecodeRLP

func (l *Log) DecodeRLP(s *rlp.Stream) error

DecodeRLP implements rlp.Decoder.

func (*Log) EncodeRLP

func (l *Log) EncodeRLP(w io.Writer) error

EncodeRLP implements rlp.Encoder.

func (Log) MarshalJSON

func (l Log) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*Log) UnmarshalJSON

func (l *Log) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type LogForStorage

type LogForStorage Log

LogForStorage is a wrapper around a Log that flattens and parses the entire content of a log including non-consensus fields.

func (*LogForStorage) DecodeRLP

func (l *LogForStorage) DecodeRLP(s *rlp.Stream) error

DecodeRLP implements rlp.Decoder.

func (*LogForStorage) EncodeRLP

func (l *LogForStorage) EncodeRLP(w io.Writer) error

EncodeRLP implements rlp.Encoder.

type Message

type Message struct {
	// contains filtered or unexported fields
}

Message is a fully derived transaction and implements core.Message NOTE: In a future PR this will be removed.

func NewMessage

func NewMessage(from common.Address, to *common.Address, nonce uint64, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte, checkNonce bool) Message

NewMessage returns new message.

func NewStakingMessage

func NewStakingMessage(from common.Address, nonce uint64, gasLimit uint64, gasPrice *big.Int, data []byte, blockNum *big.Int) Message

NewStakingMessage returns new message of staking type always need checkNonce

func (Message) BlockNum

func (m Message) BlockNum() *big.Int

BlockNum returns the blockNum of the tx belongs to

func (Message) CheckNonce

func (m Message) CheckNonce() bool

CheckNonce returns checkNonce of Message.

func (Message) Data

func (m Message) Data() []byte

Data return data of the Message.

func (Message) From

func (m Message) From() common.Address

From returns from address from Message.

func (Message) Gas

func (m Message) Gas() uint64

Gas returns gas limit of the Message.

func (Message) GasPrice

func (m Message) GasPrice() *big.Int

GasPrice returns gas price from Message.

func (Message) Nonce

func (m Message) Nonce() uint64

Nonce returns Nonce of the Message.

func (*Message) SetType

func (m *Message) SetType(typ TransactionType)

SetType set the type of message

func (Message) To

func (m Message) To() *common.Address

To returns to address from Message.

func (Message) Type

func (m Message) Type() TransactionType

Type returns the type of message

func (Message) Value

func (m Message) Value() *big.Int

Value returns the value amount from Message.

type PoolTransaction

type PoolTransaction interface {
	CoreTransaction

	SenderAddress() (common.Address, error)
	Size() common.StorageSize
	Cost() (*big.Int, error)
	EncodeRLP(w io.Writer) error
	DecodeRLP(s *rlp.Stream) error
}

PoolTransaction is the general transaction interface used by the tx pool

type PoolTransactions

type PoolTransactions []PoolTransaction

PoolTransactions is a PoolTransactions slice type for basic sorting.

func PoolTxDifference

func PoolTxDifference(a, b PoolTransactions) PoolTransactions

PoolTxDifference returns a new set which is the difference between a and b.

func (PoolTransactions) GetRlp

func (s PoolTransactions) GetRlp(i int) []byte

GetRlp implements Rlpable and returns the i'th element of s in rlp.

func (PoolTransactions) Len

func (s PoolTransactions) Len() int

Len returns the length of s.

func (PoolTransactions) Swap

func (s PoolTransactions) Swap(i, j int)

Swap swaps the i'th and the j'th element in s.

type PoolTxByNonce

type PoolTxByNonce PoolTransactions

PoolTxByNonce implements the sort interface to allow sorting a list of transactions by their nonces. This is usually only useful for sorting transactions from a single account, otherwise a nonce comparison doesn't make much sense.

func (PoolTxByNonce) Len

func (s PoolTxByNonce) Len() int

func (PoolTxByNonce) Less

func (s PoolTxByNonce) Less(i, j int) bool

func (PoolTxByNonce) Swap

func (s PoolTxByNonce) Swap(i, j int)

type Receipt

type Receipt struct {
	// Consensus fields
	PostState         []byte         `json:"root"`
	Status            uint64         `json:"status"`
	CumulativeGasUsed uint64         `json:"cumulativeGasUsed" gencodec:"required"`
	Bloom             ethtypes.Bloom `json:"logsBloom"         gencodec:"required"`
	Logs              []*Log         `json:"logs"              gencodec:"required"`

	// Implementation fields (don't reorder!)
	TxHash          common.Hash    `json:"transactionHash" gencodec:"required"`
	ContractAddress common.Address `json:"contractAddress"`
	GasUsed         uint64         `json:"gasUsed" gencodec:"required"`
}

Receipt represents the results of a transaction.

func NewReceipt

func NewReceipt(root []byte, failed bool, cumulativeGasUsed uint64) *Receipt

NewReceipt creates a barebone transaction receipt, copying the init fields.

func (*Receipt) DecodeRLP

func (r *Receipt) DecodeRLP(s *rlp.Stream) error

DecodeRLP implements rlp.Decoder, and loads the consensus fields of a receipt from an RLP stream.

func (*Receipt) EncodeRLP

func (r *Receipt) EncodeRLP(w io.Writer) error

EncodeRLP implements rlp.Encoder, and flattens the consensus fields of a receipt into an RLP stream. If no post state is present, byzantium fork is assumed.

func (Receipt) MarshalJSON

func (r Receipt) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*Receipt) Size

func (r *Receipt) Size() common.StorageSize

Size returns the approximate memory used by all internal contents. It is used to approximate and limit the memory consumption of various caches.

func (*Receipt) UnmarshalJSON

func (r *Receipt) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type ReceiptForStorage

type ReceiptForStorage Receipt

ReceiptForStorage is a wrapper around a Receipt that flattens and parses the entire content of a receipt, as opposed to only the consensus fields originally.

func (*ReceiptForStorage) DecodeRLP

func (r *ReceiptForStorage) DecodeRLP(s *rlp.Stream) error

DecodeRLP implements rlp.Decoder, and loads both consensus and implementation fields of a receipt from an RLP stream.

func (*ReceiptForStorage) EncodeRLP

func (r *ReceiptForStorage) EncodeRLP(w io.Writer) error

EncodeRLP implements rlp.Encoder, and flattens all content fields of a receipt into an RLP stream.

type Receipts

type Receipts []*Receipt

Receipts is a wrapper around a Receipt array to implement DerivableList.

func (Receipts) GetRlp

func (r Receipts) GetRlp(i int) []byte

GetRlp returns the RLP encoding of one receipt from the list.

func (Receipts) Len

func (r Receipts) Len() int

Len returns the number of receipts in this list.

func (Receipts) MaxToShardID

func (r Receipts) MaxToShardID() uint32

MaxToShardID returns 0, arbitrary value, NOT used

func (Receipts) ToShardID

func (r Receipts) ToShardID(i int) uint32

ToShardID returns 0, arbitrary value This function is NOT used, just to compatible with DerivableList interface

type RecentTxsStats

type RecentTxsStats map[uint64]BlockTxsCounts

RecentTxsStats is a recent transactions stats map tracking stats like BlockTxsCounts.

func (RecentTxsStats) String

func (rts RecentTxsStats) String() string

String returns the string formatted representation of RecentTxsStats

type Signer

type Signer interface {
	// Sender returns the sender address of the transaction.
	Sender(tx InternalTransaction) (common.Address, error)
	// SignatureValues returns the raw R, S, V values corresponding to the
	// given signature.
	SignatureValues(tx InternalTransaction, sig []byte) (r, s, v *big.Int, err error)
	// Hash returns the hash to be signed.
	Hash(tx InternalTransaction) common.Hash
	// Equal returns true if the given signer is the same as the receiver.
	Equal(Signer) bool
}

Signer encapsulates transaction signature handling. Note that this interface is not a stable API and may change at any time to accommodate new protocol rules.

func MakeSigner

func MakeSigner(config *params.ChainConfig, epochNumber *big.Int) Signer

MakeSigner returns a Signer based on the given chain config and epoch number.

type Transaction

type Transaction struct {
	// contains filtered or unexported fields
}

Transaction struct.

func NewContractCreation

func NewContractCreation(nonce uint64, shardID uint32, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction

NewContractCreation returns same shard contract transaction.

func NewCrossShardTransaction

func NewCrossShardTransaction(nonce uint64, to *common.Address, shardID uint32, toShardID uint32, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction

NewCrossShardTransaction returns new cross shard transaction

func NewTransaction

func NewTransaction(nonce uint64, to common.Address, shardID uint32, amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte) *Transaction

NewTransaction returns new transaction, this method is to create same shard transaction

func SignTx

func SignTx(tx *Transaction, s Signer, prv *ecdsa.PrivateKey) (*Transaction, error)

SignTx signs the transaction using the given signer and private key

func (*Transaction) AsMessage

func (tx *Transaction) AsMessage(s Signer) (Message, error)

AsMessage returns the transaction as a core.Message.

AsMessage requires a signer to derive the sender.

XXX Rename message to something less arbitrary?

func (*Transaction) ChainID

func (tx *Transaction) ChainID() *big.Int

ChainID returns which chain id this transaction was signed for (if at all)

func (*Transaction) CheckNonce

func (tx *Transaction) CheckNonce() bool

CheckNonce returns check nonce from Transaction.

func (*Transaction) ConvertToEth

func (tx *Transaction) ConvertToEth() *EthTransaction

ConvertToEth converts hmy txn to eth txn by removing the ShardID and ToShardID fields.

func (*Transaction) Copy

func (tx *Transaction) Copy() *Transaction

Copy returns a copy of the transaction.

func (*Transaction) Cost

func (tx *Transaction) Cost() (*big.Int, error)

Cost returns amount + gasprice * gaslimit.

func (*Transaction) Data

func (tx *Transaction) Data() []byte

Data returns data payload of Transaction.

func (*Transaction) DecodeRLP

func (tx *Transaction) DecodeRLP(s *rlp.Stream) error

DecodeRLP implements rlp.Decoder

func (*Transaction) EncodeRLP

func (tx *Transaction) EncodeRLP(w io.Writer) error

EncodeRLP implements rlp.Encoder

func (*Transaction) From

func (tx *Transaction) From() *atomic.Value

From returns the sender address of the transaction

func (*Transaction) GasLimit

func (tx *Transaction) GasLimit() uint64

GasLimit of the transcation

func (*Transaction) GasPrice

func (tx *Transaction) GasPrice() *big.Int

GasPrice is the gas price of the transaction

func (*Transaction) Hash

func (tx *Transaction) Hash() common.Hash

Hash hashes the RLP encoding of tx. It uniquely identifies the transaction.

func (*Transaction) HashByType

func (tx *Transaction) HashByType() common.Hash

HashByType hashes the RLP encoding of tx in it's original format (eth or hmy) It uniquely identifies the transaction.

func (*Transaction) IsEthCompatible

func (tx *Transaction) IsEthCompatible() bool

IsEthCompatible returns whether the txn is ethereum compatible

func (*Transaction) MarshalJSON

func (tx *Transaction) MarshalJSON() ([]byte, error)

MarshalJSON encodes the web3 RPC transaction format.

func (*Transaction) Nonce

func (tx *Transaction) Nonce() uint64

Nonce returns account nonce from Transaction.

func (*Transaction) Protected

func (tx *Transaction) Protected() bool

Protected returns whether the transaction is protected from replay protection.

func (*Transaction) R

func (tx *Transaction) R() *big.Int

R value of the transaction signature

func (*Transaction) RawSignatureValues

func (tx *Transaction) RawSignatureValues() (*big.Int, *big.Int, *big.Int)

RawSignatureValues return raw signature values.

func (*Transaction) S

func (tx *Transaction) S() *big.Int

S value of the transaction signature

func (*Transaction) SenderAddress

func (tx *Transaction) SenderAddress() (common.Address, error)

SenderAddress returns the address of transaction sender Note that mainnet has unprotected transactions prior to Epoch 28

func (*Transaction) ShardID

func (tx *Transaction) ShardID() uint32

ShardID returns which shard id this transaction was signed for (if at all)

func (*Transaction) Size

func (tx *Transaction) Size() common.StorageSize

Size returns the true RLP encoded storage size of the transaction, either by encoding and returning it, or returning a previously cached value.

func (*Transaction) Time

func (tx *Transaction) Time() time.Time

Time returns the time at which the transaction was received by the node

func (*Transaction) To

func (tx *Transaction) To() *common.Address

To returns the recipient address of the transaction. It returns nil if the transaction is a contract creation.

func (*Transaction) ToShardID

func (tx *Transaction) ToShardID() uint32

ToShardID returns the destination shard id this transaction is going to

func (*Transaction) UnmarshalJSON

func (tx *Transaction) UnmarshalJSON(input []byte) error

UnmarshalJSON decodes the web3 RPC transaction format.

func (*Transaction) V

func (tx *Transaction) V() *big.Int

V value of the transaction signature

func (*Transaction) Value

func (tx *Transaction) Value() *big.Int

Value is the amount of ONE token transfered (in Atto)

func (*Transaction) WithSignature

func (tx *Transaction) WithSignature(signer Signer, sig []byte) (*Transaction, error)

WithSignature returns a new transaction with the given signature. This signature needs to be formatted as described in the yellow paper (v+27).

type TransactionErrorReport

type TransactionErrorReport struct {
	TxHashID             string `json:"tx-hash-id"`
	StakingDirective     string `json:"directive-kind,omitempty"`
	TimestampOfRejection int64  `json:"time-at-rejection"`
	ErrMessage           string `json:"error-message"`
}

TransactionErrorReport ..

type TransactionErrorReports

type TransactionErrorReports []*TransactionErrorReport

TransactionErrorReports ..

type TransactionErrorSink

type TransactionErrorSink struct {
	// contains filtered or unexported fields
}

TransactionErrorSink is where all failed transactions get reported. Note that the keys of the lru caches are tx-hash strings.

func NewTransactionErrorSink

func NewTransactionErrorSink() *TransactionErrorSink

NewTransactionErrorSink ..

func (*TransactionErrorSink) Add

func (sink *TransactionErrorSink) Add(tx PoolTransaction, err error)

Add a transaction to the error sink with the given error

func (*TransactionErrorSink) Contains

func (sink *TransactionErrorSink) Contains(hash string) bool

Contains checks if there is an error associated with the given hash Note that the keys of the lru caches are tx-hash strings.

func (*TransactionErrorSink) PlainCount

func (sink *TransactionErrorSink) PlainCount() int

PlainCount ..

func (*TransactionErrorSink) PlainReport

func (sink *TransactionErrorSink) PlainReport() TransactionErrorReports

PlainReport ..

func (*TransactionErrorSink) Remove

func (sink *TransactionErrorSink) Remove(tx PoolTransaction)

Remove a transaction's error from the error sink

func (*TransactionErrorSink) StakingCount

func (sink *TransactionErrorSink) StakingCount() int

StakingCount ..

func (*TransactionErrorSink) StakingReport

func (sink *TransactionErrorSink) StakingReport() TransactionErrorReports

StakingReport ..

type TransactionType

type TransactionType byte

TransactionType different types of transactions

const (
	SameShardTx     TransactionType = iota
	SubtractionOnly                 // only subtract tokens from source shard account
	InvalidTx
	StakeCreateVal
	StakeEditVal
	Delegate
	Undelegate
	CollectRewards
)

Different Transaction Types

func (TransactionType) String

func (txType TransactionType) String() string

String print mode string

type Transactions

type Transactions []*Transaction

Transactions is a Transactions slice type for basic sorting.

func (Transactions) GetRlp

func (s Transactions) GetRlp(i int) []byte

GetRlp implements Rlpable and returns the i'th element of s in rlp.

func (Transactions) Len

func (s Transactions) Len() int

Len returns the length of s.

func (Transactions) Swap

func (s Transactions) Swap(i, j int)

Swap swaps the i'th and the j'th element in s.

type TransactionsByPriceAndNonce

type TransactionsByPriceAndNonce struct {
	// contains filtered or unexported fields
}

TransactionsByPriceAndNonce represents a set of transactions that can return transactions in a profit-maximizing sorted order, while supporting removing entire batches of transactions for non-executable accounts.

func NewTransactionsByPriceAndNonce

func NewTransactionsByPriceAndNonce(hmySigner Signer, ethSigner Signer, txs map[common.Address]Transactions) *TransactionsByPriceAndNonce

NewTransactionsByPriceAndNonce creates a transaction set that can retrieve price sorted transactions in a nonce-honouring way.

Note, the input map is reowned so the caller should not interact any more with if after providing it to the constructor.

func (*TransactionsByPriceAndNonce) Peek

Peek returns the next transaction by price.

func (*TransactionsByPriceAndNonce) Pop

func (t *TransactionsByPriceAndNonce) Pop()

Pop removes the best transaction, *not* replacing it with the next one from the same account. This should be used when a transaction cannot be executed and hence all subsequent ones should be discarded from the same account.

func (*TransactionsByPriceAndNonce) Shift

func (t *TransactionsByPriceAndNonce) Shift()

Shift replaces the current best head with the next one from the same account.

type TxByNonce

type TxByNonce Transactions

TxByNonce implements the sort interface to allow sorting a list of transactions by their nonces. This is usually only useful for sorting transactions from a single account, otherwise a nonce comparison doesn't make much sense.

func (TxByNonce) Len

func (s TxByNonce) Len() int

func (TxByNonce) Less

func (s TxByNonce) Less(i, j int) bool

func (TxByNonce) Swap

func (s TxByNonce) Swap(i, j int)

type TxByPrice

type TxByPrice Transactions

TxByPrice implements both the sort and the heap interface, making it useful for all at once sorting as well as individually adding and removing elements.

func (TxByPrice) Len

func (s TxByPrice) Len() int

func (TxByPrice) Less

func (s TxByPrice) Less(i, j int) bool

func (*TxByPrice) Pop

func (s *TxByPrice) Pop() interface{}

Pop pops a transaction.

func (*TxByPrice) Push

func (s *TxByPrice) Push(x interface{})

Push pushes a transaction.

func (TxByPrice) Swap

func (s TxByPrice) Swap(i, j int)

type TxByPriceAndTime

type TxByPriceAndTime Transactions

TxByPriceAndTime implements both the sort and the heap interface, making it useful for all at once sorting as well as individually adding and removing elements.

func (TxByPriceAndTime) Len

func (s TxByPriceAndTime) Len() int

func (TxByPriceAndTime) Less

func (s TxByPriceAndTime) Less(i, j int) bool

func (*TxByPriceAndTime) Pop

func (s *TxByPriceAndTime) Pop() interface{}

func (*TxByPriceAndTime) Push

func (s *TxByPriceAndTime) Push(x interface{})

func (TxByPriceAndTime) Swap

func (s TxByPriceAndTime) Swap(i, j int)

Jump to

Keyboard shortcuts

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