@agoric/cosmos 0.35.0-u12.0 → 0.35.0-u14.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.
Files changed (91) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/Makefile +25 -12
  3. package/ante/ante.go +7 -5
  4. package/ante/inbound_test.go +8 -0
  5. package/app/app.go +139 -108
  6. package/app/export.go +13 -9
  7. package/app/sim_test.go +4 -4
  8. package/cmd/agd/main.go +5 -3
  9. package/cmd/libdaemon/main.go +5 -2
  10. package/daemon/cmd/genaccounts.go +13 -9
  11. package/daemon/cmd/root.go +38 -17
  12. package/daemon/cmd/root_test.go +1 -1
  13. package/daemon/cmd/testnet.go +17 -6
  14. package/daemon/main.go +3 -2
  15. package/git-revision.txt +1 -1
  16. package/go.mod +117 -76
  17. package/go.sum +858 -210
  18. package/package.json +3 -3
  19. package/proto/agoric/vstorage/query.proto +53 -1
  20. package/scripts/protocgen.sh +12 -1
  21. package/third_party/proto/buf.yaml +1 -0
  22. package/third_party/proto/cosmos/base/query/v1beta1/pagination.proto +4 -1
  23. package/third_party/proto/cosmos/base/v1beta1/coin.proto +7 -4
  24. package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +16 -6
  25. package/third_party/proto/cosmos_proto/cosmos.proto +97 -0
  26. package/third_party/proto/google/api/annotations.proto +1 -1
  27. package/third_party/proto/google/api/http.proto +181 -120
  28. package/third_party/proto/google/api/httpbody.proto +9 -6
  29. package/third_party/proto/google/protobuf/any.proto +1 -7
  30. package/third_party/proto/ibc/core/channel/v1/channel.proto +15 -1
  31. package/third_party/proto/ibc/core/client/v1/client.proto +9 -6
  32. package/upgradegaia.sh +13 -4
  33. package/vm/action.go +133 -0
  34. package/vm/action_test.go +129 -0
  35. package/vm/controller.go +9 -16
  36. package/vm/core_proposals.go +31 -0
  37. package/x/lien/keeper/account.go +16 -11
  38. package/x/lien/keeper/keeper.go +5 -4
  39. package/x/lien/keeper/keeper_test.go +9 -9
  40. package/x/lien/lien.go +6 -4
  41. package/x/lien/lien_test.go +20 -16
  42. package/x/swingset/abci.go +25 -33
  43. package/x/swingset/client/cli/query.go +2 -2
  44. package/x/swingset/client/cli/tx.go +48 -33
  45. package/x/swingset/client/proposal_handler.go +2 -17
  46. package/x/swingset/keeper/keeper.go +69 -15
  47. package/x/swingset/keeper/keeper_test.go +1 -1
  48. package/x/swingset/keeper/migrations.go +7 -2
  49. package/x/swingset/keeper/msg_server.go +66 -49
  50. package/x/swingset/keeper/proposal.go +14 -8
  51. package/x/swingset/keeper/querier.go +14 -6
  52. package/x/swingset/keeper/swing_store_exports_handler.go +5 -1
  53. package/x/swingset/proposal_handler.go +3 -3
  54. package/x/swingset/swingset.go +4 -2
  55. package/x/swingset/types/codec.go +2 -2
  56. package/x/swingset/types/default-params.go +22 -16
  57. package/x/swingset/types/expected_keepers.go +11 -0
  58. package/x/swingset/types/msgs.go +43 -2
  59. package/x/swingset/types/msgs.pb.go +16 -16
  60. package/x/swingset/types/params.go +74 -0
  61. package/x/swingset/types/params_test.go +116 -0
  62. package/x/swingset/types/proposal.go +5 -5
  63. package/x/swingset/types/types.go +30 -28
  64. package/x/vbank/keeper/keeper.go +3 -2
  65. package/x/vbank/keeper/querier.go +6 -2
  66. package/x/vbank/keeper/rewards.go +1 -1
  67. package/x/vbank/vbank.go +19 -17
  68. package/x/vbank/vbank_test.go +18 -18
  69. package/x/vibc/handler.go +3 -8
  70. package/x/vibc/ibc.go +79 -126
  71. package/x/vibc/keeper/keeper.go +19 -18
  72. package/x/vibc/types/expected_keepers.go +13 -5
  73. package/x/vibc/types/msgs.go +1 -1
  74. package/x/vibc/types/msgs.pb.go +1 -1
  75. package/x/vstorage/README.md +138 -0
  76. package/x/vstorage/capdata/capdata.go +298 -0
  77. package/x/vstorage/capdata/capdata_test.go +352 -0
  78. package/x/vstorage/client/cli/query.go +51 -4
  79. package/x/vstorage/keeper/grpc_query.go +221 -0
  80. package/x/vstorage/keeper/keeper.go +3 -2
  81. package/x/vstorage/keeper/keeper_grpc_test.go +300 -0
  82. package/x/vstorage/keeper/keeper_test.go +1 -1
  83. package/x/vstorage/keeper/querier.go +6 -2
  84. package/x/vstorage/keeper/querier_test.go +112 -0
  85. package/x/vstorage/types/query.pb.go +646 -36
  86. package/x/vstorage/types/query.pb.gw.go +119 -0
  87. package/x/vstorage/vstorage.go +16 -15
  88. package/x/vstorage/vstorage_test.go +5 -5
  89. package/x/swingset/legacy/v32/params.go +0 -37
  90. package/x/swingset/legacy/v32/params_test.go +0 -133
  91. /package/{src/index.cjs → index.cjs} +0 -0
package/vm/action.go ADDED
@@ -0,0 +1,133 @@
1
+ package vm
2
+
3
+ import (
4
+ "reflect"
5
+ "strconv"
6
+ "time"
7
+
8
+ sdk "github.com/cosmos/cosmos-sdk/types"
9
+ )
10
+
11
+ var (
12
+ zeroTime = time.Time{}
13
+ actionHeaderType = reflect.TypeOf(ActionHeader{})
14
+ _ Action = &ActionHeader{}
15
+ )
16
+
17
+ // Jsonable is a value, j, that can be passed through json.Marshal(j).
18
+ type Jsonable interface{}
19
+
20
+ type Action interface {
21
+ GetActionHeader() ActionHeader
22
+ }
23
+
24
+ // ActionPusher enqueues data for later consumption by the controller.
25
+ type ActionPusher func(ctx sdk.Context, action Action) error
26
+
27
+ // ActionHeader should be embedded in all actions. It is populated by PopulateAction.
28
+ type ActionHeader struct {
29
+ // Type defaults to the `actionType:"..."` tag of the embedder's ActionHeader field.
30
+ Type string `json:"type"`
31
+ // BlockHeight defaults to sdk.Context.BlockHeight().
32
+ BlockHeight int64 `json:"blockHeight,omitempty"`
33
+ // BlockTime defaults to sdk.Context.BlockTime().Unix().
34
+ BlockTime int64 `json:"blockTime,omitempty"`
35
+ }
36
+
37
+ func (ah ActionHeader) GetActionHeader() ActionHeader {
38
+ return ah
39
+ }
40
+
41
+ // SetActionHeaderFromContext provides defaults to an ActionHeader.
42
+ func SetActionHeaderFromContext(ctx sdk.Context, actionType string, ah *ActionHeader) {
43
+ // Default the action type.
44
+ if len(ah.Type) == 0 {
45
+ ah.Type = actionType
46
+ }
47
+
48
+ // Default the block height.
49
+ if ah.BlockHeight == 0 {
50
+ ah.BlockHeight = ctx.BlockHeight()
51
+ }
52
+
53
+ if ah.BlockTime == 0 {
54
+ // Only default to a non-zero block time.
55
+ if blockTime := ctx.BlockTime(); blockTime != zeroTime {
56
+ ah.BlockTime = blockTime.Unix()
57
+ }
58
+ }
59
+ }
60
+
61
+ // PopulateAction returns a clone of action in which empty/zero-valued fields
62
+ // in its embedded ActionHeader have been populated using the corresponding
63
+ // `actionType:"..."` tag and the provided ctx, and its own empty/zero-valued
64
+ // fields have been populated as specified by their `default:"..."` tags.
65
+ func PopulateAction(ctx sdk.Context, action Action) Action {
66
+ oldActionDesc := reflect.Indirect(reflect.ValueOf(action))
67
+ if oldActionDesc.Kind() != reflect.Struct {
68
+ return action
69
+ }
70
+
71
+ // Shallow copy to a new value.
72
+ newActionDescPtr := reflect.New(oldActionDesc.Type())
73
+ newActionDesc := reflect.Indirect(newActionDescPtr)
74
+ for i := 0; i < newActionDesc.NumField(); i++ {
75
+ oldField := oldActionDesc.Field(i)
76
+ field := newActionDesc.Field(i)
77
+ fieldType := newActionDesc.Type().Field(i)
78
+ if !field.CanSet() {
79
+ continue
80
+ }
81
+
82
+ // Copy from original.
83
+ field.Set(oldField)
84
+
85
+ // Populate any ActionHeader struct.
86
+ var headerPtr *ActionHeader
87
+ if fieldType.Type == actionHeaderType {
88
+ headerPtr = field.Addr().Interface().(*ActionHeader)
89
+ } else if fieldType.Type == reflect.PtrTo(actionHeaderType) {
90
+ if field.IsNil() {
91
+ headerPtr = &ActionHeader{}
92
+ } else {
93
+ headerPtr = field.Interface().(*ActionHeader)
94
+ }
95
+ }
96
+ if headerPtr != nil {
97
+ actionTypeTag, _ := fieldType.Tag.Lookup("actionType")
98
+ newHeader := *headerPtr
99
+ SetActionHeaderFromContext(ctx, actionTypeTag, &newHeader)
100
+ if field.Kind() == reflect.Ptr {
101
+ field.Set(reflect.ValueOf(&newHeader))
102
+ } else {
103
+ field.Set(reflect.ValueOf(newHeader))
104
+ }
105
+ continue
106
+ }
107
+
108
+ // Skip any field that is already populated or lacks a "default" tag.
109
+ defaultTag, _ := fieldType.Tag.Lookup("default")
110
+ if !field.IsZero() || len(defaultTag) == 0 {
111
+ continue
112
+ }
113
+
114
+ // Populate the field from its "default" tag.
115
+ switch field.Kind() {
116
+ case reflect.String:
117
+ field.SetString(defaultTag)
118
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
119
+ if val, err := strconv.ParseInt(defaultTag, 0, 64); err == nil {
120
+ field.SetInt(val)
121
+ }
122
+ case reflect.Bool:
123
+ if val, err := strconv.ParseBool(defaultTag); err == nil {
124
+ field.SetBool(val)
125
+ }
126
+ case reflect.Float32, reflect.Float64:
127
+ if val, err := strconv.ParseFloat(defaultTag, 64); err == nil {
128
+ field.SetFloat(val)
129
+ }
130
+ }
131
+ }
132
+ return newActionDesc.Interface().(Action)
133
+ }
@@ -0,0 +1,129 @@
1
+ package vm_test
2
+
3
+ import (
4
+ "encoding/json"
5
+ "testing"
6
+ "time"
7
+
8
+ "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
9
+ sdk "github.com/cosmos/cosmos-sdk/types"
10
+ )
11
+
12
+ var (
13
+ _ vm.Action = &Trivial{}
14
+ _ vm.Action = &Defaults{}
15
+ _ vm.Action = &dataAction{}
16
+ )
17
+
18
+ type Trivial struct {
19
+ vm.ActionHeader
20
+ Abc int
21
+ def string
22
+ }
23
+
24
+ type Defaults struct {
25
+ String string `default:"abc"`
26
+ Int int `default:"123"`
27
+ Float float64 `default:"4.56"`
28
+ Bool bool `default:"true"`
29
+ Any interface{}
30
+ }
31
+
32
+ func (d Defaults) GetActionHeader() vm.ActionHeader {
33
+ return vm.ActionHeader{}
34
+ }
35
+
36
+ type dataAction struct {
37
+ *vm.ActionHeader `actionType:"DATA_ACTION"`
38
+ Data []byte
39
+ }
40
+
41
+ func TestActionContext(t *testing.T) {
42
+ emptyCtx := sdk.Context{}
43
+
44
+ testCases := []struct {
45
+ name string
46
+ ctx sdk.Context
47
+ in vm.Action
48
+ expectedOut interface{}
49
+ }{
50
+ {"nil", emptyCtx, nil, nil},
51
+ {"no context", emptyCtx,
52
+ &Trivial{Abc: 123, def: "zot"},
53
+ &Trivial{Abc: 123, def: "zot"},
54
+ },
55
+ {"block height",
56
+ emptyCtx.WithBlockHeight(998),
57
+ &Trivial{Abc: 123, def: "zot"},
58
+ &Trivial{ActionHeader: vm.ActionHeader{BlockHeight: 998}, Abc: 123, def: "zot"},
59
+ },
60
+ {"block time",
61
+ emptyCtx.WithBlockTime(time.UnixMicro(1_000_000)),
62
+ &Trivial{Abc: 123, def: "zot"},
63
+ &Trivial{Abc: 123, def: "zot", ActionHeader: vm.ActionHeader{BlockTime: 1}},
64
+ },
65
+ {"default tags",
66
+ emptyCtx,
67
+ &Defaults{},
68
+ &Defaults{"abc", 123, 4.56, true, nil},
69
+ },
70
+ {"data action defaults",
71
+ emptyCtx.WithBlockHeight(998).WithBlockTime(time.UnixMicro(1_000_000)),
72
+ &dataAction{Data: []byte("hello")},
73
+ &dataAction{Data: []byte("hello"),
74
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION", BlockHeight: 998, BlockTime: 1}},
75
+ },
76
+ {"data action override Type",
77
+ emptyCtx.WithBlockHeight(998).WithBlockTime(time.UnixMicro(1_000_000)),
78
+ &dataAction{Data: []byte("hello2"),
79
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION2"}},
80
+ &dataAction{Data: []byte("hello2"),
81
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION2", BlockHeight: 998, BlockTime: 1}},
82
+ },
83
+ {"data action override BlockHeight",
84
+ emptyCtx.WithBlockHeight(998).WithBlockTime(time.UnixMicro(1_000_000)),
85
+ &dataAction{Data: []byte("hello2"),
86
+ ActionHeader: &vm.ActionHeader{BlockHeight: 999}},
87
+ &dataAction{Data: []byte("hello2"),
88
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION", BlockHeight: 999, BlockTime: 1}},
89
+ },
90
+ {"data action override BlockTime",
91
+ emptyCtx.WithBlockHeight(998).WithBlockTime(time.UnixMicro(1_000_000)),
92
+ &dataAction{Data: []byte("hello2"),
93
+ ActionHeader: &vm.ActionHeader{BlockTime: 2}},
94
+ &dataAction{Data: []byte("hello2"),
95
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION", BlockHeight: 998, BlockTime: 2}},
96
+ },
97
+ {"data action override all defaults",
98
+ emptyCtx.WithBlockHeight(998).WithBlockTime(time.UnixMicro(1_000_000)),
99
+ &dataAction{Data: []byte("hello2"),
100
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION2", BlockHeight: 999, BlockTime: 2}},
101
+ &dataAction{Data: []byte("hello2"),
102
+ ActionHeader: &vm.ActionHeader{Type: "DATA_ACTION2", BlockHeight: 999, BlockTime: 2}},
103
+ },
104
+ }
105
+
106
+ for _, tc := range testCases {
107
+ tc := tc
108
+ t.Run(tc.name, func(t *testing.T) {
109
+ toJson := func(in interface{}) string {
110
+ bz, err := json.Marshal(in)
111
+ if err != nil {
112
+ t.Fatal(err)
113
+ }
114
+ return string(bz)
115
+ }
116
+ jsonIn := toJson(tc.in)
117
+ out := vm.PopulateAction(tc.ctx, tc.in)
118
+ jsonIn2 := toJson(tc.in)
119
+ if jsonIn != jsonIn2 {
120
+ t.Errorf("unexpected mutated input: %s to %s", jsonIn, jsonIn2)
121
+ }
122
+ jsonOut := toJson(out)
123
+ jsonExpectedOut := toJson(tc.expectedOut)
124
+ if jsonOut != jsonExpectedOut {
125
+ t.Errorf("expected %s, got %s", jsonExpectedOut, jsonOut)
126
+ }
127
+ })
128
+ }
129
+ }
package/vm/controller.go CHANGED
@@ -1,16 +1,12 @@
1
1
  package vm
2
2
 
3
3
  import (
4
+ "context"
4
5
  "fmt"
5
6
 
6
7
  sdk "github.com/cosmos/cosmos-sdk/types"
7
8
  )
8
9
 
9
- type ControllerContext struct {
10
- Context sdk.Context
11
- IBCChannelHandlerPort int
12
- }
13
-
14
10
  type ControllerAdmissionMsg interface {
15
11
  sdk.Msg
16
12
  CheckAdmissibility(sdk.Context, interface{}) error
@@ -25,16 +21,13 @@ type ControllerAdmissionMsg interface {
25
21
  IsHighPriority(sdk.Context, interface{}) (bool, error)
26
22
  }
27
23
 
28
- // Jsonable is a value, j, that can be passed through json.Marshal(j).
29
- type Jsonable interface{}
30
-
31
- // ActionPusher enqueues data for later consumption by the controller.
32
- type ActionPusher func(ctx sdk.Context, action Jsonable) error
33
-
34
- var controllerContext ControllerContext
24
+ var wrappedEmptySDKContext = sdk.WrapSDKContext(
25
+ sdk.Context{}.WithContext(context.Background()),
26
+ )
27
+ var controllerContext context.Context = wrappedEmptySDKContext
35
28
 
36
29
  type PortHandler interface {
37
- Receive(*ControllerContext, string) (string, error)
30
+ Receive(context.Context, string) (string, error)
38
31
  }
39
32
 
40
33
  var portToHandler = make(map[int]PortHandler)
@@ -45,9 +38,9 @@ var lastPort = 0
45
38
  func SetControllerContext(ctx sdk.Context) func() {
46
39
  // We are only called by the controller, so we assume that it is billing its
47
40
  // own meter usage.
48
- controllerContext.Context = ctx.WithGasMeter(sdk.NewInfiniteGasMeter())
41
+ controllerContext = sdk.WrapSDKContext(ctx.WithGasMeter(sdk.NewInfiniteGasMeter()))
49
42
  return func() {
50
- controllerContext.Context = sdk.Context{}
43
+ controllerContext = wrappedEmptySDKContext
51
44
  }
52
45
  }
53
46
 
@@ -75,5 +68,5 @@ func ReceiveFromController(portNum int, msg string) (string, error) {
75
68
  if handler == nil {
76
69
  return "", fmt.Errorf("unregistered port %d", portNum)
77
70
  }
78
- return handler.Receive(&controllerContext, msg)
71
+ return handler.Receive(controllerContext, msg)
79
72
  }
@@ -0,0 +1,31 @@
1
+ package vm
2
+
3
+ // CoreProposalStep is a set of core proposal configs which are executed
4
+ // concurrently
5
+ type CoreProposalStep []Jsonable
6
+
7
+ // CoreProposals is one possible shape for core proposals expressed as a series
8
+ // of sequential steps
9
+ // see SequentialCoreProposals in packages/deploy-script-support/src/extract-proposal.js
10
+ type CoreProposals struct {
11
+ Steps []CoreProposalStep `json:"steps"`
12
+ }
13
+
14
+ // CoreProposalStepForModules generates a single core proposal step from
15
+ // the given modules, which will be executed concurrently during that step
16
+ func CoreProposalStepForModules(modules ...string) CoreProposalStep {
17
+ step := make([]Jsonable, len(modules))
18
+ for i := range modules {
19
+ step[i] = modules[i]
20
+ }
21
+ return step
22
+ }
23
+
24
+ // CoreProposalsFromSteps returns a CoreProposals from the given steps
25
+ func CoreProposalsFromSteps(steps ...CoreProposalStep) *CoreProposals {
26
+ if steps == nil {
27
+ // Deal with https://github.com/golang/go/issues/37711
28
+ return &CoreProposals{Steps: []CoreProposalStep{}}
29
+ }
30
+ return &CoreProposals{Steps: steps}
31
+ }
@@ -16,16 +16,16 @@ import (
16
16
  // In addition to the methods declared in authtypes.AccountI, additional
17
17
  // expectations are enforced dynamically through casting and reflection:
18
18
  //
19
- // - non-module accounts are expected to obey the GenesisAccount interface,
20
- // i.e. to have a Validate() method;
19
+ // - non-module accounts are expected to obey the GenesisAccount interface,
20
+ // i.e. to have a Validate() method;
21
21
  //
22
- // - UnpackInterfacesMessage is needed for unpacking accounts embedded
23
- // in an Any message;
22
+ // - UnpackInterfacesMessage is needed for unpacking accounts embedded
23
+ // in an Any message;
24
24
  //
25
- // - MarshalYAML() is used for String rendering;
25
+ // - MarshalYAML() is used for String rendering;
26
26
  //
27
- // - protobuf Messages are expected to implement a number of "XXX"-prefixed
28
- // methods not visible in the Message interface.
27
+ // - protobuf Messages are expected to implement a number of "XXX"-prefixed
28
+ // methods not visible in the Message interface.
29
29
  //
30
30
  // Declaring the expected methods here allows them to implicitly fall through
31
31
  // to an embedded omniAccount.
@@ -88,7 +88,7 @@ func (uva unlockedVestingAccount) TrackDelegation(blockTime time.Time, balance,
88
88
  // TrackUndelegation implements the vestexported.VestingAccount interface.
89
89
  func (uva unlockedVestingAccount) TrackUndelegation(amount sdk.Coins) {
90
90
  // max(delegated - amount, 0) == delegated - min(delegated, amount)
91
- uva.lien.Delegated = uva.lien.Delegated.Sub(uva.lien.Delegated.Min(amount))
91
+ uva.lien.Delegated = uva.lien.Delegated.Sub(uva.lien.Delegated.Min(amount)...)
92
92
  }
93
93
 
94
94
  // GetVestedCoins implements the vestexported.VestingAccount interface.
@@ -116,7 +116,7 @@ func (uva unlockedVestingAccount) GetOriginalVesting() sdk.Coins {
116
116
  return sdk.NewCoins()
117
117
  }
118
118
 
119
- //GetDelegatedFree implements the vestexported.VestingAccount interface.
119
+ // GetDelegatedFree implements the vestexported.VestingAccount interface.
120
120
  func (uva unlockedVestingAccount) GetDelegatedFree() sdk.Coins {
121
121
  return uva.lien.Delegated
122
122
  }
@@ -172,6 +172,11 @@ func (fca fakeClawbackAccount) PostReward(ctx sdk.Context, reward sdk.Coins, act
172
172
  return nil
173
173
  }
174
174
 
175
+ // ReturnGrants implements the vestexported.ClawbackVestingAccountI interface.
176
+ func (fca fakeClawbackAccount) ReturnGrants(ctx sdk.Context, action vestexported.ReturnGrantAction) error {
177
+ return action.TakeGrants(ctx, fca.omniGrantAccount) // XXX or just fail here
178
+ }
179
+
175
180
  // LienAccount wraps an omniClawbackAccount to implement lien encumbrance.
176
181
  // The LockedCoins() method is the maximum of the coins locked for
177
182
  // liens, and the coins locked in the underlying VestingAccount.
@@ -206,12 +211,12 @@ func (la *LienAccount) LienedLockedCoins(ctx sdk.Context) sdk.Coins {
206
211
  liened := la.lien.Coins
207
212
  acc := la.omniClawbackAccount.(authtypes.AccountI)
208
213
  if clawback, ok := acc.(vestexported.ClawbackVestingAccountI); ok {
209
- liened = liened.Add(clawback.GetOriginalVesting().Sub(clawback.GetVestedOnly(ctx.BlockTime()))...)
214
+ liened = liened.Add(clawback.GetOriginalVesting().Sub(clawback.GetVestedOnly(ctx.BlockTime())...)...)
210
215
  }
211
216
  // Since coins can't go negative, even transiently, use the
212
217
  // identity A + B = max(A, B) + min(A, B)
213
218
  // max(0, A - B) = max(B, A) - B = A - min(A, B)
214
- return liened.Sub(liened.Min(delegated))
219
+ return liened.Sub(liened.Min(delegated)...)
215
220
  }
216
221
 
217
222
  // XXX_MessageName provides the message name for JSON serialization.
@@ -7,6 +7,7 @@ import (
7
7
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/lien/types"
8
8
 
9
9
  "github.com/cosmos/cosmos-sdk/codec"
10
+ storetypes "github.com/cosmos/cosmos-sdk/store/types"
10
11
  sdk "github.com/cosmos/cosmos-sdk/types"
11
12
  vestexported "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported"
12
13
  stakingTypes "github.com/cosmos/cosmos-sdk/x/staking/types"
@@ -31,7 +32,7 @@ type Keeper interface {
31
32
  // The accountKeeper field must be the same one that the bankKeeper and
32
33
  // stakingKeeper use.
33
34
  type keeperImpl struct {
34
- key sdk.StoreKey
35
+ key storetypes.StoreKey
35
36
  cdc codec.Codec
36
37
 
37
38
  accountKeeper *types.WrappedAccountKeeper
@@ -43,7 +44,7 @@ type keeperImpl struct {
43
44
 
44
45
  // NewKeeper returns a new Keeper.
45
46
  // The ak must be the same accout keeper that the bk and sk use.
46
- func NewKeeper(cdc codec.Codec, key sdk.StoreKey, ak *types.WrappedAccountKeeper, bk types.BankKeeper, sk types.StakingKeeper,
47
+ func NewKeeper(cdc codec.Codec, key storetypes.StoreKey, ak *types.WrappedAccountKeeper, bk types.BankKeeper, sk types.StakingKeeper,
47
48
  pushAction vm.ActionPusher) Keeper {
48
49
  return keeperImpl{
49
50
  key: key,
@@ -124,7 +125,7 @@ func (lk keeperImpl) ChangeLien(ctx sdk.Context, addr sdk.AccAddress, denom stri
124
125
  return oldAmt, fmt.Errorf("lien delta of %s is larger than existing balance %s", delta, oldAmt)
125
126
  }
126
127
  newCoin := sdk.NewCoin(denom, newAmt)
127
- newCoins := oldCoins.Sub(sdk.NewCoins(sdk.NewCoin(denom, oldAmt))).Add(newCoin)
128
+ newCoins := oldCoins.Sub(sdk.NewCoins(sdk.NewCoin(denom, oldAmt))...).Add(newCoin)
128
129
  newLien := types.Lien{
129
130
  Coins: newCoins,
130
131
  Delegated: oldLien.Delegated,
@@ -223,7 +224,7 @@ func (lk keeperImpl) getLockedUnvested(ctx sdk.Context, addr sdk.AccAddress) (sd
223
224
  original := clawbackAccount.GetOriginalVesting()
224
225
  unlocked := clawbackAccount.GetUnlockedOnly(ctx.BlockTime())
225
226
  vested := clawbackAccount.GetVestedOnly(ctx.BlockTime())
226
- return original.Sub(unlocked), original.Sub(vested)
227
+ return original.Sub(unlocked...), original.Sub(vested...)
227
228
  }
228
229
  if vestingAccount, ok := account.(vestexported.VestingAccount); ok {
229
230
  return vestingAccount.GetVestingCoins(ctx.BlockTime()), sdk.NewCoins()
@@ -99,7 +99,7 @@ func makeTestKit() testKit {
99
99
  stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
100
100
  authtypes.Minter: {authtypes.Minter},
101
101
  }
102
- innerAk := authkeeper.NewAccountKeeper(cdc, authStoreKey, authSpace, authtypes.ProtoBaseAccount, maccPerms)
102
+ innerAk := authkeeper.NewAccountKeeper(cdc, authStoreKey, authSpace, authtypes.ProtoBaseAccount, maccPerms, "agoric")
103
103
  wak := types.NewWrappedAccountKeeper(innerAk)
104
104
 
105
105
  // bank keeper
@@ -112,7 +112,7 @@ func makeTestKit() testKit {
112
112
  sk := stakingkeeper.NewKeeper(cdc, stakingStoreKey, wak, bk, stakingSpace)
113
113
 
114
114
  // lien keeper
115
- pushAction := func(sdk.Context, vm.Jsonable) error {
115
+ pushAction := func(sdk.Context, vm.Action) error {
116
116
  return nil
117
117
  }
118
118
  keeper := NewKeeper(cdc, lienStoreKey, wak, bk, sk, pushAction)
@@ -120,12 +120,12 @@ func makeTestKit() testKit {
120
120
 
121
121
  db := dbm.NewMemDB()
122
122
  ms := store.NewCommitMultiStore(db)
123
- ms.MountStoreWithDB(paramsTKey, sdk.StoreTypeTransient, nil)
124
- ms.MountStoreWithDB(paramsStoreKey, sdk.StoreTypeIAVL, db)
125
- ms.MountStoreWithDB(authStoreKey, sdk.StoreTypeIAVL, db)
126
- ms.MountStoreWithDB(bankStoreKey, sdk.StoreTypeIAVL, db)
127
- ms.MountStoreWithDB(stakingStoreKey, sdk.StoreTypeIAVL, db)
128
- ms.MountStoreWithDB(lienStoreKey, sdk.StoreTypeIAVL, db)
123
+ ms.MountStoreWithDB(paramsTKey, storetypes.StoreTypeTransient, nil)
124
+ ms.MountStoreWithDB(paramsStoreKey, storetypes.StoreTypeIAVL, db)
125
+ ms.MountStoreWithDB(authStoreKey, storetypes.StoreTypeIAVL, db)
126
+ ms.MountStoreWithDB(bankStoreKey, storetypes.StoreTypeIAVL, db)
127
+ ms.MountStoreWithDB(stakingStoreKey, storetypes.StoreTypeIAVL, db)
128
+ ms.MountStoreWithDB(lienStoreKey, storetypes.StoreTypeIAVL, db)
129
129
  err := ms.LoadLatestVersion()
130
130
  if err != nil {
131
131
  panic(err)
@@ -165,7 +165,7 @@ func (tk testKit) initAccount(t *testing.T, funder, addr sdk.AccAddress, state t
165
165
  }
166
166
 
167
167
  // Total
168
- toMint := state.Total.Sub(state.Locked)
168
+ toMint := state.Total.Sub(state.Locked...)
169
169
  if !toMint.IsZero() {
170
170
  err := tk.bankKeeper.MintCoins(tk.ctx, authtypes.Minter, toMint)
171
171
  if err != nil {
package/x/lien/lien.go CHANGED
@@ -5,6 +5,7 @@
5
5
  package lien
6
6
 
7
7
  import (
8
+ "context"
8
9
  "encoding/json"
9
10
  "fmt"
10
11
  "math"
@@ -70,7 +71,8 @@ const (
70
71
  // Receives and processes a bridge message, returning the
71
72
  // JSON-encoded response or error.
72
73
  // See spec/02_messages.md for the messages and responses.
73
- func (ch portHandler) Receive(ctx *vm.ControllerContext, str string) (string, error) {
74
+ func (ch portHandler) Receive(cctx context.Context, str string) (string, error) {
75
+ ctx := sdk.UnwrapSDKContext(cctx)
74
76
  var msg portMessage
75
77
  err := json.Unmarshal([]byte(str), &msg)
76
78
  if err != nil {
@@ -78,13 +80,13 @@ func (ch portHandler) Receive(ctx *vm.ControllerContext, str string) (string, er
78
80
  }
79
81
  switch msg.Type {
80
82
  case LIEN_GET_ACCOUNT_STATE:
81
- return ch.handleGetAccountState(ctx.Context, msg)
83
+ return ch.handleGetAccountState(ctx, msg)
82
84
 
83
85
  case LIEN_GET_STAKING:
84
- return ch.handleGetStaking(ctx.Context, msg)
86
+ return ch.handleGetStaking(ctx, msg)
85
87
 
86
88
  case LIEN_CHANGE_LIENED:
87
- return ch.handleChangeLiened(ctx.Context, msg)
89
+ return ch.handleChangeLiened(ctx, msg)
88
90
  }
89
91
  return "", fmt.Errorf("unrecognized type %s", msg.Type)
90
92
  }
@@ -1,11 +1,11 @@
1
1
  package lien
2
2
 
3
3
  import (
4
+ "context"
4
5
  "encoding/json"
5
6
  "reflect"
6
7
  "testing"
7
8
 
8
- "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
9
9
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/lien/types"
10
10
 
11
11
  "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
@@ -97,7 +97,7 @@ func (m *mockLienKeeper) BondDenom(ctx sdk.Context) string {
97
97
  func (m *mockLienKeeper) GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins {
98
98
  state := m.GetAccountState(ctx, addr)
99
99
  delegated := state.Bonded.Add(state.Unbonding...)
100
- bank := state.Total.Sub(state.Total.Min(delegated))
100
+ bank := state.Total.Sub(state.Total.Min(delegated)...)
101
101
  return bank
102
102
  }
103
103
 
@@ -114,8 +114,8 @@ func (m *mockLienKeeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.
114
114
  }
115
115
 
116
116
  func TestBadType(t *testing.T) {
117
- ctx := sdk.Context{}
118
- ctlCtx := &vm.ControllerContext{Context: ctx}
117
+ ctx := sdk.Context{}.WithContext(context.Background())
118
+ ctlCtx := sdk.WrapSDKContext(ctx)
119
119
  keeper := mockLienKeeper{
120
120
  states: map[string]types.AccountState{},
121
121
  }
@@ -135,8 +135,8 @@ func TestBadType(t *testing.T) {
135
135
  }
136
136
 
137
137
  func TestGetAccountState(t *testing.T) {
138
- ctx := sdk.Context{}
139
- ctlCtx := &vm.ControllerContext{Context: ctx}
138
+ ctx := sdk.Context{}.WithContext(context.Background())
139
+ ctlCtx := sdk.WrapSDKContext(ctx)
140
140
 
141
141
  keeper := mockLienKeeper{
142
142
  states: map[string]types.AccountState{
@@ -177,8 +177,9 @@ func TestGetAccountState(t *testing.T) {
177
177
  }
178
178
 
179
179
  func TestGetAccountState_badRequest(t *testing.T) {
180
- ctx := sdk.Context{}
181
- ctlCtx := &vm.ControllerContext{Context: ctx}
180
+ ctx := sdk.Context{}.WithContext(context.Background())
181
+ ctlCtx := sdk.WrapSDKContext(ctx)
182
+
182
183
  keeper := mockLienKeeper{
183
184
  states: map[string]types.AccountState{},
184
185
  }
@@ -214,8 +215,9 @@ func TestGetAccountState_badRequest(t *testing.T) {
214
215
  }
215
216
 
216
217
  func TestSetLiened_badAddr(t *testing.T) {
217
- ctx := sdk.Context{}
218
- ctlCtx := &vm.ControllerContext{Context: ctx}
218
+ ctx := sdk.Context{}.WithContext(context.Background())
219
+ ctlCtx := sdk.WrapSDKContext(ctx)
220
+
219
221
  keeper := mockLienKeeper{}
220
222
  ph := NewPortHandler(&keeper)
221
223
  msg := portMessage{
@@ -235,8 +237,9 @@ func TestSetLiened_badAddr(t *testing.T) {
235
237
  }
236
238
 
237
239
  func TestSetLiened_badDenom(t *testing.T) {
238
- ctx := sdk.Context{}
239
- ctlCtx := &vm.ControllerContext{Context: ctx}
240
+ ctx := sdk.Context{}.WithContext(context.Background())
241
+ ctlCtx := sdk.WrapSDKContext(ctx)
242
+
240
243
  keeper := mockLienKeeper{}
241
244
  ph := NewPortHandler(&keeper)
242
245
  msg := portMessage{
@@ -256,8 +259,9 @@ func TestSetLiened_badDenom(t *testing.T) {
256
259
  }
257
260
 
258
261
  func TestSetLiened(t *testing.T) {
259
- ctx := sdk.Context{}
260
- ctlCtx := &vm.ControllerContext{Context: ctx}
262
+ ctx := sdk.Context{}.WithContext(context.Background())
263
+ ctlCtx := sdk.WrapSDKContext(ctx)
264
+
261
265
  keeper := mockLienKeeper{}
262
266
  ph := NewPortHandler(&keeper)
263
267
  msg := portMessage{
@@ -336,8 +340,8 @@ func TestGetStaking(t *testing.T) {
336
340
  keeper.delegations[addr4.String()] = []stakingTypes.Delegation{}
337
341
 
338
342
  ph := NewPortHandler(&keeper)
339
- ctx := sdk.Context{}
340
- ctlCtx := &vm.ControllerContext{Context: ctx}
343
+ ctx := sdk.Context{}.WithContext(context.Background())
344
+ ctlCtx := sdk.WrapSDKContext(ctx)
341
345
 
342
346
  pi := func(x int64) *sdk.Int {
343
347
  n := i(x)