protocol

package module
v1.5.1 Latest Latest
Warning

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

Go to latest
Published: Dec 9, 2022 License: Apache-2.0 Imports: 17 Imported by: 119

Documentation

Index

Constants

View Source
const (
	// ConfigNameOrgId org_id
	ConfigNameOrgId = "org_id"
	// ConfigNameRoot root
	ConfigNameRoot = "root"
	// CertFreezeKey CERT_FREEZE
	CertFreezeKey = "CERT_FREEZE"
	//CertFreezeKeyPrefix freeze_
	CertFreezeKeyPrefix = "freeze_"
	//CertRevokeKey CERT_CRL
	CertRevokeKey = "CERT_CRL"
	//CertRevokeKeyPrefix c_
	CertRevokeKeyPrefix = "c_"

	ResourceNameUnknown          = "UNKNOWN"
	ResourceNameReadData         = "READ"
	ResourceNameWriteData        = "WRITE"
	ResourceNameP2p              = "P2P"
	ResourceNameConsensusNode    = "CONSENSUS"
	ResourceNameAdmin            = "ADMIN"
	ResourceNameUpdateConfig     = "CONFIG"
	ResourceNameUpdateSelfConfig = "SELF_CONFIG"
	ResourceNameAllTest          = "ALL_TEST"

	ResourceNameTxQuery    = "query"
	ResourceNameTxTransact = "transaction"

	ResourceNamePrivateCompute = "PRIVATE_COMPUTE"
	ResourceNameArchive        = "ARCHIVE"
	ResourceNameSubscribe      = "SUBSCRIBE"

	RoleAdmin         Role = "ADMIN"
	RoleClient        Role = "CLIENT"
	RoleLight         Role = "LIGHT"
	RoleConsensusNode Role = "CONSENSUS"
	RoleCommonNode    Role = "COMMON"
	RoleContract      Role = "CONTRACT"

	RuleMajority  Rule = "MAJORITY"
	RuleAll       Rule = "ALL"
	RuleAny       Rule = "ANY"
	RuleSelf      Rule = "SELF"
	RuleForbidden Rule = "FORBIDDEN"
	RuleDelete    Rule = "DELETE"
)

以下ac模块相关常量

View Source
const (
	//PermissionedWithCert permissioned with certificate
	PermissionedWithCert string = "permissionedwithcert"
	//PermissionedWithKey permissioned with public key
	PermissionedWithKey string = "permissionedwithkey"
	// Public public key
	Public string = "public"
	// Identity (1.X PermissionedWithCert)
	Identity string = "identity"
)
View Source
const (
	PBFT_propose_timeout_key = "PBFT_propose_timeout"

	PBFT_propose_delta_timeout_key = "PBFT_propose_delta_timeout"

	PBFT_blocks_per_proposer = "PBFT_blocks_per_proposer"
)

PBFT chain config keys

View Source
const (
	// invoke user contract max gas
	GasLimit = 1e10
	// 1s
	TimeLimit = 1 * 1e9
	// Gas consumed per cross call contract
	CallContractGasOnce = 1e5
	// cross call contract stack depth, must less than vm pool min size
	CallContractDepth = 5

	// sdk call chain method success result
	ContractSdkSignalResultSuccess = 0
	// sdk call chain method success result
	ContractSdkSignalResultFail = 1

	// key & name for contract state length
	DefaultMaxStateKeyLen = 1024
	// key & name for contract state regex
	DefaultStateRegex = "^[a-zA-Z0-9._-]+$"

	// key & name for contract state length
	DefaultVersionLen = 64
	// key & name for contract state regex
	DefaultVersionRegex = "^[a-zA-Z0-9._-]+$"

	ParametersKeyMaxCount = 50 //
	// default size transaction's per parameter (MB)
	DefaultParametersValueMaxSize = 10

	TopicMaxLen       = 255
	EventDataMaxLen   = 65535
	EventDataMaxCount = 16

	ContractStoreSeparator = "#"

	ContractCreatorOrgIdParam = "__creator_org_id__"
	ContractCreatorRoleParam  = "__creator_role__"
	ContractCreatorPkParam    = "__creator_pk__"
	ContractSenderOrgIdParam  = "__sender_org_id__"
	ContractSenderRoleParam   = "__sender_role__"
	ContractSenderPkParam     = "__sender_pk__"
	ContractBlockHeightParam  = "__block_height__"
	ContractTxIdParam         = "__tx_id__"
	ContractTxTimeStamp       = "__tx_time_stamp__"
	ContractContextPtrParam   = "__context_ptr__"
	ContractAddrTypeParam     = "__addr_type__"
	ContractSenderTypeParam   = "__sender_type__"
	ContractCreatorTypeParam  = "__creator_type__"
	ContractCrossCallerParam  = "__cross_caller__"

	ContractInitMethod        = "init_contract"
	ContractUpgradeMethod     = "upgrade"
	ContractAllocateMethod    = "allocate"
	ContractDeallocateMethod  = "deallocate"
	ContractRuntimeTypeMethod = "runtime_type"

	ContractMethodLogMessage      = "LogMessage"
	ContractMethodSuccessResult   = "SuccessResult"
	ContractMethodErrorResult     = "ErrorResult"
	ContractMethodCallContract    = "CallContract"
	ContractMethodCallContractLen = "CallContractLen"

	ContractMethodGetStateLen = "GetStateLen"
	ContractMethodGetState    = "GetState"
	ContractMethodPutState    = "PutState"
	ContractMethodDeleteState = "DeleteState"

	ContractMethodKvIterator        = "KvIterator"
	ContractMethodKvPreIterator     = "KvPreIterator"
	ContractMethodKvIteratorHasNext = "KvIteratorHasNext"
	ContractMethodKvIteratorNextLen = "KvIteratorNextLen"
	ContractMethodKvIteratorNext    = "KvIteratorNext"
	ContractMethodKvIteratorClose   = "KvIteratorClose"

	ContractMethodExecuteQuery       = "ExecuteQuery"
	ContractMethodExecuteQueryOne    = "ExecuteQueryOne"
	ContractMethodExecuteQueryOneLen = "ExecuteQueryOneLen"
	ContractMethodRSNext             = "RSNext"
	ContractMethodRSNextLen          = "RSNextLen"
	ContractMethodRSHasNext          = "RSHasNext"
	ContractMethodRSClose            = "RSClose"
	ContractMethodExecuteUpdate      = "ExecuteUpdate"
	ContractMethodExecuteDdl         = "ExecuteDDL"
	ContractMethodEmitEvent          = "EmitEvent"

	ContractMethodGetPaillierOperationResult    = "GetPaillierOperationResult"
	ContractMethodGetPaillierOperationResultLen = "GetPaillierOperationResultLen"
	PaillierOpTypeAddCiphertext                 = "AddCiphertext"
	PaillierOpTypeAddPlaintext                  = "AddPlaintext"
	PaillierOpTypeSubCiphertext                 = "SubCiphertext"
	PaillierOpTypeSubPlaintext                  = "SubPlaintext"
	PaillierOpTypeNumMul                        = "NumMul"

	ContractMethodGetBulletproofsResult     = "GetBulletproofsResult"
	ContractMethodGetBulletproofsResultLen  = "GetBulletproofsResultLen"
	BulletProofsOpTypePedersenAddNum        = "PedersenAddNum"
	BulletProofsOpTypePedersenAddCommitment = "PedersenAddCommitment"
	BulletProofsOpTypePedersenSubNum        = "PedersenSubNum"
	BulletProofsOpTypePedersenSubCommitment = "PedersenSubCommitment"
	BulletProofsOpTypePedersenMulNum        = "PedersenMulNum"
	BulletProofsVerify                      = "BulletproofsVerify"
)

constant data for VM

View Source
const DefaultBlockVersion = uint32(2301) // default version of chain

DefaultBlockVersion default blockHeader.Version value

Variables

