@agoric/cosmos 0.35.0-u13.0 → 0.35.0-u14.1
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 +57 -0
- package/Makefile +25 -12
- package/ante/ante.go +5 -6
- package/app/app.go +142 -96
- package/app/export.go +13 -6
- package/cmd/agd/main.go +5 -3
- package/cmd/libdaemon/main.go +5 -2
- package/daemon/cmd/genaccounts.go +13 -9
- package/daemon/cmd/root.go +38 -15
- package/daemon/cmd/root_test.go +1 -1
- package/daemon/cmd/testnet.go +17 -6
- package/daemon/main.go +3 -2
- package/git-revision.txt +1 -1
- package/go.mod +95 -64
- package/go.sum +592 -243
- package/package.json +3 -3
- package/proto/agoric/vstorage/query.proto +53 -1
- package/scripts/protocgen.sh +12 -1
- 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/upgradegaia.sh +13 -4
- package/vm/action.go +133 -0
- package/vm/action_test.go +129 -0
- package/vm/controller.go +9 -16
- package/vm/core_proposals.go +31 -0
- package/x/lien/keeper/account.go +3 -3
- package/x/lien/keeper/keeper.go +5 -4
- package/x/lien/keeper/keeper_test.go +9 -9
- package/x/lien/lien.go +6 -4
- package/x/lien/lien_test.go +20 -16
- package/x/swingset/abci.go +25 -33
- package/x/swingset/client/cli/query.go +2 -2
- package/x/swingset/client/cli/tx.go +48 -33
- package/x/swingset/client/proposal_handler.go +2 -17
- package/x/swingset/keeper/keeper.go +30 -15
- package/x/swingset/keeper/keeper_test.go +1 -1
- package/x/swingset/keeper/msg_server.go +21 -51
- package/x/swingset/keeper/proposal.go +14 -8
- package/x/swingset/keeper/querier.go +14 -6
- package/x/swingset/keeper/swing_store_exports_handler.go +5 -1
- package/x/swingset/proposal_handler.go +3 -3
- package/x/swingset/swingset.go +4 -2
- package/x/swingset/types/codec.go +2 -2
- package/x/swingset/types/msgs.pb.go +16 -16
- package/x/swingset/types/proposal.go +5 -5
- package/x/swingset/types/types.go +30 -28
- package/x/vbank/keeper/keeper.go +3 -2
- package/x/vbank/keeper/querier.go +6 -2
- package/x/vbank/keeper/rewards.go +1 -1
- package/x/vbank/vbank.go +19 -17
- package/x/vbank/vbank_test.go +18 -18
- package/x/vibc/handler.go +3 -8
- package/x/vibc/ibc.go +66 -113
- package/x/vibc/keeper/keeper.go +19 -18
- package/x/vibc/types/expected_keepers.go +13 -5
- package/x/vibc/types/msgs.go +1 -1
- package/x/vibc/types/msgs.pb.go +1 -1
- 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/keeper/grpc_query.go +221 -0
- package/x/vstorage/keeper/keeper.go +3 -2
- 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 +6 -2
- 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/ante/fee.go +0 -96
- /package/{src/index.cjs → index.cjs} +0 -0
|
@@ -87,6 +87,78 @@ func local_request_Query_Data_0(ctx context.Context, marshaler runtime.Marshaler
|
|
|
87
87
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
var (
|
|
91
|
+
filter_Query_CapData_0 = &utilities.DoubleArray{Encoding: map[string]int{"path": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
func request_Query_CapData_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
|
95
|
+
var protoReq QueryCapDataRequest
|
|
96
|
+
var metadata runtime.ServerMetadata
|
|
97
|
+
|
|
98
|
+
var (
|
|
99
|
+
val string
|
|
100
|
+
ok bool
|
|
101
|
+
err error
|
|
102
|
+
_ = err
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
val, ok = pathParams["path"]
|
|
106
|
+
if !ok {
|
|
107
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path")
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
protoReq.Path, err = runtime.String(val)
|
|
111
|
+
|
|
112
|
+
if err != nil {
|
|
113
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if err := req.ParseForm(); err != nil {
|
|
117
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
|
118
|
+
}
|
|
119
|
+
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CapData_0); err != nil {
|
|
120
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
msg, err := client.CapData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
|
124
|
+
return msg, metadata, err
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
func local_request_Query_CapData_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
|
129
|
+
var protoReq QueryCapDataRequest
|
|
130
|
+
var metadata runtime.ServerMetadata
|
|
131
|
+
|
|
132
|
+
var (
|
|
133
|
+
val string
|
|
134
|
+
ok bool
|
|
135
|
+
err error
|
|
136
|
+
_ = err
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
val, ok = pathParams["path"]
|
|
140
|
+
if !ok {
|
|
141
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path")
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
protoReq.Path, err = runtime.String(val)
|
|
145
|
+
|
|
146
|
+
if err != nil {
|
|
147
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path", err)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if err := req.ParseForm(); err != nil {
|
|
151
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
|
152
|
+
}
|
|
153
|
+
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CapData_0); err != nil {
|
|
154
|
+
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
msg, err := server.CapData(ctx, &protoReq)
|
|
158
|
+
return msg, metadata, err
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
90
162
|
var (
|
|
91
163
|
filter_Query_Children_0 = &utilities.DoubleArray{Encoding: map[string]int{"path": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
|
|
92
164
|
)
|
|
@@ -188,6 +260,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
|
|
|
188
260
|
|
|
189
261
|
})
|
|
190
262
|
|
|
263
|
+
mux.Handle("GET", pattern_Query_CapData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
264
|
+
ctx, cancel := context.WithCancel(req.Context())
|
|
265
|
+
defer cancel()
|
|
266
|
+
var stream runtime.ServerTransportStream
|
|
267
|
+
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
|
268
|
+
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
269
|
+
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
|
|
270
|
+
if err != nil {
|
|
271
|
+
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
resp, md, err := local_request_Query_CapData_0(rctx, inboundMarshaler, server, req, pathParams)
|
|
275
|
+
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
|
276
|
+
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
277
|
+
if err != nil {
|
|
278
|
+
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
279
|
+
return
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
forward_Query_CapData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
|
283
|
+
|
|
284
|
+
})
|
|
285
|
+
|
|
191
286
|
mux.Handle("GET", pattern_Query_Children_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
192
287
|
ctx, cancel := context.WithCancel(req.Context())
|
|
193
288
|
defer cancel()
|
|
@@ -272,6 +367,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
|
|
|
272
367
|
|
|
273
368
|
})
|
|
274
369
|
|
|
370
|
+
mux.Handle("GET", pattern_Query_CapData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
371
|
+
ctx, cancel := context.WithCancel(req.Context())
|
|
372
|
+
defer cancel()
|
|
373
|
+
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
|
374
|
+
rctx, err := runtime.AnnotateContext(ctx, mux, req)
|
|
375
|
+
if err != nil {
|
|
376
|
+
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
377
|
+
return
|
|
378
|
+
}
|
|
379
|
+
resp, md, err := request_Query_CapData_0(rctx, inboundMarshaler, client, req, pathParams)
|
|
380
|
+
ctx = runtime.NewServerMetadataContext(ctx, md)
|
|
381
|
+
if err != nil {
|
|
382
|
+
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
|
383
|
+
return
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
forward_Query_CapData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
|
|
387
|
+
|
|
388
|
+
})
|
|
389
|
+
|
|
275
390
|
mux.Handle("GET", pattern_Query_Children_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
|
276
391
|
ctx, cancel := context.WithCancel(req.Context())
|
|
277
392
|
defer cancel()
|
|
@@ -298,11 +413,15 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
|
|
|
298
413
|
var (
|
|
299
414
|
pattern_Query_Data_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"agoric", "vstorage", "data", "path"}, "", runtime.AssumeColonVerbOpt(false)))
|
|
300
415
|
|
|
416
|
+
pattern_Query_CapData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"agoric", "vstorage", "capdata", "path"}, "", runtime.AssumeColonVerbOpt(false)))
|
|
417
|
+
|
|
301
418
|
pattern_Query_Children_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"agoric", "vstorage", "children", "path"}, "", runtime.AssumeColonVerbOpt(false)))
|
|
302
419
|
)
|
|
303
420
|
|
|
304
421
|
var (
|
|
305
422
|
forward_Query_Data_0 = runtime.ForwardResponseMessage
|
|
306
423
|
|
|
424
|
+
forward_Query_CapData_0 = runtime.ForwardResponseMessage
|
|
425
|
+
|
|
307
426
|
forward_Query_Children_0 = runtime.ForwardResponseMessage
|
|
308
427
|
)
|
package/x/vstorage/vstorage.go
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package vstorage
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"context"
|
|
4
5
|
"encoding/json"
|
|
5
6
|
"errors"
|
|
6
7
|
"fmt"
|
|
@@ -8,7 +9,6 @@ import (
|
|
|
8
9
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
9
10
|
|
|
10
11
|
agoric "github.com/Agoric/agoric-sdk/golang/cosmos/types"
|
|
11
|
-
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
type vstorageHandler struct {
|
|
@@ -41,7 +41,8 @@ func unmarshalSinglePathFromArgs(args []json.RawMessage, path *string) error {
|
|
|
41
41
|
return json.Unmarshal(args[0], path)
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
func (sh vstorageHandler) Receive(cctx
|
|
44
|
+
func (sh vstorageHandler) Receive(cctx context.Context, str string) (ret string, err error) {
|
|
45
|
+
ctx := sdk.UnwrapSDKContext(cctx)
|
|
45
46
|
keeper := sh.keeper
|
|
46
47
|
msg := new(vstorageMessage)
|
|
47
48
|
err = json.Unmarshal([]byte(str), &msg)
|
|
@@ -56,7 +57,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
56
57
|
case sdk.ErrorOutOfGas:
|
|
57
58
|
err = fmt.Errorf(
|
|
58
59
|
"out of gas in location: %v; gasUsed: %d",
|
|
59
|
-
rType.Descriptor,
|
|
60
|
+
rType.Descriptor, ctx.GasMeter().GasConsumed(),
|
|
60
61
|
)
|
|
61
62
|
default:
|
|
62
63
|
// Not ErrorOutOfGas, so panic again.
|
|
@@ -74,7 +75,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
74
75
|
if err != nil {
|
|
75
76
|
return
|
|
76
77
|
}
|
|
77
|
-
keeper.SetStorageAndNotify(
|
|
78
|
+
keeper.SetStorageAndNotify(ctx, entry)
|
|
78
79
|
}
|
|
79
80
|
return "true", nil
|
|
80
81
|
|
|
@@ -89,7 +90,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
89
90
|
return
|
|
90
91
|
}
|
|
91
92
|
//fmt.Printf("giving Keeper.SetStorage(%s) %s\n", entry.Path(), entry.Value())
|
|
92
|
-
keeper.LegacySetStorageAndNotify(
|
|
93
|
+
keeper.LegacySetStorageAndNotify(ctx, entry)
|
|
93
94
|
}
|
|
94
95
|
return "true", nil
|
|
95
96
|
|
|
@@ -100,7 +101,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
100
101
|
if err != nil {
|
|
101
102
|
return
|
|
102
103
|
}
|
|
103
|
-
keeper.SetStorage(
|
|
104
|
+
keeper.SetStorage(ctx, entry)
|
|
104
105
|
}
|
|
105
106
|
return "true", nil
|
|
106
107
|
|
|
@@ -115,7 +116,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
115
116
|
err = fmt.Errorf("no value for append entry with path: %q", entry.Key())
|
|
116
117
|
return
|
|
117
118
|
}
|
|
118
|
-
err = keeper.AppendStorageValueAndNotify(
|
|
119
|
+
err = keeper.AppendStorageValueAndNotify(ctx, entry.Key(), entry.StringValue())
|
|
119
120
|
if err != nil {
|
|
120
121
|
return
|
|
121
122
|
}
|
|
@@ -130,7 +131,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
130
131
|
return
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
entry := keeper.GetEntry(
|
|
134
|
+
entry := keeper.GetEntry(ctx, path)
|
|
134
135
|
bz, err := json.Marshal(entry.Value())
|
|
135
136
|
if err != nil {
|
|
136
137
|
return "", err
|
|
@@ -161,7 +162,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
161
162
|
if err != nil {
|
|
162
163
|
return
|
|
163
164
|
}
|
|
164
|
-
value := keeper.HasStorage(
|
|
165
|
+
value := keeper.HasStorage(ctx, path)
|
|
165
166
|
if !value {
|
|
166
167
|
return "false", nil
|
|
167
168
|
}
|
|
@@ -174,7 +175,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
174
175
|
if err != nil {
|
|
175
176
|
return
|
|
176
177
|
}
|
|
177
|
-
children := keeper.GetChildren(
|
|
178
|
+
children := keeper.GetChildren(ctx, path)
|
|
178
179
|
if children.Children == nil {
|
|
179
180
|
return "[]", nil
|
|
180
181
|
}
|
|
@@ -190,10 +191,10 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
190
191
|
if err != nil {
|
|
191
192
|
return
|
|
192
193
|
}
|
|
193
|
-
children := keeper.GetChildren(
|
|
194
|
+
children := keeper.GetChildren(ctx, path)
|
|
194
195
|
entries := make([]agoric.KVEntry, len(children.Children))
|
|
195
196
|
for i, child := range children.Children {
|
|
196
|
-
entry := keeper.GetEntry(
|
|
197
|
+
entry := keeper.GetEntry(ctx, fmt.Sprintf("%s.%s", path, child))
|
|
197
198
|
if !entry.HasValue() {
|
|
198
199
|
entries[i] = agoric.NewKVEntryWithNoValue(child)
|
|
199
200
|
} else {
|
|
@@ -212,10 +213,10 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
212
213
|
if err != nil {
|
|
213
214
|
return
|
|
214
215
|
}
|
|
215
|
-
children := keeper.GetChildren(
|
|
216
|
+
children := keeper.GetChildren(ctx, path)
|
|
216
217
|
vals := make([]*string, len(children.Children))
|
|
217
218
|
for i, child := range children.Children {
|
|
218
|
-
vals[i] = keeper.GetEntry(
|
|
219
|
+
vals[i] = keeper.GetEntry(ctx, fmt.Sprintf("%s.%s", path, child)).Value()
|
|
219
220
|
}
|
|
220
221
|
bytes, err := json.Marshal(vals)
|
|
221
222
|
if err != nil {
|
|
@@ -229,7 +230,7 @@ func (sh vstorageHandler) Receive(cctx *vm.ControllerContext, str string) (ret s
|
|
|
229
230
|
if err != nil {
|
|
230
231
|
return
|
|
231
232
|
}
|
|
232
|
-
children := keeper.GetChildren(
|
|
233
|
+
children := keeper.GetChildren(ctx, path)
|
|
233
234
|
if children.Children == nil {
|
|
234
235
|
return "0", nil
|
|
235
236
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package vstorage
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
"context"
|
|
4
5
|
"encoding/json"
|
|
5
6
|
"fmt"
|
|
6
7
|
"reflect"
|
|
@@ -14,7 +15,6 @@ import (
|
|
|
14
15
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
15
16
|
|
|
16
17
|
agorictypes "github.com/Agoric/agoric-sdk/golang/cosmos/types"
|
|
17
|
-
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
18
18
|
"github.com/tendermint/tendermint/libs/log"
|
|
19
19
|
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
|
20
20
|
dbm "github.com/tendermint/tm-db"
|
|
@@ -32,27 +32,27 @@ type testKit struct {
|
|
|
32
32
|
keeper Keeper
|
|
33
33
|
handler vstorageHandler
|
|
34
34
|
ctx sdk.Context
|
|
35
|
-
cctx
|
|
35
|
+
cctx context.Context
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
func makeTestKit() testKit {
|
|
39
39
|
keeper := NewKeeper(storeKey)
|
|
40
40
|
db := dbm.NewMemDB()
|
|
41
41
|
ms := store.NewCommitMultiStore(db)
|
|
42
|
-
ms.MountStoreWithDB(storeKey,
|
|
42
|
+
ms.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db)
|
|
43
43
|
err := ms.LoadLatestVersion()
|
|
44
44
|
if err != nil {
|
|
45
45
|
panic(err)
|
|
46
46
|
}
|
|
47
47
|
ctx := sdk.NewContext(ms, tmproto.Header{}, false, log.NewNopLogger())
|
|
48
|
-
cctx :=
|
|
48
|
+
cctx := sdk.WrapSDKContext(ctx)
|
|
49
49
|
handler := vstorageHandler{keeper}
|
|
50
50
|
return testKit{keeper, handler, ctx, cctx}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
func callReceive(
|
|
54
54
|
handler vstorageHandler,
|
|
55
|
-
cctx
|
|
55
|
+
cctx context.Context,
|
|
56
56
|
method string,
|
|
57
57
|
args []interface{},
|
|
58
58
|
) (string, error) {
|
package/ante/fee.go
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
package ante
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"fmt"
|
|
5
|
-
|
|
6
|
-
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
7
|
-
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
8
|
-
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
// DeductFeeDecorator deducts fees from the first signer of the tx
|
|
12
|
-
// If the first signer does not have the funds to pay for the fees, return with InsufficientFunds error
|
|
13
|
-
// Call next AnteHandler if fees successfully deducted
|
|
14
|
-
// CONTRACT: Tx must implement FeeTx interface to use DeductFeeDecorator
|
|
15
|
-
type DeductFeeDecorator struct {
|
|
16
|
-
ak AccountKeeper
|
|
17
|
-
bankKeeper types.BankKeeper
|
|
18
|
-
feegrantKeeper FeegrantKeeper
|
|
19
|
-
feeCollectorName string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
func NewDeductFeeDecorator(ak AccountKeeper, bk types.BankKeeper, fk FeegrantKeeper, feeCollectorName string) DeductFeeDecorator {
|
|
23
|
-
return DeductFeeDecorator{
|
|
24
|
-
ak: ak,
|
|
25
|
-
bankKeeper: bk,
|
|
26
|
-
feegrantKeeper: fk,
|
|
27
|
-
feeCollectorName: feeCollectorName,
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
func (dfd DeductFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
|
|
32
|
-
feeTx, ok := tx.(sdk.FeeTx)
|
|
33
|
-
if !ok {
|
|
34
|
-
return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx")
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if addr := dfd.ak.GetModuleAddress(dfd.feeCollectorName); addr == nil {
|
|
38
|
-
return ctx, fmt.Errorf("Fee collector module account (%s) has not been set", dfd.feeCollectorName)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
fee := feeTx.GetFee()
|
|
42
|
-
feePayer := feeTx.FeePayer()
|
|
43
|
-
feeGranter := feeTx.FeeGranter()
|
|
44
|
-
|
|
45
|
-
deductFeesFrom := feePayer
|
|
46
|
-
|
|
47
|
-
// if feegranter set deduct fee from feegranter account.
|
|
48
|
-
// this works with only when feegrant enabled.
|
|
49
|
-
if feeGranter != nil {
|
|
50
|
-
if dfd.feegrantKeeper == nil {
|
|
51
|
-
return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "fee grants are not enabled")
|
|
52
|
-
} else if !feeGranter.Equals(feePayer) {
|
|
53
|
-
err := dfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, tx.GetMsgs())
|
|
54
|
-
|
|
55
|
-
if err != nil {
|
|
56
|
-
return ctx, sdkerrors.Wrapf(err, "%s not allowed to pay fees from %s", feeGranter, feePayer)
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
deductFeesFrom = feeGranter
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
deductFeesFromAcc := dfd.ak.GetAccount(ctx, deductFeesFrom)
|
|
64
|
-
if deductFeesFromAcc == nil {
|
|
65
|
-
return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "fee payer address: %s does not exist", deductFeesFrom)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// deduct the fees
|
|
69
|
-
if !feeTx.GetFee().IsZero() {
|
|
70
|
-
err = DeductFees(dfd.bankKeeper, ctx, deductFeesFromAcc, feeTx.GetFee(), dfd.feeCollectorName)
|
|
71
|
-
if err != nil {
|
|
72
|
-
return ctx, err
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
events := sdk.Events{sdk.NewEvent(sdk.EventTypeTx,
|
|
77
|
-
sdk.NewAttribute(sdk.AttributeKeyFee, feeTx.GetFee().String()),
|
|
78
|
-
)}
|
|
79
|
-
ctx.EventManager().EmitEvents(events)
|
|
80
|
-
|
|
81
|
-
return next(ctx, tx, simulate)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// DeductFees deducts fees from the given account.
|
|
85
|
-
func DeductFees(bankKeeper types.BankKeeper, ctx sdk.Context, acc types.AccountI, fees sdk.Coins, feeCollectorName string) error {
|
|
86
|
-
if !fees.IsValid() {
|
|
87
|
-
return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "invalid fee amount: %s", fees)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
err := bankKeeper.SendCoinsFromAccountToModule(ctx, acc.GetAddress(), feeCollectorName, fees)
|
|
91
|
-
if err != nil {
|
|
92
|
-
return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, err.Error())
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return nil
|
|
96
|
-
}
|
|
File without changes
|