Documentation ¶
Index ¶
- Constants
- Variables
- func CalcBlockSubsidy(height uint64, chainParams *config.Params, hasValidBinding, hasStaking bool) (miner, superNode massutil.Amount, err error)
- func CalcMinRequiredTxRelayFee(serializedSize int64, minTxRelayFee massutil.Amount) (massutil.Amount, error)
- func CheckBlockSanity(block *massutil.Block, chainID wire.Hash, pocLimit *big.Int) error
- func CheckCoinbaseHeight(block *massutil.Block) error
- func CheckNonceAndSetPoolPkCoinbase(trie state.Trie, payload []byte) error
- func CheckProofOfCapacity(block *massutil.Block, pocLimit *big.Int) error
- func CheckTransactionInputs(tx *massutil.Tx, txHeight uint64, txStore TxStore) (massutil.Amount, error)
- func CheckTransactionSanity(tx *massutil.Tx) error
- func CountSigOps(tx *massutil.Tx) int
- func EncodePayload(payload *TransactionPayload) []byte
- func EqualPublicKeys(a, b interfaces.PublicKey) bool
- func GetBindingState(bc *Blockchain, root common.Hash) (state.Trie, error)
- func GetMaxStandardTxSize() int
- func GetNetworkBinding(bindingState state.Trie) (massutil.Amount, error)
- func GetPoolPkCoinbase(trie state.Trie, poolPk []byte) ([]byte, uint32, error)
- func IsCoinBase(tx *massutil.Tx) bool
- func IsCoinBaseTx(msgTx *wire.MsgTx) bool
- func IsDBNotFound(err error) bool
- func IsDust(txOut *wire.TxOut, minRelayTxFee massutil.Amount) (bool, error)
- func IsFinalizedTransaction(tx *massutil.Tx, blockHeight uint64, blockTime time.Time) bool
- func LockTimeToSequence(isSeconds bool, locktime uint64) uint64
- func PutNetworkBinding(bindingState state.Trie, totalBinding massutil.Amount) error
- func SequenceLockActive(sequenceLock *SequenceLock, blockHeight uint64, medianTimePast time.Time) bool
- func SignPoolPkPayload(poolSk *chiapos.PrivateKey, coinbaseScriptAddress []byte, nonce uint32) (*chiapos.G2Element, error)
- func TryParserBindingPK(pkScript []byte) ([]byte, error)
- func ValidateTransactionScripts(bc *Blockchain, tx *massutil.Tx, txStore TxStore, flags txscript.ScriptFlags, ...) error
- func VerifyBytes(data []byte, sig *pocec.Signature, pubkey *pocec.PublicKey) (bool, error)
- func VerifyPoolPkPayload(poolPk *chiapos.G1Element, signature *chiapos.G2Element, ...) (bool, error)
- type AddrIndexer
- type BehaviorFlags
- type BindPoolCoinbaseParams
- type BlockNode
- func (node *BlockNode) Ancestor(height uint64) *BlockNode
- func (node *BlockNode) BannedPublicKeys() []interfaces.PublicKey
- func (node *BlockNode) BindingState(stateDb state.Database) (state.Trie, error)
- func (node *BlockNode) BitLength() int
- func (node *BlockNode) BlockHeader() *wire.BlockHeader
- func (node *BlockNode) ParentBindingState(stateDb state.Database) (state.Trie, error)
- func (node *BlockNode) PublicKey() interfaces.PublicKey
- func (node *BlockNode) SetBindingState(state state.Trie) error
- type BlockProgressLogger
- type BlockTemplate
- type BlockTree
- type Blockchain
- func (chain *Blockchain) BestBlockHash() *wire.Hash
- func (chain *Blockchain) BestBlockHeader() *wire.BlockHeader
- func (chain *Blockchain) BestBlockHeight() uint64
- func (chain *Blockchain) BestBlockNode() *BlockNode
- func (chain *Blockchain) BlockWaiter(height uint64) (<-chan *BlockNode, error)
- func (chain *Blockchain) CalcNextChallenge() (*wire.Hash, error)
- func (chain *Blockchain) CalcNextTarget(newBlockTime time.Time) (*big.Int, error)
- func (chain *Blockchain) CalcPastMedianTime() (time.Time, error)
- func (chain *Blockchain) CalcSequenceLock(tx *massutil.Tx, txStore TxStore) (*SequenceLock, error)
- func (chain *Blockchain) ChainID() *wire.Hash
- func (b *Blockchain) Checkpoints() []config.Checkpoint
- func (chain *Blockchain) CurrentIndexHeight() uint64
- func (chain *Blockchain) FetchMinedBlocks(pubKey interfaces.PublicKey) ([]uint64, error)
- func (chain *Blockchain) FetchOldBinding(scriptHash []byte) ([]*database.BindingTxReply, error)
- func (chain *Blockchain) FetchTransactionStore(tx *massutil.Tx, includeSpent bool) TxStore
- func (chain *Blockchain) GetBlockByHash(hash *wire.Hash) (*massutil.Block, error)
- func (chain *Blockchain) GetBlockByHeight(height uint64) (*massutil.Block, error)
- func (chain *Blockchain) GetBlockHashByHeight(height uint64) (*wire.Hash, error)
- func (chain *Blockchain) GetBlockStakingRewardRankOnList(height uint64) ([]database.Rank, error)
- func (chain *Blockchain) GetHeaderByHash(hash *wire.Hash) (*wire.BlockHeader, error)
- func (chain *Blockchain) GetHeaderByHeight(height uint64) (*wire.BlockHeader, error)
- func (chain *Blockchain) GetNetworkBinding(height uint64) (massutil.Amount, error)
- func (chain *Blockchain) GetNewBinding(script []byte) (massutil.Amount, error)
- func (chain *Blockchain) GetPoolPkCoinbase(poolPks [][]byte) (map[string]string, map[string]uint32, error)
- func (chain *Blockchain) GetTransaction(hash *wire.Hash) (*wire.MsgTx, error)
- func (chain *Blockchain) GetTransactionInDB(hash *wire.Hash) ([]*database.TxReply, error)
- func (chain *Blockchain) GetTxPool() *TxPool
- func (chain *Blockchain) GetUnexpiredStakingRank(height uint64) ([]database.Rank, error)
- func (b *Blockchain) HasCheckpoints() bool
- func (chain *Blockchain) InMainChain(hash wire.Hash) bool
- func (chain *Blockchain) InsertChain(block *massutil.Block) (isOrphan bool, err error)
- func (b *Blockchain) IsCheckpointCandidate(block *massutil.Block) (bool, error)
- func (b *Blockchain) LatestCheckpoint() *config.Checkpoint
- func (chain *Blockchain) NewBlockTemplate(payoutAddresses []massutil.Address, templateCh chan interface{}) error
- func (chain *Blockchain) ProcessBlock(block *massutil.Block) (bool, error)
- func (chain *Blockchain) ProcessTx(tx *massutil.Tx) (bool, error)
- func (chain *Blockchain) RegisterListener(listener Listener)
- func (chain *Blockchain) RetrieveFaultPks()
- func (chain *Blockchain) RetrievePunishment() ([]*wire.FaultPubKey, error)
- func (chain *Blockchain) TstFetchInputTransactions(node *BlockNode, block *massutil.Block) (TxStore, error)
- func (chain *Blockchain) TstgetPrevNodeFromBlock(block *massutil.Block) (*BlockNode, error)
- func (chain *Blockchain) UnregisterListener(listener Listener)
- type CoinbasePayload
- type Config
- type DoubleMiningDetector
- type Listener
- type OrphanBlockPool
- type OrphanTxPool
- type PayloadMethod
- type PayloadParams
- type PoCTemplate
- type Proof
- type ProposalPool
- type PunishmentProposal
- type SequenceLock
- type Server
- type TransactionPayload
- type TxData
- type TxDesc
- type TxPool
- func (tp *TxPool) CheckPoolOutPointSpend(op *wire.OutPoint) bool
- func (tp *TxPool) Count() int
- func (tp *TxPool) FetchInputTransactions(tx *massutil.Tx, includeSpent bool) TxStore
- func (tp *TxPool) FetchTransaction(txHash *wire.Hash) (*massutil.Tx, error)
- func (tp *TxPool) FilterTransactionsByAddress(addr massutil.Address) ([]*massutil.Tx, error)
- func (tp *TxPool) HaveTransaction(hash *wire.Hash) bool
- func (tp *TxPool) IsOrphanInPool(hash *wire.Hash) bool
- func (tp *TxPool) IsTransactionInPool(hash *wire.Hash) bool
- func (tp *TxPool) LastUpdated() time.Time
- func (tp *TxPool) MaybeAcceptTransaction(tx *massutil.Tx, isNew, rateLimit bool) ([]*wire.Hash, error)
- func (tp *TxPool) OrphanTxs() []*massutil.Tx
- func (tp *TxPool) ProcessOrphans(hash *wire.Hash)
- func (tp *TxPool) ProcessTransaction(tx *massutil.Tx, allowOrphan, rateLimit bool) (bool, error)
- func (tp *TxPool) RemoveDoubleSpends(tx *massutil.Tx)
- func (tp *TxPool) RemoveOrphan(txHash *wire.Hash)
- func (tp *TxPool) RemoveTransaction(tx *massutil.Tx, removeRedeemers bool)
- func (tp *TxPool) SetNewTxCh(ch chan *massutil.Tx)
- func (tp *TxPool) SyncAttachBlock(block *massutil.Block)
- func (tp *TxPool) SyncDetachBlock(block *massutil.Block)
- func (tp *TxPool) TxDescs() []*TxDesc
- func (tp *TxPool) TxShas() []*wire.Hash
- type TxStore
Constants ¶
const ( // maximum number of binding evidence(recommended) MaxBindingNum = 10 PriorityProposalSize = wire.MaxBlockPayload / 20 )
const ( // MaxSigOpsPerBlock is the maximum number of signature operations // allowed for a block. It is a fraction of the max block payload size. MaxSigOpsPerBlock = wire.MaxBlockPayload / 150 * txscript.MaxPubKeysPerMultiSig // MaxTimeOffsetSeconds is the maximum number of seconds a block time // is allowed to be ahead of the current time. This is currently 2 // hours. MaxTimeOffsetSeconds = 2 * 60 * 60 )
const BlockCacheFileName = "blocks.cache"
const CheckpointConfirmations = 10000
Variables ¶
var ( ErrInvalidTime = errors.New("block timestamp has a higher precsion the one second") ErrTimeTooOld = errors.New("block timestamp is not after expected prevNode") ErrTimeTooNew = errors.New("block timestamp of uinx is too far in the future") ErrUnexpectedDifficulty = errors.New("block difficulty is not the expected value") ErrUnexpectedChallenge = errors.New("block challenge is not the expected value") ErrInvalidMerkleRoot = errors.New("block transaction merkle root is invalid") ErrInvalidProposalRoot = errors.New("block proposal merkle root is invalid") ErrTooManyTransactions = errors.New("block contains too many transactions") ErrNoTxOutputs = errors.New("transaction has no outputs") ErrDuplicateTxInputs = errors.New("transaction contains duplicate inputs") ErrConnectGenesis = errors.New("genesis block should not be connected") ErrOverwriteTx = errors.New("tried to overwrite not fully spent transaction") ErrTooManySigOps = errors.New("too many signature operations") ErrFirstTxNotCoinbase = errors.New("first transaction in block is not a coinbase") ErrMultipleCoinbases = errors.New("block contains other coinbase") ErrLowQuality = errors.New("block's proof quality is lower than expected min target") ErrTimestampFormat = errors.New("wrong timestamp format") ErrBadBlockHeight = errors.New("block height does not match the expected height") ErrChainID = errors.New("block's chainID is not equal to expected chainID") ErrBlockSIG = errors.New("block signature verify failed") ErrInvalidBlockVersion = errors.New("block's version is not valid") ErrInvalidBitLength = errors.New("block's bitLength is smaller than the last submission of this public key") ErrMismatchedBindingRoot = errors.New("block binding root mismatched") ErrNoValidBinding = errors.New("no valid binding") ErrInvalidProofType = errors.New("invalid proof type") ErrCheckpointTimeTooOld = errors.New("ErrCheckpointTimeTooOld") ErrBadCheckpoint = errors.New("ErrBadCheckpoint") ErrForkTooOld = errors.New("ErrForkTooOld") // BanList ErrBannedPk = errors.New("block builder puKey has been banned") ErrBanSelfPk = errors.New("block's pubKey is banned in header banList") ErrBanList = errors.New("invalid banList") ErrCheckBannedPk = errors.New("invalid faultPk") // TxPool ErrTxPoolNil = errors.New("the txpool is nil") ErrTxExsit = errors.New("transaction is not in the pool") ErrFindTxByAddr = errors.New("address does not have any transactions in the pool") ErrCoinbaseTx = errors.New("transaction is an individual coinbase") ErrProhibitionOrphanTx = errors.New("Do not accept orphan transactions") ErrInvalidTxVersion = errors.New("transaction version is invalid") // Coinbase ErrCoinbaseTxInWitness = errors.New("coinbaseTx txIn`s witness size must be 0") ErrBadCoinbaseValue = errors.New("coinbase transaction for block pays is more than expected value") ErrBadCoinbaseHeight = errors.New("the coinbase payload serialized block height does not equal expected height") ErrCoinbaseOutputValue = errors.New("the coinbaseTx output value is not correct") ErrCoinbaseOutputNum = errors.New("incorrect coinbase output number") ErrUnexpectedCoinbase = errors.New("unexpected coinbase") ErrNilChiaPoolPk = errors.New("nil chia pool pk") // StakingTx & BindingTx ErrStandardBindingTx = errors.New("input and output of the transaction are all binding transactions") ErrInvalidStakingTxValue = errors.New("invalid staking tx value") ErrInvalidFrozenPeriod = errors.New("invalid frozen period") ErrStakingRewardNum = errors.New("incorrect staking reward number") ErrBindingPubKey = errors.New("binding pubkey does not match miner pubkey") ErrBindingInputMissing = errors.New("input of binding missing") ErrDuplicateStaking = errors.New("duplicate staking") ErrPlotPKAlreadyBound = errors.New("plot pk already bound") ErrPlotPKNotBound = errors.New("plot pk not bound") ErrBindingValueNotEnough = errors.New("binding value not enough") ErrInvalidBindingScript = errors.New("invalid binding script") ErrFeeForPoolPkCoinbase = errors.New("fee for setting pool_pk coinbase not enough") ErrPayloadNonce = errors.New("invalid payload nonce") // TxIn ErrFindReferenceInput = errors.New("unable find reference transaction ") ErrBadTxInput = errors.New("transaction input refers to previous output is invalid") ErrMissingTx = errors.New("unable to find input transaction") ErrNoTxInputs = errors.New("transaction has no inputs") // LockTime ErrSequenceNotSatisfied = errors.New("transaction's sequence locks on inputs not met") ErrImmatureSpend = errors.New("try to spend immature coins") ErrUnfinalizedTx = errors.New("transaction is not finalized") // Value ErrDoubleSpend = errors.New("the transaction has been spent") ErrDuplicateTx = errors.New("the transaction is duplicate") ErrBadTxOutValue = errors.New("transaction output value is invalid") ErrSpendTooHigh = errors.New("total value of all transaction inputs is less than the spent value of output") // Fee ErrBadFees = errors.New("total fees for block overflows accumulator") ErrInsufficientFee = errors.New("transaction`s fees is under the required amount") ErrInsufficientPriority = errors.New("transaction`s Priority is under the required amount") ErrDust = errors.New("transaction output payment is dust") // Size ErrNonStandardTxSize = errors.New("transaction size is larger than max allowed size") ErrWitnessSize = errors.New("transaction input witness size is large than max allowed size") ErrTxTooBig = errors.New("transaction size is too big") ErrBlockTooBig = errors.New("block size more than MaxBlockPayload") ErrTxMsgPayloadSize = errors.New("transaction payload size is large than max allowed size") // TxScript ErrSignaturePushOnly = errors.New("transaction input witness is not push only") ErrNuLLDataScript = errors.New("more than one transaction output in a nulldata script") ErrNonStandardType = errors.New("non-standard script form") ErrParseInputScript = errors.New("failed to parse transaction input script") ErrExpectedSignInput = errors.New("transaction expected input signature not satisfied") ErrMultiSigScriptPKNum = errors.New("multi-signature script with wrong pubkey number ") ErrMultiSigNumSign = errors.New("multi-signature script with wrong signature number ") ErrScriptMalformed = errors.New("failed to construct vm engine") ErrScriptValidation = errors.New("failed to validate signature") ErrWitnessLength = errors.New("invalid witness length") )
Functions ¶
func CalcBlockSubsidy ¶
func CalcBlockSubsidy(height uint64, chainParams *config.Params, hasValidBinding, hasStaking bool) (miner, superNode massutil.Amount, err error)
CalcBlockSubsidy returns the subsidy amount a block at the provided height should have. This is mainly used for determining how much the coinbase for newly generated blocks awards as well as validating the coinbase for blocks has the expected value.
The subsidy is halved every SubsidyHalvingInterval blocks. Mathematically this is: BaseSubsidy / 2^(height/subsidyHalvingInterval)
At the Target block generation rate for the main network, this is approximately every 4 years.
func CalcMinRequiredTxRelayFee ¶
func CalcMinRequiredTxRelayFee(serializedSize int64, minTxRelayFee massutil.Amount) (massutil.Amount, error)
CalcMinRequiredTxRelayFee returns the minimum transaction fee required for a transaction with the passed serialized size to be accepted into the memory pool and relayed.
func CheckBlockSanity ¶
CheckBlockSanity performs some preliminary checks on a block to ensure it is sane before continuing with block processing. These checks are context free.
func CheckCoinbaseHeight ¶
CheckCoinbaseHeight checks whether block height in coinbase matches block height in header. We do not check *block's existence because this func is called in another func that *block exists.
func CheckProofOfCapacity ¶
CheckProofOfWork ensures the block header bits which indicate the Target difficulty is in min/max range and that the block's proof quality is less than the Target difficulty as claimed.
func CheckTransactionInputs ¶
func CheckTransactionInputs(tx *massutil.Tx, txHeight uint64, txStore TxStore) (massutil.Amount, error)
CheckTransactionInputs performs a series of checks on the inputs to a transaction to ensure they are valid. An example of some of the checks include verifying all inputs exist, ensuring the coinbase seasoning requirements are met, detecting double spends, validating all values and fees are in the legal range and the total output amount doesn't exceed the input amount, and verifying the signatures to prove the spender was the owner of the masses and therefore allowed to spend them. As it checks the inputs, it also calculates the total fees for the transaction and returns that value.
func CheckTransactionSanity ¶
CheckTransactionSanity performs some preliminary checks on a transaction to ensure it is sane. These checks are context free.
func CountSigOps ¶
CountSigOps returns the number of signature operations for all transaction // input and output scripts in the provided transaction. This uses the // quicker, but imprecise, signature operation counting mechanism from // txscript.
func EncodePayload ¶
func EncodePayload(payload *TransactionPayload) []byte
func EqualPublicKeys ¶
func EqualPublicKeys(a, b interfaces.PublicKey) bool
func GetBindingState ¶
func GetMaxStandardTxSize ¶
func GetMaxStandardTxSize() int
func GetPoolPkCoinbase ¶
func IsCoinBase ¶
IsCoinBase determines whether or not a transaction is a coinbase. A coinbase is a special transaction created by miners that has no inputs. This is represented in the block chain by a transaction with a single input that has a previous output transaction index set to the maximum value along with a zero hash.
This function only differs from IsCoinBaseTx in that it works with a higher level util transaction as opposed to a raw wire transaction.
func IsCoinBaseTx ¶
IsCoinBaseTx determines whether or not a transaction is a coinbase. A coinbase is a special transaction created by miners that has no inputs. This is represented in the block chain by a transaction with a single input that has a previous output transaction index set to the maximum value along with a zero hash.
This function only differs from IsCoinBase in that it works with a raw wire transaction as opposed to a higher level util transaction.
func IsDBNotFound ¶
func IsFinalizedTransaction ¶
IsFinalizedTransaction determines whether or not a transaction is finalized.
func LockTimeToSequence ¶
LockTimeToSequence converts the passed relative locktime to a sequence number in accordance to BIP-68. See: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
- (Compatibility)
func PutNetworkBinding ¶
func SequenceLockActive ¶
func SequenceLockActive(sequenceLock *SequenceLock, blockHeight uint64, medianTimePast time.Time) bool
SequenceLockActive determines if a transaction's sequence locks have been met, meaning that all the inputs of a given transaction have reached a height or time sufficient for their relative lock-time maturity.
func SignPoolPkPayload ¶
func TryParserBindingPK ¶
Returns nil if not a binding script
func ValidateTransactionScripts ¶
func ValidateTransactionScripts(bc *Blockchain, tx *massutil.Tx, txStore TxStore, flags txscript.ScriptFlags, sigCache *txscript.SigCache, hashCache *txscript.HashCache) error
ValidateTransactionScripts validates the scripts for the passed transaction using multiple goroutines.
func VerifyBytes ¶
Verify Signature
Types ¶
type AddrIndexer ¶
AddrIndexer provides a concurrent service for indexing the transactions of target blocks based on the addresses involved in the transaction.
func NewAddrIndexer ¶
newAddrIndexer creates a new block address indexer. Use Start to begin processing incoming index jobs.
func (*AddrIndexer) SyncAttachBlock ¶
func (a *AddrIndexer) SyncAttachBlock(bindingState state.Trie, block *massutil.Block, txStore TxStore) error
SyncAttachBlock synchronously queues a newly solved block to have its transactions indexed by address.
func (*AddrIndexer) SyncDetachBlock ¶
func (a *AddrIndexer) SyncDetachBlock(block *massutil.Block) error
type BehaviorFlags ¶
type BehaviorFlags uint32
const ( // TODO: add FastMode BFFastAdd BehaviorFlags = 1 << iota BFNoPoCCheck // BFNone is a convenience value to specifically indicate no flags. BFNone BehaviorFlags = 0 )
type BindPoolCoinbaseParams ¶
type BindPoolCoinbaseParams struct { PoolPK *chiapos.G1Element Signature *chiapos.G2Element CoinbaseScriptAddress []byte // address.ScriptAddress() Nonce uint32 // start at 1, 0 means not bound }
BindPoolCoinbaseParams
func (*BindPoolCoinbaseParams) Decode ¶
func (params *BindPoolCoinbaseParams) Decode(data []byte) (err error)
data structure:
[0:48] - public key [48:144] - signature [144:148] - nonce [148:] - witness script hash, length zero to delete
func (*BindPoolCoinbaseParams) Encode ¶
func (params *BindPoolCoinbaseParams) Encode() []byte
func (*BindPoolCoinbaseParams) String ¶
func (p *BindPoolCoinbaseParams) String() string
type BlockNode ¶
type BlockNode struct { InMainChain bool Parent *BlockNode Hash *wire.Hash CapSum *big.Int ChainID wire.Hash Version uint64 Height uint64 Timestamp time.Time Previous wire.Hash TransactionRoot wire.Hash WitnessRoot wire.Hash ProposalRoot wire.Hash Target *big.Int Challenge wire.Hash Quality *big.Int // contains filtered or unexported fields }
func NewBlockNode ¶
func NewBlockNode(header *wire.BlockHeader, blockHash *wire.Hash, flags BehaviorFlags) *BlockNode
func (*BlockNode) Ancestor ¶
Ancestor returns the ancestor block node at the provided height by following the chain backwards from this node. The returned block will be nil when a height is requested that is after the height of the passed node or is less than zero.
func (*BlockNode) BannedPublicKeys ¶
func (node *BlockNode) BannedPublicKeys() []interfaces.PublicKey
func (*BlockNode) BindingState ¶
func (*BlockNode) BlockHeader ¶
func (node *BlockNode) BlockHeader() *wire.BlockHeader
func (*BlockNode) ParentBindingState ¶
Returns a copy of parent state.
func (*BlockNode) PublicKey ¶
func (node *BlockNode) PublicKey() interfaces.PublicKey
type BlockProgressLogger ¶
BlockProgressLogger provides periodic logging for other services in order to show users progress of certain "actions" involving some or all current blocks. Ex: syncing to best chain, indexing all blocks, etc.
func NewBlockProgressLogger ¶
func NewBlockProgressLogger(progressMessage string) *BlockProgressLogger
NewBlockProgressLogger returns a new block progress logger. The progress message is templated as follows:
{progressAction} {numProcessed} {blocks|block} in the last {timePeriod} ({numTxs}, height {lastBlockHeight}, {lastBlockTimeStamp})
func (*BlockProgressLogger) LogBlockHeight ¶
func (b *BlockProgressLogger) LogBlockHeight(block *massutil.Block)
LogBlockHeight logs a new block height as an information message to show progress to the user. In order to prevent spam, it limits logging to one message every 10 seconds with duration and totals included.
func (*BlockProgressLogger) SetLastLogTime ¶
func (b *BlockProgressLogger) SetLastLogTime(time time.Time)
func (*BlockProgressLogger) Start ¶
func (b *BlockProgressLogger) Start()
func (*BlockProgressLogger) Stop ¶
func (b *BlockProgressLogger) Stop() error
type BlockTemplate ¶
type BlockTree ¶
func NewBlockTree ¶
func NewBlockTree() *BlockTree
type Blockchain ¶
type Blockchain struct {
// contains filtered or unexported fields
}
func NewBlockchain ¶
func NewBlockchain(config *Config) (*Blockchain, error)
func (*Blockchain) BestBlockHash ¶
func (chain *Blockchain) BestBlockHash() *wire.Hash
func (*Blockchain) BestBlockHeader ¶
func (chain *Blockchain) BestBlockHeader() *wire.BlockHeader
func (*Blockchain) BestBlockHeight ¶
func (chain *Blockchain) BestBlockHeight() uint64
func (*Blockchain) BestBlockNode ¶
func (chain *Blockchain) BestBlockNode() *BlockNode
func (*Blockchain) BlockWaiter ¶
func (chain *Blockchain) BlockWaiter(height uint64) (<-chan *BlockNode, error)
func (*Blockchain) CalcNextChallenge ¶
func (chain *Blockchain) CalcNextChallenge() (*wire.Hash, error)
CalcNextChallenge calculates the required challenge for the block after the end of the current best chain based on the challenge adjustment rules.
func (*Blockchain) CalcNextTarget ¶
func (*Blockchain) CalcPastMedianTime ¶
func (chain *Blockchain) CalcPastMedianTime() (time.Time, error)
CalcPastMedianTime calculates the median time of the previous few blocks prior to, and including, the end of the current best chain. It is primarily used to ensure new blocks have sane timestamps.
This function is NOT safe for concurrent access.
func (*Blockchain) CalcSequenceLock ¶
func (chain *Blockchain) CalcSequenceLock(tx *massutil.Tx, txStore TxStore) (*SequenceLock, error)
CalcSequenceLock computes a relative lock-time SequenceLock for the passed transaction using the passed UtxoViewpoint to obtain the past median time for blocks in which the referenced inputs of the transactions were included within. The generated SequenceLock lock can be used in conjunction with a block height, and adjusted median block time to determine if all the inputs referenced within a transaction have reached sufficient maturity allowing the candidate transaction to be included in a block.
This function is safe for concurrent access.
func (*Blockchain) ChainID ¶
func (chain *Blockchain) ChainID() *wire.Hash
func (*Blockchain) Checkpoints ¶
func (b *Blockchain) Checkpoints() []config.Checkpoint
Checkpoints returns a slice of checkpoints (regardless of whether they are already known). When there are no checkpoints for the chain, it will return nil.
This function is safe for concurrent access.
func (*Blockchain) CurrentIndexHeight ¶
func (chain *Blockchain) CurrentIndexHeight() uint64
func (*Blockchain) FetchMinedBlocks ¶
func (chain *Blockchain) FetchMinedBlocks(pubKey interfaces.PublicKey) ([]uint64, error)
func (*Blockchain) FetchOldBinding ¶
func (chain *Blockchain) FetchOldBinding(scriptHash []byte) ([]*database.BindingTxReply, error)
func (*Blockchain) FetchTransactionStore ¶
func (chain *Blockchain) FetchTransactionStore(tx *massutil.Tx, includeSpent bool) TxStore
FetchTransactionStore fetches the input transactions referenced by the passed transaction from the point of view of the end of the main chain. It also attempts to fetch the transaction itself so the returned TxStore can be examined for duplicate transactions.
func (*Blockchain) GetBlockByHash ¶
func (*Blockchain) GetBlockByHeight ¶
func (chain *Blockchain) GetBlockByHeight(height uint64) (*massutil.Block, error)
func (*Blockchain) GetBlockHashByHeight ¶
func (chain *Blockchain) GetBlockHashByHeight(height uint64) (*wire.Hash, error)
func (*Blockchain) GetBlockStakingRewardRankOnList ¶
func (chain *Blockchain) GetBlockStakingRewardRankOnList(height uint64) ([]database.Rank, error)
GetBlockStakingRewardRankOnList returns staking reward list at any height.
func (*Blockchain) GetHeaderByHash ¶
func (chain *Blockchain) GetHeaderByHash(hash *wire.Hash) (*wire.BlockHeader, error)
func (*Blockchain) GetHeaderByHeight ¶
func (chain *Blockchain) GetHeaderByHeight(height uint64) (*wire.BlockHeader, error)
func (*Blockchain) GetNetworkBinding ¶
func (chain *Blockchain) GetNetworkBinding(height uint64) (massutil.Amount, error)
func (*Blockchain) GetNewBinding ¶
func (chain *Blockchain) GetNewBinding(script []byte) (massutil.Amount, error)
func (*Blockchain) GetPoolPkCoinbase ¶
func (*Blockchain) GetTransaction ¶
func (*Blockchain) GetTransactionInDB ¶
func (*Blockchain) GetTxPool ¶
func (chain *Blockchain) GetTxPool() *TxPool
func (*Blockchain) GetUnexpiredStakingRank ¶
func (chain *Blockchain) GetUnexpiredStakingRank(height uint64) ([]database.Rank, error)
GetUnexpiredStakingRank returns all the unexpired staking rank.
func (*Blockchain) HasCheckpoints ¶
func (b *Blockchain) HasCheckpoints() bool
HasCheckpoints returns whether this BlockChain has checkpoints defined.
This function is safe for concurrent access.
func (*Blockchain) InMainChain ¶
func (chain *Blockchain) InMainChain(hash wire.Hash) bool
func (*Blockchain) InsertChain ¶
func (chain *Blockchain) InsertChain(block *massutil.Block) (isOrphan bool, err error)
for importchain
func (*Blockchain) IsCheckpointCandidate ¶
func (b *Blockchain) IsCheckpointCandidate(block *massutil.Block) (bool, error)
IsCheckpointCandidate returns whether or not the passed block is a good checkpoint candidate.
The factors used to determine a good checkpoint are:
- The block must be in the main chain
- The block must be at least 'CheckpointConfirmations' blocks prior to the current end of the main chain
- The timestamps for the blocks before and after the checkpoint must have timestamps which are also before and after the checkpoint, respectively (due to the median time allowance this is not always the case)
- The block must not contain any strange transaction such as those with nonstandard scripts
The intent is that candidates are reviewed by a developer to make the final decision and then manually added to the list of checkpoints for a network.
This function is safe for concurrent access.
func (*Blockchain) LatestCheckpoint ¶
func (b *Blockchain) LatestCheckpoint() *config.Checkpoint
LatestCheckpoint returns the most recent checkpoint (regardless of whether it is already known). When there are no defined checkpoints for the active chain instance, it will return nil.
This function is safe for concurrent access.
func (*Blockchain) NewBlockTemplate ¶
func (chain *Blockchain) NewBlockTemplate(payoutAddresses []massutil.Address, templateCh chan interface{}) error
func (*Blockchain) ProcessBlock ¶
func (chain *Blockchain) ProcessBlock(block *massutil.Block) (bool, error)
ProcessBlock is the entry for chain update
func (*Blockchain) RegisterListener ¶
func (chain *Blockchain) RegisterListener(listener Listener)
func (*Blockchain) RetrieveFaultPks ¶
func (chain *Blockchain) RetrieveFaultPks()
func (*Blockchain) RetrievePunishment ¶
func (chain *Blockchain) RetrievePunishment() ([]*wire.FaultPubKey, error)
RetrievePunishment retrieves faultPks from database, sending them to memPool.
func (*Blockchain) TstFetchInputTransactions ¶
func (*Blockchain) TstgetPrevNodeFromBlock ¶
func (chain *Blockchain) TstgetPrevNodeFromBlock(block *massutil.Block) (*BlockNode, error)
func (*Blockchain) UnregisterListener ¶
func (chain *Blockchain) UnregisterListener(listener Listener)
type CoinbasePayload ¶
type CoinbasePayload struct {
// contains filtered or unexported fields
}
///////////////////////////
coinbase payload
///////////////////////////
func NewCoinbasePayload ¶
func NewCoinbasePayload() *CoinbasePayload
func (*CoinbasePayload) Bytes ¶
func (p *CoinbasePayload) Bytes() []byte
func (*CoinbasePayload) NumStakingReward ¶
func (p *CoinbasePayload) NumStakingReward() uint32
func (*CoinbasePayload) SetBytes ¶
func (p *CoinbasePayload) SetBytes(data []byte) error
type DoubleMiningDetector ¶
func NewDoubleMiningDetector ¶
func NewDoubleMiningDetector(db database.Db) *DoubleMiningDetector
type OrphanBlockPool ¶
type OrphanBlockPool struct {
// contains filtered or unexported fields
}
type OrphanTxPool ¶
type OrphanTxPool struct {
// contains filtered or unexported fields
}
type PayloadMethod ¶
type PayloadMethod uint16
const (
BindPoolCoinbase PayloadMethod = 1 + iota // for chia
)
type PayloadParams ¶
type PoCTemplate ¶
type ProposalPool ¶
func NewProposalPool ¶
func NewProposalPool(faults []*wire.FaultPubKey) *ProposalPool
func (*ProposalPool) InsertFaultPubKey ¶
func (pp *ProposalPool) InsertFaultPubKey(fpk *wire.FaultPubKey)
func (*ProposalPool) PunishmentProposals ¶
func (pp *ProposalPool) PunishmentProposals() []*PunishmentProposal
PunishmentProposals returns proposals with the same bitlength each call.
func (*ProposalPool) SyncAttachBlock ¶
func (pp *ProposalPool) SyncAttachBlock(block *massutil.Block)
func (*ProposalPool) SyncDetachBlock ¶
func (pp *ProposalPool) SyncDetachBlock(block *massutil.Block)
type PunishmentProposal ¶
type PunishmentProposal struct { *wire.FaultPubKey BitLength int Height uint64 Size int }
PunishmentProposal warps wire.FaultPubKey
func NewPunishmentProposal ¶
func NewPunishmentProposal(fpk *wire.FaultPubKey) *PunishmentProposal
func (*PunishmentProposal) LessThan ¶
func (p *PunishmentProposal) LessThan(other *PunishmentProposal) bool
type SequenceLock ¶
SequenceLock represents the converted relative lock-time in seconds, and absolute block-height for a transaction input's relative lock-times. According to SequenceLock, after the referenced input has been confirmed within a block, a transaction spending that input can be included into a block either after 'seconds' (according to past median time), or once the 'BlockHeight' has been reached.
type TransactionPayload ¶
type TransactionPayload struct { Method PayloadMethod Params PayloadParams }
func DecodePayload ¶
func DecodePayload(payload []byte) *TransactionPayload
DecodePayload return nil if decoding failed or verify sig failed, regarding it as meaningless payload.
func (*TransactionPayload) String ¶
func (p *TransactionPayload) String() string
type TxData ¶
TxData contains contextual information about transactions such as which block they were found in and whether or not the outputs are spent.
type TxDesc ¶
type TxDesc struct { Tx *massutil.Tx // Transaction. Added time.Time // Time when added to pool. Height uint64 // Block height when added to pool. Fee massutil.Amount // Transaction fees. // contains filtered or unexported fields }
TxDesc is a descriptor containing a transaction in the mempool and the metadata we store about it.
func (*TxDesc) CurrentPriority ¶
func (*TxDesc) StartingPriority ¶
TODO: should lazily update txD.totalInputValue, but that costs a lot.
type TxPool ¶
type TxPool struct { sync.RWMutex NewTxCh chan *massutil.Tx // contains filtered or unexported fields }
TxPool is used as a source of transactions that need to be mined into blocks and relayed to other peers. It is safe for concurrent access from multiple peers.
func NewTxPool ¶
func NewTxPool(chain *Blockchain, sigCache *txscript.SigCache, hashCache *txscript.HashCache) *TxPool
NewTxPool returns a new memory pool for validating and storing standalone transactions until they are mined into a block.
func (*TxPool) CheckPoolOutPointSpend ¶
func (*TxPool) Count ¶
Count returns the number of transactions in the main pool. It does not include the orphan pool.
This function is safe for concurrent access.
func (*TxPool) FetchInputTransactions ¶
FetchInputTransactions fetches the input transactions referenced by the passed transaction. First, it fetches from the main chain, then it tries to fetch any missing inputs from the transaction pool.
This function MUST be called with the mempool lock held (for reads).
func (*TxPool) FetchTransaction ¶
FetchTransaction returns the requested transaction from the transaction pool. This only fetches from the main transaction pool and does not include orphans.
This function is safe for concurrent access.
func (*TxPool) FilterTransactionsByAddress ¶
FilterTransactionsByAddress returns all transactions currently in the mempool that either create an output to the passed address or spend a previously created ouput to the address.
func (*TxPool) HaveTransaction ¶
HaveTransaction returns whether or not the passed transaction already exists in the main pool or in the orphan pool.
This function is safe for concurrent access.
func (*TxPool) IsOrphanInPool ¶
IsOrphanInPool returns whether or not the passed transaction already exists in the orphan pool.
This function is safe for concurrent access.
func (*TxPool) IsTransactionInPool ¶
IsTransactionInPool returns whether or not the passed transaction already exists in the main pool.
This function is safe for concurrent access.
func (*TxPool) LastUpdated ¶
LastUpdated returns the last time a transaction was added to or removed from the main pool. It does not include the orphan pool.
This function is safe for concurrent access.
func (*TxPool) MaybeAcceptTransaction ¶
func (tp *TxPool) MaybeAcceptTransaction(tx *massutil.Tx, isNew, rateLimit bool) ([]*wire.Hash, error)
MaybeAcceptTransaction is the main workhorse for handling insertion of new free-standing transactions into a memory pool. It includes functionality such as rejecting duplicate transactions, ensuring transactions follow all rules, detecting orphan transactions, and insertion into the memory pool.
If the transaction is an orphan (missing Parent transactions), the transaction is NOT added to the orphan pool, but each unknown referenced Parent is returned. Use ProcessTransaction instead if new orphans should be added to the orphan pool.
This function is safe for concurrent access.
func (*TxPool) ProcessOrphans ¶
ProcessOrphans determines if there are any orphans which depend on the passed transaction hash (it is possible that they are no longer orphans) and potentially accepts them to the memory pool. It repeats the process for the newly accepted transactions (to detect further orphans which may no longer be orphans) until there are no more.
This function is safe for concurrent access.
func (*TxPool) ProcessTransaction ¶
ProcessTransaction is the main workhorse for handling insertion of new free-standing transactions into the memory pool. It includes functionality such as rejecting duplicate transactions, ensuring transactions follow all rules, orphan transaction handling, and insertion into the memory pool.
This function is safe for concurrent access.
func (*TxPool) RemoveDoubleSpends ¶
RemoveDoubleSpends removes all transactions which spend outputs spent by the passed transaction from the memory pool. Removing those transactions then leads to removing all transactions which rely on them, recursively. This is necessary when a block is connected to the main chain because the block may contain transactions which were previously unknown to the memory pool
This function is safe for concurrent access.
func (*TxPool) RemoveOrphan ¶
RemoveOrphan removes the passed orphan transaction from the orphan pool and previous orphan index.
This function is safe for concurrent access.
func (*TxPool) RemoveTransaction ¶
RemoveTransaction removes the passed transaction from the mempool. If removeRedeemers flag is set, any transactions that redeem outputs from the removed transaction will also be removed recursively from the mempool, as they would otherwise become orphan.
This function is safe for concurrent access.
func (*TxPool) SetNewTxCh ¶
func (*TxPool) SyncAttachBlock ¶
func (*TxPool) SyncDetachBlock ¶
type TxStore ¶
TxStore is used to store transactions needed by other transactions for things such as script validation and double spend prevention. This also allows the transaction data to be treated as a view since it can contain the information from the point-of-view of different points in the chain.
Source Files ¶
- addrindexer.go
- addrindexer_massip2.go
- blockchain.go
- blocklogger.go
- blocktree.go
- cache.go
- chain.go
- checkpoints.go
- consensus.go
- dmd.go
- errors.go
- flags.go
- orphanblockpool.go
- orphantxpool.go
- payload.go
- policy.go
- process.go
- proposalpool.go
- reward_logic.go
- scriptval.go
- template.go
- test_funcs.go
- timesorter.go
- txlookup.go
- txpool.go
- utils.go
- validate.go
- validate_coinbase.go