View Source
var (
	// ConsensusDBName is used to store consensus data
	ConsensusDBName = "consensus"
)
View Source
var (
	//ParametersValueMaxLength 参数Value允许的最大长度
	ParametersValueMaxLength uint32
)

Functions

func CheckEventData

func CheckEventData(eventData []string) error

CheckEventData verify event data

func CheckKeyFieldStr

func CheckKeyFieldStr(key string, field string) error

CheckKeyFieldStr verify param

func CheckTopicStr

func CheckTopicStr(topic string) error

CheckTopicStr check topic length

func GetKey

func GetKey(key []byte, field []byte) []byte

GetKey get state key from byte

func GetKeyStr

func GetKeyStr(key string, field string) []byte

GetKeyStr get state key from string

Types

type AccessControlProvider

type AccessControlProvider interface {
	// GetHashAlg return hash algorithm the access control provider uses
	GetHashAlg() string
	// ValidateResourcePolicy checks whether the given resource policy is valid
	ValidateResourcePolicy(resourcePolicy *config.ResourcePolicy) bool
	// LookUpPolicy returns corresponding policy configured for the given resource name
	LookUpPolicy(resourceName string) (*pbac.Policy, error)
	// LookUpExceptionalPolicy returns corresponding exceptional policy configured for the given resource name
	LookUpExceptionalPolicy(resourceName string) (*pbac.Policy, error)
	//GetAllPolicy returns all policies
	GetAllPolicy() (map[string]*pbac.Policy, error)
	// CreatePrincipal creates a principal for one time authentication
	CreatePrincipal(resourceName string, endorsements []*common.EndorsementEntry, message []byte) (Principal, error)
	// CreatePrincipalForTargetOrg creates a principal for "SELF" type policy,
	// which needs to convert SELF to a sepecific organization id in one authentication
	CreatePrincipalForTargetOrg(resourceName string, endorsements []*common.EndorsementEntry, message []byte,
		targetOrgId string) (Principal, error)
	//GetValidEndorsements filters all endorsement entries and returns all valid ones
	GetValidEndorsements(principal Principal) ([]*common.EndorsementEntry, error)
	// VerifyPrincipal verifies if the policy for the resource is met
	VerifyPrincipal(principal Principal) (bool, error)
	// NewParticipant creates a participant from pb Participant
	NewParticipant(participant *pbac.Participant) (Participant, error)
	//GetParticipantStatus get the status information of the participant
	GetParticipantStatus(participant *pbac.Participant) (pbac.ParticipantStatus, error)
	//VerifyRelatedMaterial verify the participant's relevant identity material
	VerifyRelatedMaterial(verifyType pbac.VerifyType, data []byte) (bool, error)
}

AccessControlProvider manages policies and principals.

type AuthType

type AuthType uint32

AuthType authorization type

type BlockCommitter

type BlockCommitter interface {
	// AddBlock Put block into ledger(DB) after block verify. Invoke by consensus or sync module.
	AddBlock(blk *common.Block) error
}

BlockCommitter put block and read write set into ledger(DB).

type BlockProposer

type BlockProposer interface {
	// Start proposer.
	Start() error
	// Stop proposer
	Stop() error
	// OnReceiveTxPoolSignal Receive propose signal from txpool module.
	OnReceiveTxPoolSignal(proposeSignal *txpool.TxPoolSignal)
	// OnReceiveProposeStatusChange Receive signal indicates if node is proposer from consensus module.
	OnReceiveProposeStatusChange(proposeStatus bool)
	// OnReceiveHotStuffProposal Receive signal from hotstuff consensus(Hotstuff) and propose new block.
	OnReceiveHotStuffProposal(proposal *hotstuff.BuildProposal)
	// ProposeBlock propose new block from hotstuff consensus by sync call
	ProposeBlock(proposal *hotstuff.BuildProposal) (*consensuspb.ProposalBlock, error)
	// OnReceiveRwSetVerifyFailTxs Receive signal from consensus and remove fails txs.
	OnReceiveRwSetVerifyFailTxs(rwSetVerifyFailTxs *consensuspb.RwSetVerifyFailTxs)
}

BlockProposer generate new block when node is consensus proposer.

type BlockVerifier

type BlockVerifier interface {
	// Verify if a block is valid
	VerifyBlock(block *common.Block, mode VerifyMode) error
	VerifyBlockSync(block *common.Block, mode VerifyMode) (*consensuspb.VerifyResult, error)
	VerifyBlockWithRwSets(block *common.Block, rwsets []*common.TxRWSet, mode VerifyMode) error
}

BlockVerifier verify if a block is valid

type BlockchainStore

type BlockchainStore interface {
	StateSqlOperation
	SysContractQuery
	ParticipantQuery
	//InitGenesis 初始化创世单元到数据库
	InitGenesis(genesisBlock *store.BlockWithRWSet) error
	// PutBlock commits the block and the corresponding rwsets in an atomic operation
	PutBlock(block *common.Block, txRWSets []*common.TxRWSet) error
	// GetBlockByHash returns a block given it's hash, or returns nil if none exists.
	GetBlockByHash(blockHash []byte) (*common.Block, error)
	// BlockExists returns true if the black hash exist, or returns false if none exists.
	BlockExists(blockHash []byte) (bool, error)
	// GetHeightByHash returns a block height given it's hash, or returns nil if none exists.
	GetHeightByHash(blockHash []byte) (uint64, error)
	// GetBlockHeaderByHeight returns a block header by given it's height, or returns nil if none exists.
	GetBlockHeaderByHeight(height uint64) (*common.BlockHeader, error)
	// GetBlock returns a block given it's block height, or returns nil if none exists.
	GetBlock(height uint64) (*common.Block, error)
	// GetLastConfigBlock returns the last config block.
	GetLastConfigBlock() (*common.Block, error)
	//GetLastChainConfig return the last chain config
	GetLastChainConfig() (*configPb.ChainConfig, error)
	// GetBlockByTx returns a block which contains a tx.
	GetBlockByTx(txId string) (*common.Block, error)
	// GetBlockWithRWSets returns a block and the corresponding rwsets given
	// it's block height, or returns nil if none exists.
	GetBlockWithRWSets(height uint64) (*store.BlockWithRWSet, error)
	// GetTx retrieves a transaction by txid, or returns nil if none exists.
	GetTx(txId string) (*common.Transaction, error)
	//GetTxWithRWSet return tx and it's rw set
	GetTxWithRWSet(txId string) (*common.TransactionWithRWSet, error)
	//GetTxInfoWithRWSet return tx and tx info and rw set
	GetTxInfoWithRWSet(txId string) (*common.TransactionInfoWithRWSet, error)
	//GetTxWithInfo get tx and tx block information
	GetTxWithInfo(txId string) (*common.TransactionInfo, error)
	// TxExists returns true if the tx exist, or returns false if none exists.
	TxExists(txId string) (bool, error)
	// TxExistsInFullDB returns true and the latest committed block height in db if the tx exist,
	// or returns false and math.MaxUint64 if none exists.
	TxExistsInFullDB(txId string) (bool, uint64, error)
	// TxExistsInIncrementDB returns true if the tx exist from starHeight to the latest committed block,
	// or returns false if none exists.
	TxExistsInIncrementDB(txId string, startHeight uint64) (bool, error)
	// TxExistsInIncrementDBState returns
	// first return value is true if the tx exist from starHeight to the
	// latest committed block,or returns false if none exists.
	// second return value is true if inside the window or false if outside the window.
	TxExistsInIncrementDBState(txId string, startHeight uint64) (bool, bool, error)
	//GetTxInfoOnly get tx block height,timestamp, txindex
	GetTxInfoOnly(txId string) (*commonPb.TransactionInfo, error)
	//Deprecated, please use GetTxInfoOnly, retrieves a transaction height by txid, or returns nil if none exists.
	GetTxHeight(txId string) (uint64, error)
	//Deprecated, please use GetTxInfoOnly, returns the confirmed time for given tx
	GetTxConfirmedTime(txId string) (int64, error)
	// GetLastBlock returns the last block.
	GetLastBlock() (*common.Block, error)
	// ReadObject returns the state value for given contract name and key, or returns nil if none exists.
	ReadObject(contractName string, key []byte) ([]byte, error)
	// ReadObjects returns the state values for given contract name and keys
	ReadObjects(contractName string, keys [][]byte) ([][]byte, error)
	// SelectObject returns an iterator that contains all the key-values between given key ranges.
	// startKey is included in the results and limit is excluded.
	SelectObject(contractName string, startKey []byte, limit []byte) (StateIterator, error)
	// GetTxRWSet returns an txRWSet for given txId, or returns nil if none exists.
	GetTxRWSet(txId string) (*common.TxRWSet, error)
	// GetTxRWSetsByHeight returns all the rwsets corresponding to the block,
	// or returns nil if zhe block does not exist
	GetTxRWSetsByHeight(height uint64) ([]*common.TxRWSet, error)
	// GetDBHandle returns the database handle for given dbName
	GetDBHandle(dbName string) DBHandle
	// GetArchivedPivot returns the archived pivot (include this pivot height)
	GetArchivedPivot() uint64
	// ArchiveBlock the block after backup
	ArchiveBlock(archiveHeight uint64) error
	//RestoreBlocks restore blocks from outside block data
	RestoreBlocks(serializedBlocks [][]byte) error
	// Close closes all the store db instances and releases any resources held by BlockchainStore
	Close() error
	//GetHistoryForKey 查询某合约中某个Key的变更历史
	GetHistoryForKey(contractName string, key []byte) (KeyHistoryIterator, error)
	//GetAccountTxHistory 查询一个账户的交易历史记录
	GetAccountTxHistory(accountId []byte) (TxHistoryIterator, error)
	//GetContractTxHistory 查询一个合约的调用交易历史记录
	GetContractTxHistory(contractName string) (TxHistoryIterator, error)
}

