-
Notifications
You must be signed in to change notification settings - Fork 127
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
upgrade module : design doc and the framework codes
- Loading branch information
chengsilei
committed
Jul 24, 2018
1 parent
3375e03
commit 210a9af
Showing
7 changed files
with
174 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
vendor | ||
.idea | ||
.idea | ||
build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()), | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |