2017-07-06 07:00:54 -07:00
|
|
|
package base
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// import (
|
|
|
|
// "strings"
|
2017-06-30 04:55:25 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// wire "github.com/tendermint/go-wire"
|
|
|
|
// "github.com/tendermint/go-wire/data"
|
2017-07-06 05:23:38 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// "github.com/tendermint/basecoin"
|
|
|
|
// "github.com/tendermint/basecoin/stack"
|
|
|
|
// "github.com/tendermint/basecoin/state"
|
|
|
|
// )
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// //nolint
|
|
|
|
// const (
|
|
|
|
// NameMultiplexer = "mplx"
|
|
|
|
// )
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// // Multiplexer grabs a MultiTx and sends them sequentially down the line
|
|
|
|
// type Multiplexer struct {
|
2017-07-30 14:26:25 -07:00
|
|
|
// stack.PassInitState
|
2017-07-30 08:45:08 -07:00
|
|
|
// }
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// // Name of the module - fulfills Middleware interface
|
|
|
|
// func (Multiplexer) Name() string {
|
|
|
|
// return NameMultiplexer
|
|
|
|
// }
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// var _ stack.Middleware = Multiplexer{}
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// // CheckTx splits the input tx and checks them all - fulfills Middlware interface
|
|
|
|
// func (Multiplexer) CheckTx(ctx basecoin.Context, store state.SimpleDB, tx basecoin.Tx, next basecoin.Checker) (res basecoin.CheckResult, err error) {
|
|
|
|
// if mtx, ok := tx.Unwrap().(*MultiTx); ok {
|
|
|
|
// return runAll(ctx, store, mtx.Txs, next.CheckTx)
|
|
|
|
// }
|
|
|
|
// return next.CheckTx(ctx, store, tx)
|
|
|
|
// }
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// // DeliverTx splits the input tx and checks them all - fulfills Middlware interface
|
|
|
|
// func (Multiplexer) DeliverTx(ctx basecoin.Context, store state.SimpleDB, tx basecoin.Tx, next basecoin.Deliver) (res basecoin.DeliverResult, err error) {
|
|
|
|
// if mtx, ok := tx.Unwrap().(*MultiTx); ok {
|
|
|
|
// return runAll(ctx, store, mtx.Txs, next.DeliverTx)
|
|
|
|
// }
|
|
|
|
// return next.DeliverTx(ctx, store, tx)
|
|
|
|
// }
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// func runAll(ctx basecoin.Context, store state.SimpleDB, txs []basecoin.Tx, next basecoin.CheckerFunc) (res basecoin.Result, err error) {
|
|
|
|
// // store all results, unless anything errors
|
|
|
|
// rs := make([]basecoin.Result, len(txs))
|
|
|
|
// for i, stx := range txs {
|
|
|
|
// rs[i], err = next(ctx, store, stx)
|
|
|
|
// if err != nil {
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// // now combine the results into one...
|
|
|
|
// return combine(rs), nil
|
|
|
|
// }
|
2017-06-29 12:21:57 -07:00
|
|
|
|
2017-07-30 08:45:08 -07:00
|
|
|
// // combines all data bytes as a go-wire array.
|
|
|
|
// // joins all log messages with \n
|
|
|
|
// func combine(all []basecoin.Result) basecoin.Result {
|
|
|
|
// datas := make([]data.Bytes, len(all))
|
|
|
|
// logs := make([]string, len(all))
|
|
|
|
// for i, r := range all {
|
|
|
|
// datas[i] = r.Data
|
|
|
|
// logs[i] = r.Log
|
|
|
|
// }
|
|
|
|
// return basecoin.Result{
|
|
|
|
// Data: wire.BinaryBytes(datas),
|
|
|
|
// Log: strings.Join(logs, "\n"),
|
|
|
|
// }
|
|
|
|
// }
|