BlockchainStore provides handle to store instances

type ChainConf

type ChainConf interface {
	// init
	Init() error
	// get the latest chainconfig
	ChainConfig() *config.ChainConfig
	// get chainconfig by (blockHeight-1)
	GetChainConfigFromFuture(blockHeight uint64) (*config.ChainConfig, error)
	// get chainconfig by blockHeight
	GetChainConfigAt(blockHeight uint64) (*config.ChainConfig, error)
	// get node list
	GetConsensusNodeIdList() ([]string, error)
	// Deprecated: Use msgbus.PublishSync instead since version
	CompleteBlock(block *common.Block) error // callback after insert block to db success
	// Deprecated: Use msgbus.Register instead since version
	AddWatch(w Watcher) // add watcher
	// Deprecated: Use msgbus.Register instead since version
	AddVmWatch(w VmWatcher) // add vm watcher
}

ChainConf chainconf interface

type ChainNodeInfo

type ChainNodeInfo struct {
	NodeUid     string
	NodeAddress []string
	NodeTlsCert []byte
}

ChainNodeInfo 网络节点信息

type ChainNodesInfoProvider

type ChainNodesInfoProvider interface {
	// GetChainNodesInfo return base node info list of chain.
	GetChainNodesInfo() ([]*ChainNodeInfo, error)
}

ChainNodesInfoProvider provide base node info list of chain.

type ConsensusEngine

type ConsensusEngine interface {
	// Start the consensus engine.
	Start() error
	// Stop stops the consensus engine.
	Stop() error
}

ConsensusEngine consensus abstract engine

type ConsensusExtendEngine

type ConsensusExtendEngine interface {
	ConsensusEngine
	InitExtendHandler(handler ConsensusExtendHandler)
}

ConsensusExtendEngine extend engine for consensus

type ConsensusExtendHandler

type ConsensusExtendHandler interface {
	// CreateRWSet Creates a RwSet for the proposed block
	CreateRWSet(preBlkHash []byte, proposedBlock *consensuspb.ProposalBlock) error
	// VerifyConsensusArgs Verify the contents of the RwSet contained within the block
	VerifyConsensusArgs(block *common.Block, blockTxRwSet map[string]*common.TxRWSet) error
	// GetValidators Gets the validators for the current epoch
	GetValidators() ([]string, error)
}

ConsensusExtendHandler extend consensus handler

type ConsensusState

type ConsensusState interface {
	GetValidators() ([]string, error)
	GetLastHeight() uint64
	GetConsensusStateJSON() ([]byte, error)
}

ConsensusState get consensus state

type ContractWacsiCommon

type ContractWacsiCommon interface {
	LogMessage() int32
	SuccessResult() int32
	ErrorResult() int32
	CallContract() int32
}

ContractWacsiCommon 合约提供的公共接口

type ContractWacsiKV

type ContractWacsiKV interface {
	ContractWacsiCommon
	GetState() int32
	PutState() int32
	DeleteState() int32
	KvIterator() int32
	KvPreIterator() int32
	KvIteratorClose() int32
	KvIteratorNext() int32
	KvIteratorHasNext() int32
}

ContractWacsiKV 合约在支持KV模式下的接口

type ContractWacsiSQL

type ContractWacsiSQL interface {
	ContractWacsiCommon
	ExecuteQuery() int32
	ExecuteQueryOne() int32
	RSHasNext() int32
	RSNext() int32
	RSClose() int32
	ExecuteUpdate() int32
	ExecuteDDL() int32
}

ContractWacsiSQL 合约支持SQL模式下的接口

type CoreEngine

type CoreEngine interface {
	Start()
	Stop()
	GetBlockProposer() BlockProposer
	GetBlockCommitter() BlockCommitter
	GetBlockVerifier() BlockVerifier
	msgbus.Subscriber
	//HotStuffHelper
	GetHotStuffHelper() HotStuffHelper
}

CoreEngine 核心引擎接口

type DBHandle

type DBHandle interface {
	//GetDbType returns db type
	GetDbType() string
	// Get returns the value for the given key, or returns nil if none exists
	Get(key []byte) ([]byte, error)
	// GetKeys returns the values for the given keys concurrent
	GetKeys(keys [][]byte) ([][]byte, error)
	// Put saves the key-values
	Put(key []byte, value []byte) error
	// Has return true if the given key exist, or return false if none exists
	Has(key []byte) (bool, error)
	// Delete deletes the given key
	Delete(key []byte) error
	// WriteBatch writes a batch in an atomic operation
	WriteBatch(batch StoreBatcher, sync bool) error
	// CompactRange compacts the underlying DB for the given key range.
	CompactRange(start, limit []byte) error
	// NewIteratorWithRange returns an iterator that contains all the key-values between given key ranges
	// start is included in the results and limit is excluded.
	NewIteratorWithRange(start []byte, limit []byte) (Iterator, error)
	// NewIteratorWithPrefix returns an iterator that contains all the key-values with given prefix
	NewIteratorWithPrefix(prefix []byte) (Iterator, error)
	// GetWriteBatchSize get each write batch numbers
	GetWriteBatchSize() uint64
	Close() error
}

DBHandle is an handle to a db

type DirectMsgHandler

type DirectMsgHandler func(from string, msgData []byte) error

DirectMsgHandler handle the msg received from other node.

type ExecOrderTxType

type ExecOrderTxType int

ExecOrderTxType 执行排序类型

const (
	ExecOrderTxTypeNormal ExecOrderTxType = iota
	ExecOrderTxTypeIterator
	ExecOrderTxTypeChargeGas
)

ExecOrderTxType list

type Government

type Government interface {
	//Verify used to verify consensus data
	Verify(consensusType consensuspb.ConsensusType, chainConfig *config.ChainConfig) error
	// GetGovernanceContract get GovernanceContract
	GetGovernanceContract() (*consensuspb.GovernanceContract, error)
}

Government 治理接口

type HotStuffHelper

type HotStuffHelper interface {
	// DiscardBlocks Delete blocks data greater than the baseHeight
	DiscardBlocks(baseHeight uint64)
}

