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/
|
.glide/
|
||||||
vendor/
|
vendor/
|
||||||
build/
|
build/
|
||||||
|
|
||||||
|
# Goland
|
||||||
|
.idea/
|
@ -1,6 +1,7 @@
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/cosmos/ethermint/x/evm"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
bam "github.com/cosmos/cosmos-sdk/baseapp"
|
bam "github.com/cosmos/cosmos-sdk/baseapp"
|
||||||
@ -164,7 +165,7 @@ func (app *EthermintApp) initChainer(
|
|||||||
_ sdk.Context, req abci.RequestInitChain,
|
_ sdk.Context, req abci.RequestInitChain,
|
||||||
) abci.ResponseInitChain {
|
) abci.ResponseInitChain {
|
||||||
|
|
||||||
var genesisState GenesisState
|
var genesisState evm.GenesisState
|
||||||
stateJSON := req.AppStateBytes
|
stateJSON := req.AppStateBytes
|
||||||
|
|
||||||
err := app.cdc.UnmarshalJSON(stateJSON, &genesisState)
|
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"
|
import "github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
|
||||||
var msgCodec = codec.New()
|
var ModuleCdc = codec.New()
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cdc := codec.New()
|
cdc := codec.New()
|
||||||
@ -10,7 +10,7 @@ func init() {
|
|||||||
RegisterCodec(cdc)
|
RegisterCodec(cdc)
|
||||||
codec.RegisterCrypto(cdc)
|
codec.RegisterCrypto(cdc)
|
||||||
|
|
||||||
msgCodec = cdc.Seal()
|
ModuleCdc = cdc.Seal()
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterCodec registers concrete types and interfaces on the given codec.
|
// 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()
|
addr := GenerateEthAddress()
|
||||||
msg := NewEthereumTxMsg(0, addr, nil, 100000, nil, []byte("test"))
|
msg := NewEthereumTxMsg(0, addr, nil, 100000, nil, []byte("test"))
|
||||||
|
|
||||||
raw, err := msgCodec.MarshalBinaryBare(msg)
|
raw, err := ModuleCdc.MarshalBinaryBare(msg)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var msg2 EthereumTxMsg
|
var msg2 EthereumTxMsg
|
||||||
|
|
||||||
err = msgCodec.UnmarshalBinaryBare(raw, &msg2)
|
err = ModuleCdc.UnmarshalBinaryBare(raw, &msg2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, msg.Data, msg2.Data)
|
require.Equal(t, msg.Data, msg2.Data)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user