From d1171aa1da373712f15e61aa6fc634d8e31cac67 Mon Sep 17 00:00:00 2001
From: Amaury M <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 11:38:33 +0100
Subject: [PATCH 1/8] Add back supply proto
---
docs/core/proto-docs.md | 3 +-
proto/cosmos/bank/v1beta1/bank.proto | 14 ++
x/bank/keeper/querier.go | 3 +-
x/bank/types/bank.pb.go | 284 +++++++++++++++++++++++----
4 files changed, 265 insertions(+), 39 deletions(-)
diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md
index 9c1f7110adc6..c22e73152fe1 100644
--- a/docs/core/proto-docs.md
+++ b/docs/core/proto-docs.md
@@ -8178,7 +8178,7 @@ upgrade.
| `title` | [string](#string) | | |
| `description` | [string](#string) | | |
| `plan` | [cosmos.upgrade.v1beta1.Plan](#cosmos.upgrade.v1beta1.Plan) | | |
-| `upgraded_client_state` | [google.protobuf.Any](#google.protobuf.Any) | | An UpgradedClientState must be provided to perform an IBC breaking upgrade. This will make the chain commit to the correct upgraded (self) client state before the upgrade occurs, so that connected chains can verify that the new upgraded client is valid by verifying a proof of the intended new client state on the previous version of the chain. This will allow IBC connections to persist smoothly across planned chain upgrades. |
+| `upgraded_client_state` | [google.protobuf.Any](#google.protobuf.Any) | | An UpgradedClientState must be provided to perform an IBC breaking upgrade. This will make the chain commit to the correct upgraded (self) client state before the upgrade occurs, so that connecting chains can verify that the new upgraded client is valid by verifying a proof on the previous version of the chain. This will allow IBC connections to persist smoothly across planned chain upgrades |
@@ -10895,3 +10895,4 @@ that implements Misbehaviour interface expected by ICS-02
| bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |
+
diff --git a/proto/cosmos/bank/v1beta1/bank.proto b/proto/cosmos/bank/v1beta1/bank.proto
index 4742bafb17e5..a586eacf6a79 100644
--- a/proto/cosmos/bank/v1beta1/bank.proto
+++ b/proto/cosmos/bank/v1beta1/bank.proto
@@ -43,6 +43,20 @@ message Output {
[(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"];
}
+// Supply represents a struct that passively keeps track of the total supply
+// amounts in the network.
+message Supply {
+ option deprecated = true;
+
+ option (gogoproto.equal) = true;
+ option (gogoproto.goproto_getters) = false;
+
+ option (cosmos_proto.implements_interface) = "*github.com/cosmos/cosmos-sdk/x/bank/exported.SupplyI";
+
+ repeated cosmos.base.v1beta1.Coin total = 1
+ [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"];
+}
+
// DenomUnit represents a struct that describes a given
// denomination unit of the basic token.
message DenomUnit {
diff --git a/x/bank/keeper/querier.go b/x/bank/keeper/querier.go
index c2d6ca8a2f67..dca5414f45fd 100644
--- a/x/bank/keeper/querier.go
+++ b/x/bank/keeper/querier.go
@@ -84,7 +84,8 @@ func queryTotalSupply(ctx sdk.Context, req abci.RequestQuery, k Keeper, legacyQu
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONUnmarshal, err.Error())
}
- //TODO: pagenate
+ // TODO: paginate
+ // https://github.com/cosmos/cosmos-sdk/issues/8761
totalSupply := k.GetTotalSupply(ctx)
start, end := client.Paginate(len(totalSupply), params.Page, params.Limit, 100)
diff --git a/x/bank/types/bank.pb.go b/x/bank/types/bank.pb.go
index 17b97f752add..25415463c13f 100644
--- a/x/bank/types/bank.pb.go
+++ b/x/bank/types/bank.pb.go
@@ -209,6 +209,47 @@ func (m *Output) XXX_DiscardUnknown() {
var xxx_messageInfo_Output proto.InternalMessageInfo
+// Supply represents a struct that passively keeps track of the total supply
+// amounts in the network.
+//
+// Deprecated: Do not use.
+type Supply struct {
+ Total github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=total,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"total"`
+}
+
+func (m *Supply) Reset() { *m = Supply{} }
+func (m *Supply) String() string { return proto.CompactTextString(m) }
+func (*Supply) ProtoMessage() {}
+func (*Supply) Descriptor() ([]byte, []int) {
+ return fileDescriptor_dd052eee12edf988, []int{4}
+}
+func (m *Supply) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *Supply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_Supply.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *Supply) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_Supply.Merge(m, src)
+}
+func (m *Supply) XXX_Size() int {
+ return m.Size()
+}
+func (m *Supply) XXX_DiscardUnknown() {
+ xxx_messageInfo_Supply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Supply proto.InternalMessageInfo
+
// DenomUnit represents a struct that describes a given
// denomination unit of the basic token.
type DenomUnit struct {
@@ -228,7 +269,7 @@ func (m *DenomUnit) Reset() { *m = DenomUnit{} }
func (m *DenomUnit) String() string { return proto.CompactTextString(m) }
func (*DenomUnit) ProtoMessage() {}
func (*DenomUnit) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd052eee12edf988, []int{4}
+ return fileDescriptor_dd052eee12edf988, []int{5}
}
func (m *DenomUnit) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -300,7 +341,7 @@ func (m *Metadata) Reset() { *m = Metadata{} }
func (m *Metadata) String() string { return proto.CompactTextString(m) }
func (*Metadata) ProtoMessage() {}
func (*Metadata) Descriptor() ([]byte, []int) {
- return fileDescriptor_dd052eee12edf988, []int{5}
+ return fileDescriptor_dd052eee12edf988, []int{6}
}
func (m *Metadata) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -376,6 +417,7 @@ func init() {
proto.RegisterType((*SendEnabled)(nil), "cosmos.bank.v1beta1.SendEnabled")
proto.RegisterType((*Input)(nil), "cosmos.bank.v1beta1.Input")
proto.RegisterType((*Output)(nil), "cosmos.bank.v1beta1.Output")
+ proto.RegisterType((*Supply)(nil), "cosmos.bank.v1beta1.Supply")
proto.RegisterType((*DenomUnit)(nil), "cosmos.bank.v1beta1.DenomUnit")
proto.RegisterType((*Metadata)(nil), "cosmos.bank.v1beta1.Metadata")
}
@@ -383,41 +425,44 @@ func init() {
func init() { proto.RegisterFile("cosmos/bank/v1beta1/bank.proto", fileDescriptor_dd052eee12edf988) }
var fileDescriptor_dd052eee12edf988 = []byte{
- // 537 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xbf, 0x8f, 0xd3, 0x30,
- 0x18, 0x8d, 0xaf, 0x3f, 0xe8, 0xb9, 0xb0, 0x98, 0x0a, 0xe5, 0x2a, 0x91, 0x84, 0x48, 0x48, 0x3d,
- 0x09, 0x5a, 0x0e, 0xb6, 0x2e, 0x48, 0x3d, 0x10, 0x62, 0x40, 0xa0, 0x20, 0x84, 0x04, 0x43, 0xe5,
- 0xd4, 0xbe, 0x62, 0x5d, 0x6c, 0x47, 0xb5, 0x8b, 0xae, 0xff, 0x01, 0x13, 0x30, 0x32, 0xde, 0xcc,
- 0x3f, 0xc2, 0x8d, 0x27, 0xb1, 0x30, 0x15, 0xd4, 0x2e, 0xcc, 0xf7, 0x17, 0x20, 0xdb, 0x69, 0x9b,
- 0x93, 0x0a, 0x33, 0x53, 0xbf, 0xf7, 0x7d, 0xcf, 0xef, 0x7b, 0x7e, 0x4d, 0x02, 0x83, 0x91, 0x54,
- 0x5c, 0xaa, 0x5e, 0x8a, 0xc5, 0x71, 0xef, 0xfd, 0x41, 0x4a, 0x35, 0x3e, 0xb0, 0xa0, 0x9b, 0x4f,
- 0xa4, 0x96, 0xe8, 0xba, 0x9b, 0x77, 0x6d, 0xab, 0x98, 0xb7, 0x5b, 0x63, 0x39, 0x96, 0x76, 0xde,
- 0x33, 0x95, 0xa3, 0xb6, 0xf7, 0x1c, 0x75, 0xe8, 0x06, 0xc5, 0x39, 0x37, 0xda, 0x6c, 0x51, 0x74,
- 0xbd, 0x65, 0x24, 0x99, 0x70, 0xf3, 0xf8, 0x3b, 0x80, 0xf5, 0x17, 0x78, 0x82, 0xb9, 0x42, 0x47,
- 0xf0, 0xaa, 0xa2, 0x82, 0x0c, 0xa9, 0xc0, 0x69, 0x46, 0x89, 0x0f, 0xa2, 0x4a, 0xa7, 0x79, 0x3f,
- 0xea, 0x6e, 0xf1, 0xd1, 0x7d, 0x49, 0x05, 0x79, 0xec, 0x78, 0x83, 0x5b, 0x17, 0xf3, 0xf0, 0xe6,
- 0x0c, 0xf3, 0xac, 0x1f, 0x97, 0xcf, 0xdf, 0x91, 0x9c, 0x69, 0xca, 0x73, 0x3d, 0x8b, 0x93, 0xa6,
- 0xda, 0xf0, 0xd1, 0x5b, 0xd8, 0x22, 0xf4, 0x08, 0x4f, 0x33, 0x3d, 0xbc, 0xb4, 0x6f, 0x27, 0x02,
- 0x9d, 0xc6, 0x60, 0xff, 0x62, 0x1e, 0xde, 0x76, 0x6a, 0xdb, 0x58, 0x65, 0x55, 0x54, 0x10, 0x4a,
- 0x66, 0xfa, 0xd5, 0x2f, 0xa7, 0xa1, 0x17, 0x3f, 0x81, 0xcd, 0x52, 0x13, 0xb5, 0x60, 0x8d, 0x50,
- 0x21, 0xb9, 0x0f, 0x22, 0xd0, 0xd9, 0x4d, 0x1c, 0x40, 0x3e, 0xbc, 0x72, 0x69, 0x75, 0xb2, 0x82,
- 0xfd, 0x86, 0x11, 0xf9, 0x7d, 0x1a, 0x82, 0xf8, 0x23, 0x80, 0xb5, 0xa7, 0x22, 0x9f, 0x6a, 0xc3,
- 0xc6, 0x84, 0x4c, 0xa8, 0x52, 0x85, 0xca, 0x0a, 0x22, 0x0c, 0x6b, 0x26, 0x50, 0xe5, 0xef, 0xd8,
- 0xc0, 0xf6, 0x36, 0x81, 0x29, 0xba, 0x0e, 0xec, 0x50, 0x32, 0x31, 0xb8, 0x77, 0x36, 0x0f, 0xbd,
- 0xaf, 0x3f, 0xc3, 0xce, 0x98, 0xe9, 0x77, 0xd3, 0xb4, 0x3b, 0x92, 0xbc, 0xf8, 0xb7, 0x8a, 0x9f,
- 0xbb, 0x8a, 0x1c, 0xf7, 0xf4, 0x2c, 0xa7, 0xca, 0x1e, 0x50, 0x89, 0x53, 0xee, 0x37, 0x3e, 0x38,
- 0x43, 0x5e, 0xfc, 0x09, 0xc0, 0xfa, 0xf3, 0xa9, 0xfe, 0x8f, 0x1c, 0xbd, 0x86, 0xbb, 0x8f, 0x4c,
- 0x9e, 0xaf, 0x04, 0xd3, 0x7f, 0x49, 0xba, 0x0d, 0x1b, 0xf4, 0x24, 0x97, 0x82, 0x0a, 0x6d, 0xa3,
- 0xbe, 0x96, 0xac, 0xb1, 0xbd, 0x45, 0xc6, 0xb0, 0xa2, 0xca, 0xaf, 0x44, 0x15, 0x7b, 0x0b, 0x07,
- 0xe3, 0x6f, 0x00, 0x36, 0x9e, 0x51, 0x8d, 0x09, 0xd6, 0x18, 0x45, 0xb0, 0x49, 0xa8, 0x1a, 0x4d,
- 0x58, 0xae, 0x99, 0x14, 0x85, 0x7c, 0xb9, 0x85, 0x1e, 0x1a, 0x86, 0x90, 0x7c, 0x38, 0x15, 0x4c,
- 0xaf, 0xae, 0x1e, 0x6c, 0x7d, 0x7a, 0xd7, 0x7e, 0x13, 0x48, 0x56, 0xa5, 0x42, 0x08, 0x56, 0x4d,
- 0x40, 0x7e, 0xc5, 0x6a, 0xdb, 0xda, 0xb8, 0x23, 0x4c, 0xe5, 0x19, 0x9e, 0xf9, 0x55, 0x97, 0x71,
- 0x01, 0x0d, 0x5b, 0x60, 0x4e, 0xfd, 0x9a, 0x63, 0x9b, 0x1a, 0xdd, 0x80, 0x75, 0x35, 0xe3, 0xa9,
- 0xcc, 0xfc, 0xba, 0xed, 0x16, 0x68, 0x70, 0x78, 0xb6, 0x08, 0xc0, 0xf9, 0x22, 0x00, 0xbf, 0x16,
- 0x01, 0xf8, 0xbc, 0x0c, 0xbc, 0xf3, 0x65, 0xe0, 0xfd, 0x58, 0x06, 0xde, 0x9b, 0xfd, 0x7f, 0xe6,
- 0x7e, 0xe2, 0x3e, 0x0e, 0x36, 0xfe, 0xb4, 0x6e, 0x5f, 0xd8, 0x07, 0x7f, 0x02, 0x00, 0x00, 0xff,
- 0xff, 0x42, 0x5b, 0x8d, 0xc8, 0x38, 0x04, 0x00, 0x00,
+ // 587 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xbf, 0x6f, 0xd3, 0x40,
+ 0x14, 0xf6, 0x35, 0x8d, 0x49, 0x2f, 0xb0, 0x1c, 0x15, 0x72, 0x2b, 0x61, 0x1b, 0x4b, 0x48, 0x29,
+ 0xa2, 0x0e, 0x05, 0xb1, 0x64, 0x41, 0x4a, 0x41, 0xa8, 0x03, 0x02, 0xb9, 0x42, 0x48, 0x30, 0x44,
+ 0xe7, 0xdc, 0x35, 0x58, 0xb5, 0xef, 0xac, 0xdc, 0x19, 0xd5, 0xff, 0x01, 0x13, 0x30, 0x32, 0x76,
+ 0x66, 0x62, 0xe0, 0x7f, 0xa0, 0x63, 0x05, 0x0b, 0x53, 0x40, 0xc9, 0xc2, 0xdc, 0xbf, 0x00, 0xdd,
+ 0x9d, 0xf3, 0xa3, 0x52, 0x40, 0x0c, 0x0c, 0x4c, 0x79, 0xdf, 0x7b, 0xdf, 0xfb, 0xde, 0xd3, 0x77,
+ 0xcf, 0x81, 0x6e, 0x9f, 0x8b, 0x8c, 0x8b, 0x76, 0x8c, 0xd9, 0x61, 0xfb, 0xd5, 0x4e, 0x4c, 0x25,
+ 0xde, 0xd1, 0x20, 0xcc, 0x87, 0x5c, 0x72, 0x74, 0xd9, 0xd4, 0x43, 0x9d, 0xaa, 0xea, 0x9b, 0xeb,
+ 0x03, 0x3e, 0xe0, 0xba, 0xde, 0x56, 0x91, 0xa1, 0x6e, 0x6e, 0x18, 0x6a, 0xcf, 0x14, 0xaa, 0x3e,
+ 0x53, 0x9a, 0x4f, 0x11, 0x74, 0x36, 0xa5, 0xcf, 0x13, 0x66, 0xea, 0xc1, 0x57, 0x00, 0xed, 0x27,
+ 0x78, 0x88, 0x33, 0x81, 0x0e, 0xe0, 0x45, 0x41, 0x19, 0xe9, 0x51, 0x86, 0xe3, 0x94, 0x12, 0x07,
+ 0xf8, 0xb5, 0x56, 0xf3, 0xb6, 0x1f, 0x2e, 0xd9, 0x23, 0xdc, 0xa7, 0x8c, 0x3c, 0x30, 0xbc, 0xee,
+ 0xb5, 0xb3, 0x91, 0x77, 0xb5, 0xc4, 0x59, 0xda, 0x09, 0x16, 0xfb, 0x6f, 0xf2, 0x2c, 0x91, 0x34,
+ 0xcb, 0x65, 0x19, 0x44, 0x4d, 0x31, 0xe7, 0xa3, 0x17, 0x70, 0x9d, 0xd0, 0x03, 0x5c, 0xa4, 0xb2,
+ 0x77, 0x6e, 0xde, 0x8a, 0x0f, 0x5a, 0x8d, 0xee, 0xd6, 0xd9, 0xc8, 0xbb, 0x6e, 0xd4, 0x96, 0xb1,
+ 0x16, 0x55, 0x51, 0x45, 0x58, 0x58, 0xa6, 0xb3, 0xfa, 0xfe, 0xd8, 0xb3, 0x82, 0x87, 0xb0, 0xb9,
+ 0x90, 0x44, 0xeb, 0xb0, 0x4e, 0x28, 0xe3, 0x99, 0x03, 0x7c, 0xd0, 0x5a, 0x8b, 0x0c, 0x40, 0x0e,
+ 0xbc, 0x70, 0x6e, 0x74, 0x34, 0x85, 0x9d, 0x86, 0x12, 0xf9, 0x79, 0xec, 0x81, 0xe0, 0x0d, 0x80,
+ 0xf5, 0x3d, 0x96, 0x17, 0x52, 0xb1, 0x31, 0x21, 0x43, 0x2a, 0x44, 0xa5, 0x32, 0x85, 0x08, 0xc3,
+ 0xba, 0x32, 0x54, 0x38, 0x2b, 0xda, 0xb0, 0x8d, 0xb9, 0x61, 0x82, 0xce, 0x0c, 0xdb, 0xe5, 0x09,
+ 0xeb, 0xde, 0x3a, 0x19, 0x79, 0xd6, 0x87, 0xef, 0x5e, 0x6b, 0x90, 0xc8, 0x97, 0x45, 0x1c, 0xf6,
+ 0x79, 0x56, 0xbd, 0x56, 0xf5, 0xb3, 0x2d, 0xc8, 0x61, 0x5b, 0x96, 0x39, 0x15, 0xba, 0x41, 0x44,
+ 0x46, 0xb9, 0xd3, 0x78, 0x6d, 0x16, 0xb2, 0x82, 0xb7, 0x00, 0xda, 0x8f, 0x0b, 0xf9, 0x1f, 0x6d,
+ 0xf4, 0x11, 0x40, 0x7b, 0xbf, 0xc8, 0xf3, 0xb4, 0x54, 0x73, 0x25, 0x97, 0x38, 0xad, 0x4e, 0xe7,
+ 0xdf, 0xce, 0xd5, 0xca, 0x9d, 0xdd, 0x6a, 0x2e, 0xf8, 0xf2, 0x69, 0xfb, 0xee, 0x8d, 0x3f, 0x76,
+ 0x1f, 0x99, 0x4f, 0x8b, 0x1e, 0xe5, 0x7c, 0x28, 0x29, 0x09, 0xcd, 0x92, 0x7b, 0x0e, 0x08, 0x9e,
+ 0xc1, 0xb5, 0xfb, 0xea, 0x04, 0x9e, 0xb2, 0x44, 0xfe, 0xe6, 0x38, 0x36, 0x61, 0x43, 0x35, 0x32,
+ 0xca, 0xa4, 0xbe, 0x8e, 0x4b, 0xd1, 0x0c, 0x6b, 0xe3, 0xd3, 0x04, 0x0b, 0x2a, 0x9c, 0x9a, 0x5f,
+ 0xd3, 0xc6, 0x1b, 0x18, 0x7c, 0x06, 0xb0, 0xf1, 0x88, 0x4a, 0x4c, 0xb0, 0xc4, 0xc8, 0x87, 0x4d,
+ 0x42, 0x45, 0x7f, 0x98, 0xe4, 0x32, 0xe1, 0xac, 0x92, 0x5f, 0x4c, 0xa1, 0x7b, 0x8a, 0xc1, 0x78,
+ 0xd6, 0x2b, 0x58, 0x22, 0xa7, 0xaf, 0xe5, 0x2e, 0xfd, 0xe0, 0x66, 0xfb, 0x46, 0x90, 0x4c, 0x43,
+ 0x81, 0x10, 0x5c, 0x55, 0xde, 0x3a, 0x35, 0xad, 0xad, 0x63, 0xb5, 0x1d, 0x49, 0x44, 0x9e, 0xe2,
+ 0xd2, 0x59, 0x35, 0x67, 0x51, 0x41, 0xc5, 0x66, 0x38, 0xa3, 0x4e, 0xdd, 0xb0, 0x55, 0x8c, 0xae,
+ 0x40, 0x5b, 0x94, 0x59, 0xcc, 0x53, 0xc7, 0xd6, 0xd9, 0x0a, 0x75, 0x77, 0x4f, 0xc6, 0x2e, 0x38,
+ 0x1d, 0xbb, 0xe0, 0xc7, 0xd8, 0x05, 0xef, 0x26, 0xae, 0x75, 0x3a, 0x71, 0xad, 0x6f, 0x13, 0xd7,
+ 0x7a, 0xbe, 0xf5, 0x37, 0xa6, 0xeb, 0x97, 0x8b, 0x6d, 0xfd, 0x1f, 0x73, 0xe7, 0x57, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xe7, 0x1c, 0xc1, 0x93, 0xeb, 0x04, 0x00, 0x00,
}
func (this *SendEnabled) Equal(that interface{}) bool {
@@ -447,6 +492,35 @@ func (this *SendEnabled) Equal(that interface{}) bool {
}
return true
}
+func (this *Supply) Equal(that interface{}) bool {
+ if that == nil {
+ return this == nil
+ }
+
+ that1, ok := that.(*Supply)
+ if !ok {
+ that2, ok := that.(Supply)
+ if ok {
+ that1 = &that2
+ } else {
+ return false
+ }
+ }
+ if that1 == nil {
+ return this == nil
+ } else if this == nil {
+ return false
+ }
+ if len(this.Total) != len(that1.Total) {
+ return false
+ }
+ for i := range this.Total {
+ if !this.Total[i].Equal(&that1.Total[i]) {
+ return false
+ }
+ }
+ return true
+}
func (m *Params) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -622,6 +696,43 @@ func (m *Output) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *Supply) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *Supply) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *Supply) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Total) > 0 {
+ for iNdEx := len(m.Total) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Total[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintBank(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
func (m *DenomUnit) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -821,6 +932,21 @@ func (m *Output) Size() (n int) {
return n
}
+func (m *Supply) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Total) > 0 {
+ for _, e := range m.Total {
+ l = e.Size()
+ n += 1 + l + sovBank(uint64(l))
+ }
+ }
+ return n
+}
+
func (m *DenomUnit) Size() (n int) {
if m == nil {
return 0
@@ -1322,6 +1448,90 @@ func (m *Output) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *Supply) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowBank
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: Supply: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: Supply: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Total", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowBank
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthBank
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthBank
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Total = append(m.Total, types.Coin{})
+ if err := m.Total[len(m.Total)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipBank(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthBank
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *DenomUnit) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
From a60f493f52c5c3203ed0bd5a1e9aa4ce19ca6d13 Mon Sep 17 00:00:00 2001
From: Amaury M <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 12:10:16 +0100
Subject: [PATCH 2/8] Add migration for supply
---
proto/cosmos/bank/v1beta1/bank.proto | 1 +
x/bank/keeper/migrations.go | 2 +-
x/bank/legacy/v042/store.go | 51 +++++++++++++++++++++++-----
x/bank/legacy/v042/store_test.go | 33 ++++++++++++++++--
x/bank/spec/01_state.md | 5 +--
5 files changed, 79 insertions(+), 13 deletions(-)
diff --git a/proto/cosmos/bank/v1beta1/bank.proto b/proto/cosmos/bank/v1beta1/bank.proto
index a586eacf6a79..9b66a4fd7d44 100644
--- a/proto/cosmos/bank/v1beta1/bank.proto
+++ b/proto/cosmos/bank/v1beta1/bank.proto
@@ -45,6 +45,7 @@ message Output {
// Supply represents a struct that passively keeps track of the total supply
// amounts in the network.
+// This message is deprecated now that supply is indexed by denom.
message Supply {
option deprecated = true;
diff --git a/x/bank/keeper/migrations.go b/x/bank/keeper/migrations.go
index 3a200fc2730d..20ef35e3215a 100644
--- a/x/bank/keeper/migrations.go
+++ b/x/bank/keeper/migrations.go
@@ -17,5 +17,5 @@ func NewMigrator(keeper BaseKeeper) Migrator {
// Migrate1to2 migrates from version 1 to 2.
func (m Migrator) Migrate1to2(ctx sdk.Context) error {
- return v042.MigrateStore(ctx, m.keeper.storeKey)
+ return v042.MigrateStore(ctx, m.keeper.storeKey, m.keeper.cdc)
}
diff --git a/x/bank/legacy/v042/store.go b/x/bank/legacy/v042/store.go
index 894305b6c8f7..c92c45fe3296 100644
--- a/x/bank/legacy/v042/store.go
+++ b/x/bank/legacy/v042/store.go
@@ -1,6 +1,7 @@
package v042
import (
+ "github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
v040auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v040"
@@ -8,14 +9,37 @@ import (
"github.com/cosmos/cosmos-sdk/x/bank/types"
)
-// MigrateStore performs in-place store migrations from v0.40 to v0.42. The
-// migration includes:
-//
-// - Change addresses to be length-prefixed.
-// - Change balances prefix to 1 byte
-func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error {
- store := ctx.KVStore(storeKey)
+// migrateSupply migrates the supply to be stored by denom key instead in a
+// single blob.
+// ref: https://github.com/cosmos/cosmos-sdk/issues/7092
+func migrateSupply(store sdk.KVStore, cdc codec.BinaryMarshaler) error {
+ // Old supply was stored as a single blob under the SupplyKey.
+ var oldSupply types.Supply
+ err := cdc.UnmarshalBinaryBare(store.Get(v040bank.SupplyKey), &oldSupply)
+ if err != nil {
+ return err
+ }
+
+ // We delete the single key holding the whole blob.
+ store.Delete(v040bank.SupplyKey)
+
+ // We add a new key for each denom
+ supplyStore := prefix.NewStore(store, types.SupplyKey)
+ for _, coin := range oldSupply.Total {
+ coinBz, err := cdc.MarshalBinaryBare(&coin)
+ if err != nil {
+ return err
+ }
+ supplyStore.Set([]byte(coin.Denom), coinBz)
+ }
+
+ return nil
+}
+
+// migrateBalanceKeys migrate the balances keys to cater for variable-length
+// addresses.
+func migrateBalanceKeys(store sdk.KVStore) {
// old key is of format:
// prefix ("balances") || addrBytes (20 bytes) || denomBytes
// new key is of format
@@ -34,6 +58,17 @@ func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey) error {
store.Set(newStoreKey, oldStoreIter.Value())
oldStore.Delete(oldStoreIter.Key())
}
+}
- return nil
+// MigrateStore performs in-place store migrations from v0.40 to v0.42. The
+// migration includes:
+//
+// - Change addresses to be length-prefixed.
+// - Change balances prefix to 1 byte
+// - Change supply to be indexed by denom
+func MigrateStore(ctx sdk.Context, storeKey sdk.StoreKey, cdc codec.BinaryMarshaler) error {
+ store := ctx.KVStore(storeKey)
+
+ migrateBalanceKeys(store)
+ return migrateSupply(store, cdc)
}
diff --git a/x/bank/legacy/v042/store_test.go b/x/bank/legacy/v042/store_test.go
index 7481232f5c59..6d013b33d613 100644
--- a/x/bank/legacy/v042/store_test.go
+++ b/x/bank/legacy/v042/store_test.go
@@ -5,6 +5,8 @@ import (
"github.com/stretchr/testify/require"
+ "github.com/cosmos/cosmos-sdk/simapp"
+ "github.com/cosmos/cosmos-sdk/store/prefix"
"github.com/cosmos/cosmos-sdk/testutil"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -13,7 +15,34 @@ import (
"github.com/cosmos/cosmos-sdk/x/bank/types"
)
-func TestStoreMigration(t *testing.T) {
+func TestSupplyMigration(t *testing.T) {
+ encCfg := simapp.MakeTestEncodingConfig()
+ bankKey := sdk.NewKVStoreKey("bank")
+ ctx := testutil.DefaultContext(bankKey, sdk.NewTransientStoreKey("transient_test"))
+ store := ctx.KVStore(bankKey)
+
+ oldFooCoin := sdk.NewCoin("foo", sdk.NewInt(100))
+ oldBarCoin := sdk.NewCoin("bar", sdk.NewInt(200))
+
+ // Old supply was stored as a single blob under the `SupplyKey`.
+ oldSupply := types.Supply{Total: sdk.NewCoins(oldFooCoin, oldBarCoin)}
+ store.Set(v040bank.SupplyKey, encCfg.Marshaler.MustMarshalBinaryBare(&oldSupply))
+
+ // Run migration.
+ err := v042bank.MigrateStore(ctx, bankKey, encCfg.Marshaler)
+ require.NoError(t, err)
+
+ // New supply is indexed by denom.
+ var newFooCoin, newBarCoin sdk.Coin
+ supplyStore := prefix.NewStore(store, types.SupplyKey)
+ encCfg.Marshaler.MustUnmarshalBinaryBare(supplyStore.Get([]byte("foo")), &newFooCoin)
+ encCfg.Marshaler.MustUnmarshalBinaryBare(supplyStore.Get([]byte("bar")), &newBarCoin)
+
+ require.Equal(t, oldFooCoin, newFooCoin)
+ require.Equal(t, oldBarCoin, newBarCoin)
+}
+
+func TestBalanceKeysMigration(t *testing.T) {
bankKey := sdk.NewKVStoreKey("bank")
ctx := testutil.DefaultContext(bankKey, sdk.NewTransientStoreKey("transient_test"))
store := ctx.KVStore(bankKey)
@@ -25,7 +54,7 @@ func TestStoreMigration(t *testing.T) {
oldKey := append(append(v040bank.BalancesPrefix, addr...), denom...)
store.Set(oldKey, value)
- err := v042bank.MigrateStore(ctx, bankKey)
+ err := v042bank.MigrateStore(ctx, bankKey, nil)
require.NoError(t, err)
newKey := append(types.CreateAccountBalancesPrefix(addr), denom...)
diff --git a/x/bank/spec/01_state.md b/x/bank/spec/01_state.md
index 6ca6b97e8fc1..a71a1cd84bba 100644
--- a/x/bank/spec/01_state.md
+++ b/x/bank/spec/01_state.md
@@ -4,8 +4,9 @@ order: 1
# State
-The `x/bank` module keeps state of two primary objects, account balances and the
+The `x/bank` module keeps state of three primary objects, account balances, denom metadata and the
total supply of all balances.
-- Supply: `0x0 -> ProtocolBuffer(Supply)`
+- Supply: `0x0 | byte(denom) -> ProtocolBuffer(coins)`
+- Denom Metadata: `0x0 | byte(denom) -> ProtocolBuffer(Metadata)`
- Balances: `0x2 | byte(address length) | []byte(address) | []byte(balance.Denom) -> ProtocolBuffer(balance)`
From 100a4ae0fda0fe3bec7a90b40046f3682228de8c Mon Sep 17 00:00:00 2001
From: Amaury M <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 12:17:31 +0100
Subject: [PATCH 3/8] Fix lint
---
x/bank/legacy/v042/store.go | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/x/bank/legacy/v042/store.go b/x/bank/legacy/v042/store.go
index c92c45fe3296..cc0d9d6f5ae9 100644
--- a/x/bank/legacy/v042/store.go
+++ b/x/bank/legacy/v042/store.go
@@ -14,7 +14,7 @@ import (
// ref: https://github.com/cosmos/cosmos-sdk/issues/7092
func migrateSupply(store sdk.KVStore, cdc codec.BinaryMarshaler) error {
// Old supply was stored as a single blob under the SupplyKey.
- var oldSupply types.Supply
+ var oldSupply types.Supply // nolint:staticcheck
err := cdc.UnmarshalBinaryBare(store.Get(v040bank.SupplyKey), &oldSupply)
if err != nil {
return err
@@ -25,7 +25,8 @@ func migrateSupply(store sdk.KVStore, cdc codec.BinaryMarshaler) error {
// We add a new key for each denom
supplyStore := prefix.NewStore(store, types.SupplyKey)
- for _, coin := range oldSupply.Total {
+ for i := range oldSupply.Total {
+ coin := oldSupply.Total[i]
coinBz, err := cdc.MarshalBinaryBare(&coin)
if err != nil {
return err
From 10257dbb8eb822d91d36b045dcd3de99a2747a56 Mon Sep 17 00:00:00 2001
From: Amaury <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 12:29:29 +0100
Subject: [PATCH 4/8] Update x/bank/spec/01_state.md
---
x/bank/spec/01_state.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/x/bank/spec/01_state.md b/x/bank/spec/01_state.md
index a71a1cd84bba..69cac247a410 100644
--- a/x/bank/spec/01_state.md
+++ b/x/bank/spec/01_state.md
@@ -7,6 +7,6 @@ order: 1
The `x/bank` module keeps state of three primary objects, account balances, denom metadata and the
total supply of all balances.
-- Supply: `0x0 | byte(denom) -> ProtocolBuffer(coins)`
+- Supply: `0x0 | byte(denom) -> ProtocolBuffer(coin)`
- Denom Metadata: `0x0 | byte(denom) -> ProtocolBuffer(Metadata)`
- Balances: `0x2 | byte(address length) | []byte(address) | []byte(balance.Denom) -> ProtocolBuffer(balance)`
From 4dd1d8fa772b71325ccc5519086770929053afe5 Mon Sep 17 00:00:00 2001
From: Amaury M <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 14:15:44 +0100
Subject: [PATCH 5/8] Fix test
---
x/bank/legacy/v042/store_test.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/x/bank/legacy/v042/store_test.go b/x/bank/legacy/v042/store_test.go
index 6d013b33d613..51256ff3c189 100644
--- a/x/bank/legacy/v042/store_test.go
+++ b/x/bank/legacy/v042/store_test.go
@@ -43,6 +43,7 @@ func TestSupplyMigration(t *testing.T) {
}
func TestBalanceKeysMigration(t *testing.T) {
+ encCfg := simapp.MakeTestEncodingConfig()
bankKey := sdk.NewKVStoreKey("bank")
ctx := testutil.DefaultContext(bankKey, sdk.NewTransientStoreKey("transient_test"))
store := ctx.KVStore(bankKey)
@@ -54,7 +55,7 @@ func TestBalanceKeysMigration(t *testing.T) {
oldKey := append(append(v040bank.BalancesPrefix, addr...), denom...)
store.Set(oldKey, value)
- err := v042bank.MigrateStore(ctx, bankKey, nil)
+ err := v042bank.MigrateStore(ctx, bankKey, encCfg.Marshaler)
require.NoError(t, err)
newKey := append(types.CreateAccountBalancesPrefix(addr), denom...)
From 54402fd8e8e59a534494668f7bc176cf4ef42f2b Mon Sep 17 00:00:00 2001
From: Amaury M <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 14:31:24 +0100
Subject: [PATCH 6/8] Proto gen
---
crypto/keys/secp256r1/keys.pb.go | 2 +-
docs/core/proto-docs.md | 3 ++-
x/bank/types/bank.pb.go | 1 +
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/crypto/keys/secp256r1/keys.pb.go b/crypto/keys/secp256r1/keys.pb.go
index 898daa499b11..898f19a123cf 100644
--- a/crypto/keys/secp256r1/keys.pb.go
+++ b/crypto/keys/secp256r1/keys.pb.go
@@ -26,7 +26,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
// PubKey defines a secp256r1 ECDSA public key.
type PubKey struct {
// Point on secp256r1 curve in a compressed representation as specified in section
- // 4.3.6 of ANSI X9.62.
+ // 4.3.6 of ANSI X9.62: https://webstore.ansi.org/standards/ascx9/ansix9621998
Key *ecdsaPK `protobuf:"bytes,1,opt,name=key,proto3,customtype=ecdsaPK" json:"key,omitempty"`
}
diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md
index 0daa9e3afca6..9e985a6a6a1b 100644
--- a/docs/core/proto-docs.md
+++ b/docs/core/proto-docs.md
@@ -1567,6 +1567,7 @@ sendable).
### Supply
Supply represents a struct that passively keeps track of the total supply
amounts in the network.
+This message is deprecated now that supply is indexed by denom.
| Field | Type | Label | Description |
@@ -2946,7 +2947,7 @@ PubKey defines a secp256r1 ECDSA public key.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| `key` | [bytes](#bytes) | | Point on secp256r1 curve in a compressed representation as specified in section 4.3.6 of ANSI X9.62. |
+| `key` | [bytes](#bytes) | | Point on secp256r1 curve in a compressed representation as specified in section 4.3.6 of ANSI X9.62: https://webstore.ansi.org/standards/ascx9/ansix9621998 |
diff --git a/x/bank/types/bank.pb.go b/x/bank/types/bank.pb.go
index 25415463c13f..0511d1e96127 100644
--- a/x/bank/types/bank.pb.go
+++ b/x/bank/types/bank.pb.go
@@ -211,6 +211,7 @@ var xxx_messageInfo_Output proto.InternalMessageInfo
// Supply represents a struct that passively keeps track of the total supply
// amounts in the network.
+// This message is deprecated now that supply is indexed by denom.
//
// Deprecated: Do not use.
type Supply struct {
From 495892c66a2fda82f4cdc8cd412b0465d671114d Mon Sep 17 00:00:00 2001
From: Amaury <1293565+amaurym@users.noreply.github.com>
Date: Thu, 4 Mar 2021 18:34:02 +0100
Subject: [PATCH 7/8] Update x/bank/spec/01_state.md
---
x/bank/spec/01_state.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/x/bank/spec/01_state.md b/x/bank/spec/01_state.md
index 69cac247a410..4b8a512489e6 100644
--- a/x/bank/spec/01_state.md
+++ b/x/bank/spec/01_state.md
@@ -8,5 +8,5 @@ The `x/bank` module keeps state of three primary objects, account balances, deno
total supply of all balances.
- Supply: `0x0 | byte(denom) -> ProtocolBuffer(coin)`
-- Denom Metadata: `0x0 | byte(denom) -> ProtocolBuffer(Metadata)`
+- Denom Metadata: `0x1 | byte(denom) -> ProtocolBuffer(Metadata)`
- Balances: `0x2 | byte(address length) | []byte(address) | []byte(balance.Denom) -> ProtocolBuffer(balance)`
From 1613e520910c4a50cca62e11faca0a786811afbf Mon Sep 17 00:00:00 2001
From: Amaury M <1293565+amaurym@users.noreply.github.com>
Date: Fri, 5 Mar 2021 15:00:33 +0100
Subject: [PATCH 8/8] Make proto gen
---
docs/core/proto-docs.md | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md
index de2207d7a470..9e985a6a6a1b 100644
--- a/docs/core/proto-docs.md
+++ b/docs/core/proto-docs.md
@@ -80,6 +80,7 @@
- [Output](#cosmos.bank.v1beta1.Output)
- [Params](#cosmos.bank.v1beta1.Params)
- [SendEnabled](#cosmos.bank.v1beta1.SendEnabled)
+ - [Supply](#cosmos.bank.v1beta1.Supply)
- [cosmos/bank/v1beta1/genesis.proto](#cosmos/bank/v1beta1/genesis.proto)
- [Balance](#cosmos.bank.v1beta1.Balance)
@@ -1560,7 +1561,6 @@ sendable).
-<<<<<<< HEAD
@@ -1578,8 +1578,6 @@ This message is deprecated now that supply is indexed by denom.
-=======
->>>>>>> e17953ab112244fece1534b386517bf9cd44ce05