HotStuffHelper HotStuff共识的接口

type Iterator

type Iterator interface {
	Next() bool
	First() bool
	Error() error
	Key() []byte
	Value() []byte
	Release()
}

Iterator allows a chaincode to iterator over a set of kev/value pairs returned by range query.

type KeyHistoryIterator

type KeyHistoryIterator interface {
	// Next 是否有下一个值
	// @return bool
	Next() bool
	// Value Key的变更记录
	// @return *store.KeyModification
	// @return error
	Value() (*store.KeyModification, error)
	// Release 释放迭代器的句柄
	Release()
}

KeyHistoryIterator 状态数据Key的历史记录查询返回的迭代器接口

type LedgerCache

type LedgerCache interface {
	// Get the latest committed block
	GetLastCommittedBlock() *common.Block
	// Set the latest committed block
	SetLastCommittedBlock(b *common.Block)
	// Return current block height
	CurrentHeight() (uint64, error)
}

LedgerCache Cache the latest block in ledger(DB).

type Logger

type Logger interface {
	Debug(args ...interface{})
	Debugf(format string, args ...interface{})
	Debugw(msg string, keysAndValues ...interface{})
	Error(args ...interface{})
	Errorf(format string, args ...interface{})
	Errorw(msg string, keysAndValues ...interface{})
	Fatal(args ...interface{})
	Fatalf(format string, args ...interface{})
	Fatalw(msg string, keysAndValues ...interface{})
	Info(args ...interface{})
	Infof(format string, args ...interface{})
	Infow(msg string, keysAndValues ...interface{})
	Panic(args ...interface{})
	Panicf(format string, args ...interface{})
	Panicw(msg string, keysAndValues ...interface{})
	Warn(args ...interface{})
	Warnf(format string, args ...interface{})
	Warnw(msg string, keysAndValues ...interface{})
	DebugDynamic(getStr func() string)
	InfoDynamic(getStr func() string)
}

Logger is logger interface of herbt.

type MsgHandler

type MsgHandler func(from string, msg []byte, msgType net.NetMsg_MsgType) error

MsgHandler P2P网络消息处理Handler

type Net

type Net interface {
	// GetNodeUid is the unique id of the node.
	GetNodeUid() string
	// InitPubSub will init new PubSub instance with given chainId and maxMessageSize.
	InitPubSub(chainId string, maxMessageSize int) error
	// BroadcastWithChainId  will broadcast a msg to a PubSubTopic with the pub-sub service which id is given chainId.
	BroadcastWithChainId(chainId string, topic string, netMsg []byte) error
	// SubscribeWithChainId register a PubSubMsgHandler to a PubSubTopic
	// with the pub-sub service which id is given chainId.
	SubscribeWithChainId(chainId string, topic string, handler PubSubMsgHandler) error
	// CancelSubscribeWithChainId cancel subscribe a PubSubTopic with the pub-sub service which id is given chainId.
	CancelSubscribeWithChainId(chainId string, topic string) error
	// SendMsg send msg to the node which id is given string.
	// 		msgFlag: is a flag used to distinguish msg type.
	SendMsg(chainId string, node string, msgFlag string, netMsg []byte) error
	// DirectMsgHandle register a DirectMsgHandler to the net.
	// 		msgFlag: is a flag used to distinguish msg type.
	DirectMsgHandle(chainId string, msgFlag string, handler DirectMsgHandler) error
	// CancelDirectMsgHandle unregister a DirectMsgHandler.
	// 		msgFlag: is a flag used to distinguish msg type.
	CancelDirectMsgHandle(chainId string, msgFlag string) error
	// AddSeed add a seed node addr.
	AddSeed(seed string) error
	// RefreshSeeds refresh the seed node addr list.
	RefreshSeeds(seeds []string) error
	// SetChainCustomTrustRoots set custom trust roots of chain.
	// In cert permission mode, if it is failed when verifying cert by access control of chains,
	// the cert will be verified by custom trust root pool again.
	SetChainCustomTrustRoots(chainId string, roots [][]byte)
	// ReVerifyPeers will verify permission of peers existed with the access control module of the chain
	// which id is the given chainId.
	ReVerifyPeers(chainId string)
	// IsRunning return true when the net instance is running.
	IsRunning() bool
	// Start the local net.
	Start() error
	// Stop the local net.
	Stop() error
	// ChainNodesInfo return base node info list of chain which id is the given chainId.
	ChainNodesInfo(chainId string) ([]*ChainNodeInfo, error)
	// GetNodeUidByCertId return node uid which mapped to the given cert id. If unmapped return error.
	GetNodeUidByCertId(certId string) (string, error)
	// AddAC add a AccessControlProvider for revoked validator.
	AddAC(chainId string, ac AccessControlProvider)
	// SetMsgPriority set the priority of the msg flag.
	// If priority control disabled, it is no-op.
	SetMsgPriority(msgFlag string, priority uint8)
}

Net is local net interface.

type NetService

type NetService interface {
	// BroadcastMsg broadcast a msg to the net.
	BroadcastMsg(msg []byte, msgType net.NetMsg_MsgType) error
	// Subscribe register a MsgHandler for subscribe.
	Subscribe(msgType net.NetMsg_MsgType, handler MsgHandler) error
	// CancelSubscribe cancel subscribe.
	CancelSubscribe(msgType net.NetMsg_MsgType) error
	// ConsensusBroadcastMsg broadcast a msg to the consensus nodes.
	ConsensusBroadcastMsg(msg []byte, msgType net.NetMsg_MsgType) error
	// ConsensusSubscribe register a MsgHandler handle the msg from consensus nodes for subscribe.
	ConsensusSubscribe(msgType net.NetMsg_MsgType, handler MsgHandler) error
	// CancelConsensusSubscribe cancel subscribe.
	CancelConsensusSubscribe(msgType net.NetMsg_MsgType) error
	// SendMsg send msg to any nodes.
	SendMsg(msg []byte, msgType net.NetMsg_MsgType, to ...string) error
	// ReceiveMsg register a MsgHandler to handle the msg received from other node.
	ReceiveMsg(msgType net.NetMsg_MsgType, handler MsgHandler) error
	// Start the net service.
	Start() error
	// Stop the net service.
	Stop() error
	// GetNodeUidByCertId return node uid which mapped to the given cert id. If unmapped return error.
	GetNodeUidByCertId(certId string) (string, error)
	// GetChainNodesInfoProvider return an implementation of ChainNodesInfoProvider.
	GetChainNodesInfoProvider() ChainNodesInfoProvider
}

NetService P2P网络模块接口

type NetType

type NetType int

NetType is the type of net.

const (
	// Libp2p is a type of p2p net.
	Libp2p NetType = iota
	// Liquid is a type of net that developed by ourselves.
	Wormhole
)

type Participant

type Participant interface {
	// GetParticipantId returns the identity of this participant (non-uniqueness)
	GetParticipantId() string
	// GetOrgId returns the organization id which this participant belongs to
	GetOrgId() string
	// GetRole returns roles of this participant
	GetRole() Role
	// GetUid returns the identity of this participant (unique)
	GetUid() string
	// Verify verifies a signature over some message using this participant
	Verify(hashType string, msg []byte, sig []byte) error
	// GetParticipant returns Participant
	GetParticipant() (*pbac.Participant, error)
	//GetPk returns public key
	GetPk() crypto.PublicKey
}

Participant is the identity of a node or user.

type ParticipantQuery

type ParticipantQuery interface {
	//GetParticipantExtraData get participant extra data by participant
	GetParticipantExtraData(participant *accesscontrol.Participant) (*accesscontrol.ParticipantExtraData, error)
}

ParticipantQuery query participant information

type Principal

