working
This commit is contained in:
parent
849139ebeb
commit
17acf9e18d
|
@ -1,6 +1,8 @@
|
||||||
package baseapp
|
package baseapp
|
||||||
|
|
||||||
import sdk "github.com/cosmos/cosmos-sdk/types"
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
)
|
||||||
|
|
||||||
// NewContext returns a new Context suitable for AnteHandler (and indirectly Handler) processing.
|
// NewContext returns a new Context suitable for AnteHandler (and indirectly Handler) processing.
|
||||||
// NOTE: txBytes may be nil to support TestApp.RunCheckTx
|
// NOTE: txBytes may be nil to support TestApp.RunCheckTx
|
||||||
|
@ -12,6 +14,7 @@ func (app *BaseApp) NewContext(isCheckTx bool, txBytes []byte) sdk.Context {
|
||||||
} else {
|
} else {
|
||||||
store = app.msDeliver
|
store = app.msDeliver
|
||||||
}
|
}
|
||||||
|
|
||||||
if store == nil {
|
if store == nil {
|
||||||
panic("BaseApp.NewContext() requires BeginBlock(): missing store")
|
panic("BaseApp.NewContext() requires BeginBlock(): missing store")
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
package baseapp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
crypto "github.com/tendermint/go-crypto"
|
||||||
|
cmn "github.com/tendermint/tmlibs/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO this is dup code from tendermint-core to avoid dep issues
|
||||||
|
// should probably remove from both SDK / Tendermint and move to tmlibs
|
||||||
|
// ^^^^^^^^^^^^^ This is my preference to avoid DEP hell
|
||||||
|
// or sync up versioning and just reference tendermint
|
||||||
|
|
||||||
|
// GenesisDoc defines the initial conditions for a tendermint blockchain, in particular its validator set.
|
||||||
|
type GenesisDoc struct {
|
||||||
|
GenesisTime time.Time `json:"genesis_time"`
|
||||||
|
ChainID string `json:"chain_id"`
|
||||||
|
ConsensusParams *ConsensusParams `json:"consensus_params,omitempty"`
|
||||||
|
Validators []GenesisValidator `json:"validators"`
|
||||||
|
AppHash cmn.HexBytes `json:"app_hash"`
|
||||||
|
AppState json.RawMessage `json:"app_state,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
//nolint TODO remove
|
||||||
|
type ConsensusParams struct {
|
||||||
|
BlockSize `json:"block_size_params"`
|
||||||
|
TxSize `json:"tx_size_params"`
|
||||||
|
BlockGossip `json:"block_gossip_params"`
|
||||||
|
EvidenceParams `json:"evidence_params"`
|
||||||
|
}
|
||||||
|
type GenesisValidator struct {
|
||||||
|
PubKey crypto.PubKey `json:"pub_key"`
|
||||||
|
Power int64 `json:"power"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
type BlockSize struct {
|
||||||
|
MaxBytes int `json:"max_bytes"` // NOTE: must not be 0 nor greater than 100MB
|
||||||
|
MaxTxs int `json:"max_txs"`
|
||||||
|
MaxGas int64 `json:"max_gas"`
|
||||||
|
}
|
||||||
|
type TxSize struct {
|
||||||
|
MaxBytes int `json:"max_bytes"`
|
||||||
|
MaxGas int64 `json:"max_gas"`
|
||||||
|
}
|
||||||
|
type BlockGossip struct {
|
||||||
|
BlockPartSizeBytes int `json:"block_part_size_bytes"` // NOTE: must not be 0
|
||||||
|
}
|
||||||
|
type EvidenceParams struct {
|
||||||
|
MaxAge int64 `json:"max_age"` // only accept new evidence more recent than this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenesisDocFromFile reads JSON data from a file and unmarshalls it into a GenesisDoc.
|
||||||
|
func GenesisDocFromFile(genDocFile string) (*GenesisDoc, error) {
|
||||||
|
if genDocFile == "" {
|
||||||
|
var g GenesisDoc
|
||||||
|
return &g, nil
|
||||||
|
}
|
||||||
|
jsonBlob, err := ioutil.ReadFile(genDocFile)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
genDoc := GenesisDoc{}
|
||||||
|
err = json.Unmarshal(jsonBlob, &genDoc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &genDoc, nil
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ import (
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
"github.com/tendermint/abci/server"
|
"github.com/tendermint/abci/server"
|
||||||
|
abci "github.com/tendermint/abci/types"
|
||||||
"github.com/tendermint/go-wire"
|
"github.com/tendermint/go-wire"
|
||||||
cmn "github.com/tendermint/tmlibs/common"
|
cmn "github.com/tendermint/tmlibs/common"
|
||||||
)
|
)
|
||||||
|
@ -36,6 +37,7 @@ func NewBasecoinApp(genesisPath string) *BasecoinApp {
|
||||||
|
|
||||||
// Create and configure app.
|
// Create and configure app.
|
||||||
var app = &BasecoinApp{}
|
var app = &BasecoinApp{}
|
||||||
|
|
||||||
app.initCapKeys() // ./init_capkeys.go
|
app.initCapKeys() // ./init_capkeys.go
|
||||||
app.initBaseApp() // ./init_baseapp.go
|
app.initBaseApp() // ./init_baseapp.go
|
||||||
app.initStores() // ./init_stores.go
|
app.initStores() // ./init_stores.go
|
||||||
|
@ -48,13 +50,33 @@ func NewBasecoinApp(genesisPath string) *BasecoinApp {
|
||||||
|
|
||||||
// TODO: InitChain with validators from genesis transaction bytes
|
// TODO: InitChain with validators from genesis transaction bytes
|
||||||
|
|
||||||
// load application initial state
|
// set first begin block
|
||||||
err = app.BaseApp.InitStater(genesisiDoc.AppState)
|
header := abci.Header{
|
||||||
|
ChainID: "",
|
||||||
|
Height: 0,
|
||||||
|
Time: -1, // TODO
|
||||||
|
NumTxs: -1, // TODO
|
||||||
|
LastCommitHash: []byte{0x00},
|
||||||
|
DataHash: nil, // TODO
|
||||||
|
ValidatorsHash: nil, // TODO
|
||||||
|
AppHash: nil, // TODO
|
||||||
|
}
|
||||||
|
app.BaseApp.BeginBlock(abci.RequestBeginBlock{
|
||||||
|
Hash: nil, // TODO
|
||||||
|
Header: header,
|
||||||
|
AbsentValidators: nil, // TODO
|
||||||
|
ByzantineValidators: nil, // TODO
|
||||||
|
})
|
||||||
|
|
||||||
|
ctxCheckTx := app.BaseApp.NewContext(true, nil)
|
||||||
|
ctxDeliverTx := app.BaseApp.NewContext(false, nil)
|
||||||
|
err = app.BaseApp.InitStater(ctxCheckTx, ctxDeliverTx, genesisiDoc.AppState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("error loading application genesis state: %v", err))
|
panic(fmt.Errorf("error loading application genesis state: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
app.loadStores()
|
app.loadStores()
|
||||||
|
|
||||||
return app
|
return app
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,8 @@ func (app *BasecoinApp) initBaseAppTxDecoder() {
|
||||||
// define the custom logic for basecoin initialization
|
// define the custom logic for basecoin initialization
|
||||||
func (app *BasecoinApp) initBaseAppInitStater() {
|
func (app *BasecoinApp) initBaseAppInitStater() {
|
||||||
accountMapper := app.accountMapper
|
accountMapper := app.accountMapper
|
||||||
ctxCheckTx := app.BaseApp.NewContext(true, nil)
|
|
||||||
ctxDeliverTx := app.BaseApp.NewContext(false, nil)
|
|
||||||
|
|
||||||
app.BaseApp.SetInitStater(func(stateJSON []byte) sdk.Error {
|
app.BaseApp.SetInitStater(func(ctxCheckTx, ctxDeliverTx sdk.Context, stateJSON []byte) sdk.Error {
|
||||||
|
|
||||||
var accs []*types.AppAccount
|
var accs []*types.AppAccount
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package types
|
package types
|
||||||
|
|
||||||
// function variable used to initialize application state at genesis
|
// function variable used to initialize application state at genesis
|
||||||
type InitStater func(stateJSON []byte) Error
|
type InitStater func(ctxCheckTx, ctxDeliverTx Context, stateJSON []byte) Error
|
||||||
|
|
Loading…
Reference in New Issue