Commit 163efeb9 authored by hxzqlh's avatar hxzqlh Committed by 33cn

fix ci

parent 42d6de72
......@@ -10,7 +10,7 @@ import (
"github.com/spf13/cobra"
)
// 本执行器的命令行初始化总入口
// EchoCmd 本执行器的命令行初始化总入口
func EchoCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "echo",
......@@ -24,6 +24,7 @@ func EchoCmd() *cobra.Command {
return cmd
}
// QueryCmd query 命令
func QueryCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "query",
......
......@@ -2,7 +2,7 @@ package executor
import "github.com/33cn/chain33/types"
// 本执行器不做任何校验
// CheckTx 本执行器不做任何校验
func (h *Echo) CheckTx(tx *types.Transaction, index int) error {
return nil
}
......@@ -7,26 +7,29 @@ import (
)
var (
// 执行交易生成的数据KEY
// KeyPrefixPing ping 前缀
KeyPrefixPing = "mavl-echo-ping:%s"
// KeyPrefixPang pang 前缀
KeyPrefixPang = "mavl-echo-pang:%s"
// 本地执行生成的数据KEY
// KeyPrefixPingLocal local ping 前缀
KeyPrefixPingLocal = "LODB-echo-ping:%s"
// KeyPrefixPangLocal local pang 前缀
KeyPrefixPangLocal = "LODB-echo-pang:%s"
)
// 初始化时通过反射获取本执行器的方法列表
// init 初始化时通过反射获取本执行器的方法列表
func init() {
ety := types.LoadExecutorType(echotypes.EchoX)
ety.InitFuncList(types.ListMethod(&Echo{}))
}
//本执行器的初始化动作,向系统注册本执行器,这里生效高度暂写为0
// Init 本执行器的初始化动作,向系统注册本执行器,这里生效高度暂写为0
func Init(name string, sub []byte) {
dapp.Register(echotypes.EchoX, newEcho, 0)
}
// 定义执行器对象
// Echo 定义执行器对象
type Echo struct {
dapp.DriverBase
}
......@@ -39,7 +42,7 @@ func newEcho() dapp.Driver {
return c
}
// 返回本执行器驱动名称
// GetDriverName 返回本执行器驱动名称
func (h *Echo) GetDriverName() string {
return echotypes.EchoX
}
......@@ -7,6 +7,7 @@ import (
echotypes "github.com/33cn/plugin/plugin/dapp/echo/types/echo"
)
// Exec_Ping 执行 ping 类型交易
func (h *Echo) Exec_Ping(ping *echotypes.Ping, tx *types.Transaction, index int) (*types.Receipt, error) {
msg := ping.Msg
res := fmt.Sprintf("%s, ping ping ping!", msg)
......@@ -17,6 +18,7 @@ func (h *Echo) Exec_Ping(ping *echotypes.Ping, tx *types.Transaction, index int)
return receipt, nil
}
// Exec_Pang 执行 pang 类型交易
func (h *Echo) Exec_Pang(ping *echotypes.Pang, tx *types.Transaction, index int) (*types.Receipt, error) {
msg := ping.Msg
res := fmt.Sprintf("%s, pang pang pang!", msg)
......
......@@ -7,7 +7,7 @@ import (
echotypes "github.com/33cn/plugin/plugin/dapp/echo/types/echo"
)
// 交易执行成功,将本消息对应的数值减1
// ExecDelLocal_Ping 交易执行成功,将本消息对应的数值减1
func (h *Echo) ExecDelLocal_Ping(ping *echotypes.Ping, tx *types.Transaction, receipt *types.ReceiptData, index int) (*types.LocalDBSet, error) {
// 这里简化处理,不做基本的零值及错误检查了
var pingLog echotypes.PingLog
......@@ -19,7 +19,7 @@ func (h *Echo) ExecDelLocal_Ping(ping *echotypes.Ping, tx *types.Transaction, re
}
types.Decode(oldValue, &pingLog)
if pingLog.Count > 0 {
pingLog.Count -= 1
pingLog.Count--
}
val := types.Encode(&pingLog)
if pingLog.Count == 0 {
......@@ -29,7 +29,7 @@ func (h *Echo) ExecDelLocal_Ping(ping *echotypes.Ping, tx *types.Transaction, re
return &types.LocalDBSet{KV: kv}, nil
}
// 交易执行成功,将本消息对应的数值减1
// ExecDelLocal_Pang 交易执行成功,将本消息对应的数值减1
func (h *Echo) ExecDelLocal_Pang(ping *echotypes.Pang, tx *types.Transaction, receipt *types.ReceiptData, index int) (*types.LocalDBSet, error) {
// 这里简化处理,不做基本的零值及错误检查了
var pangLog echotypes.PangLog
......@@ -41,7 +41,7 @@ func (h *Echo) ExecDelLocal_Pang(ping *echotypes.Pang, tx *types.Transaction, re
}
types.Decode(oldValue, &pangLog)
if pangLog.Count > 0 {
pangLog.Count -= 1
pangLog.Count--
}
val := types.Encode(&pangLog)
if pangLog.Count == 0 {
......
......@@ -7,7 +7,7 @@ import (
echotypes "github.com/33cn/plugin/plugin/dapp/echo/types/echo"
)
// 交易执行成功,将本消息对应的数值加1
// ExecLocal_Ping 交易执行成功,将本消息对应的数值加1
func (h *Echo) ExecLocal_Ping(ping *echotypes.Ping, tx *types.Transaction, receipt *types.ReceiptData, index int) (*types.LocalDBSet, error) {
// 这里简化处理,不做基本的零值及错误检查了
var pingLog echotypes.PingLog
......@@ -20,12 +20,12 @@ func (h *Echo) ExecLocal_Ping(ping *echotypes.Ping, tx *types.Transaction, recei
if err == nil {
types.Decode(oldValue, &pingLog)
}
pingLog.Count += 1
pingLog.Count++
kv := []*types.KeyValue{{Key: localKey, Value: types.Encode(&pingLog)}}
return &types.LocalDBSet{KV: kv}, nil
}
// 交易执行成功,将本消息对应的数值加1
// ExecLocal_Pang 交易执行成功,将本消息对应的数值加1
func (h *Echo) ExecLocal_Pang(ping *echotypes.Pang, tx *types.Transaction, receipt *types.ReceiptData, index int) (*types.LocalDBSet, error) {
// 这里简化处理,不做基本的零值及错误检查了
var pangLog echotypes.PangLog
......@@ -38,7 +38,7 @@ func (h *Echo) ExecLocal_Pang(ping *echotypes.Pang, tx *types.Transaction, recei
if err == nil {
types.Decode(oldValue, &pangLog)
}
pangLog.Count += 1
pangLog.Count++
kv := []*types.KeyValue{{Key: localKey, Value: types.Encode(&pangLog)}}
return &types.LocalDBSet{KV: kv}, nil
}
......@@ -7,6 +7,7 @@ import (
echotypes "github.com/33cn/plugin/plugin/dapp/echo/types/echo"
)
// Query_GetPing 查询 ping 次数
func (h *Echo) Query_GetPing(in *echotypes.Query) (types.Message, error) {
var pingLog echotypes.PingLog
localKey := []byte(fmt.Sprintf(KeyPrefixPingLocal, in.Msg))
......@@ -18,6 +19,8 @@ func (h *Echo) Query_GetPing(in *echotypes.Query) (types.Message, error) {
res := echotypes.QueryResult{Msg: in.Msg, Count: pingLog.Count}
return &res, nil
}
// Query_GetPang 查询 pang 次数
func (h *Echo) Query_GetPang(in *echotypes.Query) (types.Message, error) {
var pangLog echotypes.PangLog
localKey := []byte(fmt.Sprintf(KeyPrefixPangLocal, in.Msg))
......
......@@ -8,7 +8,7 @@ import (
echotypes "github.com/33cn/plugin/plugin/dapp/echo/types/echo"
)
// 对外提供服务的RPC接口总体定义
// Jrpc 对外提供服务的RPC接口总体定义
type Jrpc struct {
cli *channelClient
}
......@@ -18,13 +18,14 @@ type channelClient struct {
rpctypes.ChannelClient
}
// Init 注册 rpc 接口
func Init(name string, s rpctypes.RPCServer) {
cli := &channelClient{}
// 为了简单起见,这里只注册Jrpc,如果提供grpc的话也在这里注册
cli.Init(name, s, &Jrpc{cli: cli}, nil)
}
// 本合约的查询操作可以使用通用的Query接口,这里单独封装rpc的Query接口只是为了说明实现方式
// QueryPing 本合约的查询操作可以使用通用的Query接口,这里单独封装rpc的Query接口只是为了说明实现方式
// 接收客户端请求,并调用本地具体实现逻辑,然后返回结果
func (c *Jrpc) QueryPing(param *echotypes.Query, result *interface{}) error {
if param == nil {
......@@ -39,7 +40,7 @@ func (c *Jrpc) QueryPing(param *echotypes.Query, result *interface{}) error {
return nil
}
// 本地具体实现逻辑
// QueryPing 本地具体实现逻辑
func (c *channelClient) QueryPing(ctx context.Context, queryParam *echotypes.Query) (types.Message, error) {
return c.Query(echotypes.EchoX, "GetPing", queryParam)
}
......@@ -10,22 +10,23 @@ import (
"github.com/33cn/chain33/types"
)
func (e EchoType) CreateTx(action string, message json.RawMessage) (*types.Transaction, error) {
// CreateTx 创建交易
func (e *Type) CreateTx(action string, message json.RawMessage) (*types.Transaction, error) {
elog.Debug("echo.CreateTx", "action", action)
// 只接受ping/pang两种交易操作
if action == "ping" || action == "pang" {
var param EchoTx
var param Tx
err := json.Unmarshal(message, &param)
if err != nil {
elog.Error("CreateTx", "Error", err)
return nil, types.ErrInvalidParam
}
return createPingTx(action, &param)
} else {
return nil, types.ErrNotSupport
}
return nil, types.ErrNotSupport
}
func createPingTx(op string, parm *EchoTx) (*types.Transaction, error) {
func createPingTx(op string, parm *Tx) (*types.Transaction, error) {
var action *EchoAction
var err error
if strings.EqualFold(op, "ping") {
......@@ -44,7 +45,8 @@ func createPingTx(op string, parm *EchoTx) (*types.Transaction, error) {
}
return tx, nil
}
func getPingAction(parm *EchoTx) (*EchoAction, error) {
func getPingAction(parm *Tx) (*EchoAction, error) {
pingAction := &Ping{Msg: parm.Message}
action := &EchoAction{
Value: &EchoAction_Ping{Ping: pingAction},
......@@ -52,7 +54,8 @@ func getPingAction(parm *EchoTx) (*EchoAction, error) {
}
return action, nil
}
func getPangAction(parm *EchoTx) (*EchoAction, error) {
func getPangAction(parm *Tx) (*EchoAction, error) {
pangAction := &Pang{Msg: parm.Message}
action := &EchoAction{
Value: &EchoAction_Pang{Pang: pangAction},
......
package echo
type EchoTx struct {
// Tx echo 交易结构
type Tx struct {
Message string `json:"msg"`
}
......@@ -20,7 +20,7 @@ const (
)
var (
// 本执行器名称
// EchoX 本执行器名称
EchoX = "echo"
// 定义本执行器支持的Action对应关系
actionName = map[string]int32{
......@@ -42,34 +42,34 @@ func init() {
types.RegistorExecutor(EchoX, NewType())
}
// 定义本执行器类型
type EchoType struct {
// Type 定义本执行器类型
type Type struct {
types.ExecTypeBase
}
// 初始化本执行器类型
func NewType() *EchoType {
c := &EchoType{}
// NewType 初始化本执行器类型
func NewType() *Type {
c := &Type{}
c.SetChild(c)
return c
}
// 返回本执行器的负载类型
func (b *EchoType) GetPayload() types.Message {
// GetPayload 返回本执行器的负载类型
func (b *Type) GetPayload() types.Message {
return &EchoAction{}
}
// 返回本执行器名称
func (b *EchoType) GetName() string {
// GetName 返回本执行器名称
func (b *Type) GetName() string {
return EchoX
}
// 返回本执行器中的action字典,支持双向查找
func (b *EchoType) GetTypeMap() map[string]int32 {
// GetTypeMap 返回本执行器中的action字典,支持双向查找
func (b *Type) GetTypeMap() map[string]int32 {
return actionName
}
// 返回本执行器的日志类型信息,用于rpc解析日志数据
func (b *EchoType) GetLogMap() map[int64]*types.LogInfo {
// GetLogMap 返回本执行器的日志类型信息,用于rpc解析日志数据
func (b *Type) GetLogMap() map[int64]*types.LogInfo {
return logInfo
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment