@agoric/cosmos 0.35.0-u21.0 → 0.35.0-u22.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 +11 -187
- package/Makefile +2 -2
- package/ante/ante.go +2 -2
- package/ante/inbound.go +1 -2
- package/ante/inbound_test.go +3 -1
- package/ante/vm_admission.go +1 -2
- package/app/app.go +255 -174
- package/app/encoding.go +6 -3
- package/app/export.go +50 -21
- package/app/genesis.go +7 -5
- package/app/params/encoding.go +1 -1
- package/app/params/proto.go +6 -4
- package/app/sim_test.go +11 -13
- package/app/txconfig/tx_config.go +169 -0
- package/app/upgrade.go +52 -97
- package/app/upgrade_test.go +1 -1
- package/cmd/agd/agvm.go +1 -1
- package/cmd/agd/main.go +1 -1
- package/cmd/libdaemon/main.go +2 -2
- package/daemon/cmd/root.go +99 -30
- package/daemon/cmd/root_test.go +12 -27
- package/daemon/main.go +2 -9
- package/git-revision.txt +1 -1
- package/go.mod +129 -109
- package/go.sum +228 -469
- package/package.json +2 -2
- package/proto/agoric/swingset/msgs.proto +46 -9
- package/proto/agoric/swingset/swingset.proto +7 -2
- package/proto/agoric/vbank/vbank.proto +1 -1
- package/proto/agoric/vibc/msgs.proto +4 -0
- package/tests/e2e/vbank/vbank_test.go +172 -0
- package/tests/integrations/types/aminojson_test.go +214 -0
- package/tests/integrations/vbank/vbank_test.go +348 -0
- package/third_party/proto/amino/amino.proto +6 -1
- package/third_party/proto/cosmos/base/v1beta1/coin.proto +18 -5
- package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +4 -8
- package/third_party/proto/ibc/core/channel/v1/channel.proto +42 -17
- package/third_party/proto/ibc/core/client/v1/client.proto +48 -40
- package/types/address_hooks.go +2 -2
- package/types/address_hooks_test.go +3 -3
- package/types/ibc_packet.go +3 -3
- package/types/ibc_packet_test.go +3 -3
- package/types/kv_entry_helpers.go +3 -3
- package/types/kv_entry_helpers_test.go +2 -2
- package/types/legacy_address_encoder.go +58 -0
- package/vm/proto_json_test.go +1 -1
- package/vm/server.go +2 -1
- package/x/swingset/abci.go +2 -2
- package/x/swingset/client/cli/tx.go +16 -14
- package/x/swingset/config.go +1 -1
- package/x/swingset/genesis.go +2 -1
- package/x/swingset/handler.go +2 -1
- package/x/swingset/keeper/extension_snapshotter.go +14 -5
- package/x/swingset/keeper/extension_snapshotter_test.go +1 -1
- package/x/swingset/keeper/keeper.go +21 -17
- package/x/swingset/keeper/keeper_test.go +10 -7
- package/x/swingset/keeper/msg_server.go +26 -5
- package/x/swingset/keeper/swing_store_exports_handler.go +1 -1
- package/x/swingset/keeper/swing_store_exports_handler_test.go +1 -1
- package/x/swingset/module.go +20 -22
- package/x/swingset/types/codec.go +10 -5
- package/x/swingset/types/default-params.go +13 -12
- package/x/swingset/types/expected_keepers.go +5 -4
- package/x/swingset/types/msgs.go +50 -36
- package/x/swingset/types/msgs.pb.go +60 -51
- package/x/swingset/types/params_test.go +21 -20
- package/x/swingset/types/swingset.pb.go +67 -61
- package/x/vbank/genesis.go +12 -8
- package/x/vbank/handler.go +2 -1
- package/x/vbank/keeper/grpc_query.go +4 -1
- package/x/vbank/keeper/keeper.go +108 -23
- package/x/vbank/keeper/querier.go +4 -1
- package/x/vbank/keeper/rewards.go +6 -2
- package/x/vbank/module.go +47 -75
- package/x/vbank/types/expected_keepers.go +15 -10
- package/x/vbank/types/key.go +3 -0
- package/x/vbank/types/params.go +4 -3
- package/x/vbank/types/vbank.pb.go +41 -40
- package/x/vbank/vbank.go +25 -10
- package/x/vbank/vbank_test.go +213 -154
- package/x/vibc/handler.go +2 -1
- package/x/vibc/keeper/keeper.go +10 -10
- package/x/vibc/keeper/migrations.go +1 -1
- package/x/vibc/keeper/triggers.go +1 -1
- package/x/vibc/module.go +5 -22
- package/x/vibc/types/codec.go +2 -1
- package/x/vibc/types/expected_keepers.go +7 -5
- package/x/vibc/types/ibc_module.go +5 -5
- package/x/vibc/types/msgs.go +30 -7
- package/x/vibc/types/msgs.pb.go +29 -25
- package/x/vibc/types/receiver.go +2 -2
- package/x/vlocalchain/handler.go +2 -1
- package/x/vlocalchain/keeper/keeper.go +17 -5
- package/x/vlocalchain/keeper/keeper_test.go +3 -2
- package/x/vlocalchain/types/expected_keepers.go +7 -4
- package/x/vlocalchain/vlocalchain_test.go +38 -26
- package/x/vstorage/genesis.go +10 -10
- package/x/vstorage/handler.go +2 -1
- package/x/vstorage/keeper/keeper.go +68 -46
- package/x/vstorage/keeper/keeper_test.go +35 -19
- package/x/vstorage/module.go +27 -13
- package/x/vstorage/testing/queue.go +5 -3
- package/x/vstorage/vstorage.go +2 -1
- package/x/vstorage/vstorage_test.go +21 -17
- package/x/vtransfer/genesis.go +1 -3
- package/x/vtransfer/handler.go +3 -2
- package/x/vtransfer/ibc_middleware.go +5 -5
- package/x/vtransfer/ibc_middleware_test.go +43 -29
- package/x/vtransfer/keeper/keeper.go +35 -33
- package/x/vtransfer/module.go +8 -11
- package/x/vtransfer/types/expected_keepers.go +3 -3
- package/x/vtransfer/utils_test.go +26 -11
- package/daemon/cmd/testnet.go +0 -539
|
@@ -3,6 +3,9 @@ package keeper
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
5
|
|
|
6
|
+
sdkioerrors "cosmossdk.io/errors"
|
|
7
|
+
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
8
|
+
|
|
6
9
|
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
7
10
|
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
|
|
8
11
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
@@ -43,6 +46,18 @@ func (keeper msgServer) routeAction(ctx sdk.Context, msg vm.ControllerAdmissionM
|
|
|
43
46
|
func (keeper msgServer) DeliverInbound(goCtx context.Context, msg *types.MsgDeliverInbound) (*types.MsgDeliverInboundResponse, error) {
|
|
44
47
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
45
48
|
|
|
49
|
+
if msg.Submitter.Empty() {
|
|
50
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidAddress, "Submitter address cannot be empty")
|
|
51
|
+
}
|
|
52
|
+
if len(msg.Messages) != len(msg.Nums) {
|
|
53
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, "Messages and Nums must be the same length")
|
|
54
|
+
}
|
|
55
|
+
for _, m := range msg.Messages {
|
|
56
|
+
if len(m) == 0 {
|
|
57
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrUnknownRequest, "Messages cannot be empty")
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
46
61
|
// msg.Nums and msg.Messages must be zipped into an array of [num, message] pairs.
|
|
47
62
|
messages := make([][]interface{}, len(msg.Messages))
|
|
48
63
|
for i, message := range msg.Messages {
|
|
@@ -190,18 +205,24 @@ type installBundleAction struct {
|
|
|
190
205
|
|
|
191
206
|
func (keeper msgServer) InstallBundle(goCtx context.Context, msg *types.MsgInstallBundle) (*types.MsgInstallBundleResponse, error) {
|
|
192
207
|
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
208
|
+
if err := msg.ValidateBasic(); err != nil {
|
|
209
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
|
|
210
|
+
}
|
|
193
211
|
|
|
194
|
-
err := msg.Uncompress()
|
|
195
|
-
if err != nil {
|
|
212
|
+
if err := msg.Uncompress(); err != nil {
|
|
196
213
|
return nil, err
|
|
197
214
|
}
|
|
215
|
+
|
|
216
|
+
if err := msg.ValidateBasic(); err != nil {
|
|
217
|
+
return nil, sdkioerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error())
|
|
218
|
+
}
|
|
219
|
+
|
|
198
220
|
action := installBundleAction{
|
|
199
221
|
MsgInstallBundle: msg,
|
|
200
222
|
}
|
|
201
223
|
|
|
202
|
-
err
|
|
203
|
-
|
|
204
|
-
if err != nil {
|
|
224
|
+
if err := keeper.routeAction(ctx, msg, action); err != nil {
|
|
225
|
+
// fmt.Fprintln(os.Stderr, "Returned from SwingSet", out, err)
|
|
205
226
|
return nil, err
|
|
206
227
|
}
|
|
207
228
|
|
|
@@ -10,10 +10,10 @@ import (
|
|
|
10
10
|
"regexp"
|
|
11
11
|
|
|
12
12
|
sdkioerrors "cosmossdk.io/errors"
|
|
13
|
+
"cosmossdk.io/log"
|
|
13
14
|
agoric "github.com/Agoric/agoric-sdk/golang/cosmos/types"
|
|
14
15
|
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
15
16
|
"github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/types"
|
|
16
|
-
"github.com/cometbft/cometbft/libs/log"
|
|
17
17
|
)
|
|
18
18
|
|
|
19
19
|
// This module abstracts the generation and handling of swing-store exports,
|
package/x/swingset/module.go
CHANGED
|
@@ -3,8 +3,8 @@ package swingset
|
|
|
3
3
|
import (
|
|
4
4
|
"context"
|
|
5
5
|
"encoding/json"
|
|
6
|
-
"fmt"
|
|
7
6
|
|
|
7
|
+
"cosmossdk.io/core/appmodule"
|
|
8
8
|
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
|
9
9
|
"github.com/spf13/cobra"
|
|
10
10
|
|
|
@@ -16,20 +16,28 @@ import (
|
|
|
16
16
|
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
17
17
|
"github.com/cosmos/cosmos-sdk/types/module"
|
|
18
18
|
|
|
19
|
-
abci "github.com/cometbft/cometbft/abci/types"
|
|
20
19
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
21
20
|
)
|
|
22
21
|
|
|
23
22
|
// type check to ensure the interface is properly implemented
|
|
24
23
|
var (
|
|
25
|
-
_ module.AppModule
|
|
26
|
-
_ module.AppModuleBasic
|
|
24
|
+
_ module.AppModule = AppModule{}
|
|
25
|
+
_ module.AppModuleBasic = AppModuleBasic{}
|
|
26
|
+
_ appmodule.HasBeginBlocker = AppModule{}
|
|
27
|
+
_ appmodule.HasEndBlocker = AppModule{}
|
|
28
|
+
_ module.HasGenesis = AppModule{}
|
|
27
29
|
)
|
|
28
30
|
|
|
29
31
|
// app module Basics object
|
|
30
32
|
type AppModuleBasic struct {
|
|
31
33
|
}
|
|
32
34
|
|
|
35
|
+
// IsAppModule implements the appmodule.AppModule interface.
|
|
36
|
+
func (am AppModule) IsAppModule() {}
|
|
37
|
+
|
|
38
|
+
// IsOnePerModuleType is a marker function just indicates that this is a one-per-module type.
|
|
39
|
+
func (am AppModule) IsOnePerModuleType() {}
|
|
40
|
+
|
|
33
41
|
func (AppModuleBasic) Name() string {
|
|
34
42
|
return ModuleName
|
|
35
43
|
}
|
|
@@ -128,26 +136,17 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
|
|
|
128
136
|
|
|
129
137
|
func (AppModule) ConsensusVersion() uint64 { return 2 }
|
|
130
138
|
|
|
131
|
-
func (am AppModule) BeginBlock(
|
|
139
|
+
func (am AppModule) BeginBlock(goCtx context.Context) error {
|
|
140
|
+
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
132
141
|
am.ensureControllerInited(ctx)
|
|
133
142
|
|
|
134
|
-
|
|
135
|
-
if err != nil {
|
|
136
|
-
fmt.Println("BeginBlock error:", err)
|
|
137
|
-
}
|
|
143
|
+
return BeginBlock(ctx, am.keeper)
|
|
138
144
|
}
|
|
139
145
|
|
|
140
|
-
func (am AppModule) EndBlock(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
if valUpdate != nil {
|
|
146
|
-
return valUpdate
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Prevent Cosmos SDK internal errors.
|
|
150
|
-
return []abci.ValidatorUpdate{}
|
|
146
|
+
func (am AppModule) EndBlock(goCtx context.Context) error {
|
|
147
|
+
ctx := sdk.UnwrapSDKContext(goCtx)
|
|
148
|
+
_, err := EndBlock(ctx, am.keeper)
|
|
149
|
+
return err
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
func (am *AppModule) checkSwingStoreExportSetup() {
|
|
@@ -156,7 +155,7 @@ func (am *AppModule) checkSwingStoreExportSetup() {
|
|
|
156
155
|
}
|
|
157
156
|
}
|
|
158
157
|
|
|
159
|
-
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage)
|
|
158
|
+
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) {
|
|
160
159
|
var genesisState types.GenesisState
|
|
161
160
|
cdc.MustUnmarshalJSON(data, &genesisState)
|
|
162
161
|
am.checkSwingStoreExportSetup()
|
|
@@ -164,7 +163,6 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.
|
|
|
164
163
|
if bootstrapNeeded {
|
|
165
164
|
am.setBootstrapNeeded()
|
|
166
165
|
}
|
|
167
|
-
return []abci.ValidatorUpdate{}
|
|
168
166
|
}
|
|
169
167
|
|
|
170
168
|
func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
|
|
@@ -2,6 +2,7 @@ package types
|
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
4
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
5
|
+
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
|
5
6
|
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
6
7
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
|
7
8
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
@@ -29,10 +30,12 @@ func init() {
|
|
|
29
30
|
|
|
30
31
|
// RegisterCodec registers concrete types on the Amino codec
|
|
31
32
|
func RegisterCodec(cdc *codec.LegacyAmino) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
legacy.RegisterAminoMsg(cdc, &MsgDeliverInbound{}, ModuleName+"/DeliverInbound")
|
|
34
|
+
legacy.RegisterAminoMsg(cdc, &MsgProvision{}, ModuleName+"/Provision")
|
|
35
|
+
legacy.RegisterAminoMsg(cdc, &MsgWalletAction{}, ModuleName+"/WalletAction")
|
|
36
|
+
legacy.RegisterAminoMsg(cdc, &MsgWalletSpendAction{}, ModuleName+"/WalletSpendAction")
|
|
37
|
+
legacy.RegisterAminoMsg(cdc, &MsgInstallBundle{}, ModuleName+"/InstallBundle")
|
|
38
|
+
cdc.RegisterConcrete(&CoreEvalProposal{}, ModuleName+"/CoreEvalProposal", nil)
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
// RegisterInterfaces registers the x/swingset interfaces types with the interface registry
|
|
@@ -42,8 +45,10 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) {
|
|
|
42
45
|
&MsgProvision{},
|
|
43
46
|
&MsgWalletAction{},
|
|
44
47
|
&MsgWalletSpendAction{},
|
|
48
|
+
&MsgInstallBundle{},
|
|
45
49
|
)
|
|
46
|
-
registry.
|
|
50
|
+
registry.RegisterInterface(
|
|
51
|
+
"cosmos.gov.v1beta1.Content",
|
|
47
52
|
(*govv1beta1.Content)(nil),
|
|
48
53
|
&CoreEvalProposal{},
|
|
49
54
|
)
|
|
@@ -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
|
)
|
|
6
7
|
|
|
@@ -43,15 +44,15 @@ const (
|
|
|
43
44
|
)
|
|
44
45
|
|
|
45
46
|
var (
|
|
46
|
-
DefaultBeansPerXsnapComputron =
|
|
47
|
+
DefaultBeansPerXsnapComputron = sdkmath.NewUint(100)
|
|
47
48
|
|
|
48
49
|
// DefaultBeansPerBlockComputeLimit is how many computron beans we allow
|
|
49
50
|
// before starting a new block. Some analysis (#3459) suggests this leads to
|
|
50
51
|
// about 2/3rds utilization, based on 5 sec voting time and up to 10 sec of
|
|
51
52
|
// computation.
|
|
52
|
-
DefaultBeansPerBlockComputeLimit =
|
|
53
|
+
DefaultBeansPerBlockComputeLimit = sdkmath.NewUint(8000000).Mul(DefaultBeansPerXsnapComputron)
|
|
53
54
|
// observed: 0.385 sec
|
|
54
|
-
DefaultBeansPerVatCreation =
|
|
55
|
+
DefaultBeansPerVatCreation = sdkmath.NewUint(300000).Mul(DefaultBeansPerXsnapComputron)
|
|
55
56
|
|
|
56
57
|
// Fees are represented as integer "beans", where each bean is a uniform
|
|
57
58
|
// fraction of this `fee_unit_price` as controlled by the below
|
|
@@ -63,14 +64,14 @@ var (
|
|
|
63
64
|
// Larger numbers make for smaller beans, and we expect values to be rather
|
|
64
65
|
// large for representing fees precisely in beans that each approximate
|
|
65
66
|
// a "picoUSD"--one trillionth of a USD.
|
|
66
|
-
DefaultBeansPerFeeUnit =
|
|
67
|
+
DefaultBeansPerFeeUnit = sdkmath.NewUint(1_000_000_000_000) // 1e12 (assumes $1 per BLD)
|
|
67
68
|
|
|
68
|
-
DefaultBeansPerInboundTx = DefaultBeansPerFeeUnit.Quo(
|
|
69
|
-
DefaultBeansPerMessage = DefaultBeansPerFeeUnit.Quo(
|
|
70
|
-
DefaultBeansPerMessageByte = DefaultBeansPerFeeUnit.Quo(
|
|
71
|
-
DefaultBeansPerMinFeeDebit = DefaultBeansPerFeeUnit.Quo(
|
|
72
|
-
DefaultBeansPerStorageByte = DefaultBeansPerFeeUnit.Quo(
|
|
73
|
-
DefaultBeansPerSmartWalletProvision = DefaultBeansPerFeeUnit
|
|
69
|
+
DefaultBeansPerInboundTx = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(100)) // 10e09, ~$0.01
|
|
70
|
+
DefaultBeansPerMessage = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(1_000)) // 1e09, ~$0.001
|
|
71
|
+
DefaultBeansPerMessageByte = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(50_000)) // 20e06, ~$0.00002
|
|
72
|
+
DefaultBeansPerMinFeeDebit = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(5)) // 200e09, ~$0.2
|
|
73
|
+
DefaultBeansPerStorageByte = DefaultBeansPerFeeUnit.Quo(sdkmath.NewUint(500)) // 2e09, ~$0.002
|
|
74
|
+
DefaultBeansPerSmartWalletProvision = DefaultBeansPerFeeUnit // 1e12, ~$1
|
|
74
75
|
|
|
75
76
|
DefaultBootstrapVatConfig = "@agoric/vm-config/decentral-core-config.json"
|
|
76
77
|
|
|
@@ -83,11 +84,11 @@ var (
|
|
|
83
84
|
NewQueueSize(QueueInbound, DefaultInboundQueueMax),
|
|
84
85
|
}
|
|
85
86
|
|
|
86
|
-
DefaultVatCleanupDefault =
|
|
87
|
+
DefaultVatCleanupDefault = sdkmath.NewUint(5)
|
|
87
88
|
// DefaultVatCleanupExports = DefaultVatCleanupDefault
|
|
88
89
|
// DefaultVatCleanupImports = DefaultVatCleanupDefault
|
|
89
90
|
// DefaultVatCleanupPromises = DefaultVatCleanupDefault
|
|
90
|
-
DefaultVatCleanupKv =
|
|
91
|
+
DefaultVatCleanupKv = sdkmath.NewUint(50)
|
|
91
92
|
// DefaultVatCleanupSnapshots = DefaultVatCleanupDefault
|
|
92
93
|
// DefaultVatCleanupTranscripts = DefaultVatCleanupDefault
|
|
93
94
|
DefaultVatCleanupBudget = []UintMapEntry{
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
package types
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
+
context "context"
|
|
5
|
+
|
|
4
6
|
sdkmath "cosmossdk.io/math"
|
|
5
7
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
6
|
-
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
7
8
|
)
|
|
8
9
|
|
|
9
10
|
type SmartWalletState uint8
|
|
@@ -16,9 +17,9 @@ const (
|
|
|
16
17
|
)
|
|
17
18
|
|
|
18
19
|
type AccountKeeper interface {
|
|
19
|
-
GetAccount(ctx
|
|
20
|
-
NewAccountWithAddress(ctx
|
|
21
|
-
SetAccount(ctx
|
|
20
|
+
GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
|
|
21
|
+
NewAccountWithAddress(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
|
|
22
|
+
SetAccount(ctx context.Context, acc sdk.AccountI)
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
type SwingSetKeeper interface {
|
package/x/swingset/types/msgs.go
CHANGED
|
@@ -9,11 +9,16 @@ import (
|
|
|
9
9
|
|
|
10
10
|
sdkioerrors "cosmossdk.io/errors"
|
|
11
11
|
sdkmath "cosmossdk.io/math"
|
|
12
|
+
"cosmossdk.io/x/tx/signing"
|
|
12
13
|
|
|
13
14
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
14
15
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
15
16
|
|
|
16
17
|
"github.com/Agoric/agoric-sdk/golang/cosmos/vm"
|
|
18
|
+
|
|
19
|
+
"google.golang.org/protobuf/proto"
|
|
20
|
+
"google.golang.org/protobuf/protoadapt"
|
|
21
|
+
"google.golang.org/protobuf/reflect/protoreflect"
|
|
17
22
|
)
|
|
18
23
|
|
|
19
24
|
const RouterKey = ModuleName // this was defined in your key.go file
|
|
@@ -32,6 +37,42 @@ var (
|
|
|
32
37
|
_ vm.ControllerAdmissionMsg = &MsgWalletSpendAction{}
|
|
33
38
|
)
|
|
34
39
|
|
|
40
|
+
// Replacing msg.GetSigners() but before we can adopt AddressString.
|
|
41
|
+
// https://github.com/cosmos/cosmos-sdk/issues/20077#issuecomment-2062601533
|
|
42
|
+
func createSignerFieldFunc(fieldName protoreflect.Name) signing.GetSignersFunc {
|
|
43
|
+
return func(msgIn proto.Message) ([][]byte, error) {
|
|
44
|
+
msg := msgIn.ProtoReflect()
|
|
45
|
+
if !msg.Has(msg.Descriptor().Fields().ByName(fieldName)) {
|
|
46
|
+
return nil, sdkioerrors.Wrapf(sdkerrors.ErrInvalidRequest, "message %T does not have field %s", msgIn, fieldName)
|
|
47
|
+
}
|
|
48
|
+
addr := msg.Get(msg.Descriptor().Fields().ByName(fieldName)).Interface().([]byte)
|
|
49
|
+
return [][]byte{addr}, nil
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
func DefineCustomGetSigners(options *signing.Options) {
|
|
54
|
+
options.DefineCustomGetSigners(
|
|
55
|
+
proto.MessageName(protoadapt.MessageV2Of(&MsgDeliverInbound{})),
|
|
56
|
+
createSignerFieldFunc("submitter"),
|
|
57
|
+
)
|
|
58
|
+
options.DefineCustomGetSigners(
|
|
59
|
+
proto.MessageName(protoadapt.MessageV2Of(&MsgProvision{})),
|
|
60
|
+
createSignerFieldFunc("submitter"),
|
|
61
|
+
)
|
|
62
|
+
options.DefineCustomGetSigners(
|
|
63
|
+
proto.MessageName(protoadapt.MessageV2Of(&MsgInstallBundle{})),
|
|
64
|
+
createSignerFieldFunc("submitter"),
|
|
65
|
+
)
|
|
66
|
+
options.DefineCustomGetSigners(
|
|
67
|
+
proto.MessageName(protoadapt.MessageV2Of(&MsgWalletAction{})),
|
|
68
|
+
createSignerFieldFunc("owner"),
|
|
69
|
+
)
|
|
70
|
+
options.DefineCustomGetSigners(
|
|
71
|
+
proto.MessageName(protoadapt.MessageV2Of(&MsgWalletSpendAction{})),
|
|
72
|
+
createSignerFieldFunc("owner"),
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
|
|
35
76
|
// Contextual information about the message source of an action on an inbound queue.
|
|
36
77
|
// This context should be unique per inboundQueueRecord.
|
|
37
78
|
type ActionContext struct {
|
|
@@ -46,6 +87,7 @@ type ActionContext struct {
|
|
|
46
87
|
// actionContext unique. (for example a counter per block and source module).
|
|
47
88
|
MsgIdx int `json:"msgIdx"`
|
|
48
89
|
}
|
|
90
|
+
|
|
49
91
|
type InboundQueueRecord struct {
|
|
50
92
|
Action vm.Jsonable `json:"action"`
|
|
51
93
|
Context ActionContext `json:"context"`
|
|
@@ -172,18 +214,6 @@ func (msg MsgDeliverInbound) ValidateBasic() error {
|
|
|
172
214
|
return nil
|
|
173
215
|
}
|
|
174
216
|
|
|
175
|
-
// GetSignBytes encodes the message for signing
|
|
176
|
-
func (msg MsgDeliverInbound) GetSignBytes() []byte {
|
|
177
|
-
// FIXME: This compensates for Amino maybe returning nil instead of empty slices.
|
|
178
|
-
if msg.Messages == nil {
|
|
179
|
-
msg.Messages = []string{}
|
|
180
|
-
}
|
|
181
|
-
if msg.Nums == nil {
|
|
182
|
-
msg.Nums = []uint64{}
|
|
183
|
-
}
|
|
184
|
-
return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
|
|
185
|
-
}
|
|
186
|
-
|
|
187
217
|
// GetSigners defines whose signature is required
|
|
188
218
|
func (msg MsgDeliverInbound) GetSigners() []sdk.AccAddress {
|
|
189
219
|
return []sdk.AccAddress{msg.Submitter}
|
|
@@ -222,32 +252,17 @@ func (msg MsgWalletAction) IsHighPriority(ctx sdk.Context, data interface{}) (bo
|
|
|
222
252
|
return false, nil
|
|
223
253
|
}
|
|
224
254
|
|
|
255
|
+
// GetSigners defines whose signature is required
|
|
225
256
|
func (msg MsgWalletAction) GetSigners() []sdk.AccAddress {
|
|
226
257
|
return []sdk.AccAddress{msg.Owner}
|
|
227
258
|
}
|
|
228
259
|
|
|
229
|
-
// GetSignBytes encodes the message for signing
|
|
230
|
-
func (msg MsgWalletAction) GetSignBytes() []byte {
|
|
231
|
-
return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
|
|
232
|
-
}
|
|
233
|
-
|
|
234
260
|
// Route should return the name of the module
|
|
235
261
|
func (msg MsgWalletAction) Route() string { return RouterKey }
|
|
236
262
|
|
|
237
263
|
// Type should return the action
|
|
238
264
|
func (msg MsgWalletAction) Type() string { return "wallet_action" }
|
|
239
265
|
|
|
240
|
-
// Route should return the name of the module
|
|
241
|
-
func (msg MsgWalletSpendAction) Route() string { return RouterKey }
|
|
242
|
-
|
|
243
|
-
// Type should return the action
|
|
244
|
-
func (msg MsgWalletSpendAction) Type() string { return "wallet_spend_action" }
|
|
245
|
-
|
|
246
|
-
// GetSignBytes encodes the message for signing
|
|
247
|
-
func (msg MsgWalletSpendAction) GetSignBytes() []byte {
|
|
248
|
-
return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
|
|
249
|
-
}
|
|
250
|
-
|
|
251
266
|
// ValidateBasic runs stateless checks on the message
|
|
252
267
|
func (msg MsgWalletAction) ValidateBasic() error {
|
|
253
268
|
if msg.Owner.Empty() {
|
|
@@ -300,10 +315,17 @@ func (msg MsgWalletSpendAction) IsHighPriority(ctx sdk.Context, data interface{}
|
|
|
300
315
|
return keeper.IsHighPriorityAddress(ctx, msg.Owner)
|
|
301
316
|
}
|
|
302
317
|
|
|
318
|
+
// GetSigners defines whose signature is required
|
|
303
319
|
func (msg MsgWalletSpendAction) GetSigners() []sdk.AccAddress {
|
|
304
320
|
return []sdk.AccAddress{msg.Owner}
|
|
305
321
|
}
|
|
306
322
|
|
|
323
|
+
// Route should return the name of the module
|
|
324
|
+
func (msg MsgWalletSpendAction) Route() string { return RouterKey }
|
|
325
|
+
|
|
326
|
+
// Type should return the action
|
|
327
|
+
func (msg MsgWalletSpendAction) Type() string { return "wallet_spend_action" }
|
|
328
|
+
|
|
307
329
|
// ValidateBasic runs stateless checks on the message
|
|
308
330
|
func (msg MsgWalletSpendAction) ValidateBasic() error {
|
|
309
331
|
if msg.Owner.Empty() {
|
|
@@ -368,14 +390,6 @@ func (msg MsgProvision) IsHighPriority(ctx sdk.Context, data interface{}) (bool,
|
|
|
368
390
|
return false, nil
|
|
369
391
|
}
|
|
370
392
|
|
|
371
|
-
// GetSignBytes encodes the message for signing
|
|
372
|
-
func (msg MsgProvision) GetSignBytes() []byte {
|
|
373
|
-
if msg.PowerFlags == nil {
|
|
374
|
-
msg.PowerFlags = []string{}
|
|
375
|
-
}
|
|
376
|
-
return sdk.MustSortJSON(ModuleAminoCdc.MustMarshalJSON(&msg))
|
|
377
|
-
}
|
|
378
|
-
|
|
379
393
|
// GetSigners defines whose signature is required
|
|
380
394
|
func (msg MsgProvision) GetSigners() []sdk.AccAddress {
|
|
381
395
|
return []sdk.AccAddress{msg.Submitter}
|
|
@@ -7,6 +7,7 @@ import (
|
|
|
7
7
|
context "context"
|
|
8
8
|
fmt "fmt"
|
|
9
9
|
github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types"
|
|
10
|
+
_ "github.com/cosmos/cosmos-sdk/types/tx/amino"
|
|
10
11
|
_ "github.com/cosmos/gogoproto/gogoproto"
|
|
11
12
|
grpc1 "github.com/cosmos/gogoproto/grpc"
|
|
12
13
|
proto "github.com/cosmos/gogoproto/proto"
|
|
@@ -553,57 +554,65 @@ func init() {
|
|
|
553
554
|
func init() { proto.RegisterFile("agoric/swingset/msgs.proto", fileDescriptor_788baa062b181a57) }
|
|
554
555
|
|
|
555
556
|
var fileDescriptor_788baa062b181a57 = []byte{
|
|
556
|
-
//
|
|
557
|
-
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff,
|
|
558
|
-
0x14,
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
557
|
+
// 915 bytes of a gzipped FileDescriptorProto
|
|
558
|
+
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcf, 0x6f, 0xe3, 0x44,
|
|
559
|
+
0x14, 0xae, 0xeb, 0x52, 0x36, 0xaf, 0xd9, 0xb6, 0x31, 0x4b, 0x9b, 0x75, 0x21, 0x93, 0x35, 0x5a,
|
|
560
|
+
0x29, 0x44, 0x34, 0x91, 0x80, 0x03, 0xca, 0x72, 0xa9, 0x85, 0x10, 0x3d, 0x44, 0x5a, 0xb2, 0x42,
|
|
561
|
+
0xa0, 0x45, 0x55, 0x70, 0x9c, 0xc1, 0x58, 0xb5, 0x67, 0xa2, 0x8c, 0xd3, 0xd2, 0x45, 0xe2, 0xc2,
|
|
562
|
+
0x0d, 0x09, 0x89, 0x33, 0x27, 0xc4, 0x89, 0x63, 0xff, 0x02, 0x4e, 0x1c, 0x38, 0xae, 0xc4, 0x85,
|
|
563
|
+
0xd3, 0x68, 0xd5, 0x1e, 0x8a, 0xcc, 0x2d, 0x47, 0x4e, 0xc8, 0x33, 0xf6, 0xd8, 0x71, 0xbb, 0x94,
|
|
564
|
+
0xc3, 0x4a, 0xcb, 0x25, 0xf1, 0xfb, 0xde, 0xcf, 0x6f, 0xde, 0x7b, 0x63, 0x83, 0xe9, 0x78, 0x74,
|
|
565
|
+
0xea, 0xbb, 0x5d, 0x76, 0xec, 0x13, 0x8f, 0xe1, 0xa8, 0x1b, 0x32, 0x8f, 0x75, 0x26, 0x53, 0x1a,
|
|
566
|
+
0x51, 0x63, 0x43, 0xea, 0x3a, 0x99, 0xce, 0xac, 0x39, 0xa1, 0x4f, 0x68, 0x57, 0xfc, 0x4a, 0x1b,
|
|
567
|
+
0xf3, 0x96, 0x47, 0x3d, 0x2a, 0x1e, 0xbb, 0xc9, 0x93, 0x44, 0xad, 0xef, 0x74, 0xa8, 0xf5, 0x99,
|
|
568
|
+
0xf7, 0x1e, 0x0e, 0xfc, 0x23, 0x3c, 0xdd, 0x27, 0x23, 0x3a, 0x23, 0x63, 0xe3, 0x13, 0xb8, 0x11,
|
|
569
|
+
0x62, 0xc6, 0x1c, 0x0f, 0xb3, 0xba, 0xd6, 0xd4, 0x5b, 0x15, 0xfb, 0xdd, 0x98, 0x23, 0x85, 0xcd,
|
|
570
|
+
0x39, 0xda, 0x38, 0x71, 0xc2, 0xa0, 0x67, 0x65, 0x88, 0xf5, 0xc3, 0xc5, 0x69, 0xfb, 0x25, 0x32,
|
|
571
|
+
0x0b, 0x82, 0x21, 0x0b, 0x7c, 0x17, 0x0f, 0x1d, 0x36, 0xc4, 0xe1, 0x24, 0x3a, 0xf9, 0xf9, 0xe2,
|
|
572
|
+
0xb4, 0xad, 0x0d, 0x94, 0xa7, 0xf1, 0x01, 0xac, 0x90, 0x59, 0xc8, 0xea, 0xcb, 0x4d, 0xbd, 0xb5,
|
|
573
|
+
0x62, 0xbf, 0x1d, 0x73, 0x24, 0xe4, 0x39, 0x47, 0x6b, 0x32, 0x62, 0x22, 0x5d, 0x13, 0x4d, 0x78,
|
|
574
|
+
0x18, 0x6f, 0x80, 0xee, 0xb8, 0x87, 0x75, 0xbd, 0xa9, 0xb5, 0x56, 0x6c, 0x33, 0xe6, 0x28, 0x11,
|
|
575
|
+
0xe7, 0x1c, 0x81, 0x8c, 0xe3, 0xb8, 0x87, 0x96, 0x34, 0x4f, 0x70, 0xe3, 0x1b, 0x0d, 0x2a, 0x6c,
|
|
576
|
+
0x36, 0x0a, 0xfd, 0x28, 0xc2, 0xd3, 0xfa, 0x4a, 0x53, 0x6b, 0x55, 0x6d, 0x1c, 0x73, 0x94, 0x83,
|
|
577
|
+
0x73, 0x8e, 0x36, 0xa5, 0xab, 0x82, 0xac, 0xbf, 0x39, 0xda, 0xf5, 0xfc, 0xe8, 0x8b, 0xd9, 0xa8,
|
|
578
|
+
0xe3, 0xd2, 0xb0, 0xeb, 0x52, 0x16, 0x52, 0x96, 0xfe, 0xed, 0xb2, 0xf1, 0x61, 0x37, 0x3a, 0x99,
|
|
579
|
+
0x60, 0xd6, 0xd9, 0x73, 0xdd, 0xbd, 0xf1, 0x78, 0x8a, 0x19, 0x4b, 0x0a, 0x5f, 0x0f, 0xb0, 0xe7,
|
|
580
|
+
0xb8, 0x27, 0x43, 0x47, 0x42, 0x83, 0x3c, 0x45, 0xaf, 0xf9, 0xe7, 0x8f, 0x68, 0xe9, 0xdb, 0x8b,
|
|
581
|
+
0xd3, 0xf6, 0xb6, 0xea, 0xe2, 0xe2, 0xc9, 0x5b, 0x3b, 0x70, 0xfb, 0x52, 0x3b, 0x06, 0x98, 0x4d,
|
|
582
|
+
0x28, 0x61, 0xd8, 0xfa, 0x45, 0x83, 0x8d, 0x3e, 0xf3, 0x3e, 0x76, 0x82, 0x00, 0x47, 0x7b, 0x6e,
|
|
583
|
+
0xe4, 0x53, 0x62, 0x30, 0x78, 0x81, 0x1e, 0x13, 0x3c, 0xad, 0x6b, 0x82, 0xd3, 0x41, 0xcc, 0x91,
|
|
584
|
+
0x04, 0xe6, 0x1c, 0x55, 0x25, 0x1f, 0x21, 0x3e, 0x1b, 0x2e, 0x32, 0xb4, 0xb1, 0x05, 0xab, 0x8e,
|
|
585
|
+
0x48, 0x5f, 0x5f, 0x6e, 0x6a, 0xad, 0xca, 0x20, 0x95, 0x7a, 0x8d, 0x8c, 0xdf, 0xcb, 0x8a, 0x5f,
|
|
586
|
+
0xb1, 0x58, 0xeb, 0x36, 0x6c, 0x97, 0xea, 0x57, 0xdc, 0x7e, 0xd7, 0xe0, 0x96, 0xd2, 0x3d, 0x98,
|
|
587
|
+
0x60, 0x32, 0x7e, 0x9e, 0x04, 0xef, 0x40, 0x95, 0x25, 0x35, 0x0c, 0x17, 0x68, 0xae, 0xb1, 0xbc,
|
|
588
|
+
0xae, 0xde, 0x6b, 0x19, 0x57, 0xb3, 0xc4, 0xb5, 0x50, 0xbc, 0xd5, 0x80, 0x57, 0xae, 0x22, 0xa5,
|
|
589
|
+
0x58, 0xff, 0xa5, 0x43, 0xb5, 0xcf, 0xbc, 0xfb, 0x53, 0x7a, 0xe4, 0xb3, 0x84, 0xed, 0x3d, 0xb8,
|
|
590
|
+
0x41, 0x7c, 0xf7, 0x90, 0x38, 0x21, 0x16, 0x84, 0x2b, 0x36, 0x4a, 0x36, 0x2f, 0xc3, 0xf2, 0xcd,
|
|
591
|
+
0xcb, 0x10, 0x6b, 0xa0, 0x94, 0xc6, 0x57, 0xf0, 0x62, 0xca, 0x43, 0x14, 0x5c, 0xb5, 0x9d, 0x98,
|
|
592
|
+
0xa3, 0x0c, 0x9a, 0x73, 0xb4, 0x9e, 0xae, 0x86, 0x04, 0x9e, 0xcd, 0x81, 0x65, 0xe1, 0x8d, 0xaf,
|
|
593
|
+
0x61, 0x6d, 0x42, 0x8f, 0xf1, 0x74, 0xf8, 0x79, 0xe0, 0x78, 0xac, 0xae, 0x8b, 0x6b, 0xe3, 0xe0,
|
|
594
|
+
0x8c, 0x23, 0xb8, 0x9f, 0xc0, 0xef, 0x27, 0x68, 0xcc, 0x11, 0x4c, 0x94, 0x34, 0xe7, 0xa8, 0x26,
|
|
595
|
+
0x2b, 0xca, 0xb1, 0xa7, 0xae, 0xfe, 0x4f, 0x17, 0xa7, 0xed, 0x82, 0xaf, 0x5c, 0xed, 0x02, 0xf0,
|
|
596
|
+
0x3f, 0xd9, 0xf0, 0x9d, 0x6c, 0x2a, 0x0c, 0x35, 0x15, 0xaa, 0xb9, 0xd6, 0x96, 0x18, 0x71, 0x25,
|
|
597
|
+
0xab, 0x29, 0xf8, 0x55, 0x87, 0xcd, 0x3e, 0xf3, 0xf6, 0x09, 0x8b, 0x9c, 0x20, 0xb0, 0x67, 0x64,
|
|
598
|
+
0x1c, 0x60, 0xe3, 0x1d, 0x58, 0x1d, 0x89, 0xa7, 0x74, 0x0e, 0x9a, 0x31, 0x47, 0x29, 0x32, 0xe7,
|
|
599
|
+
0xe8, 0xa6, 0x24, 0x22, 0xe5, 0xf4, 0xa2, 0x4b, 0xb5, 0xa5, 0x93, 0x58, 0x7e, 0x3e, 0x27, 0x61,
|
|
600
|
+
0x1c, 0x41, 0xcd, 0xa5, 0xe1, 0x24, 0x81, 0xf1, 0x78, 0x98, 0x52, 0xd1, 0x45, 0x31, 0xfb, 0x31,
|
|
601
|
+
0x47, 0x9b, 0xb9, 0xd2, 0xce, 0x48, 0x6d, 0xcb, 0x9a, 0xca, 0x1a, 0x2b, 0xe9, 0xfd, 0x25, 0x7b,
|
|
602
|
+
0xc9, 0xf9, 0x12, 0x6c, 0x7c, 0x0a, 0xb5, 0x19, 0x29, 0x64, 0x66, 0xfe, 0x23, 0x2c, 0xc6, 0x41,
|
|
603
|
+
0xb7, 0x3b, 0x49, 0xde, 0xa2, 0xf2, 0x81, 0xff, 0x08, 0x8b, 0xe0, 0x65, 0x30, 0x0d, 0x5e, 0x86,
|
|
604
|
+
0x7b, 0x3b, 0x49, 0x6b, 0xb7, 0x54, 0x6b, 0x17, 0x3a, 0x66, 0x99, 0x50, 0x2f, 0x77, 0x31, 0x6b,
|
|
605
|
+
0xf1, 0x9b, 0x4f, 0x74, 0xd0, 0xfb, 0xcc, 0x33, 0x0e, 0xe0, 0xe6, 0x62, 0x9b, 0xef, 0x74, 0x4a,
|
|
606
|
+
0xef, 0xee, 0x4e, 0x39, 0x86, 0xf9, 0xfa, 0xb5, 0x26, 0x59, 0x1a, 0xe3, 0x33, 0x58, 0x2f, 0xbd,
|
|
607
|
+
0xca, 0xad, 0xab, 0x9c, 0x17, 0x6d, 0xcc, 0xf6, 0xf5, 0x36, 0x2a, 0xc3, 0x43, 0xa8, 0x2e, 0xbc,
|
|
608
|
+
0x7f, 0x9a, 0x57, 0xf9, 0x16, 0x2d, 0xcc, 0xd6, 0x75, 0x16, 0x2a, 0xb6, 0x0f, 0xb5, 0xcb, 0xf7,
|
|
609
|
+
0xff, 0xdd, 0xa7, 0xbb, 0x17, 0xcc, 0xcc, 0xdd, 0xff, 0x64, 0xa6, 0x52, 0x7d, 0x08, 0x95, 0xfc,
|
|
610
|
+
0xd2, 0x7d, 0xf5, 0x2a, 0x5f, 0xa5, 0x36, 0xef, 0xfe, 0xab, 0x3a, 0x0b, 0x69, 0x7f, 0xf4, 0xdb,
|
|
611
|
+
0x59, 0x43, 0x7b, 0x7c, 0xd6, 0xd0, 0x9e, 0x9c, 0x35, 0xb4, 0xef, 0xcf, 0x1b, 0x4b, 0x8f, 0xcf,
|
|
612
|
+
0x1b, 0x4b, 0x7f, 0x9c, 0x37, 0x96, 0x1e, 0xde, 0x2b, 0xec, 0xd5, 0x9e, 0xfc, 0x8a, 0x93, 0x11,
|
|
613
|
+
0xc5, 0x5e, 0x79, 0x34, 0x70, 0x88, 0x97, 0x2d, 0xdc, 0x97, 0xf9, 0x07, 0x9e, 0x58, 0xb8, 0xd1,
|
|
614
|
+
0xaa, 0xf8, 0x50, 0x7b, 0xeb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7c, 0xfc, 0xce, 0xd6, 0x00,
|
|
615
|
+
0x0a, 0x00, 0x00,
|
|
607
616
|
}
|
|
608
617
|
|
|
609
618
|
// Reference imports to suppress errors if they are not otherwise used.
|