cosmos-sdk/examples/kvstore/main.go

89 lines
1.8 KiB
Go
Raw Normal View History

2017-12-30 16:45:53 -08:00
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/spf13/viper"
2017-12-30 16:45:53 -08:00
"github.com/tendermint/abci/server"
"github.com/tendermint/tmlibs/cli"
2017-12-30 16:45:53 -08:00
cmn "github.com/tendermint/tmlibs/common"
2018-02-17 13:19:34 -08:00
dbm "github.com/tendermint/tmlibs/db"
"github.com/tendermint/tmlibs/log"
2017-12-30 16:45:53 -08:00
bam "github.com/cosmos/cosmos-sdk/baseapp"
2018-01-15 17:01:51 -08:00
sdk "github.com/cosmos/cosmos-sdk/types"
2017-12-30 16:45:53 -08:00
)
func main() {
2018-02-17 13:19:34 -08:00
logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)).With("module", "main")
rootDir := viper.GetString(cli.HomeFlag)
db, err := dbm.NewGoLevelDB("basecoind", filepath.Join(rootDir, "data"))
2018-02-17 13:19:34 -08:00
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Capabilities key to access the main KVStore.
var capKeyMainStore = sdk.NewKVStoreKey("main")
2018-01-15 17:01:51 -08:00
// Create BaseApp.
var baseApp = bam.NewBaseApp("kvstore", nil, logger, db)
2017-12-30 16:45:53 -08:00
// Set mounts for BaseApp's MultiStore.
baseApp.MountStoresIAVL(capKeyMainStore)
2018-01-15 17:01:51 -08:00
// Set Tx decoder
baseApp.SetTxDecoder(decodeTx)
2018-01-15 17:01:51 -08:00
// Set a handler Route.
2018-04-18 21:49:24 -07:00
baseApp.Router().AddRoute("kvstore", Handler(capKeyMainStore))
2018-01-15 17:01:51 -08:00
// Load latest version.
if err := baseApp.LoadLatestVersion(capKeyMainStore); err != nil {
2017-12-30 16:45:53 -08:00
fmt.Println(err)
os.Exit(1)
}
// Start the ABCI server
srv, err := server.NewServer("0.0.0.0:46658", "socket", baseApp)
2017-12-30 16:45:53 -08:00
if err != nil {
fmt.Println(err)
os.Exit(1)
}
srv.Start()
// Wait forever
cmn.TrapSignal(func() {
// Cleanup
srv.Stop()
})
return
}
2018-04-18 21:49:24 -07:00
// KVStore Handler
func Handler(storeKey sdk.StoreKey) sdk.Handler {
2018-01-26 06:22:56 -08:00
return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
2018-02-19 14:17:06 -08:00
dTx, ok := msg.(kvstoreTx)
if !ok {
2018-04-18 21:49:24 -07:00
panic("Handler should only receive kvstoreTx")
}
2018-01-15 17:01:51 -08:00
// tx is already unmarshalled
key := dTx.key
value := dTx.value
2017-12-30 16:45:53 -08:00
2018-01-15 17:01:51 -08:00
store := ctx.KVStore(storeKey)
store.Set(key, value)
2017-12-30 16:45:53 -08:00
2018-01-15 17:01:51 -08:00
return sdk.Result{
Code: 0,
Log: fmt.Sprintf("set %s=%s", key, value),
}
2017-12-30 16:45:53 -08:00
}
}