type Principal interface {
	// GetResourceName returns resource name of the verification
	GetResourceName() string
	// GetEndorsement returns all endorsements (signatures) of the verification
	GetEndorsement() []*common.EndorsementEntry
	// GetMessage returns signing data of the verification
	GetMessage() []byte
	// GetTargetOrgId returns target organization id of the verification if the verification is for a specific organization
	GetTargetOrgId() string
}

Principal contains all information related to one time verification

type ProposalCache

type ProposalCache interface {
	// Clear proposed blocks with height.
	ClearProposedBlockAt(height uint64)
	// Get all proposed blocks at a specific height
	GetProposedBlocksAt(height uint64) []*common.Block
	// Get proposed block with specific block hash in current consensus height.
	GetProposedBlock(b *common.Block) (*common.Block, map[string]*common.TxRWSet, map[string][]*common.ContractEvent)
	// Set porposed block in current consensus height, after it's generated or verified.
	SetProposedBlock(b *common.Block, rwSetMap map[string]*common.TxRWSet,
		contractEventMap map[string][]*common.ContractEvent, selfProposed bool) error
	// Get proposed block that is proposed by node itself.
	GetSelfProposedBlockAt(height uint64) *common.Block
	// Get proposed block by block hash and block height
	GetProposedBlockByHashAndHeight(hash []byte, height uint64) (*common.Block, map[string]*common.TxRWSet)
	// Return if a proposed block has cached in current consensus height.
	HasProposedBlockAt(height uint64) bool
	// Return if this node has proposed a block as proposer.
	IsProposedAt(height uint64) bool
	// To mark this node has proposed a block as proposer.
	SetProposedAt(height uint64)
	// Reset propose status of this node.
	ResetProposedAt(height uint64)
	// Remove proposed block in height except the specific block.
	KeepProposedBlock(hash []byte, height uint64) []*common.Block
	// DiscardAboveHeight Delete blocks data greater than the baseHeight
	DiscardBlocks(baseHeight uint64) []*common.Block
	// ClearTheBlock clean the special block in proposerCache
	ClearTheBlock(block *common.Block)
}

ProposalCache Cache proposed blocks that are not committed yet

type PubSubMsgHandler

type PubSubMsgHandler func(publisher string, msgData []byte) error

PubSubMsgHandler handle the msg published by other node.

type Role

type Role string

Role for participants in an organization

type Rule

type Rule string

Rule Keywords of authentication rules

type RuntimeInstance

type RuntimeInstance interface {
	// start vm runtime with invoke, call “method”
	Invoke(contractId *common.Contract, method string, byteCode []byte, parameters map[string][]byte,
		txContext TxSimContext, gasUsed uint64) (*common.ContractResult, ExecOrderTxType)
}

RuntimeInstance of smart contract engine runtime

type SigningParticipant

type SigningParticipant interface {
	// Extends Participant interface
	Participant
	// Sign signs the message with the given hash type and returns signature bytes
	Sign(hashType string, msg []byte) ([]byte, error)
}

SigningParticipant signer

type Snapshot

type Snapshot interface {
	// Get database for virtual machine access
	GetBlockchainStore() BlockchainStore
	//Read the key from the current snapshot and the previous snapshot
	GetKey(txExecSeq int, contractName string, key []byte) ([]byte, error)
	// GetKeys Read the key from the current snapshot and the previous snapshot
	GetKeys(txExecSeq int, keys []*vmPb.BatchKey) ([]*vmPb.BatchKey, error)
	// After the scheduling is completed, get the read and write set from the current snapshot
	GetTxRWSetTable() []*common.TxRWSet
	// After the scheduling is completed, get the result from the current snapshot
	GetTxResultMap() map[string]*common.Result
	// Get exec seq for snapshot
	GetSnapshotSize() int
	// After the scheduling is completed, obtain the transaction sequence table from the current snapshot
	GetTxTable() []*common.Transaction
	// GetSpecialTxTable return specialTxTable which will be exec sequencially
	GetSpecialTxTable() []*common.Transaction
	// Get previous snapshot
	GetPreSnapshot() Snapshot
	// Set previous snapshot
	SetPreSnapshot(Snapshot)
	// GetBlockHeight returns current block height
	GetBlockHeight() uint64
	// GetBlockFingerprint returns current block fingerprint
	GetBlockFingerprint() string
	// GetBlockTimestamp returns current block timestamp
	GetBlockTimestamp() int64
	// GetBlockProposer returns Block Proposer for current snapshot
	GetBlockProposer() *accesscontrol.Participant
	// ApplyTxSimContext If the transaction can be added to the snapshot after the conflict dependency is established
	// Even if an exception occurs when the transaction is handed over to the virtual machine module,
	// the transaction is still packed into a block, but the read-write set of the transaction is left empty.
	// This situation includes:
	// 1 wrong txtype is used,
	// 2 parameter error occurs when parsing querypayload and transactpayload,
	// 3 virtual machine runtime throws panic,
	// 4 smart contract byte code actively throws panic
	// The second bool parameter here indicates whether the above exception has occurred
	ApplyTxSimContext(TxSimContext, ExecOrderTxType, bool, bool) (bool, int)
	// Build a dag for all transactions that have resolved the read-write conflict dependencies
	// If txRWSetTable is nil, it uses snapshot.txRWSetTable. Otherwise use txRWSetTable in argument.
	BuildDAG(isSql bool, txRWSetTable []*common.TxRWSet) *common.DAG
	// If snapshot is sealed, no more transaction will be added into snapshot
	IsSealed() bool
	Seal()
	// ApplyBlock In the fast synchronization mode, the results pulled from other
	// nodes will be written to snapshot after the block verification passes
	ApplyBlock(block *common.Block, txRWSetMap map[string]*common.TxRWSet)
}

Snapshot is a chain structure that saves the read and write cache information of the blocks that are not in the library

type SnapshotManager

type SnapshotManager interface {
	// Create ContractStore at the current block height
	NewSnapshot(prevBlock *common.Block, block *common.Block) Snapshot
	//Once the block is submitted, notify the snapshot to clean up
	NotifyBlockCommitted(block *common.Block) error
	//clean the snapshot when verify fail in pbft
	ClearSnapshot(block *common.Block) error
	// Get Snapshot by block fingerPrint
	GetSnapshot(prevBlock *common.Block, block *common.Block) Snapshot
}

SnapshotManager Snapshot management container to manage chained snapshots

type SqlDBHandle

type SqlDBHandle interface {
	DBHandle
	//CreateDatabaseIfNotExist 如果数据库不存在则创建对应的数据库,创建后将当前数据库设置为新数据库,返回是否已存在
	CreateDatabaseIfNotExist(dbName string) (bool, error)
	//CreateTableIfNotExist 根据一个对象struct,自动构建对应的sql数据库表
	CreateTableIfNotExist(obj interface{}) error
	//Save 直接保存一个对象到SQL数据库中
	Save(value interface{}) (int64, error)
	//ExecSql 执行指定的SQL语句,返回受影响的行数
	ExecSql(sql string, values ...interface{}) (int64, error)
	//QuerySingle 执行指定的SQL语句,查询单条数据记录,如果查询到0条,则返回nil,nil,如果查询到多条,则返回第一条
	QuerySingle(sql string, values ...interface{}) (SqlRow, error)
	//QueryMulti 执行指定的SQL语句,查询多条数据记录,如果查询到0条,则SqlRows.Next()直接返回false
	QueryMulti(sql string, values ...interface{}) (SqlRows, error)
	//BeginDbTransaction 开启一个数据库事务,并指定该事务的名字,并缓存其句柄,如果之前已经开启了同名的事务,则返回错误
	BeginDbTransaction(txName string) (SqlDBTransaction, error)
	//GetDbTransaction 根据事务的名字,获得事务的句柄,如果事务不存在,则返回错误
	GetDbTransaction(txName string) (SqlDBTransaction, error)
	//CommitDbTransaction 提交一个事务,并从缓存中清除该事务,如果找不到对应的事务,则返回错误
	CommitDbTransaction(txName string) error
	//RollbackDbTransaction 回滚一个事务,并从缓存中清除该事务,如果找不到对应的事务,则返回错误
	RollbackDbTransaction(txName string) error
	//GetSqlDbType 获得SqlDBType字段的值
	GetSqlDbType() string
}

