Documentation
¶
Overview ¶
统一管理系统引擎和链运行上下文
Index ¶
Constants ¶
View Source
const ( // 完全块广播模式,即直接广播原始块给所有相邻节点 FullBroadCastMode = iota // 问询式块广播模式,即先广播新块的头部给相邻节点 // 邻节点在没有相同块的情况下通过GetBlock主动获取块数据 InteractiveBroadCastMode // 出块节点将新块用Full_BroadCast_Mode模式广播 // 其他节点使用Interactive_BroadCast_Mode模式广播区块 MixedBroadCastMode )
广播模式
View Source
const ( // 处理成功类 ErrStatusSucc = 200 // 拒绝处理类错误状态 ErrStatusRefused = 400 // 内部错误类错误状态 ErrStatusInternalErr = 500 )
View Source
const (
// 引擎名
BCEngineName = "xchain"
)
引擎常量配置
Variables ¶
View Source
var ( ErrSuccess = &Error{ErrStatusSucc, 0, "success"} ErrInternal = &Error{ErrStatusInternalErr, 50000, "internal error"} ErrUnknown = &Error{ErrStatusInternalErr, 50001, "unknown error"} ErrForbidden = &Error{ErrStatusRefused, 40000, "forbidden"} ErrParameter = &Error{ErrStatusRefused, 40001, "param error"} // engine ErrNewEngineCtxFailed = &Error{ErrStatusInternalErr, 50100, "create engine context failed"} ErrNotEngineType = &Error{ErrStatusInternalErr, 50101, "transfer engine type failed"} ErrLoadEngConfFailed = &Error{ErrStatusInternalErr, 50102, "load engine config failed"} ErrNewLogFailed = &Error{ErrStatusInternalErr, 50103, "new logger failed"} // chain ErrNewChainCtxFailed = &Error{ErrStatusInternalErr, 50200, "new chain context failed"} ErrLoadChainFailed = &Error{ErrStatusInternalErr, 50201, "load chain failed"} ErrRootChainNotExist = &Error{ErrStatusInternalErr, 50202, "root chain not exist"} ErrChainStatus = &Error{ErrStatusInternalErr, 50203, "chain status error"} ErrChainExist = &Error{ErrStatusInternalErr, 50204, "chain already exists"} ErrChainNotExist = &Error{ErrStatusInternalErr, 50205, "chain not exist"} ErrChainAlreadyExist = &Error{ErrStatusInternalErr, 50206, "chain already exist"} // block ErrBlockNotExist = &Error{ErrStatusInternalErr, 50300, "block not exist"} ErrProcBlockFailed = &Error{ErrStatusInternalErr, 50301, "process block failed"} ErrGenesisBlockDiff = &Error{ErrStatusInternalErr, 50302, "genesis block diff"} // tx ErrTxVerifyFailed = &Error{ErrStatusInternalErr, 50400, "verify tx failed"} ErrTxAlreadyExist = &Error{ErrStatusInternalErr, 50401, "tx already exist"} ErrTxNotExist = &Error{ErrStatusInternalErr, 50402, "tx not exist"} ErrTxNotEnough = &Error{ErrStatusInternalErr, 50403, "tx not enough"} ErrSubmitTxFailed = &Error{ErrStatusInternalErr, 50404, "submit tx failed"} ErrGenerateTimerTxFailed = &Error{ErrStatusInternalErr, 50405, "generate timer tx failed"} // contract ErrContractNewCtxFailed = &Error{ErrStatusInternalErr, 50500, "contract new context failed"} ErrContractInvokeFailed = &Error{ErrStatusInternalErr, 50501, "contract invoke failed"} ErrContractNewSandboxFailed = &Error{ErrStatusInternalErr, 50502, "contract new sandbox failed"} // net ErrNewNetEventFailed = &Error{ErrStatusInternalErr, 50600, "new net event failed"} ErrNewNetworkFailed = &Error{ErrStatusInternalErr, 50601, "new network failed"} ErrSendMessageFailed = &Error{ErrStatusInternalErr, 50602, "send message failed"} ErrNetworkNoResponse = &Error{ErrStatusInternalErr, 50603, "network no response"} // consensus ErrConsensusStatus = &Error{ErrStatusInternalErr, 50701, "consensus status error"} )
define std error 预留xxx9xx的错误码给上层业务扩展用,这里不要使用xxx9xx的错误码
Functions ¶
This section is empty.
Types ¶
type AsyncworkerAgent ¶
type AsyncworkerAgent interface {
RegisterHandler(contract string, event string, handler TaskHandler)
}
避免循环调用
type Chain ¶
type Chain interface {
// 获取链上下文
Context() *ChainCtx
// 启动链
Start()
// 关闭链
Stop()
// 合约预执行
PreExec(xctx.XContext, []*protos.InvokeRequest, string, []string) (*protos.InvokeResponse, error)
// 提交交易
SubmitTx(xctx.XContext, *lpb.Transaction) error
// 处理新区块
ProcBlock(xctx.XContext, *lpb.InternalBlock) error
// 设置依赖实例化代理
SetRelyAgent(ChainRelyAgent) error
}
type ChainCtx ¶
type ChainCtx struct {
// 基础上下文
xctx.BaseCtx
// 引擎上下文
EngCtx *EngineCtx
// 链名
BCName string
// 账本
Ledger *ledger.Ledger
// 状态机
State *state.State
// 合约
Contract contract.Manager
// 共识
Consensus consensus.PluggableConsensusInterface
// 加密
Crypto cryptoBase.CryptoClient
// 权限
Acl aclBase.AclManager
// 治理代币
GovernToken governToken.GovManager
// 提案
Proposal propose.ProposeManager
// 定时任务
TimerTask timerTask.TimerManager
// 结点账户信息
Address *xaddress.Address
// 异步任务
Asyncworker AsyncworkerAgent
}
链级别上下文,维护链级别上下文,每条平行链各有一个
type ChainManager ¶
type ChainRelyAgent ¶
type ChainRelyAgent interface {
CreateLedger() (*ledger.Ledger, error)
CreateState(*ledger.Ledger, cryptoBase.CryptoClient) (*state.State, error)
CreateContract(kledger.XMReader) (contract.Manager, error)
CreateConsensus() (consensus.PluggableConsensusInterface, error)
CreateCrypto(cryptoType string) (cryptoBase.CryptoClient, error)
CreateAcl() (aclBase.AclManager, error)
CreateGovernToken() (governToken.GovManager, error)
CreateProposal() (propose.ProposeManager, error)
CreateTimerTask() (timerTask.TimerManager, error)
}
定义链对各组件依赖接口约束
type Engine ¶
type Engine interface {
engines.BCEngine
ChainManager
Context() *EngineCtx
SetRelyAgent(EngineRelyAgent) error
}
定义xuperos引擎对外暴露接口 依赖接口而不是依赖具体实现
type EngineCtx ¶
type EngineCtx struct {
// 基础上下文
xctx.BaseCtx
// 运行环境配置
EnvCfg *xconf.EnvConf
// 引擎配置
EngCfg *engconf.EngineConf
// 网络组件句柄
Net network.Network
// 链管理上下文
ChainM ChainManager
}
引擎运行上下文环境
type EngineRelyAgent ¶
定义引擎对各组件依赖接口约束
type Error ¶
type Error struct {
// 用于统计和监控的错误分类(类似http的2xx、4xx、5xx)
Status int
// 用于标识具体错误的详细错误码
Code int
// 用于说明具体错误的说明信息
Msg string
}
func CastErrorDefault ¶
type TaskContext ¶
type TaskHandler ¶
type TaskHandler func(ctx TaskContext) error
Click to show internal directories.
Click to hide internal directories.