SimulateTx through Query
This commit is contained in:
parent
097646e6df
commit
a240554695
|
@ -3,6 +3,7 @@ package baseapp
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
|
@ -27,6 +28,7 @@ type BaseApp struct {
|
||||||
// initialized on creation
|
// initialized on creation
|
||||||
Logger log.Logger
|
Logger log.Logger
|
||||||
name string // application name from abci.Info
|
name string // application name from abci.Info
|
||||||
|
codec *wire.Codec // Amino codec
|
||||||
db dbm.DB // common DB backend
|
db dbm.DB // common DB backend
|
||||||
cms sdk.CommitMultiStore // Main (uncached) state
|
cms sdk.CommitMultiStore // Main (uncached) state
|
||||||
router Router // handle any kind of message
|
router Router // handle any kind of message
|
||||||
|
@ -62,6 +64,7 @@ func NewBaseApp(name string, cdc *wire.Codec, logger log.Logger, db dbm.DB, txGa
|
||||||
app := &BaseApp{
|
app := &BaseApp{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
name: name,
|
name: name,
|
||||||
|
codec: cdc,
|
||||||
db: db,
|
db: db,
|
||||||
cms: store.NewCommitMultiStore(db),
|
cms: store.NewCommitMultiStore(db),
|
||||||
router: NewRouter(),
|
router: NewRouter(),
|
||||||
|
@ -287,6 +290,28 @@ func (app *BaseApp) Query(req abci.RequestQuery) (res abci.ResponseQuery) {
|
||||||
msg := "application doesn't support queries"
|
msg := "application doesn't support queries"
|
||||||
return sdk.ErrUnknownRequest(msg).QueryResult()
|
return sdk.ErrUnknownRequest(msg).QueryResult()
|
||||||
}
|
}
|
||||||
|
// Special prefix backslash for special queries
|
||||||
|
path := req.Path
|
||||||
|
if strings.HasPrefix(path, "\\") {
|
||||||
|
query := path[1:]
|
||||||
|
var result sdk.Result
|
||||||
|
switch query {
|
||||||
|
case "simulate":
|
||||||
|
txBytes := req.Data
|
||||||
|
tx, err := app.txDecoder(txBytes)
|
||||||
|
if err != nil {
|
||||||
|
result = err.Result()
|
||||||
|
}
|
||||||
|
result = app.runTx(true, true, txBytes, tx)
|
||||||
|
default:
|
||||||
|
result = sdk.ErrUnknownRequest(fmt.Sprintf("Unknown query: %s", path)).Result()
|
||||||
|
}
|
||||||
|
value := app.codec.MustMarshalBinary(result)
|
||||||
|
return abci.ResponseQuery{
|
||||||
|
Code: uint32(sdk.ABCICodeOK),
|
||||||
|
Value: value,
|
||||||
|
}
|
||||||
|
}
|
||||||
return queryable.Query(req)
|
return queryable.Query(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue