Skip to content

Commit 35e1b61

Browse files
authored
Add support for v13 + General improvments (#161)
1 parent 3db578f commit 35e1b61

21 files changed

Lines changed: 863 additions & 154 deletions

main_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func Example_listenToBalanceChange() {
102102
}
103103

104104
alice := signature.TestKeyringPairAlice.PublicKey
105-
key, err := types.CreateStorageKey(meta, "System", "Account", alice, nil)
105+
key, err := types.CreateStorageKey(meta, "System", "Account", alice)
106106
if err != nil {
107107
panic(err)
108108
}
@@ -227,7 +227,7 @@ func Example_makeASimpleTransfer() {
227227
panic(err)
228228
}
229229

230-
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey, nil)
230+
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey)
231231
if err != nil {
232232
panic(err)
233233
}
@@ -280,7 +280,7 @@ func Example_displaySystemEvents() {
280280
}
281281

282282
// Subscribe to system events via storage
283-
key, err := types.CreateStorageKey(meta, "System", "Events", nil, nil)
283+
key, err := types.CreateStorageKey(meta, "System", "Events", nil)
284284
if err != nil {
285285
panic(err)
286286
}
@@ -441,7 +441,7 @@ func Example_transactionWithEvents() {
441441
}
442442

443443
// Get the nonce for Alice
444-
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey, nil)
444+
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey)
445445
if err != nil {
446446
panic(err)
447447
}

rpc/author/submit_and_watch_extrinsic_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestAuthor_SubmitAndWatchExtrinsic(t *testing.T) {
3939
assert.NoError(t, err)
4040

4141
// Get the nonce for Alice
42-
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey, nil)
42+
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey)
4343
assert.NoError(t, err)
4444

4545
var accountInfo types.AccountInfo

rpc/author/submit_extrinsic_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestAuthor_SubmitExtrinsic(t *testing.T) {
5353
assert.NoError(t, err)
5454

5555
// Get the nonce for Alice
56-
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey, nil)
56+
key, err := types.CreateStorageKey(meta, "System", "Account", signature.TestKeyringPairAlice.PublicKey)
5757
assert.NoError(t, err)
5858

5959
var accountInfo types.AccountInfo