SqlDBHandle 对SQL数据库的操作方法

type SqlDBTransaction

type SqlDBTransaction interface {
	//ChangeContextDb 改变当前上下文所使用的数据库
	ChangeContextDb(dbName string) error
	//SaveBatch 直接保存一批对象到SQL数据库中
	SaveBatch(values []interface{}) (int64, error)
	//Save 直接保存一个对象到SQL数据库中
	Save(value interface{}) (int64, error)
	//ExecSql 执行指定的SQL语句,返回受影响的行数
	ExecSql(sql string, values ...interface{}) (int64, error)
	//QuerySingle 执行指定的SQL语句,查询单条数据记录,如果查询到0条,则返回nil,nil,如果查询到多条,则返回第一条
	QuerySingle(sql string, values ...interface{}) (SqlRow, error)
	//QueryMulti 执行指定的SQL语句,查询多条数据记录,如果查询到0条,则SqlRows.Next()直接返回false
	QueryMulti(sql string, values ...interface{}) (SqlRows, error)
	//BeginDbSavePoint 创建一个新的保存点
	BeginDbSavePoint(savePointName string) error
	//回滚事务到指定的保存点
	RollbackDbSavePoint(savePointName string) error
}

SqlDBTransaction 开启一个事务后,能在这个事务中进行的操作

type SqlRow

type SqlRow interface {
	//ScanColumns 将这个数据的每个列赋值到dest指针对应的对象中
	ScanColumns(dest ...interface{}) error
	//Data 将这个数据转换为ColumnName为Key,Data为Value的Map中
	Data() (map[string][]byte, error)
	//IsEmpty 判断返回的SqlRow是否为空
	IsEmpty() bool
}

SqlRow 运行SQL查询后返回的一行数据,在获取这行数据时提供了ScanColumns,ScanObject和Data三种方法,但是三选一,调用其中一个就别再调另外一个。

type SqlRows

type SqlRows interface {
	//Next 还有下一行
	Next() bool
	//ScanColumns 将当前行这个数据的每个列赋值到dest指针对应的对象中
	ScanColumns(dest ...interface{}) error
	//Data 将当前行这个数据转换为ColumnName为Key,Data为Value的Map中
	Data() (map[string][]byte, error)
	// Close 关闭sql.Rows连接
	// @return error
	Close() error
}

SqlRows 运行SQL查询后返回的多行数据

type SqlType

type SqlType int8

SqlType sql语句的类型

const (
	SqlTypeDdl SqlType = iota
	SqlTypeDml
	SqlTypeDql
)

Sql types: ddl,dml,dql

type SqlVerifier

type SqlVerifier interface {
	//VerifyDDLSql 验证输入语句是不是DDL语句,是DDL则返回nil,不是则返回error
	VerifyDDLSql(sql string) error
	//VerifyDMLSql 验证输入的SQL语句是不是更新语句(insert、update、delete),是则返回nil,不是则返回error
	VerifyDMLSql(sql string) error
	//VerifyDQLSql 验证输入的语句是不是查询语句,是则返回nil,不是则返回error
	VerifyDQLSql(sql string) error
}

SqlVerifier 在支持SQL语句操作状态数据库模式下,对合约中输入的SQL语句进行规则校验

type StateIterator

type StateIterator interface {
	// Next 是否有下一个值
	// @return bool
	Next() bool
	// Value 当前值的KV
	// @return *store.KV
	// @return error
	Value() (*store.KV, error)
	// Release 释放迭代器的句柄
	Release()
}

StateIterator 状态数据查询迭代器结果,在对状态数据进行前缀查询或者范围查询时返回

type StateSqlOperation

type StateSqlOperation interface {
	//QuerySingle 不在事务中,直接查询状态数据库,返回一行结果
	QuerySingle(contractName, sql string, values ...interface{}) (SqlRow, error)
	//QueryMulti 不在事务中,直接查询状态数据库,返回多行结果
	QueryMulti(contractName, sql string, values ...interface{}) (SqlRows, error)
	//ExecDdlSql 执行建表、修改表等DDL语句,不得在事务中运行
	ExecDdlSql(contractName, sql, version string) error
	//BeginDbTransaction 启用一个事务
	BeginDbTransaction(txName string) (SqlDBTransaction, error)
	//GetDbTransaction 根据事务名,获得一个已经启用的事务
	GetDbTransaction(txName string) (SqlDBTransaction, error)
	//CommitDbTransaction 提交一个事务
	CommitDbTransaction(txName string) error
	//RollbackDbTransaction 回滚一个事务
	RollbackDbTransaction(txName string) error
	//CreateDatabase 为新合约创建数据库
	CreateDatabase(contractName string) error
	//DropDatabase 删除一个合约对应的数据库
	DropDatabase(contractName string) error
	//GetContractDbName 获得一个合约对应的状态数据库名
	GetContractDbName(contractName string) string
}

StateSqlOperation 状态数据库的SQL操作

type StoreBatcher

type StoreBatcher interface {
	// Put adds a key-value
	Put(key []byte, value []byte)
	// Delete deletes a key and associated value
	Delete(key []byte)
	// Len retrun the number of key-values
	Len() int
	// Merge used to merge two StoreBatcher
	Merge(batcher StoreBatcher)
	// KVs return the map of key-values
	KVs() map[string][]byte
	// SplitBatch split other kvs to more updateBatchs division by batchCnt
	SplitBatch(batchCnt uint64) []StoreBatcher
	// Get value by key
	Get(key []byte) ([]byte, error)
	// Check key-value wether exist or not
	Has(key []byte) bool
}

StoreBatcher used to cache key-values that commit in a atomic operation

type StoreHelper

type StoreHelper interface {
	RollBack(*common.Block, BlockchainStore) error
	BeginDbTransaction(BlockchainStore, string)
	GetPoolCapacity() int
}

StoreHelper 存储抽象接口

type SyncService

type SyncService interface {
	//Start Init the sync server, and the sync server broadcast the current block height every broadcastTime
	Start() error
	//Stop the sync server
	Stop()
	//ListenSyncToIdealHeight listen local block height has synced to ideal height
	ListenSyncToIdealHeight() <-chan struct{}
	//StopBlockSync syncing blocks from other nodes, but still process other nodes synchronizing blocks from itself
	StopBlockSync()
	//StartBlockSync start request service
	StartBlockSync()
}

SyncService is the server to sync the blockchain

type SysContractQuery

type SysContractQuery interface {
	GetContractByName(name string) (*commonPb.Contract, error)
	GetContractBytecode(name string) ([]byte, error)
}

SysContractQuery query system contract data

type TxFilter

type TxFilter interface {
	GetHeight() uint64
	SetHeight(height uint64)
	Add(txId string) error
	// Adds add transactions to the filter in batches,
	//and log and return an array of abnormal transactions if an exception occurs
	Adds(txIds []string) error
	// IsExists ruleType see herbt/protocol/birdsnest.RulesType
	IsExists(txId string, ruleType ...birdsnest.RuleType) (bool, *txfilter.Stat, error)
	// ValidateRule validate rules
	ValidateRule(txId string, ruleType ...birdsnest.RuleType) error
	IsExistsAndReturnHeight(txId string, ruleType ...birdsnest.RuleType) (bool, uint64, *txfilter.Stat, error)
	AddsAndSetHeight(txId []string, height uint64) (result error)
	Close()
}

TxFilter 交易过滤接口

type TxHistoryIterator

type TxHistoryIterator interface {
	// Next 是否有下一个值
	// @return bool
	Next() bool
	// Value 交易的历史记录
	// @return *store.TxHistory
	// @return error
	Value() (*store.TxHistory, error)
	// Release 释放迭代器的句柄
	Release()
}

