Adds AppModuleBasic and Genesis Functions (#62)
* Adds AppModuleBasic implementation and genesis functions * Fixes broken links * Adds .idea/ * Adds starter for missing genesis funcs * Completes AppModuleBasic interface * Removes comment
This commit is contained in:
parent
ba203d3f26
commit
1d490ba4d9
3
.gitignore
vendored
3
.gitignore
vendored
@ -14,3 +14,6 @@
|
||||
.glide/
|
||||
vendor/
|
||||
build/
|
||||
|
||||
# Goland
|
||||
.idea/
|
@ -1,6 +1,7 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"github.com/cosmos/ethermint/x/evm"
|
||||
"os"
|
||||
|
||||
bam "github.com/cosmos/cosmos-sdk/baseapp"
|
||||
@ -164,7 +165,7 @@ func (app *EthermintApp) initChainer(
|
||||
_ sdk.Context, req abci.RequestInitChain,
|
||||
) abci.ResponseInitChain {
|
||||
|
||||
var genesisState GenesisState
|
||||
var genesisState evm.GenesisState
|
||||
stateJSON := req.AppStateBytes
|
||||
|
||||
err := app.cdc.UnmarshalJSON(stateJSON, &genesisState)
|
||||
|
@ -1,22 +0,0 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/ethermint/types"
|
||||
)
|
||||
|
||||
type (
|
||||
// GenesisState defines the application's genesis state. It contains all the
|
||||
// information required and accounts to initialize the blockchain.
|
||||
GenesisState struct {
|
||||
Accounts []GenesisAccount `json:"accounts"`
|
||||
}
|
||||
|
||||
// GenesisAccount defines an account to be initialized in the genesis state.
|
||||
GenesisAccount struct {
|
||||
Address sdk.AccAddress `json:"address"`
|
||||
Coins sdk.Coins `json:"coins"`
|
||||
Code []byte `json:"code,omitempty"`
|
||||
Storage types.Storage `json:"storage,omitempty"`
|
||||
}
|
||||
)
|
53
x/evm/genesis.go
Normal file
53
x/evm/genesis.go
Normal file
@ -0,0 +1,53 @@
|
||||
package evm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/ethermint/types"
|
||||
)
|
||||
|
||||
type (
|
||||
// GenesisState defines the application's genesis state. It contains all the
|
||||
// information required and accounts to initialize the blockchain.
|
||||
GenesisState struct {
|
||||
Accounts []GenesisAccount `json:"accounts"`
|
||||
}
|
||||
|
||||
// GenesisAccount defines an account to be initialized in the genesis state.
|
||||
GenesisAccount struct {
|
||||
Address sdk.AccAddress `json:"address"`
|
||||
Coins sdk.Coins `json:"coins"`
|
||||
Code []byte `json:"code,omitempty"`
|
||||
Storage types.Storage `json:"storage,omitempty"`
|
||||
}
|
||||
)
|
||||
|
||||
func ValidateGenesis(data GenesisState) error {
|
||||
for _, acct := range data.Accounts {
|
||||
if acct.Address == nil {
|
||||
return fmt.Errorf("Invalid GenesisAccount Error: Missing Address")
|
||||
}
|
||||
if acct.Coins == nil {
|
||||
return fmt.Errorf("Invalid GenesisAccount Error: Missing Coins")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func DefaultGenesisState() GenesisState {
|
||||
return GenesisState{
|
||||
Accounts: []GenesisAccount{},
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Implement these once keeper is established
|
||||
//func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) []abci.ValidatorUpdate {
|
||||
// for _, record := range data.Accounts {
|
||||
// // TODO: Add to keeper
|
||||
// }
|
||||
// return []abci.ValidatorUpdate{}
|
||||
//}
|
||||
//
|
||||
//func ExportGenesis(ctx sdk.Context, k Keeper) GenesisState {
|
||||
// return GenesisState{Accounts: nil}
|
||||
//}
|
51
x/evm/module.go
Normal file
51
x/evm/module.go
Normal file
@ -0,0 +1,51 @@
|
||||
package evm
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/cosmos/cosmos-sdk/client/context"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/ethermint/x/evm/types"
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
// app module Basics object
|
||||
type AppModuleBasic struct{}
|
||||
|
||||
func (AppModuleBasic) Name() string {
|
||||
return types.ModuleName
|
||||
}
|
||||
|
||||
func (AppModuleBasic) RegisterCodec(cdc *codec.Codec) {
|
||||
types.RegisterCodec(cdc)
|
||||
}
|
||||
|
||||
func (AppModuleBasic) DefaultGenesis() json.RawMessage {
|
||||
return types.ModuleCdc.MustMarshalJSON(DefaultGenesisState())
|
||||
}
|
||||
|
||||
// Validation check of the Genesis
|
||||
func (AppModuleBasic) ValidateGenesis(bz json.RawMessage) error {
|
||||
var data GenesisState
|
||||
err := types.ModuleCdc.UnmarshalJSON(bz, &data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Once json successfully marshalled, passes along to genesis.go
|
||||
return ValidateGenesis(data)
|
||||
}
|
||||
|
||||
// Register rest routes
|
||||
func (AppModuleBasic) RegisterRESTRoutes(ctx context.CLIContext, rtr *mux.Router) {
|
||||
//rpc.RegisterRoutes(ctx, rtr, StoreKey)
|
||||
}
|
||||
|
||||
// Get the root query command of this module
|
||||
func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command {
|
||||
return nil // cli.GetQueryCmd(StoreKey, cdc)
|
||||
}
|
||||
|
||||
// Get the root tx command of this module
|
||||
func (AppModuleBasic) GetTxCmd(cdc *codec.Codec) *cobra.Command {
|
||||
return nil // cli.GetTxCmd(StoreKey, cdc)
|
||||
}
|
@ -2,7 +2,7 @@ package types
|
||||
|
||||
import "github.com/cosmos/cosmos-sdk/codec"
|
||||
|
||||
var msgCodec = codec.New()
|
||||
var ModuleCdc = codec.New()
|
||||
|
||||
func init() {
|
||||
cdc := codec.New()
|
||||
@ -10,7 +10,7 @@ func init() {
|
||||
RegisterCodec(cdc)
|
||||
codec.RegisterCrypto(cdc)
|
||||
|
||||
msgCodec = cdc.Seal()
|
||||
ModuleCdc = cdc.Seal()
|
||||
}
|
||||
|
||||
// RegisterCodec registers concrete types and interfaces on the given codec.
|
||||
|
10
x/evm/types/key.go
Normal file
10
x/evm/types/key.go
Normal file
@ -0,0 +1,10 @@
|
||||
package types
|
||||
|
||||
const (
|
||||
// module name
|
||||
ModuleName = "ethermint"
|
||||
|
||||
// TODO: Use this
|
||||
// StoreKey to be used when creating the KVStore
|
||||
StoreKey = ModuleName
|
||||
)
|
@ -124,12 +124,12 @@ func TestMsgEthereumTxAmino(t *testing.T) {
|
||||
addr := GenerateEthAddress()
|
||||
msg := NewEthereumTxMsg(0, addr, nil, 100000, nil, []byte("test"))
|
||||
|
||||
raw, err := msgCodec.MarshalBinaryBare(msg)
|
||||
raw, err := ModuleCdc.MarshalBinaryBare(msg)
|
||||
require.NoError(t, err)
|
||||
|
||||
var msg2 EthereumTxMsg
|
||||
|
||||
err = msgCodec.UnmarshalBinaryBare(raw, &msg2)
|
||||
err = ModuleCdc.UnmarshalBinaryBare(raw, &msg2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, msg.Data, msg2.Data)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user