Skip to content

Commit

Permalink
Merge pull request #9030 from Agoric/mfig-ibc-revamp
Browse files Browse the repository at this point in the history
feat(vibc): preparation for Agoric ibc-hooks
  • Loading branch information
mergify[bot] authored Mar 5, 2024
2 parents fd864a4 + c2b36dc commit cdf36d1
Show file tree
Hide file tree
Showing 15 changed files with 598 additions and 286 deletions.
11 changes: 4 additions & 7 deletions golang/cosmos/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -502,16 +502,13 @@ func NewAgoricApp(
)

app.VibcKeeper = vibc.NewKeeper(
appCodec, keys[vibc.StoreKey],
appCodec,
app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
app.BankKeeper,
scopedVibcKeeper,
app.SwingSetKeeper.PushAction,
)
).WithScope(keys[vibc.StoreKey], scopedVibcKeeper, app.SwingSetKeeper.PushAction)

vibcModule := vibc.NewAppModule(app.VibcKeeper)
vibcModule := vibc.NewAppModule(app.VibcKeeper, app.BankKeeper)
vibcIBCModule := vibc.NewIBCModule(app.VibcKeeper)
app.vibcPort = vm.RegisterPortHandler("vibc", vibcIBCModule)
app.vibcPort = vm.RegisterPortHandler("vibc", vibc.NewReceiver(app.VibcKeeper))