TxHistoryIterator 交易的历史迭代器

type TxPool

type TxPool interface {
	// Start start the txPool service
	Start() error
	// Stop stop the txPool service
	Stop() error
	// AddTx Add a transaction to the txPool.
	// There are three types of Source (RPC/P2P/INTERNAL), which different checks
	// are performed for different types of cases.
	AddTx(tx *common.Transaction, source TxSource) error
	// FetchTxs Get some transactions from single or normal txPool by block height to generate new block.
	// return transactions.
	FetchTxs(blockHeight uint64) (txs []*common.Transaction)
	// FetchTxBatches Get some transactions from batch txPool by block height to generate new block.
	// return transactions table and batchId list.
	FetchTxBatches(blockHeight uint64) (batchIds []string, txsTable [][]*common.Transaction)
	// ReGenTxBatchesWithRetryTxs Generate new batches by retryTxs
	// and return new txsTable and batchIds of new batches for batch txPool,
	// then, put new batches into the pendingCache of pool
	// and retry old batches retrieved by the batchIds into the queue of pool.
	ReGenTxBatchesWithRetryTxs(blockHeight uint64, batchIds []string, retryTxs []*common.Transaction) (
		newBatchIds []string, newTxsTable [][]*common.Transaction)
	// ReGenTxBatchesWithRemoveTxs Remove removeTxs in batches that retrieved by the batchIds
	// to create new batches for batch txPool and return new txsTable and batchIds of new batches
	// then put new batches into the pendingCache of pool
	// and delete old batches retrieved by the batchIds in pool.
	ReGenTxBatchesWithRemoveTxs(blockHeight uint64, batchIds []string, removeTxs []*common.Transaction) (
		newBatchIds []string, newTxsTable [][]*common.Transaction)
	// RemoveTxsInTxBatches Remove removeTxs in batches that retrieved by the batchIds
	// to create new batches for batch txPool.
	// then, put new batches into the queue of pool
	// and delete old batches retrieved by the batchIds in pool.
	RemoveTxsInTxBatches(batchIds []string, removeTxs []*common.Transaction)
	// GetTxsByTxIds Retrieve transactions by the txIds from single or normal txPool,
	// and only return transactions it has.
	// txsRet is the transaction in the txPool, txsMis is the transaction not in the txPool.
	GetTxsByTxIds(txIds []string) (txsRet map[string]*common.Transaction, txsMis map[string]struct{})
	// GetAllTxsByTxIds Retrieve all transactions by the txIds from single or normal txPool synchronously.
	// if there are some transactions lacked, it need to obtain them by height from the proposer.
	// if txPool get all transactions before timeout return txsRet, otherwise, return error.
	GetAllTxsByTxIds(txIds []string, proposerId string, height uint64, timeoutMs int) (
		txsRet map[string]*common.Transaction, err error)
	// GetAllTxsByBatchIds Retrieve all transactions by the batchIds from batch txPool synchronously.
	// if there are some batches lacked, it need to obtain them by height from the proposer.
	// if txPool get all batches before timeout return txsRet, otherwise, return error.
	GetAllTxsByBatchIds(batchIds []string, proposerId string, height uint64, timeoutMs int) (
		txsTable [][]*common.Transaction, err error)
	// AddTxsToPendingCache These transactions will be added to single or normal txPool to avoid the transactions
	// are fetched again and re-filled into the new block. Because of the chain confirmation
	// rule in the HotStuff consensus algorithm.
	AddTxsToPendingCache(txs []*common.Transaction, blockHeight uint64)
	// AddTxBatchesToPendingCache These transactions will be added to batch txPool to avoid the transactions
	// are fetched again and re-filled into the new block. Because of the chain confirmation
	// rule in the HotStuff consensus algorithm.
	AddTxBatchesToPendingCache(batchIds []string, blockHeight uint64)
	// RetryAndRemoveTxs Process transactions within multiple proposed blocks at the same height to
	// ensure that these transactions are not lost for single or normal txPool
	// re-add valid transactions which that are not on local node.
	// remove transactions in the commit block.
	RetryAndRemoveTxs(retryTxs []*common.Transaction, removeTxs []*common.Transaction)
	// RetryAndRemoveTxBatches Process batches within multiple proposed blocks at the same height to
	// ensure that these batches are not lost for batch txPool.
	// re-add valid batches to the queue of pool.
	// remove batches in the commit block.
	RetryAndRemoveTxBatches(retryBatchIds []string, removeBatchIds []string)
	// TxExists verifies whether the transaction exists in the txPool.
	TxExists(tx *common.Transaction) bool
	// GetPoolStatus Returns the max size of config transaction pool and common transaction pool,
	// the num of config transaction in queue and pendingCache,
	// and the the num of common transaction in queue and pendingCache.
	GetPoolStatus() (txPoolStatus *txpool.TxPoolStatus)
	// GetTxIdsByTypeAndStage Returns config or common txIds in different stage.
	// TxType may be TxType_CONFIG_TX, TxType_COMMON_TX, (TxType_CONFIG_TX|TxType_COMMON_TX)
	// TxStage may be TxStage_IN_QUEUE, TxStage_IN_PENDING, (TxStage_IN_QUEUE|TxStage_IN_PENDING)
	GetTxIdsByTypeAndStage(txType, txStage int32) (txIds []string)
	// GetTxsInPoolByTxIds Retrieve the transactions by the txIds from the txPool,
	// return transactions in the txPool and txIds not in txPool.
	// default query upper limit is 1w transaction, and error is returned if the limit is exceeded.
	GetTxsInPoolByTxIds(txIds []string) (txsRet []*common.Transaction, txsMis []string, err error)
}

TxPool Manage pending transactions and update the current status of transactions (pending packages, pending warehousing, pending retries, etc.)

type TxScheduler

type TxScheduler interface {
	// schedule a transaction batch into a block with DAG
	// Return result(and read write set) of each transaction, no matter it is executed OK, or fail, or timeout.
	// For cross-contracts invoke, result(and read write set) include all contract relative.
	Schedule(block *common.Block, txBatch []*common.Transaction, snapshot Snapshot) (
		map[string]*common.TxRWSet, map[string][]*common.ContractEvent, error)
	// Run VM with a given DAG, and return results.
	SimulateWithDag(block *common.Block, snapshot Snapshot) (
		map[string]*common.TxRWSet, map[string]*common.Result, error)
	// To halt scheduler and release VM resources.
	Halt()
}

TxScheduler schedules a transaction batch and returns a block (maybe not complete) with DAG TxScheduler also can run VM with a given DAG, and return results. It can only be called by BlockProposer Should have multiple implementations and adaptive mode

type TxSimContext

