Skip to content

Commit

Permalink
upgrade module : design doc and the framework codes
Browse files Browse the repository at this point in the history
  • Loading branch information
chengsilei committed Jul 24, 2018
1 parent 3375e03 commit 210a9af
Show file tree
Hide file tree
Showing 7 changed files with 174 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
vendor
.idea
.idea
build
33 changes: 33 additions & 0 deletions modules/upgrade/error.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package upgrade

import (
sdk "github.com/cosmos/cosmos-sdk/types"
)

const (
DefaultCodespace sdk.CodespaceType = 1

CodeInvalidMsgType sdk.CodeType = 200
CodeUnknownRequest sdk.CodeType = sdk.CodeUnknownRequest
)

func codeToDefaultMsg(code sdk.CodeType) string {
switch code {
case CodeInvalidMsgType:
return "Invalid msg type"
default:
return sdk.CodeToDefaultMsg(code)
}
}

func NewError(codespace sdk.CodespaceType, code sdk.CodeType, msg string) sdk.Error {
msg = msgOrDefaultMsg(msg, code)
return sdk.NewError(codespace, code, msg)
}

func msgOrDefaultMsg(msg string, code sdk.CodeType) string {
if msg != "" {
return msg
}
return codeToDefaultMsg(code)
}
31 changes: 31 additions & 0 deletions modules/upgrade/handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package upgrade

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"reflect"
"fmt"
)

func NewHandler(k Keeper) sdk.Handler {
return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
switch msg := msg.(type) {
case MsgSwitch:
return handlerSwitch(ctx, msg, k)
default:
errMsg := "Unrecognized Upgrade Msg type: " + reflect.TypeOf(msg).Name()
return sdk.ErrUnknownRequest(errMsg).Result()
}
}
}

func handlerSwitch(ctx sdk.Context, msg sdk.Msg, k Keeper) sdk.Result {
msgSwitch, ok := msg.(MsgSwitch)
if !ok {
return NewError(DefaultCodespace, CodeInvalidMsgType, "Handler should only receive MsgSwitch").Result()
}

return sdk.Result{
Code: 0,
Log: fmt.Sprintf("Switch %s by %s", msgSwitch.Title, msgSwitch.Voter.String()),
}
}
36 changes: 36 additions & 0 deletions modules/upgrade/keeper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package upgrade

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/wire"
"github.com/cosmos/cosmos-sdk/x/bank"
)

type ModuleLifeTime struct {
Start int64
End int64
Handler sdk.Handler
store sdk.KVStoreKey
}

type Version struct {
Id int // should be equal with corresponding upgradeProposalID
Start int64
ModuleList []ModuleLifeTime
}

type Keeper struct {
storeKey sdk.StoreKey
cdc *wire.Codec
coinKeeper bank.Keeper
}

func NewKeeper(cdc *wire.Codec, key sdk.StoreKey, ck bank.Keeper) Keeper {
keeper := Keeper {
storeKey: key,
cdc: cdc,
coinKeeper: ck,
}
return keeper
}

24 changes: 24 additions & 0 deletions modules/upgrade/keeper_keys.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package upgrade

import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
)

var (
CurrentVersionIDKey = []byte("c/")
VersionKey = "v/%010d/" // v/<proposalId>
SwitchKey = "s/%010d/%d/" // s/<proposalId>/<switchVoterAddress>
)

func GetCurrentVersionIDKey() []byte {
return CurrentVersionIDKey
}

func GetVersionKey(proposalID int64) []byte {
return []byte(fmt.Sprintf(VersionKey, proposalID))
}

func GetSwitchKey(proposalID int64, switchVoterAddr sdk.AccAddress) []byte {
return []byte(fmt.Sprintf(SwitchKey, proposalID, switchVoterAddr))
}
32 changes: 32 additions & 0 deletions modules/upgrade/msgs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package upgrade

import (
sdk "github.com/cosmos/cosmos-sdk/types"
)

type MsgSwitch struct {
Title string
ProposalID int
Voter sdk.AccAddress
}


func (msg MsgSwitch) Type() string {
return "record"
}

func (msg MsgSwitch) GetSignBytes() []byte {
b, err := msgCdc.MarshalJSON(msg)
if err != nil {
panic(err)
}
return b
}

func (msg MsgSwitch) ValidateBasic() sdk.Error {
return nil
}

func (msg MsgSwitch) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{msg.Voter}
}
16 changes: 16 additions & 0 deletions modules/upgrade/wire.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package upgrade

import (
"github.com/cosmos/cosmos-sdk/wire"
)

// Register concrete types on wire codec
func RegisterWire(cdc *wire.Codec) {
cdc.RegisterConcrete(MsgSwitch{}, "iris-hub/MsgSwitch", nil)
}

var msgCdc = wire.NewCodec()

func init() {
RegisterWire(msgCdc)
}

0 comments on commit 210a9af

Please sign in to comment.