teste2e/author_submit_and_watch_extrinsic_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func TestAuthor_SubmitAndWatchExtrinsic(t *testing.T) {
6161
rv, err := api.RPC.State.GetRuntimeVersionLatest()
6262
assert.NoError(t, err)
6363

64-
key, err := types.CreateStorageKey(meta, "System", "Account", from.PublicKey, nil)
64+
key, err := types.CreateStorageKey(meta, "System", "Account", from.PublicKey)
6565
assert.NoError(t, err)
6666

6767
var sub *author.ExtrinsicStatusSubscription

teste2e/author_submit_extrinsic_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestChain_Events(t *testing.T) {
3434
meta, err := api.RPC.State.GetMetadataLatest()
3535
assert.NoError(t, err)
3636

37-
key, err := types.CreateStorageKey(meta, "System", "Events", nil, nil)
37+
key, err := types.CreateStorageKey(meta, "System", "Events", nil)
3838
assert.NoError(t, err)
3939

4040
blockNUmber := uint64(0) // Replace with desired block to parse events
@@ -80,7 +80,7 @@ func TestChain_SubmitExtrinsic(t *testing.T) {
8080
rv, err := api.RPC.State.GetRuntimeVersionLatest()
8181
assert.NoError(t, err)
8282

83-
key, err := types.CreateStorageKey(meta, "System", "Account", from.PublicKey, nil)
83+
key, err := types.CreateStorageKey(meta, "System", "Account", from.PublicKey)
8484
assert.NoError(t, err)
8585

8686
var accountInfo types.AccountInfo

teste2e/main_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestEnd2end(t *testing.T) {
7474
meta, err := api.RPC.State.GetMetadataLatest()
7575
assert.NoError(t, err)
7676

77-
key, err := types.CreateStorageKey(meta, "Session", "Validators", nil, nil)
77+
key, err := types.CreateStorageKey(meta, "Session", "Validators", nil)
7878
assert.NoError(t, err)
7979

8080
var validators []types.AccountID

teste2e/state_subscribe_storage_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func TestState_SubscribeStorage_EventsRaw(t *testing.T) {
3838
meta, err := api.RPC.State.GetMetadataLatest()
3939
assert.NoError(t, err)
4040

41-
key, err := types.CreateStorageKey(meta, "System", "Events", nil, nil)
41+
key, err := types.CreateStorageKey(meta, "System", "Events", nil)
4242
assert.NoError(t, err)
4343

4444
sub, err := api.RPC.State.SubscribeStorageRaw([]types.StorageKey{key})
@@ -75,7 +75,7 @@ func TestState_SubscribeStorage_Events(t *testing.T) {
7575
meta, err := api.RPC.State.GetMetadataLatest()
7676
assert.NoError(t, err)
7777

78-
key, err := types.CreateStorageKey(meta, "System", "Events", nil, nil)
78+
key, err := types.CreateStorageKey(meta, "System", "Events", nil)
7979
assert.NoError(t, err)
8080

8181
sub, err := api.RPC.State.SubscribeStorageRaw([]types.StorageKey{key})

types/metadata.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ type Metadata struct {
4343
AsMetadataV11 MetadataV11
4444
IsMetadataV12 bool
4545
AsMetadataV12 MetadataV12
46+
IsMetadataV13 bool
47+
AsMetadataV13 MetadataV13
4648
}
4749

4850
func NewMetadataV4() *Metadata {
@@ -81,6 +83,14 @@ func NewMetadataV12() *Metadata {
8183
}
8284
}
8385

86+
func NewMetadataV13() *Metadata {
87+
return &Metadata{
88+
Version: 13,
89+
IsMetadataV13: true,
90+
AsMetadataV13: MetadataV13{Modules: make([]ModuleMetadataV13, 0)},
91+
}
92+
}
93+
8494
func (m *Metadata) Decode(decoder scale.Decoder) error {
8595
err := decoder.Decode(&m.MagicNumber)
8696
if err != nil {
@@ -117,6 +127,9 @@ func (m *Metadata) Decode(decoder scale.Decoder) error {
117127
case 12:
118128
m.IsMetadataV12 = true
119129
err = decoder.Decode(&m.AsMetadataV12)
130+
case 13:
131+
m.IsMetadataV13 = true
132+
err = decoder.Decode(&m.AsMetadataV13)
120133
default:
121134
return fmt.Errorf("unsupported metadata version %v", m.Version)
122135
}
@@ -150,13 +163,40 @@ func (m Metadata) Encode(encoder scale.Encoder) error {
150163
err = encoder.Encode(m.AsMetadataV11)
151164
case 12:
152165
err = encoder.Encode(m.AsMetadataV12)
166+
case 13:
167+
err = encoder.Encode(m.AsMetadataV13)
153168
default:
154169
return fmt.Errorf("unsupported metadata version %v", m.Version)
155170
}
156171

157172
return err
158173
}
159174

175+
func (m *Metadata) FindConstantValue(module string, constantName string) ([]byte, error) {
176+
txtModule := Text(module)
177+
txtConstantName := Text(constantName)
178+
switch {
179+
case m.IsMetadataV4:
180+
return m.AsMetadataV4.FindConstantValue(txtModule, txtConstantName)
181+
case m.IsMetadataV7:
182+
return m.AsMetadataV7.FindConstantValue(txtModule, txtConstantName)
183+
case m.IsMetadataV8:
184+
return m.AsMetadataV8.FindConstantValue(txtModule, txtConstantName)
185+
case m.IsMetadataV9:
186+
return m.AsMetadataV9.FindConstantValue(txtModule, txtConstantName)
187+
case m.IsMetadataV10:
188+
return m.AsMetadataV10.FindConstantValue(txtModule, txtConstantName)
189+
case m.IsMetadataV11:
190+
return m.AsMetadataV11.FindConstantValue(txtModule, txtConstantName)
191+
case m.IsMetadataV12:
192+
return m.AsMetadataV12.FindConstantValue(txtModule, txtConstantName)
193+
case m.IsMetadataV13:
194+
return m.AsMetadataV13.FindConstantValue(txtModule, txtConstantName)
195+
default:
196+
return nil, fmt.Errorf("unsupported metadata version")
197+
}
198+
}
199+
160200
func (m *Metadata) FindCallIndex(call string) (CallIndex, error) {
161201
switch {
162202
case m.IsMetadataV4:
@@ -173,6 +213,8 @@ func (m *Metadata) FindCallIndex(call string) (CallIndex, error) {
173213
return m.AsMetadataV11.FindCallIndex(call)
174214
case m.IsMetadataV12:
175215
return m.AsMetadataV12.FindCallIndex(call)
216+
case m.IsMetadataV13:
217+
return m.AsMetadataV13.FindCallIndex(call)
176218
default:
177219
return CallIndex{}, fmt.Errorf("unsupported metadata version")
178220
}
@@ -194,6 +236,8 @@ func (m *Metadata) FindEventNamesForEventID(eventID EventID) (Text, Text, error)
194236
return m.AsMetadataV11.FindEventNamesForEventID(eventID)
195237
case m.IsMetadataV12:
196238
return m.AsMetadataV12.FindEventNamesForEventID(eventID)
239+
case m.IsMetadataV13:
240+
return m.AsMetadataV13.FindEventNamesForEventID(eventID)
197241
default:
198242
return "", "", fmt.Errorf("unsupported metadata version")
199243
}
@@ -215,6 +259,8 @@ func (m *Metadata) FindStorageEntryMetadata(module string, fn string) (StorageEn
215259
return m.AsMetadataV11.FindStorageEntryMetadata(module, fn)
216260
case m.IsMetadataV12:
217261
return m.AsMetadataV12.FindStorageEntryMetadata(module, fn)
262+
case m.IsMetadataV13:
263+
return m.AsMetadataV13.FindStorageEntryMetadata(module, fn)
218264
default:
219265
return nil, fmt.Errorf("unsupported metadata version")
220266
}
@@ -236,6 +282,8 @@ func (m *Metadata) ExistsModuleMetadata(module string) bool {
236282
return m.AsMetadataV11.ExistsModuleMetadata(module)
237283
case m.IsMetadataV12:
238284
return m.AsMetadataV12.ExistsModuleMetadata(module)
285+
case m.IsMetadataV13:
286+
return m.AsMetadataV13.ExistsModuleMetadata(module)
239287
default:
240288
return false
241289
}

types/metadataV10.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ func (m *MetadataV10) FindEventNamesForEventID(eventID EventID) (Text, Text, err
8787
return "", "", fmt.Errorf("module index %v out of range", eventID[0])
8888
}
8989

90+
func (m *MetadataV10) FindConstantValue(module Text, constant Text) ([]byte, error) {
91+
for _, mod := range m.Modules {
92+
if mod.Name == module {
93+
value, err := mod.FindConstantValue(constant)
94+
if err == nil {
95+
return value, nil
96+
}
97+
}
98+
}
99+
return nil, fmt.Errorf("could not find constant %s.%s", module, constant)
100+
}
101+
90102
func (m *MetadataV10) FindStorageEntryMetadata(module string, fn string) (StorageEntryMetadata, error) {
91103
for _, mod := range m.Modules {
92104
if !mod.HasStorage {
@@ -227,6 +239,15 @@ func (m ModuleMetadataV10) Encode(encoder scale.Encoder) error {
227239
return encoder.Encode(m.Errors)
228240
}
229241

242+
func (m *ModuleMetadataV10) FindConstantValue(constant Text) ([]byte, error) {
243+
for _, cons := range m.Constants {
244+
if cons.Name == constant {
245+
return cons.Value, nil
246+
}
247+
}
248+
return nil, fmt.Errorf("could not find constant %s", constant)
249+
}
250+
230251
type StorageMetadataV10 struct {
231252
Prefix Text
232253
Items []StorageFunctionMetadataV10
@@ -252,6 +273,14 @@ func (s StorageFunctionMetadataV10) IsDoubleMap() bool {
252273
return s.Type.IsDoubleMap
253274
}
254275

276+
func (s StorageFunctionMetadataV10) IsNMap() bool {
277+
return false
278+
}
279+
280+
func (s StorageFunctionMetadataV10) Hashers() ([]hash.Hash, error) {
281+
return nil, fmt.Errorf("Hashers is not supported for metadata v10, please upgrade to use metadata v13 or newer")
282+
}
283+
255284
func (s StorageFunctionMetadataV10) Hasher() (hash.Hash, error) {
256285
if s.Type.IsMap {
257286
return s.Type.AsMap.Hasher.HashFunc()

0 commit comments

Comments
 (0)