app.VbankKeeper = vbank.NewKeeper(
appCodec, keys[vbank.StoreKey], app.GetSubspace(vbank.ModuleName),
Expand Down
19 changes: 13 additions & 6 deletions golang/cosmos/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/Agoric/agoric-sdk/golang/cosmos
go 1.20

require (
cosmossdk.io/errors v1.0.0-beta.7
cosmossdk.io/math v1.0.0-rc.0
github.com/armon/go-metrics v0.4.1
github.com/cosmos/cosmos-sdk v0.46.16
Expand Down Expand Up @@ -31,7 +32,6 @@ require (
cloud.google.com/go/compute/metadata v0.2.3 // indirect
cloud.google.com/go/iam v1.1.1 // indirect
cloud.google.com/go/storage v1.30.1 // indirect
cosmossdk.io/errors v1.0.0-beta.7 // indirect
filippo.io/edwards25519 v1.0.0-rc.1 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.1 // indirect
Expand Down Expand Up @@ -169,9 +169,6 @@ replace (

github.com/confio/ics23/go => github.com/agoric-labs/cosmos-sdk/ics23/go v0.8.0-alpha.agoric.1

// We need a fork of cosmos-sdk until all of the differences are merged.
github.com/cosmos/cosmos-sdk => github.com/agoric-labs/cosmos-sdk v0.46.16-alpha.agoric.2

// https://pkg.go.dev/vuln/GO-2023-2409
github.com/dvsekhvalnov/jose2go => github.com/dvsekhvalnov/jose2go v1.5.1-0.20231206184617-48ba0b76bc88

Expand All @@ -185,13 +182,23 @@ replace (

// replace broken goleveldb.
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
)

// Agoric-specific replacements:
replace (
// We need a fork of cosmos-sdk until all of the differences are merged.
github.com/cosmos/cosmos-sdk => github.com/agoric-labs/cosmos-sdk v0.46.16-alpha.agoric.2

// Async version negotiation
github.com/cosmos/ibc-go/v6 => github.com/agoric-labs/ibc-go/v6 v6.2.1-alpha.agoric.3

// use cometbft
// Use our fork at least until post-v0.34.14 is released with
// https://github.com/tendermint/tendermint/issue/6899 resolved.
github.com/tendermint/tendermint => github.com/agoric-labs/cometbft v0.34.30-alpha.agoric.1

// For testing against a local cosmos-sdk or tendermint
// For testing against a local cosmos-sdk, ibc-go, or cometbft
// github.com/cosmos/cosmos-sdk => ../../../forks/cosmos-sdk
// github.com/tendermint/tendermint => ../../../forks/tendermint
// github.com/cosmos/ibc-go/v6 => ../../../forks/ibc-go/v6
// github.com/tendermint/tendermint => ../../../forks/cometbft
)
4 changes: 2 additions & 2 deletions golang/cosmos/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,8 @@ github.com/agoric-labs/cosmos-sdk v0.46.16-alpha.agoric.2 h1:iHHqpYC0JzMbH4UYnQr
github.com/agoric-labs/cosmos-sdk v0.46.16-alpha.agoric.2/go.mod h1:zUe5lsg/X7SeSO1nGkzOh9EGKO295szfrxIxYmeLYic=
github.com/agoric-labs/cosmos-sdk/ics23/go v0.8.0-alpha.agoric.1 h1:2jvHI/2d+psWAZy6FQ0vXJCHUtfU3ZbbW+pQFL04arQ=
github.com/agoric-labs/cosmos-sdk/ics23/go v0.8.0-alpha.agoric.1/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg=
github.com/agoric-labs/ibc-go/v6 v6.2.1-alpha.agoric.3 h1:YqvVwK+Lg/ZsuwyVm9UbPs8K55fg00R3Y9KnmaTBdgc=
github.com/agoric-labs/ibc-go/v6 v6.2.1-alpha.agoric.3/go.mod h1:V9NOCRS9RPkSJNJQIPRAjZn/lo2mCAAKOSv3/83ISDY=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
Expand Down Expand Up @@ -380,8 +382,6 @@ github.com/cosmos/iavl v0.19.6 h1:XY78yEeNPrEYyNCKlqr9chrwoeSDJ0bV2VjocTk//OU=
github.com/cosmos/iavl v0.19.6/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw=
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.1 h1:2geCtV4PoNPeRnVc0HMAcRcv+7W3Mvk2nmASkGkOdzE=
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.1/go.mod h1:ovYRGX7P7Vq0D54JIVlIm/47STEKgWJfw9frvL0AWGQ=
github.com/cosmos/ibc-go/v6 v6.2.1 h1:NiaDXTRhKwf3n9kELD4VRIe5zby1yk1jBvaz9tXTQ6k=
github.com/cosmos/ibc-go/v6 v6.2.1/go.mod h1:XLsARy4Y7+GtAqzMcxNdlQf6lx+ti1e8KcMGv5NIK7A=
github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo=
github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA=
github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw=
Expand Down
20 changes: 10 additions & 10 deletions golang/cosmos/x/swingset/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,27 @@ import (
)

type beginBlockAction struct {
vm.ActionHeader `actionType:"BEGIN_BLOCK"`
ChainID string `json:"chainID"`
Params types.Params `json:"params"`
*vm.ActionHeader `actionType:"BEGIN_BLOCK"`
ChainID string `json:"chainID"`
Params types.Params `json:"params"`
}

type endBlockAction struct {
vm.ActionHeader `actionType:"END_BLOCK"`
*vm.ActionHeader `actionType:"END_BLOCK"`
}

type commitBlockAction struct {
vm.ActionHeader `actionType:"COMMIT_BLOCK"`
*vm.ActionHeader `actionType:"COMMIT_BLOCK"`
}

type afterCommitBlockAction struct {
vm.ActionHeader `actionType:"AFTER_COMMIT_BLOCK"`
*vm.ActionHeader `actionType:"AFTER_COMMIT_BLOCK"`
}

func BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock, keeper Keeper) error {
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)

action := &beginBlockAction{
action := beginBlockAction{
ChainID: ctx.ChainID(),
Params: keeper.GetParams(ctx),
}
Expand All @@ -56,7 +56,7 @@ var endBlockTime int64
func EndBlock(ctx sdk.Context, req abci.RequestEndBlock, keeper Keeper) ([]abci.ValidatorUpdate, error) {
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker)

action := &endBlockAction{}
action := endBlockAction{}
_, err := keeper.BlockingSend(ctx, action)

// fmt.Fprintf(os.Stderr, "END_BLOCK Returned from SwingSet: %s, %v\n", out, err)
Expand All @@ -83,7 +83,7 @@ func getEndBlockContext() sdk.Context {
func CommitBlock(keeper Keeper) error {
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), "commit_blocker")

action := &commitBlockAction{}
action := commitBlockAction{}
_, err := keeper.BlockingSend(getEndBlockContext(), action)

// fmt.Fprintf(os.Stderr, "COMMIT_BLOCK Returned from SwingSet: %s, %v\n", out, err)
Expand All @@ -98,7 +98,7 @@ func CommitBlock(keeper Keeper) error {
func AfterCommitBlock(keeper Keeper) error {
// defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), "commit_blocker")

action := &afterCommitBlockAction{}
action := afterCommitBlockAction{}
_, err := keeper.BlockingSend(getEndBlockContext(), action)

// fmt.Fprintf(os.Stderr, "AFTER_COMMIT_BLOCK Returned from SwingSet: %s, %v\n", out, err)
Expand Down
36 changes: 18 additions & 18 deletions golang/cosmos/x/swingset/keeper/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer {
var _ types.MsgServer = msgServer{}

type deliverInboundAction struct {
vm.ActionHeader `actionType:"DELIVER_INBOUND"`
Peer string `json:"peer"`
Messages [][]interface{} `json:"messages"`
Ack uint64 `json:"ack"`
*vm.ActionHeader `actionType:"DELIVER_INBOUND"`
Peer string `json:"peer"`
Messages [][]interface{} `json:"messages"`
Ack uint64 `json:"ack"`
}

func (keeper msgServer) routeAction(ctx sdk.Context, msg vm.ControllerAdmissionMsg, action vm.Action) error {
Expand All @@ -48,7 +48,7 @@ func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeli
for i, message := range msg.Messages {
messages[i] = []interface{}{msg.Nums[i], message}
}
action := &deliverInboundAction{
action := deliverInboundAction{
Peer: msg.Submitter.String(),
Messages: messages,
Ack: msg.Ack,
Expand All @@ -63,9 +63,9 @@ func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeli
}

type walletAction struct {
vm.ActionHeader `actionType:"WALLET_ACTION"`
Owner string `json:"owner"`
Action string `json:"action"`
*vm.ActionHeader `actionType:"WALLET_ACTION"`
Owner string `json:"owner"`
Action string `json:"action"`
}

func (keeper msgServer) WalletAction(goCtx context.Context, msg *types.MsgWalletAction) (*types.MsgWalletActionResponse, error) {
Expand All @@ -76,7 +76,7 @@ func (keeper msgServer) WalletAction(goCtx context.Context, msg *types.MsgWallet
return nil, err
}

action := &walletAction{
action := walletAction{
Owner: msg.Owner.String(),
Action: msg.Action,
}
Expand All @@ -91,9 +91,9 @@ func (keeper msgServer) WalletAction(goCtx context.Context, msg *types.MsgWallet
}

type walletSpendAction struct {
vm.ActionHeader `actionType:"WALLET_SPEND_ACTION"`
Owner string `json:"owner"`
SpendAction string `json:"spendAction"`
*vm.ActionHeader `actionType:"WALLET_SPEND_ACTION"`
Owner string `json:"owner"`
SpendAction string `json:"spendAction"`
}

func (keeper msgServer) WalletSpendAction(goCtx context.Context, msg *types.MsgWalletSpendAction) (*types.MsgWalletSpendActionResponse, error) {
Expand All @@ -104,7 +104,7 @@ func (keeper msgServer) WalletSpendAction(goCtx context.Context, msg *types.MsgW
return nil, err
}

action := &walletSpendAction{
action := walletSpendAction{
Owner: msg.Owner.String(),
SpendAction: msg.SpendAction,
}
Expand All @@ -117,7 +117,7 @@ func (keeper msgServer) WalletSpendAction(goCtx context.Context, msg *types.MsgW
}

type provisionAction struct {
vm.ActionHeader `actionType:"PLEASE_PROVISION"`
*vm.ActionHeader `actionType:"PLEASE_PROVISION"`
*types.MsgProvision
AutoProvision bool `json:"autoProvision"`
}
Expand All @@ -141,7 +141,7 @@ func (keeper msgServer) provisionIfNeeded(ctx sdk.Context, owner sdk.AccAddress)
PowerFlags: []string{types.PowerFlagSmartWallet},
}

action := &provisionAction{
action := provisionAction{
MsgProvision: msg,
AutoProvision: true,
}
Expand All @@ -163,7 +163,7 @@ func (keeper msgServer) Provision(goCtx context.Context, msg *types.MsgProvision
return nil, err
}

action := &provisionAction{
action := provisionAction{
MsgProvision: msg,
}

Expand All @@ -184,7 +184,7 @@ func (keeper msgServer) Provision(goCtx context.Context, msg *types.MsgProvision
}

type installBundleAction struct {
vm.ActionHeader `actionType:"INSTALL_BUNDLE"`
*vm.ActionHeader `actionType:"INSTALL_BUNDLE"`
*types.MsgInstallBundle
}

Expand All @@ -195,7 +195,7 @@ func (keeper msgServer) InstallBundle(goCtx context.Context, msg *types.MsgInsta
if err != nil {
return nil, err
}
action := &installBundleAction{
action := installBundleAction{
MsgInstallBundle: msg,
}

Expand Down
6 changes: 3 additions & 3 deletions golang/cosmos/x/swingset/keeper/proposal.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ import (
)

type coreEvalAction struct {
vm.ActionHeader `actionType:"CORE_EVAL"`
Evals []types.CoreEval `json:"evals"`
*vm.ActionHeader `actionType:"CORE_EVAL"`
Evals []types.CoreEval `json:"evals"`
}

// CoreEvalProposal tells SwingSet to evaluate the given JS code.
func (k Keeper) CoreEvalProposal(ctx sdk.Context, p *types.CoreEvalProposal) error {
action := &coreEvalAction{
action := coreEvalAction{
Evals: p.Evals,
}

Expand Down
3 changes: 3 additions & 0 deletions golang/cosmos/x/vibc/alias.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ const (
var (
NewKeeper = keeper.NewKeeper
NewMsgSendPacket = types.NewMsgSendPacket
NewReceiver = types.NewReceiver
NewIBCModule = types.NewIBCModule
ModuleCdc = types.ModuleCdc
RegisterCodec = types.RegisterCodec
)

type (
Keeper = keeper.Keeper
ScopedKeeper = types.ScopedKeeper
MsgSendPacket = types.MsgSendPacket
)
20 changes: 13 additions & 7 deletions golang/cosmos/x/vibc/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@ import (

sdkioerrors "cosmossdk.io/errors"
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
"github.com/Agoric/agoric-sdk/golang/cosmos/x/vibc/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
)

// NewHandler returns a handler for "vibc" type messages.
func NewHandler(keeper Keeper) sdk.Handler {
func NewHandler(keeper Keeper, bankKeeper types.BankKeeper) sdk.Handler {
return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) {
switch msg := msg.(type) {
case *MsgSendPacket:
return handleMsgSendPacket(ctx, keeper, msg)
return handleMsgSendPacket(ctx, keeper, bankKeeper, msg)

default:
errMsg := fmt.Sprintf("Unrecognized vibc Msg type: %T", msg)
Expand All @@ -24,22 +25,27 @@ func NewHandler(keeper Keeper) sdk.Handler {
}

type sendPacketAction struct {
*vm.ActionHeader `actionType:"IBC_EVENT"`
Event string `json:"event" default:"sendPacket"`
*MsgSendPacket
vm.ActionHeader `actionType:"IBC_EVENT"`
Event string `json:"event" default:"sendPacket"`
}

func handleMsgSendPacket(ctx sdk.Context, keeper Keeper, msg *MsgSendPacket) (*sdk.Result, error) {
func handleMsgSendPacket(
ctx sdk.Context,
keeper Keeper,
bankKeeper types.BankKeeper,
msg *MsgSendPacket,
) (*sdk.Result, error) {
onePass := sdk.NewInt64Coin("sendpacketpass", 1)
balance := keeper.GetBalance(ctx, msg.Sender, onePass.Denom)
balance := bankKeeper.GetBalance(ctx, msg.Sender, onePass.Denom)
if balance.IsLT(onePass) {
return nil, sdkioerrors.Wrap(
sdkerrors.ErrInsufficientFee,
fmt.Sprintf("sender %s needs at least %s", msg.Sender, onePass.String()),
)
}

action := &sendPacketAction{
action := sendPacketAction{
MsgSendPacket: msg,
}
// fmt.Fprintf(os.Stderr, "Context is %+v\n", ctx)
Expand Down
Loading

0 comments on commit cdf36d1

Please sign in to comment.