Documentation
¶
Index ¶
- Constants
- Variables
- func BloomLookup(bin Bloom, topic bytesBacked) bool
- func CombineV(txType uint8, version uint8, chainId uint16) *big.Int
- func DeriveChangeLogsSha(logs []*ChangeLog) common.Hash
- func DeriveDeputyRootSha(nodes deputynode.DeputyNodes) common.Hash
- func DeriveEventsSha(events []*Event) common.Hash
- func DeriveTxsSha(txs []*Transaction) common.Hash
- func ParseV(V *big.Int) (txType uint8, version uint8, secp256k1V uint8, chainId uint16)
- func RegisterChangeLog(logType ChangeLogType, TypeName string, ...)
- func SetSecp256k1V(V *big.Int, secp256k1V byte) *big.Int
- type AccountAccessor
- type AccountData
- type Block
- func (b *Block) Bloom() Bloom
- func (b *Block) EventRoot() common.Hash
- func (b *Block) Extra() []byte
- func (b *Block) GasLimit() uint64
- func (b *Block) GasUsed() uint64
- func (b *Block) Hash() common.Hash
- func (b *Block) Height() uint32
- func (b *Block) LogsHash() common.Hash
- func (b Block) MarshalJSON() ([]byte, error)
- func (b *Block) MinerAddress() common.Address
- func (b *Block) ParentHash() common.Hash
- func (b *Block) SetChangeLogs(logs []*ChangeLog)
- func (b *Block) SetConfirms(confirms []SignData)
- func (b *Block) SetDeputyNodes(deputyNodes deputynode.DeputyNodes)
- func (b *Block) SetEvents(events []*Event)
- func (b *Block) SetHeader(header *Header)
- func (b *Block) SetTxs(txs []*Transaction)
- func (b *Block) SignData() []byte
- func (b *Block) String() string
- func (b *Block) Time() uint32
- func (b *Block) TxHash() common.Hash
- func (b *Block) UnmarshalJSON(input []byte) error
- func (b *Block) VersionRoot() common.Hash
- type Blocks
- type Bloom
- func (b *Bloom) Add(d *big.Int)
- func (b Bloom) Big() *big.Int
- func (b Bloom) Bytes() []byte
- func (b Bloom) MarshalText() ([]byte, error)
- func (b *Bloom) SetBytes(d []byte)
- func (b Bloom) Test(test *big.Int) bool
- func (b Bloom) TestBytes(test []byte) bool
- func (b *Bloom) UnmarshalText(input []byte) error
- type ChangeLog
- func (c *ChangeLog) Copy() *ChangeLog
- func (c *ChangeLog) DecodeRLP(s *rlp.Stream) (err error)
- func (c *ChangeLog) EncodeRLP(w io.Writer) error
- func (c *ChangeLog) Hash() (h common.Hash)
- func (c ChangeLog) MarshalJSON() ([]byte, error)
- func (c *ChangeLog) Redo(processor ChangeLogProcessor) error
- func (c *ChangeLog) String() string
- func (c *ChangeLog) Undo(processor ChangeLogProcessor) error
- func (c *ChangeLog) UnmarshalJSON(input []byte) error
- type ChangeLogProcessor
- type ChangeLogSlice
- type ChangeLogType
- type Code
- type DefaultSigner
- type Event
- type EventForStorage
- type GasPool
- type Header
- type SignData
- type Signer
- type Transaction
- func NewContractCreation(amount *big.Int, gasLimit uint64, gasPrice *big.Int, data []byte, ...) *Transaction
- func NewTransaction(to common.Address, amount *big.Int, gasLimit uint64, gasPrice *big.Int, ...) *Transaction
- func SignTx(tx *Transaction, s Signer, prv *ecdsa.PrivateKey) (*Transaction, error)
- func (tx *Transaction) Amount() *big.Int
- func (tx *Transaction) ChainId() uint16
- func (tx *Transaction) Cost() *big.Int
- func (tx *Transaction) Data() []byte
- func (tx *Transaction) DecodeRLP(s *rlp.Stream) error
- func (tx *Transaction) EncodeRLP(w io.Writer) error
- func (tx *Transaction) Expiration() uint64
- func (tx *Transaction) From() (common.Address, error)
- func (tx *Transaction) GasLimit() uint64
- func (tx *Transaction) GasPrice() *big.Int
- func (tx *Transaction) Hash() common.Hash
- func (tx *Transaction) MarshalJSON() ([]byte, error)
- func (tx *Transaction) Message() string
- func (tx *Transaction) Raw() (*big.Int, *big.Int, *big.Int)
- func (tx *Transaction) String() string
- func (tx *Transaction) To() *common.Address
- func (tx *Transaction) ToName() string
- func (tx *Transaction) Type() uint8
- func (tx *Transaction) UnmarshalJSON(input []byte) error
- func (tx *Transaction) Version() uint8
- func (tx *Transaction) WithSignature(signer Signer, sig []byte) (*Transaction, error)
- type Transactions
- type VersionRecord
Constants ¶
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 )
Variables ¶
var ( ErrUnknownChangeLogType = errors.New("unknown change log type") ErrWrongChangeLogVersion = errors.New("the version of change log and account is not match") ErrAlreadyRedo = errors.New("the change log's version is lower than account's. maybe it has redid") // ErrWrongChangeLogVersion is returned by the ChangeLog Undo/Redo if account has an unexpected version ErrWrongChangeLogData = errors.New("change log data is incorrect") )
var ( // ErrKnownBlock is returned when a block to import is already known locally. ErrKnownBlock = errors.New("block already known") // ErrGasLimitReached is returned by the gas pool if the amount of gas required // by a transaction is higher than what's left in the block. ErrGasLimitReached = errors.New("block gas limit reached") // ErrBlacklistedHash is returned if a block to import is on the blacklist. ErrBlacklistedHash = errors.New("blacklisted hash") )
var ( TopicContractCreation = rlpHash("Contract creation") TopicRunFail = rlpHash("Contract run fail") )
var ( DefaultTTTL uint64 = 2 * 60 * 60 // Transaction Time To Live, 2hours ErrInvalidSig = errors.New("invalid transaction v, r, s values") TxVersion uint8 = 1 // current transaction version. should between 0 and 128 )
var (
ErrPublicKey = errors.New("invalid public key")
)
Functions ¶
func BloomLookup ¶
func DeriveChangeLogsSha ¶
DeriveChangeLogsSha 计算changelog的根HASH
func DeriveDeputyRootSha ¶
func DeriveDeputyRootSha(nodes deputynode.DeputyNodes) common.Hash
func DeriveEventsSha ¶
DeriveEventsSha 计算event的根HASH
func RegisterChangeLog ¶
func RegisterChangeLog(logType ChangeLogType, TypeName string, newValDecoder, extraDecoder changeLogDecoder, redo, undo changeLogDoFunc)
Types ¶
type AccountAccessor ¶
type AccountAccessor interface {
GetAddress() common.Address
GetBalance() *big.Int
SetBalance(balance *big.Int)
GetVersion(logType ChangeLogType) uint32
SetVersion(logType ChangeLogType, version uint32)
GetCodeHash() common.Hash
SetCodeHash(codeHash common.Hash)
GetCode() (Code, error)
SetCode(code Code)
GetStorageRoot() common.Hash
SetStorageRoot(root common.Hash)
GetStorageState(key common.Hash) ([]byte, error)
SetStorageState(key common.Hash, value []byte) error
GetBaseHeight() uint32
GetTxHashList() []common.Hash
IsEmpty() bool
GetSuicide() bool
SetSuicide(suicided bool)
MarshalJSON() ([]byte, error)
}
type AccountData ¶
type AccountData struct {
Address common.Address `json:"address" gencodec:"required"`
Balance *big.Int `json:"balance" gencodec:"required"`
CodeHash common.Hash `json:"codeHash" gencodec:"required"`
StorageRoot common.Hash `json:"root" gencodec:"required"` // MPT root of the storage trie
// It records the block height which contains any type of newest change log.
NewestRecords map[ChangeLogType]VersionRecord `json:"records" gencodec:"required"`
// related transactions include income and outcome
TxHashList []common.Hash `json:"-"`
}
AccountData is the Lemochain consensus representation of accounts. These objects are stored in the store.
func (*AccountData) Copy ¶
func (a *AccountData) Copy() *AccountData
func (*AccountData) DecodeRLP ¶
func (a *AccountData) DecodeRLP(s *rlp.Stream) error
DecodeRLP implements rlp.Decoder.
func (*AccountData) EncodeRLP ¶
func (a *AccountData) EncodeRLP(w io.Writer) error
EncodeRLP implements rlp.Encoder.
func (AccountData) MarshalJSON ¶
func (a AccountData) MarshalJSON() ([]byte, error)
MarshalJSON marshals as JSON.
func (*AccountData) String ¶
func (a *AccountData) String() string
func (*AccountData) UnmarshalJSON ¶
func (a *AccountData) UnmarshalJSON(input []byte) error
UnmarshalJSON unmarshals from JSON.
type Block ¶
type Block struct {
Header *Header `json:"header" gencodec:"required"`
Txs []*Transaction `json:"transactions" gencodec:"required"`
ChangeLogs []*ChangeLog `json:"changeLogs" gencodec:"required"`
Events []*Event `json:"events" gencodec:"required"`
Confirms []SignData `json:"confirms"`
DeputyNodes deputynode.DeputyNodes `json:"deputyNodes"`
}
Block
func (Block) MarshalJSON ¶
MarshalJSON marshals as JSON.
func (*Block) MinerAddress ¶
func (*Block) ParentHash ¶
func (*Block) SetChangeLogs ¶
func (*Block) SetConfirms ¶
func (*Block) SetDeputyNodes ¶
func (b *Block) SetDeputyNodes(deputyNodes deputynode.DeputyNodes)
func (*Block) SetTxs ¶
func (b *Block) SetTxs(txs []*Transaction)
func (*Block) UnmarshalJSON ¶
UnmarshalJSON unmarshals from JSON.
func (*Block) VersionRoot ¶
type Bloom ¶
type Bloom [BloomByteLength]byte
Bloom represents a 2048 bit bloom filter.
func BytesToBloom ¶
BytesToBloom converts a byte slice to a bloom filter. It panics if b is not of suitable size.
func CreateBloom ¶
func (Bloom) MarshalText ¶
MarshalText encodes b as a hex string with 0x prefix.
func (*Bloom) SetBytes ¶
SetBytes sets the content of b to the given bytes. It panics if d is not of suitable size.
func (*Bloom) UnmarshalText ¶
UnmarshalText b as a hex string with 0x prefix.
type ChangeLog ¶
type ChangeLog struct {
LogType ChangeLogType `json:"type" gencodec:"required"`
Address common.Address `json:"address" gencodec:"required"`
// The No. of ChangeLog in an account
Version uint32 `json:"version" gencodec:"required"`
// data pointer. Their content type depend on specific NewXXXLog function
OldVal interface{} `json:"-"` // It's used for undo. So no need to save or send to others
NewVal interface{} `json:"newValue"`
Extra interface{} `json:"extra"`
}
func (ChangeLog) MarshalJSON ¶
MarshalJSON marshals as JSON.
func (*ChangeLog) Redo ¶
func (c *ChangeLog) Redo(processor ChangeLogProcessor) error
Redo reply the change for light client. Its behavior depends on ChangeLog.ChangeLogType
func (*ChangeLog) Undo ¶
func (c *ChangeLog) Undo(processor ChangeLogProcessor) error
Undo reverts the change. Its behavior depends on ChangeLog.ChangeLogType
func (*ChangeLog) UnmarshalJSON ¶
UnmarshalJSON unmarshals from JSON.
type ChangeLogProcessor ¶
type ChangeLogProcessor interface {
GetAccount(addr common.Address) AccountAccessor
PushEvent(event *Event)
PopEvent() error
}
ChangeLogProcessor is used to access account, and the intermediate data generated by transactions. It is implemented by account.Manager
type ChangeLogSlice ¶
type ChangeLogSlice []*ChangeLog
func (ChangeLogSlice) FindByType ¶
func (c ChangeLogSlice) FindByType(target *ChangeLog) *ChangeLog
FindByType find the first same type change log.
func (ChangeLogSlice) Len ¶
func (c ChangeLogSlice) Len() int
func (ChangeLogSlice) Less ¶
func (c ChangeLogSlice) Less(i, j int) bool
func (ChangeLogSlice) Search ¶
func (c ChangeLogSlice) Search(version uint32) int
func (ChangeLogSlice) Swap ¶
func (c ChangeLogSlice) Swap(i, j int)
type ChangeLogType ¶
type ChangeLogType uint32
func (ChangeLogType) String ¶
func (t ChangeLogType) String() string
type DefaultSigner ¶
type DefaultSigner struct {
}
DefaultSigner implements Signer.
func (DefaultSigner) GetSender ¶
func (s DefaultSigner) GetSender(tx *Transaction) (common.Address, error)
func (DefaultSigner) Hash ¶
func (s DefaultSigner) Hash(tx *Transaction) common.Hash
Hash returns the hash to be signed by the sender. It does not uniquely identify the transaction.
func (DefaultSigner) ParseSignature ¶
func (s DefaultSigner) ParseSignature(tx *Transaction, sig []byte) (R, S, V *big.Int, err error)
ParseSignature 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 Event ¶
type Event 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
BlockHeight uint32 `json:"blockHeight"`
// 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 event in the receipt
Index uint `json:"eventIndex" gencodec:"required"`
// The Removed field is true if this event was reverted due to a chain reorganisation.
// You must pay attention to this field if you receive Events through a filter query.
Removed bool `json:"removed"`
}
Event represents a contract event event. These Events are generated by the LOG opcode and stored/indexed by the node.
func (Event) MarshalJSON ¶
MarshalJSON marshals as JSON.
func (*Event) UnmarshalJSON ¶
UnmarshalJSON unmarshals from JSON.
type EventForStorage ¶
type EventForStorage Event
EventForStorage is a wrapper around a Event that flattens and parses the entire content of a event including non-consensus fields.
type Header ¶
type Header struct {
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
MinerAddress common.Address `json:"miner" gencodec:"required"`
VersionRoot common.Hash `json:"versionRoot" gencodec:"required"`
TxRoot common.Hash `json:"transactionRoot" gencodec:"required"`
LogRoot common.Hash `json:"changeLogRoot" gencodec:"required"`
EventRoot common.Hash `json:"eventRoot" gencodec:"required"`
Bloom Bloom `json:"eventBloom" gencodec:"required"`
Height uint32 `json:"height" gencodec:"required"`
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
Time uint32 `json:"timestamp" gencodec:"required"`
SignData []byte `json:"signData" gencodec:"required"`
DeputyRoot []byte `json:"deputyRoot"`
Extra []byte `json:"extraData"` // max length is 256 bytes
}
func (Header) MarshalJSON ¶
MarshalJSON marshals as JSON.
func (*Header) UnmarshalJSON ¶
UnmarshalJSON unmarshals from JSON.
type Signer ¶
type Signer interface {
// Sender returns the sender address of the transaction.
GetSender(tx *Transaction) (common.Address, error)
// ParseSignature returns the raw R, S, V values corresponding to the
// given signature.
ParseSignature(tx *Transaction, sig []byte) (r, s, v *big.Int, err error)
// Hash returns the hash to be signed.
Hash(tx *Transaction) common.Hash
}
Signer encapsulates transaction signature handling.
func MakeSigner ¶
func MakeSigner() Signer
MakeSigner returns a Signer based on the given version and chainId.
type Transaction ¶
type Transaction struct {
// contains filtered or unexported fields
}
func NewContractCreation ¶
func NewTransaction ¶
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) Amount ¶
func (tx *Transaction) Amount() *big.Int
func (*Transaction) ChainId ¶
func (tx *Transaction) ChainId() uint16
func (*Transaction) Cost ¶
func (tx *Transaction) Cost() *big.Int
Cost returns amount + gasprice * gaslimit.
func (*Transaction) Data ¶
func (tx *Transaction) Data() []byte
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) Expiration ¶
func (tx *Transaction) Expiration() uint64
func (*Transaction) GasLimit ¶
func (tx *Transaction) GasLimit() uint64
func (*Transaction) GasPrice ¶
func (tx *Transaction) GasPrice() *big.Int
func (*Transaction) Hash ¶
func (tx *Transaction) Hash() common.Hash
func (*Transaction) MarshalJSON ¶
func (tx *Transaction) MarshalJSON() ([]byte, error)
MarshalJSON encodes the lemoClient RPC transaction format.
func (*Transaction) Message ¶
func (tx *Transaction) Message() string
func (*Transaction) String ¶
func (tx *Transaction) String() string
func (*Transaction) To ¶
func (tx *Transaction) To() *common.Address
func (*Transaction) ToName ¶
func (tx *Transaction) ToName() string
func (*Transaction) Type ¶
func (tx *Transaction) Type() uint8
func (*Transaction) UnmarshalJSON ¶
func (tx *Transaction) UnmarshalJSON(input []byte) error
UnmarshalJSON decodes the lemoClient RPC transaction format.
func (*Transaction) Version ¶
func (tx *Transaction) Version() uint8
func (*Transaction) WithSignature ¶
func (tx *Transaction) WithSignature(signer Signer, sig []byte) (*Transaction, error)
WithSignature returns a new transaction with the given signature.
type Transactions ¶
type Transactions []*Transaction
type VersionRecord ¶
type VersionRecord struct {
Version uint32 `json:"version" gencodec:"required"`
Height uint32 `json:"height" gencodec:"required"`
}
func (VersionRecord) MarshalJSON ¶
func (v VersionRecord) MarshalJSON() ([]byte, error)
MarshalJSON marshals as JSON.
func (*VersionRecord) UnmarshalJSON ¶
func (v *VersionRecord) UnmarshalJSON(input []byte) error
UnmarshalJSON unmarshals from JSON.