type TxSimContext interface {
	// Get key from cache, record this operation to read set
	Get(contractName string, key []byte) ([]byte, error)
	// GetKeys key from cache, record this operation to read set
	GetKeys(keys []*vmPb.BatchKey) ([]*vmPb.BatchKey, error)
	//GetNoRecord read data from state, but not record into read set, only used for framework
	GetNoRecord(contractName string, key []byte) ([]byte, error)
	// Put key into cache
	Put(name string, key []byte, value []byte) error
	// PutRecord put sql state into cache
	PutRecord(contractName string, value []byte, sqlType SqlType)
	// PutIntoReadSet put kv to readset
	PutIntoReadSet(contractName string, key []byte, value []byte)
	// Del Delete key from cache
	Del(name string, key []byte) error
	// Select range query for key [start, limit)
	Select(name string, startKey []byte, limit []byte) (StateIterator, error)
	// GetHistoryIterForKey query the change history of a key in a contract
	GetHistoryIterForKey(contractName string, key []byte) (KeyHistoryIterator, error)
	// CallContract Cross contract call, return (contract result, gas used)
	CallContract(contract *common.Contract, method string, byteCode []byte,
		parameter map[string][]byte, gasUsed uint64, refTxType common.TxType) (
		*common.ContractResult, ExecOrderTxType, common.TxStatusCode)
	// GetCurrentResult Get cross contract call result, cache for len
	GetCurrentResult() []byte
	// GetTx get related transaction
	GetTx() *common.Transaction
	// GetBlockHeight returns current block height
	GetBlockHeight() uint64
	// GetBlockFingerprint returns unique id for block
	GetBlockFingerprint() string
	// GetBlockTimestamp returns current block timestamp
	GetBlockTimestamp() int64
	// GetBlockProposer returns current block proposer
	GetBlockProposer() *pbac.Participant
	// GetTxResult returns the tx result
	GetTxResult() *common.Result
	// SetTxResult set the tx result
	SetTxResult(*common.Result)
	// GetTxRWSet returns the read and write set completed by the current transaction
	GetTxRWSet(runVmSuccess bool) *common.TxRWSet
	// GetCreator returns the creator of the contract
	GetCreator(namespace string) *pbac.Participant
	// GetSender returns the invoker of the transaction
	GetSender() *pbac.Participant
	// GetBlockchainStore returns related blockchain store
	GetBlockchainStore() BlockchainStore
	// GetAccessControl returns access control service
	GetAccessControl() (AccessControlProvider, error)
	// GetChainNodesInfoProvider returns organization service
	GetChainNodesInfoProvider() (ChainNodesInfoProvider, error)
	// The execution sequence of the transaction, used to construct the dag,
	// indicating the number of completed transactions during transaction scheduling
	GetTxExecSeq() int
	SetTxExecSeq(int)
	// Get cross contract call deep
	GetDepth() int
	SetIterHandle(index int32, iter interface{})
	GetIterHandle(index int32) (interface{}, bool)
	GetBlockVersion() uint32
	//GetContractByName get contract info by name
	GetContractByName(name string) (*common.Contract, error)
	//GetContractBytecode get contract bytecode
	GetContractBytecode(name string) ([]byte, error)
	// GetTxRWMapByContractName get the read-write map of the specified contract of the current transaction
	GetTxRWMapByContractName(contractName string) (map[string]*common.TxRead, map[string]*common.TxWrite)
	// GetCrossInfo get contract call link information
	GetCrossInfo() uint64
	// HasUsed judge whether the specified common.RuntimeType has appeared in the previous depth
	// in the current cross-link
	HasUsed(runtimeType common.RuntimeType) bool
	// RecordRuntimeTypeIntoCrossInfo record the new contract call information to the top of crossInfo
	RecordRuntimeTypeIntoCrossInfo(runtimeType common.RuntimeType)
	// RemoveRuntimeTypeFromCrossInfo remove the top-level information from the crossInfo
	RemoveRuntimeTypeFromCrossInfo()
	// GetStrAddrFromPbParticipant calculate string address from pb Participant
	GetStrAddrFromPbParticipant(pbParticipant *pbac.Participant) (string, error)
}

TxSimContext The simulated execution context of the transaction, providing a cache for the transaction to read and write

type TxSource

type TxSource int

TxSource tx come from

const (
	//RPC add tx by rpc
	RPC TxSource = iota
	// P2P add tx by p2p
	P2P
	//INTERNAL special internal tx
	INTERNAL
)

type Verifier

type Verifier interface {
	Verify(consensusType consensus.ConsensusType, chainConfig *config.ChainConfig) error
}

Verifier verify consensus data

type VerifyMode

type VerifyMode int

VerifyMode 区块验证模式

const (
	//CONSENSUS_VERIFY 共识节点验证
	CONSENSUS_VERIFY VerifyMode = iota
	//SYNC_VERIFY 同步节点验证
	SYNC_VERIFY
)

func (VerifyMode) String

func (i VerifyMode) String() string

type VmInstancesManager

type VmInstancesManager interface {
	NewRuntimeInstance(txSimContext TxSimContext, chainId, method, codePath string, contract *common.Contract,
		byteCode []byte, log Logger) (RuntimeInstance, error)
	// StartVM Start vm
	StartVM() error
	// StopVM Stop vm
	StopVM() error
	BeforeSchedule(blockFingerprint string, blockHeight uint64)
	AfterSchedule(blockFingerprint string, blockHeight uint64)
}

VmInstancesManager VM实例的管理接口

type VmManager

type VmManager interface {
	// GetAccessControl get accessControl manages policies and principles
	GetAccessControl() AccessControlProvider
	// GetChainNodesInfoProvider get ChainNodesInfoProvider provide base node info list of chain.
	GetChainNodesInfoProvider() ChainNodesInfoProvider
	// RunContract run native or user contract according ContractName in contractId, and call the specified function
	RunContract(contract *common.Contract, method string, byteCode []byte, parameters map[string][]byte,
		txContext TxSimContext, gasUsed uint64, refTxType common.TxType) (
		*common.ContractResult, ExecOrderTxType, common.TxStatusCode)
	// Start all vm instance
	Start() error
	// Stop all vm instance
	Stop() error
	BeforeSchedule(blockFingerprint string, blockHeight uint64)
	AfterSchedule(blockFingerprint string, blockHeight uint64)
}

VmManager manage vm runtime

type VmWatcher

type VmWatcher interface {
	// module
	Module() string
	// watch the contract
	ContractNames() []string
	// callback
	Callback(contractName string, payloadBytes []byte) error
}

VmWatcher native vm watcher Deprecated: it has been replaced by implementing msgBus.Subscriber interface.

type Wacsi

type Wacsi interface {
	// state operation
	PutState(requestBody []byte, contractName string, txSimContext TxSimContext) error
	GetState(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte,
		data []byte, isLen bool) ([]byte, error)
	DeleteState(requestBody []byte, contractName string, txSimContext TxSimContext) error
	// call other contract
	CallContract(requestBody []byte, txSimContext TxSimContext, memory []byte, data []byte,
		gasUsed uint64, isLen bool) (*common.ContractResult, uint64, ExecOrderTxType, error)
	// result record
	SuccessResult(contractResult *common.ContractResult, data []byte) int32
	ErrorResult(contractResult *common.ContractResult, data []byte) int32
	// emit event
	EmitEvent(requestBody []byte, txSimContext TxSimContext, contractId *common.Contract,
		log Logger) (*common.ContractEvent, error)
	// paillier
	PaillierOperation(requestBody []byte, memory []byte, data []byte, isLen bool) ([]byte, error)
	// bulletproofs
	BulletProofsOperation(requestBody []byte, memory []byte, data []byte, isLen bool) ([]byte, error)
	// kv iterator
	KvIterator(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte) error
	KvPreIterator(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte) error
	KvIteratorHasNext(requestBody []byte, txSimContext TxSimContext, memory []byte) error
	KvIteratorNext(requestBody []byte, txSimContext TxSimContext, memory []byte, data []byte,
		contractName string, isLen bool) ([]byte, error)
	KvIteratorClose(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte) error
	// sql operation
	ExecuteQuery(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte,
		chainId string) error
	ExecuteQueryOne(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte,
		data []byte, chainId string, isLen bool) ([]byte, error)
	ExecuteUpdate(requestBody []byte, contractName string, method string, txSimContext TxSimContext,
		memory []byte, chainId string) error
	ExecuteDDL(requestBody []byte, contractName string, txSimContext TxSimContext, memory []byte,
		method string) error
	RSHasNext(requestBody []byte, txSimContext TxSimContext, memory []byte) error
	RSNext(requestBody []byte, txSimContext TxSimContext, memory []byte, data []byte,
		isLen bool) ([]byte, error)
	RSClose(requestBody []byte, txSimContext TxSimContext, memory []byte) error
}

Wacsi WebAssembly Herbt system interface

type Watcher

type Watcher interface {
	Module() string                              // module
	Watch(chainConfig *config.ChainConfig) error // callback the chainconfig
}

Watcher chainconfig watcher Deprecated: Since version, it has been replaced by implementing msgBus.Subscriber interface.

Directories

Path Synopsis
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.

Jump to

Keyboard shortcuts

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