@agoric/cosmos 0.35.0-upgrade-14-dev-0169c7e.0 → 0.35.0-upgrade-16-dev-07b0130.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +121 -77
- package/MAINTAINERS.md +3 -0
- package/Makefile +49 -26
- package/ante/ante.go +11 -11
- package/ante/inbound_test.go +3 -2
- package/ante/vm_admission.go +2 -1
- package/app/app.go +260 -175
- package/app/export.go +13 -6
- package/app/upgrade.go +76 -0
- package/cmd/agd/agvm.go +42 -0
- package/cmd/agd/main.go +132 -11
- package/cmd/libdaemon/main.go +67 -53
- package/cmd/libdaemon/main_test.go +2 -1
- package/daemon/cmd/genaccounts.go +13 -9
- package/daemon/cmd/root.go +186 -73
- package/daemon/cmd/root_test.go +190 -2
- package/daemon/cmd/testnet.go +17 -6
- package/daemon/main.go +6 -3
- package/e2e_test/Makefile +29 -0
- package/e2e_test/README.md +100 -0
- package/e2e_test/go.mod +217 -0
- package/e2e_test/go.sum +1323 -0
- package/e2e_test/ibc_conformance_test.go +56 -0
- package/e2e_test/pfm_test.go +613 -0
- package/e2e_test/util.go +271 -0
- package/git-revision.txt +1 -1
- package/go.mod +110 -68
- package/go.sum +601 -248
- package/package.json +9 -5
- package/proto/agoric/swingset/genesis.proto +4 -0
- package/proto/agoric/swingset/swingset.proto +1 -1
- package/proto/agoric/vlocalchain/.clang-format +7 -0
- package/proto/agoric/vlocalchain/vlocalchain.proto +31 -0
- package/proto/agoric/vstorage/query.proto +53 -1
- package/proto/agoric/vtransfer/genesis.proto +18 -0
- package/scripts/protocgen.sh +16 -6
- package/third_party/proto/buf.yaml +1 -0
- package/third_party/proto/cosmos/base/query/v1beta1/pagination.proto +4 -1
- package/third_party/proto/cosmos/base/v1beta1/coin.proto +7 -4
- package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +16 -6
- package/third_party/proto/cosmos_proto/cosmos.proto +97 -0
- package/third_party/proto/google/api/annotations.proto +1 -1
- package/third_party/proto/google/api/http.proto +181 -120
- package/third_party/proto/google/api/httpbody.proto +9 -6
- package/third_party/proto/google/protobuf/any.proto +1 -7
- package/third_party/proto/ibc/core/channel/v1/channel.proto +15 -1
- package/third_party/proto/ibc/core/client/v1/client.proto +9 -6
- package/types/kv_entry_helpers.go +42 -0
- package/upgradegaia.sh +21 -12
- package/vm/action.go +28 -24
- package/vm/action_test.go +36 -16
- package/vm/client.go +113 -0
- package/vm/client_test.go +182 -0
- package/vm/controller.go +18 -42
- package/vm/core_proposals.go +22 -2
- package/vm/jsonrpcconn/jsonrpcconn.go +160 -0
- package/vm/jsonrpcconn/jsonrpcconn_test.go +126 -0
- package/vm/proto_json.go +38 -0
- package/vm/proto_json_test.go +103 -0
- package/vm/server.go +124 -0
- package/x/swingset/abci.go +10 -10
- package/x/swingset/alias.go +2 -0
- package/x/swingset/client/cli/query.go +2 -2
- package/x/swingset/client/cli/tx.go +52 -33
- package/x/swingset/client/proposal_handler.go +2 -17
- package/x/swingset/genesis.go +84 -24
- package/x/swingset/handler.go +2 -1
- package/x/swingset/keeper/extension_snapshotter.go +2 -2
- package/x/swingset/keeper/keeper.go +21 -36
- package/x/swingset/keeper/keeper_test.go +1 -1
- package/x/swingset/keeper/msg_server.go +20 -22
- package/x/swingset/keeper/proposal.go +13 -3
- package/x/swingset/keeper/querier.go +23 -14
- package/x/swingset/keeper/swing_store_exports_handler.go +21 -6
- package/x/swingset/keeper/test_utils.go +16 -0
- package/x/swingset/module.go +7 -7
- package/x/swingset/proposal_handler.go +5 -4
- package/x/swingset/swingset.go +4 -2
- package/x/swingset/testing/queue.go +17 -0
- package/x/swingset/types/codec.go +2 -2
- package/x/swingset/types/default-params.go +1 -1
- package/x/swingset/types/expected_keepers.go +3 -2
- package/x/swingset/types/genesis.pb.go +78 -25
- package/x/swingset/types/msgs.go +44 -24
- package/x/swingset/types/msgs.pb.go +16 -16
- package/x/swingset/types/params.go +2 -1
- package/x/swingset/types/proposal.go +10 -9
- package/x/swingset/types/swingset.pb.go +1 -1
- package/x/swingset/types/types.go +30 -28
- package/x/vbank/genesis.go +0 -2
- package/x/vbank/handler.go +2 -1
- package/x/vbank/keeper/keeper.go +3 -2
- package/x/vbank/keeper/querier.go +9 -4
- package/x/vbank/keeper/rewards.go +1 -1
- package/x/vbank/module.go +0 -5
- package/x/vbank/types/msgs.go +0 -12
- package/x/vbank/vbank.go +20 -19
- package/x/vbank/vbank_test.go +10 -10
- package/x/vibc/alias.go +3 -0
- package/x/vibc/handler.go +16 -9
- package/x/vibc/keeper/keeper.go +112 -74
- package/x/vibc/keeper/triggers.go +101 -0
- package/x/vibc/module.go +5 -8
- package/x/vibc/types/expected_keepers.go +26 -5
- package/x/vibc/types/ibc_module.go +336 -0
- package/x/vibc/types/msgs.go +1 -1
- package/x/vibc/types/msgs.pb.go +1 -1
- package/x/vibc/types/receiver.go +170 -0
- package/x/vlocalchain/alias.go +19 -0
- package/x/vlocalchain/handler.go +21 -0
- package/x/vlocalchain/keeper/keeper.go +279 -0
- package/x/vlocalchain/keeper/keeper_test.go +97 -0
- package/x/vlocalchain/types/codec.go +34 -0
- package/x/vlocalchain/types/key.go +27 -0
- package/x/vlocalchain/types/msgs.go +16 -0
- package/x/vlocalchain/types/vlocalchain.pb.go +1072 -0
- package/x/vlocalchain/vlocalchain.go +114 -0
- package/x/vlocalchain/vlocalchain_test.go +434 -0
- package/x/vstorage/README.md +138 -0
- package/x/vstorage/capdata/capdata.go +298 -0
- package/x/vstorage/capdata/capdata_test.go +352 -0
- package/x/vstorage/client/cli/query.go +51 -4
- package/x/vstorage/handler.go +2 -1
- package/x/vstorage/keeper/grpc_query.go +220 -0
- package/x/vstorage/keeper/keeper.go +16 -22
- package/x/vstorage/keeper/keeper_grpc_test.go +300 -0
- package/x/vstorage/keeper/keeper_test.go +1 -1
- package/x/vstorage/keeper/querier.go +11 -6
- package/x/vstorage/keeper/querier_test.go +4 -3
- package/x/vstorage/module.go +0 -5
- package/x/vstorage/testing/queue.go +27 -0
- package/x/vstorage/types/query.pb.go +646 -36
- package/x/vstorage/types/query.pb.gw.go +119 -0
- package/x/vstorage/vstorage.go +16 -15
- package/x/vstorage/vstorage_test.go +5 -5
- package/x/vtransfer/alias.go +13 -0
- package/x/vtransfer/genesis.go +39 -0
- package/x/vtransfer/genesis_test.go +12 -0
- package/x/vtransfer/handler.go +20 -0
- package/x/vtransfer/ibc_middleware.go +186 -0
- package/x/vtransfer/ibc_middleware_test.go +448 -0
- package/x/vtransfer/keeper/keeper.go +281 -0
- package/x/vtransfer/module.go +124 -0
- package/x/vtransfer/types/expected_keepers.go +38 -0
- package/x/vtransfer/types/genesis.pb.go +327 -0
- package/x/vtransfer/types/key.go +9 -0
- package/x/vtransfer/types/msgs.go +9 -0
- package/ante/fee.go +0 -96
- package/proto/agoric/lien/genesis.proto +0 -25
- package/proto/agoric/lien/lien.proto +0 -25
- package/x/lien/alias.go +0 -17
- package/x/lien/genesis.go +0 -58
- package/x/lien/genesis_test.go +0 -101
- package/x/lien/keeper/account.go +0 -290
- package/x/lien/keeper/keeper.go +0 -254
- package/x/lien/keeper/keeper_test.go +0 -623
- package/x/lien/lien.go +0 -203
- package/x/lien/lien_test.go +0 -529
- package/x/lien/module.go +0 -115
- package/x/lien/spec/01_concepts.md +0 -146
- package/x/lien/spec/02_messages.md +0 -96
- package/x/lien/types/accountkeeper.go +0 -81
- package/x/lien/types/accountstate.go +0 -27
- package/x/lien/types/expected_keepers.go +0 -18
- package/x/lien/types/genesis.pb.go +0 -567
- package/x/lien/types/key.go +0 -25
- package/x/lien/types/lien.pb.go +0 -403
- package/x/vibc/ibc.go +0 -393
- /package/{src/index.cjs → index.cjs} +0 -0
|
@@ -21,10 +21,10 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer {
|
|
|
21
21
|
var _ types.MsgServer = msgServer{}
|
|
22
22
|
|
|
23
23
|
type deliverInboundAction struct {
|
|
24
|
-
vm.ActionHeader `actionType:"DELIVER_INBOUND"`
|
|
25
|
-
Peer
|
|
26
|
-
Messages
|
|
27
|
-
Ack
|
|
24
|
+
*vm.ActionHeader `actionType:"DELIVER_INBOUND"`
|
|
25
|
+
Peer string `json:"peer"`
|
|
26
|
+
Messages [][]interface{} `json:"messages"`
|
|
27
|
+
Ack uint64 `json:"ack"`
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
func (keeper msgServer) routeAction(ctx sdk.Context, msg vm.ControllerAdmissionMsg, action vm.Action) error {
|
|
@@ -43,14 +43,12 @@ func (keeper msgServer) routeAction(ctx sdk.Context, msg vm.ControllerAdmissionM
|
|
|
43
43
|
func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeliverInbound) (*types.MsgDeliverInboundResponse, error) {
|
|
44
44
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
45
45
|
|
|
46
|
+
// msg.Nums and msg.Messages must be zipped into an array of [num, message] pairs.
|
|
46
47
|
messages := make([][]interface{}, len(msg.Messages))
|
|
47
48
|
for i, message := range msg.Messages {
|
|
48
|
-
messages[i] =
|
|
49
|
-
messages[i][0] = msg.Nums[i]
|
|
50
|
-
messages[i][1] = message
|
|
49
|
+
messages[i] = []interface{}{msg.Nums[i], message}
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
action := &deliverInboundAction{
|
|
51
|
+
action := deliverInboundAction{
|
|
54
52
|
Peer: msg.Submitter.String(),
|
|
55
53
|
Messages: messages,
|
|
56
54
|
Ack: msg.Ack,
|
|
@@ -65,9 +63,9 @@ func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeli
|
|
|
65
63
|
}
|
|
66
64
|
|
|
67
65
|
type walletAction struct {
|
|
68
|
-
vm.ActionHeader `actionType:"WALLET_ACTION"`
|
|
69
|
-
Owner
|
|
70
|
-
Action
|
|
66
|
+
*vm.ActionHeader `actionType:"WALLET_ACTION"`
|
|
67
|
+
Owner string `json:"owner"`
|
|
68
|
+
Action string `json:"action"`
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
func (keeper msgServer) WalletAction(goCtx context.Context, msg *types.MsgWalletAction) (*types.MsgWalletActionResponse, error) {
|
|
@@ -78,7 +76,7 @@ func (keeper msgServer) WalletAction(goCtx context.Context, msg *types.MsgWallet
|
|
|
78
76
|
return nil, err
|
|
79
77
|
}
|
|
80
78
|
|
|
81
|
-
action :=
|
|
79
|
+
action := walletAction{
|
|
82
80
|
Owner: msg.Owner.String(),
|
|
83
81
|
Action: msg.Action,
|
|
84
82
|
}
|
|
@@ -93,9 +91,9 @@ func (keeper msgServer) WalletAction(goCtx context.Context, msg *types.MsgWallet
|
|
|
93
91
|
}
|
|
94
92
|
|
|
95
93
|
type walletSpendAction struct {
|
|
96
|
-
vm.ActionHeader `actionType:"WALLET_SPEND_ACTION"`
|
|
97
|
-
Owner
|
|
98
|
-
SpendAction
|
|
94
|
+
*vm.ActionHeader `actionType:"WALLET_SPEND_ACTION"`
|
|
95
|
+
Owner string `json:"owner"`
|
|
96
|
+
SpendAction string `json:"spendAction"`
|
|
99
97
|
}
|
|
100
98
|
|
|
101
99
|
func (keeper msgServer) WalletSpendAction(goCtx context.Context, msg *types.MsgWalletSpendAction) (*types.MsgWalletSpendActionResponse, error) {
|
|
@@ -106,7 +104,7 @@ func (keeper msgServer) WalletSpendAction(goCtx context.Context, msg *types.MsgW
|
|
|
106
104
|
return nil, err
|
|
107
105
|
}
|
|
108
106
|
|
|
109
|
-
action :=
|
|
107
|
+
action := walletSpendAction{
|
|
110
108
|
Owner: msg.Owner.String(),
|
|
111
109
|
SpendAction: msg.SpendAction,
|
|
112
110
|
}
|
|
@@ -119,7 +117,7 @@ func (keeper msgServer) WalletSpendAction(goCtx context.Context, msg *types.MsgW
|
|
|
119
117
|
}
|
|
120
118
|
|
|
121
119
|
type provisionAction struct {
|
|
122
|
-
vm.ActionHeader `actionType:"PLEASE_PROVISION"`
|
|
120
|
+
*vm.ActionHeader `actionType:"PLEASE_PROVISION"`
|
|
123
121
|
*types.MsgProvision
|
|
124
122
|
AutoProvision bool `json:"autoProvision"`
|
|
125
123
|
}
|
|
@@ -143,7 +141,7 @@ func (keeper msgServer) provisionIfNeeded(ctx sdk.Context, owner sdk.AccAddress)
|
|
|
143
141
|
PowerFlags: []string{types.PowerFlagSmartWallet},
|
|
144
142
|
}
|
|
145
143
|
|
|
146
|
-
action :=
|
|
144
|
+
action := provisionAction{
|
|
147
145
|
MsgProvision: msg,
|
|
148
146
|
AutoProvision: true,
|
|
149
147
|
}
|
|
@@ -165,7 +163,7 @@ func (keeper msgServer) Provision(goCtx context.Context, msg *types.MsgProvision
|
|
|
165
163
|
return nil, err
|
|
166
164
|
}
|
|
167
165
|
|
|
168
|
-
action :=
|
|
166
|
+
action := provisionAction{
|
|
169
167
|
MsgProvision: msg,
|
|
170
168
|
}
|
|
171
169
|
|
|
@@ -186,7 +184,7 @@ func (keeper msgServer) Provision(goCtx context.Context, msg *types.MsgProvision
|
|
|
186
184
|
}
|
|
187
185
|
|
|
188
186
|
type installBundleAction struct {
|
|
189
|
-
vm.ActionHeader `actionType:"INSTALL_BUNDLE"`
|
|
187
|
+
*vm.ActionHeader `actionType:"INSTALL_BUNDLE"`
|
|
190
188
|
*types.MsgInstallBundle
|
|
191
189
|
}
|
|
192
190
|
|
|
@@ -197,7 +195,7 @@ func (keeper msgServer) InstallBundle(goCtx context.Context, msg *types.MsgInsta
|
|
|
197
195
|
if err != nil {
|
|
198
196
|
return nil, err
|
|
199
197
|
}
|
|
200
|
-
action :=
|
|
198
|
+
action := installBundleAction{
|
|
201
199
|
MsgInstallBundle: msg,
|
|
202
200
|
}
|
|
203
201
|
|
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
package keeper
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"context"
|
|
5
|
+
|
|
4
6
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
5
7
|
|
|
6
8
|
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
7
9
|
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
|
|
10
|
+
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
8
11
|
)
|
|
9
12
|
|
|
10
13
|
type coreEvalAction struct {
|
|
11
|
-
vm.ActionHeader `actionType:"CORE_EVAL"`
|
|
12
|
-
Evals
|
|
14
|
+
*vm.ActionHeader `actionType:"CORE_EVAL"`
|
|
15
|
+
Evals []types.CoreEval `json:"evals"`
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
// CoreEvalProposal tells SwingSet to evaluate the given JS code.
|
|
16
19
|
func (k Keeper) CoreEvalProposal(ctx sdk.Context, p *types.CoreEvalProposal) error {
|
|
17
|
-
action :=
|
|
20
|
+
action := coreEvalAction{
|
|
18
21
|
Evals: p.Evals,
|
|
19
22
|
}
|
|
20
23
|
|
|
24
|
+
// While the CoreEvalProposal was originally created by a transaction, by the time it
|
|
25
|
+
// passes by governance, we no longer have its provenance information, so we need to
|
|
26
|
+
// synthesize unique context information.
|
|
27
|
+
// We use a fixed placeholder value for the txHash context. We use `0` for the message
|
|
28
|
+
// index which assumes there is a single proposal per block.
|
|
29
|
+
ctx = ctx.WithContext(context.WithValue(ctx.Context(), baseapp.TxHashContextKey, "x/gov"))
|
|
30
|
+
ctx = ctx.WithContext(context.WithValue(ctx.Context(), baseapp.TxMsgIdxContextKey, 0))
|
|
21
31
|
return k.PushHighPriorityAction(ctx, action)
|
|
22
32
|
}
|
|
@@ -6,6 +6,7 @@ import (
|
|
|
6
6
|
|
|
7
7
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
8
8
|
|
|
9
|
+
sdkioerrors "cosmossdk.io/errors"
|
|
9
10
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
10
11
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
11
12
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
@@ -24,17 +25,27 @@ const (
|
|
|
24
25
|
// NewQuerier is the module level router for state queries
|
|
25
26
|
func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier {
|
|
26
27
|
return func(ctx sdk.Context, path []string, req abci.RequestQuery) (res []byte, err error) {
|
|
27
|
-
|
|
28
|
+
var queryType string
|
|
29
|
+
if len(path) > 0 {
|
|
30
|
+
queryType = path[0]
|
|
31
|
+
}
|
|
32
|
+
switch queryType {
|
|
28
33
|
case QueryEgress:
|
|
34
|
+
if len(path) < 2 || path[1] == "" {
|
|
35
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, "missing egress address")
|
|
36
|
+
}
|
|
29
37
|
return queryEgress(ctx, path[1], req, keeper, legacyQuerierCdc)
|
|
30
38
|
case QueryMailbox:
|
|
31
|
-
|
|
39
|
+
if len(path) < 2 || path[1] == "" {
|
|
40
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, "missing mailbox peer")
|
|
41
|
+
}
|
|
42
|
+
return queryMailbox(ctx, path[1], req, keeper, legacyQuerierCdc)
|
|
32
43
|
case LegacyQueryStorage:
|
|
33
44
|
return legacyQueryStorage(ctx, strings.Join(path[1:], "/"), req, keeper, legacyQuerierCdc)
|
|
34
45
|
case LegacyQueryKeys:
|
|
35
46
|
return legacyQueryKeys(ctx, strings.Join(path[1:], "/"), req, keeper, legacyQuerierCdc)
|
|
36
47
|
default:
|
|
37
|
-
return nil,
|
|
48
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, "unknown swingset query path")
|
|
38
49
|
}
|
|
39
50
|
}
|
|
40
51
|
}
|
|
@@ -43,35 +54,33 @@ func NewQuerier(keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) sdk.Querier
|
|
|
43
54
|
func queryEgress(ctx sdk.Context, bech32 string, req abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) ([]byte, error) {
|
|
44
55
|
acc, err := sdk.AccAddressFromBech32(bech32)
|
|
45
56
|
if err != nil {
|
|
46
|
-
return nil,
|
|
57
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
|
|
47
58
|
}
|
|
48
59
|
|
|
49
60
|
egress := keeper.GetEgress(ctx, acc)
|
|
50
61
|
if egress.Peer.Empty() {
|
|
51
|
-
return []byte{},
|
|
62
|
+
return []byte{}, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, fmt.Sprintf("egress %s not found", bech32))
|
|
52
63
|
}
|
|
53
64
|
|
|
54
65
|
bz, err := codec.MarshalJSONIndent(legacyQuerierCdc, egress)
|
|
55
66
|
if err != nil {
|
|
56
|
-
return nil,
|
|
67
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
return bz, nil
|
|
60
71
|
}
|
|
61
72
|
|
|
62
73
|
// nolint: unparam
|
|
63
|
-
func queryMailbox(ctx sdk.Context,
|
|
64
|
-
peer := path[0]
|
|
65
|
-
|
|
74
|
+
func queryMailbox(ctx sdk.Context, peer string, req abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) (res []byte, err error) {
|
|
66
75
|
value := keeper.GetMailbox(ctx, peer)
|
|
67
76
|
|
|
68
77
|
if value == "" {
|
|
69
|
-
return []byte{},
|
|
78
|
+
return []byte{}, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, "could not get peer mailbox")
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
bz, err2 := codec.MarshalJSONIndent(legacyQuerierCdc, vstoragetypes.Data{Value: value})
|
|
73
82
|
if err2 != nil {
|
|
74
|
-
return nil,
|
|
83
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrJSONMarshal, err2.Error())
|
|
75
84
|
}
|
|
76
85
|
|
|
77
86
|
return bz, nil
|
|
@@ -81,12 +90,12 @@ func queryMailbox(ctx sdk.Context, path []string, req abci.RequestQuery, keeper
|
|
|
81
90
|
func legacyQueryStorage(ctx sdk.Context, path string, req abci.RequestQuery, keeper Keeper, legacyQuerierCdc *codec.LegacyAmino) (res []byte, err error) {
|
|
82
91
|
entry := keeper.vstorageKeeper.GetEntry(ctx, path)
|
|
83
92
|
if !entry.HasValue() {
|
|
84
|
-
return []byte{},
|
|
93
|
+
return []byte{}, sdkioerrors.Wrapf(sdkerrors.ErrUnknownRequest, "could not get swingset %+v", path)
|
|
85
94
|
}
|
|
86
95
|
|
|
87
96
|
bz, err2 := codec.MarshalJSONIndent(legacyQuerierCdc, vstoragetypes.Data{Value: entry.StringValue()})
|
|
88
97
|
if err2 != nil {
|
|
89
|
-
return nil,
|
|
98
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrJSONMarshal, err2.Error())
|
|
90
99
|
}
|
|
91
100
|
|
|
92
101
|
return bz, nil
|
|
@@ -103,7 +112,7 @@ func legacyQueryKeys(ctx sdk.Context, path string, req abci.RequestQuery, keeper
|
|
|
103
112
|
|
|
104
113
|
bz, err2 := codec.MarshalJSONIndent(legacyQuerierCdc, vstoragetypes.Children{Children: chlist})
|
|
105
114
|
if err2 != nil {
|
|
106
|
-
return nil,
|
|
115
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrJSONMarshal, err2.Error())
|
|
107
116
|
}
|
|
108
117
|
|
|
109
118
|
return bz, nil
|
|
@@ -9,10 +9,10 @@ import (
|
|
|
9
9
|
"path/filepath"
|
|
10
10
|
"regexp"
|
|
11
11
|
|
|
12
|
+
sdkioerrors "cosmossdk.io/errors"
|
|
12
13
|
agoric "github.com/Agoric/agoric-sdk/golang/cosmos/types"
|
|
13
14
|
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
14
15
|
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
|
|
15
|
-
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
16
16
|
"github.com/tendermint/tendermint/libs/log"
|
|
17
17
|
)
|
|
18
18
|
|
|
@@ -588,7 +588,7 @@ func (exportsHandler SwingStoreExportsHandler) InitiateExport(blockHeight uint64
|
|
|
588
588
|
} else if discardErr != nil {
|
|
589
589
|
// Safe to wrap error and use detailed error info since this error
|
|
590
590
|
// will not go back into swingset layers
|
|
591
|
-
err =
|
|
591
|
+
err = sdkioerrors.Wrapf(err, "failed to discard swing-store export after failing to process export: %+v", discardErr)
|
|
592
592
|
}
|
|
593
593
|
}()
|
|
594
594
|
|
|
@@ -751,11 +751,15 @@ func (exportsHandler SwingStoreExportsHandler) RestoreExport(provider SwingStore
|
|
|
751
751
|
}
|
|
752
752
|
defer os.RemoveAll(exportDir)
|
|
753
753
|
|
|
754
|
+
exportsHandler.logger.Info("creating swing-store restore", "exportDir", exportDir, "height", blockHeight)
|
|
755
|
+
|
|
754
756
|
err = WriteSwingStoreExportToDirectory(provider, exportDir)
|
|
755
757
|
if err != nil {
|
|
756
758
|
return err
|
|
757
759
|
}
|
|
758
760
|
|
|
761
|
+
exportsHandler.logger.Info("restoring swing-store", "exportDir", exportDir, "height", blockHeight)
|
|
762
|
+
|
|
759
763
|
action := &swingStoreRestoreExportAction{
|
|
760
764
|
Type: swingStoreExportActionType,
|
|
761
765
|
BlockHeight: blockHeight,
|
|
@@ -772,7 +776,7 @@ func (exportsHandler SwingStoreExportsHandler) RestoreExport(provider SwingStore
|
|
|
772
776
|
return err
|
|
773
777
|
}
|
|
774
778
|
|
|
775
|
-
exportsHandler.logger.Info("restored swing-store
|
|
779
|
+
exportsHandler.logger.Info("restored swing-store", "exportDir", exportDir, "height", blockHeight)
|
|
776
780
|
|
|
777
781
|
return nil
|
|
778
782
|
}
|
|
@@ -783,7 +787,18 @@ func (exportsHandler SwingStoreExportsHandler) RestoreExport(provider SwingStore
|
|
|
783
787
|
// a jsonl-like file, before saving the export manifest linking these together.
|
|
784
788
|
// The export manifest filename and overall export format is common with the JS
|
|
785
789
|
// swing-store import/export logic.
|
|
786
|
-
func WriteSwingStoreExportToDirectory(provider SwingStoreExportProvider, exportDir string) error {
|
|
790
|
+
func WriteSwingStoreExportToDirectory(provider SwingStoreExportProvider, exportDir string) (err error) {
|
|
791
|
+
handleDeferError := func(fn func() error) {
|
|
792
|
+
deferError := fn()
|
|
793
|
+
if err == nil {
|
|
794
|
+
err = deferError
|
|
795
|
+
} else if deferError != nil {
|
|
796
|
+
// Safe to wrap error and use detailed error info since this error
|
|
797
|
+
// will not go back into swingset layers
|
|
798
|
+
err = sdkioerrors.Wrapf(err, "deferred error %+v", deferError)
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
|
|
787
802
|
manifest := exportManifest{
|
|
788
803
|
BlockHeight: provider.BlockHeight,
|
|
789
804
|
}
|
|
@@ -794,14 +809,14 @@ func WriteSwingStoreExportToDirectory(provider SwingStoreExportProvider, exportD
|
|
|
794
809
|
}
|
|
795
810
|
|
|
796
811
|
if exportDataReader != nil {
|
|
797
|
-
defer exportDataReader.Close
|
|
812
|
+
defer handleDeferError(exportDataReader.Close)
|
|
798
813
|
|
|
799
814
|
manifest.Data = exportDataFilename
|
|
800
815
|
exportDataFile, err := os.OpenFile(filepath.Join(exportDir, exportDataFilename), os.O_CREATE|os.O_WRONLY, exportedFilesMode)
|
|
801
816
|
if err != nil {
|
|
802
817
|
return err
|
|
803
818
|
}
|
|
804
|
-
defer exportDataFile.Close
|
|
819
|
+
defer handleDeferError(exportDataFile.Close)
|
|
805
820
|
|
|
806
821
|
err = agoric.EncodeKVEntryReaderToJsonl(exportDataReader, exportDataFile)
|
|
807
822
|
if err != nil {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package keeper
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"testing"
|
|
5
|
+
|
|
6
|
+
"github.com/Agoric/agoric-sdk/golang/cosmos/x/vstorage"
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
// GetVstorageKeeper returns the vstorage keeper from the swingset keeper
|
|
10
|
+
// for testing purposes.
|
|
11
|
+
func GetVstorageKeeper(t *testing.T, k Keeper) vstorage.Keeper {
|
|
12
|
+
if t == nil {
|
|
13
|
+
panic("this function is reserved for testing")
|
|
14
|
+
}
|
|
15
|
+
return k.vstorageKeeper
|
|
16
|
+
}
|
package/x/swingset/module.go
CHANGED
|
@@ -5,7 +5,6 @@ import (
|
|
|
5
5
|
"encoding/json"
|
|
6
6
|
"fmt"
|
|
7
7
|
|
|
8
|
-
"github.com/gorilla/mux"
|
|
9
8
|
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
|
10
9
|
"github.com/spf13/cobra"
|
|
11
10
|
|
|
@@ -60,10 +59,6 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncod
|
|
|
60
59
|
return ValidateGenesis(&data)
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
// Register rest routes
|
|
64
|
-
func (AppModuleBasic) RegisterRESTRoutes(ctx client.Context, rtr *mux.Router) {
|
|
65
|
-
}
|
|
66
|
-
|
|
67
62
|
func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {
|
|
68
63
|
_ = types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx))
|
|
69
64
|
}
|
|
@@ -104,6 +99,11 @@ func (AppModule) Name() string {
|
|
|
104
99
|
return ModuleName
|
|
105
100
|
}
|
|
106
101
|
|
|
102
|
+
// For testing purposes
|
|
103
|
+
func (am *AppModule) SetSwingStoreExportDir(dir string) {
|
|
104
|
+
am.swingStoreExportDir = dir
|
|
105
|
+
}
|
|
106
|
+
|
|
107
107
|
func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {}
|
|
108
108
|
|
|
109
109
|
func (am AppModule) Route() sdk.Route {
|
|
@@ -154,9 +154,9 @@ func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.V
|
|
|
154
154
|
return []abci.ValidatorUpdate{}
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
func (am AppModule) checkSwingStoreExportSetup() {
|
|
157
|
+
func (am *AppModule) checkSwingStoreExportSetup() {
|
|
158
158
|
if am.swingStoreExportDir == "" {
|
|
159
|
-
|
|
159
|
+
am.swingStoreExportDir = "/tmp/swingset_export"
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
package swingset
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
sdkioerrors "cosmossdk.io/errors"
|
|
4
5
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
5
6
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
6
|
-
|
|
7
|
+
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
|
7
8
|
|
|
8
9
|
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/keeper"
|
|
9
10
|
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
|
|
10
11
|
)
|
|
11
12
|
|
|
12
13
|
// NewSwingSetProposalHandler defines the SwingSet proposal handler
|
|
13
|
-
func NewSwingSetProposalHandler(k keeper.Keeper)
|
|
14
|
-
return func(ctx sdk.Context, content
|
|
14
|
+
func NewSwingSetProposalHandler(k keeper.Keeper) govv1beta1.Handler {
|
|
15
|
+
return func(ctx sdk.Context, content govv1beta1.Content) error {
|
|
15
16
|
switch c := content.(type) {
|
|
16
17
|
case *types.CoreEvalProposal:
|
|
17
18
|
return k.CoreEvalProposal(ctx, c)
|
|
18
19
|
|
|
19
20
|
default:
|
|
20
|
-
return
|
|
21
|
+
return sdkioerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized swingset proposal content type: %T", c)
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
}
|
package/x/swingset/swingset.go
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package swingset
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"context"
|
|
4
5
|
"encoding/json"
|
|
5
6
|
"fmt"
|
|
6
7
|
"io"
|
|
@@ -33,7 +34,8 @@ func NewPortHandler(k Keeper) vm.PortHandler {
|
|
|
33
34
|
// Receive implements the vm.PortHandler method.
|
|
34
35
|
// It receives and processes an inbound message, returning the
|
|
35
36
|
// JSON-serialized response or an error.
|
|
36
|
-
func (ph portHandler) Receive(
|
|
37
|
+
func (ph portHandler) Receive(cctx context.Context, str string) (string, error) {
|
|
38
|
+
ctx := sdk.UnwrapSDKContext(cctx)
|
|
37
39
|
var msg swingsetMessage
|
|
38
40
|
err := json.Unmarshal([]byte(str), &msg)
|
|
39
41
|
if err != nil {
|
|
@@ -42,7 +44,7 @@ func (ph portHandler) Receive(ctx *vm.ControllerContext, str string) (string, er
|
|
|
42
44
|
|
|
43
45
|
switch msg.Method {
|
|
44
46
|
case SwingStoreUpdateExportData:
|
|
45
|
-
return ph.handleSwingStoreUpdateExportData(ctx
|
|
47
|
+
return ph.handleSwingStoreUpdateExportData(ctx, msg.Args)
|
|
46
48
|
|
|
47
49
|
default:
|
|
48
50
|
return "", fmt.Errorf("unrecognized swingset method %s", msg.Method)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package testing
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"testing"
|
|
5
|
+
|
|
6
|
+
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/keeper"
|
|
7
|
+
vstoragetesting "github.com/Agoric/agoric-sdk/golang/cosmos/x/vstorage/testing"
|
|
8
|
+
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
// GetActionQueueRecords returns the records in the action queue.
|
|
12
|
+
// This is a testing utility function.
|
|
13
|
+
func GetActionQueueRecords(t *testing.T, ctx sdk.Context, swingsetKeeper keeper.Keeper) ([]string, error) {
|
|
14
|
+
vstorageKeeper := keeper.GetVstorageKeeper(t, swingsetKeeper)
|
|
15
|
+
actionQueueName := keeper.StoragePathActionQueue
|
|
16
|
+
return vstoragetesting.GetQueueItems(ctx, vstorageKeeper, actionQueueName)
|
|
17
|
+
}
|
|
@@ -6,7 +6,7 @@ import (
|
|
|
6
6
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
|
7
7
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
8
8
|
"github.com/cosmos/cosmos-sdk/types/msgservice"
|
|
9
|
-
|
|
9
|
+
govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
|
10
10
|
)
|
|
11
11
|
|
|
12
12
|
var (
|
|
@@ -44,7 +44,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) {
|
|
|
44
44
|
&MsgWalletSpendAction{},
|
|
45
45
|
)
|
|
46
46
|
registry.RegisterImplementations(
|
|
47
|
-
(*
|
|
47
|
+
(*govv1beta1.Content)(nil),
|
|
48
48
|
&CoreEvalProposal{},
|
|
49
49
|
)
|
|
50
50
|
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
|
|
@@ -55,7 +55,7 @@ var (
|
|
|
55
55
|
DefaultBeansPerStorageByte = DefaultBeansPerFeeUnit.Quo(sdk.NewUint(500)) // $0.002
|
|
56
56
|
DefaultBeansPerSmartWalletProvision = DefaultBeansPerFeeUnit // $1
|
|
57
57
|
|
|
58
|
-
DefaultBootstrapVatConfig = "@agoric/
|
|
58
|
+
DefaultBootstrapVatConfig = "@agoric/vm-config/decentral-core-config.json"
|
|
59
59
|
|
|
60
60
|
DefaultPowerFlagFees = []PowerFlagFee{
|
|
61
61
|
NewPowerFlagFee(PowerFlagSmartWallet, sdk.NewCoins(sdk.NewInt64Coin("ubld", 10_000_000))),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package types
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
sdkmath "cosmossdk.io/math"
|
|
4
5
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
5
6
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
6
7
|
)
|
|
@@ -21,8 +22,8 @@ type AccountKeeper interface {
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
type SwingSetKeeper interface {
|
|
24
|
-
GetBeansPerUnit(ctx sdk.Context) map[string]
|
|
25
|
-
ChargeBeans(ctx sdk.Context, addr sdk.AccAddress, beans
|
|
25
|
+
GetBeansPerUnit(ctx sdk.Context) map[string]sdkmath.Uint
|
|
26
|
+
ChargeBeans(ctx sdk.Context, addr sdk.AccAddress, beans sdkmath.Uint) error
|
|
26
27
|
IsHighPriorityAddress(ctx sdk.Context, addr sdk.AccAddress) (bool, error)
|
|
27
28
|
GetSmartWalletState(ctx sdk.Context, addr sdk.AccAddress) SmartWalletState
|
|
28
29
|
ChargeForSmartWallet(ctx sdk.Context, addr sdk.AccAddress) error
|