Skip to content

Commit

Permalink
final refactor: signed extension metadata generation
Browse files Browse the repository at this point in the history
  • Loading branch information
nicksinch committed Dec 6, 2023
1 parent c53cbb4 commit 3c330af
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 36 deletions.
13 changes: 7 additions & 6 deletions api/metadata/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,13 @@ func (m Module) Metadata() int64 {
}

func (m Module) buildMetadata() primitives.Metadata {
constantIdsMap := buildConstantsMap()
metadataTypesIds := buildMetadataTypesIdsMap()

metadataTypes := append(primitiveTypes(), basicTypes()...)

metadataTypes = append(metadataTypes, m.runtimeTypes()...)

types, modules, extrinsic := m.runtimeExtrinsic.Metadata(constantIdsMap)
types, modules, extrinsic := m.runtimeExtrinsic.Metadata(metadataTypesIds)

// append types to all
metadataTypes = append(metadataTypes, types...)
Expand Down Expand Up @@ -107,15 +107,15 @@ func (m Module) MetadataAtVersion(dataPtr int32, dataLen int32) int64 {
log.Critical(err.Error())
}

constantIdsMap := buildConstantsMap()
metadataTypesIds := buildMetadataTypesIdsMap()

metadataTypes := append(primitiveTypes(), basicTypes()...)

metadataTypes = append(metadataTypes, m.runtimeTypes()...)

switch version {
case sc.U32(primitives.MetadataVersion14):
types, modules, extrinsicV14 := m.runtimeExtrinsic.Metadata(constantIdsMap)
types, modules, extrinsicV14 := m.runtimeExtrinsic.Metadata(metadataTypesIds)
metadataTypes = append(metadataTypes, types...)
metadataV14 := primitives.RuntimeMetadataV14{
Types: metadataTypes,
Expand All @@ -130,7 +130,7 @@ func (m Module) MetadataAtVersion(dataPtr int32, dataLen int32) int64 {
}
return m.memUtils.BytesToOffsetAndSize(optionMd.Bytes())
case sc.U32(primitives.MetadataVersion15):
typesV15, modulesV15, extrinsicV15, outerEnums, custom := m.runtimeExtrinsic.MetadataLatest(constantIdsMap)
typesV15, modulesV15, extrinsicV15, outerEnums, custom := m.runtimeExtrinsic.MetadataLatest(metadataTypesIds)
metadataTypes = append(metadataTypes, typesV15...)
metadataV15 := primitives.RuntimeMetadataV15{
Types: metadataTypes,
Expand Down Expand Up @@ -212,7 +212,7 @@ func (m Module) apiMetadata() primitives.RuntimeApiMetadata {
}
}

func buildConstantsMap() map[string]int {
func buildMetadataTypesIdsMap() map[string]int {
return map[string]int{
"Bool": metadata.PrimitiveTypesBool,
"String": metadata.PrimitiveTypesString,
Expand All @@ -227,6 +227,7 @@ func buildConstantsMap() map[string]int {
"I32": metadata.PrimitiveTypesI32,
"I64": metadata.PrimitiveTypesI64,
"I128": metadata.PrimitiveTypesI128,
"H256": metadata.TypesH256,
}
}

Expand Down
14 changes: 7 additions & 7 deletions api/metadata/module_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,9 @@ func Test_Module_Item(t *testing.T) {
func Test_Module_Metadata(t *testing.T) {
target := setup()

constantsMap := buildConstantsMap()
metadataTypesIds := buildMetadataTypesIdsMap()

mockRuntimeExtrinsic.On("Metadata", constantsMap).Return(mdTypes, mdModules14, mdExtrinsic)
mockRuntimeExtrinsic.On("Metadata", metadataTypesIds).Return(mdTypes, mdModules14, mdExtrinsic)

builtMeta := target.buildMetadata()

Expand All @@ -156,7 +156,7 @@ func Test_Module_Metadata(t *testing.T) {

assert.Equal(t, ptrAndSize, result)

mockRuntimeExtrinsic.AssertCalled(t, "Metadata", constantsMap)
mockRuntimeExtrinsic.AssertCalled(t, "Metadata", metadataTypesIds)
mockMemoryUtils.AssertCalled(t, "BytesToOffsetAndSize", bMetadata.Bytes())
}

Expand All @@ -179,11 +179,11 @@ func Test_Module_Metadata_AtVersion_14(t *testing.T) {

version14 := sc.U32(primitives.MetadataVersion14)

constantsMap := buildConstantsMap()
metadataTypesIds := buildMetadataTypesIdsMap()

mockMemoryUtils.On("GetWasmMemorySlice", dataPtr, dataLen).Return(version14.Bytes())

mockRuntimeExtrinsic.On("Metadata", constantsMap).Return(mdTypes, mdModules14, mdExtrinsic)
mockRuntimeExtrinsic.On("Metadata", metadataTypesIds).Return(mdTypes, mdModules14, mdExtrinsic)

metadataV14 := primitives.RuntimeMetadataV14{
Types: metadataTypes,
Expand All @@ -210,7 +210,7 @@ func Test_Module_Metadata_AtVersion_14(t *testing.T) {
func Test_Module_Metadata_AtVersion_15(t *testing.T) {
target := setup()

constantsMap := buildConstantsMap()
metadataTypesIds := buildMetadataTypesIdsMap()

metadataTypes := getAllMetadataTypes(&target)

Expand All @@ -228,7 +228,7 @@ func Test_Module_Metadata_AtVersion_15(t *testing.T) {

mockMemoryUtils.On("GetWasmMemorySlice", dataPtr, dataLen).Return(version15.Bytes())

mockRuntimeExtrinsic.On("MetadataLatest", constantsMap).Return(mdTypes, mdModules15, mdExtrinsic15, outerEnums, custom)
mockRuntimeExtrinsic.On("MetadataLatest", metadataTypesIds).Return(mdTypes, mdModules15, mdExtrinsic15, outerEnums, custom)

metadataV15 := primitives.RuntimeMetadataV15{
Types: metadataTypes,
Expand Down
Binary file modified build/runtime.wasm
Binary file not shown.
12 changes: 6 additions & 6 deletions execution/extrinsic/runtime_extrinsic.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ type RuntimeExtrinsic interface {
OnFinalize(n sc.U64) error
OnIdle(n sc.U64, remainingWeight primitives.Weight) primitives.Weight
OffchainWorker(n sc.U64)
Metadata(constantsIdsMap map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV14], primitives.MetadataExtrinsicV14)
MetadataLatest(constantsIdsMap map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV15], primitives.MetadataExtrinsicV15, primitives.OuterEnums, primitives.CustomMetadata)
Metadata(metadataTypesIds map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV14], primitives.MetadataExtrinsicV14)
MetadataLatest(metadataTypesIds map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV15], primitives.MetadataExtrinsicV15, primitives.OuterEnums, primitives.CustomMetadata)
}

type runtimeExtrinsic struct {
Expand Down Expand Up @@ -183,7 +183,7 @@ func (re runtimeExtrinsic) OffchainWorker(n sc.U64) {
}
}

func (re runtimeExtrinsic) Metadata(constantsIdsMap map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV14], primitives.MetadataExtrinsicV14) {
func (re runtimeExtrinsic) Metadata(metadataTypesIds map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV14], primitives.MetadataExtrinsicV14) {
metadataTypes := sc.Sequence[primitives.MetadataType]{}
modules := sc.Sequence[primitives.MetadataModuleV14]{}

Expand All @@ -208,7 +208,7 @@ func (re runtimeExtrinsic) Metadata(constantsIdsMap map[string]int) (sc.Sequence
metadataTypes = append(metadataTypes, re.runtimeEvent(eventVariants))

// get the signed extra types and extensions
signedExtraTypes, signedExtensions := re.extra.Metadata(constantsIdsMap)
signedExtraTypes, signedExtensions := re.extra.Metadata(metadataTypesIds)
// append to signed extra types to all types
metadataTypes = append(metadataTypes, signedExtraTypes...)

Expand Down Expand Up @@ -237,7 +237,7 @@ func (re runtimeExtrinsic) Metadata(constantsIdsMap map[string]int) (sc.Sequence
return metadataTypes, modules, extrinsic
}

func (re runtimeExtrinsic) MetadataLatest(constantsIdsMap map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV15], primitives.MetadataExtrinsicV15, primitives.OuterEnums, primitives.CustomMetadata) {
func (re runtimeExtrinsic) MetadataLatest(metadataTypesIds map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV15], primitives.MetadataExtrinsicV15, primitives.OuterEnums, primitives.CustomMetadata) {
metadataTypes := sc.Sequence[primitives.MetadataType]{}
modules := sc.Sequence[primitives.MetadataModuleV15]{}

Expand Down Expand Up @@ -273,7 +273,7 @@ func (re runtimeExtrinsic) MetadataLatest(constantsIdsMap map[string]int) (sc.Se
metadataTypes = append(metadataTypes, re.runtimeEvent(eventVariants))

// get the signed extra types and extensions
signedExtraTypes, signedExtensions := re.extra.Metadata(constantsIdsMap)
signedExtraTypes, signedExtensions := re.extra.Metadata(metadataTypesIds)
// append to signed extra types to all types
metadataTypes = append(metadataTypes, signedExtraTypes...)

Expand Down
14 changes: 7 additions & 7 deletions execution/extrinsic/runtime_extrinsic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
)

var (
constantIdsMap = map[string]int{
metadataTypesIds = map[string]int{
"Bool": metadata.PrimitiveTypesBool,
"String": metadata.PrimitiveTypesString,
"U8": metadata.PrimitiveTypesU8,
Expand Down Expand Up @@ -474,16 +474,16 @@ func Test_RuntimeExtrinsic_Metadata(t *testing.T) {

mockModuleOne.On("Metadata").Return(metadataTypes, metadataOne)
mockModuleTwo.On("Metadata").Return(metadataTypes, metadataTwo)
mockSignedExtra.On("Metadata", constantIdsMap).Return(metadataTypes, signedExtensions)
mockSignedExtra.On("Metadata", metadataTypesIds).Return(metadataTypes, signedExtensions)

resultTypes, resultModules, resultExtrinsic := target.Metadata(constantIdsMap)
resultTypes, resultModules, resultExtrinsic := target.Metadata(metadataTypesIds)

assert.Equal(t, expectTypes, resultTypes)
assert.Equal(t, expectModules, resultModules)
assert.Equal(t, expectExtrinsic, resultExtrinsic)
mockModuleOne.AssertCalled(t, "Metadata")
mockModuleTwo.AssertCalled(t, "Metadata")
mockSignedExtra.AssertCalled(t, "Metadata", constantIdsMap)
mockSignedExtra.AssertCalled(t, "Metadata", metadataTypesIds)
}

func Test_RuntimeExtrinsic_MetadataLatest(t *testing.T) {
Expand Down Expand Up @@ -547,9 +547,9 @@ func Test_RuntimeExtrinsic_MetadataLatest(t *testing.T) {

mockModuleOne.On("Metadata").Return(metadataTypes, metadataOne)
mockModuleTwo.On("Metadata").Return(metadataTypes, metadataTwo)
mockSignedExtra.On("Metadata", constantIdsMap).Return(metadataTypes, signedExtensions)
mockSignedExtra.On("Metadata", metadataTypesIds).Return(metadataTypes, signedExtensions)

resultTypes, resultModules, resultExtrinsic, resultOuterEnums, resultCustom := target.MetadataLatest(constantIdsMap)
resultTypes, resultModules, resultExtrinsic, resultOuterEnums, resultCustom := target.MetadataLatest(metadataTypesIds)

assert.Equal(t, expectTypes, resultTypes)
assert.Equal(t, expectModules, resultModules)
Expand All @@ -558,7 +558,7 @@ func Test_RuntimeExtrinsic_MetadataLatest(t *testing.T) {
assert.Equal(t, expectCustom, resultCustom)
mockModuleOne.AssertCalled(t, "Metadata")
mockModuleTwo.AssertCalled(t, "Metadata")
mockSignedExtra.AssertCalled(t, "Metadata", constantIdsMap)
mockSignedExtra.AssertCalled(t, "Metadata", metadataTypesIds)
}

func setupRuntimeExtrinsic() RuntimeExtrinsic {
Expand Down
2 changes: 1 addition & 1 deletion frame/system/extensions/check_spec_version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func Test_CheckSpecVersion_PostDispatch(t *testing.T) {
}

func Test_CheckSpecVersion_ModulePath(t *testing.T) {
target := setupCheckNonce()
target := setupCheckSpecVersion()

expectedModulePath := "frame_system"
actualModulePath := target.ModulePath()
Expand Down
8 changes: 4 additions & 4 deletions mocks/runtime_extrinsic.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,12 @@ func (re *RuntimeExtrinsic) OffchainWorker(n sc.U64) {
re.Called(n)
}

func (re *RuntimeExtrinsic) Metadata(constantsIdsMap map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV14], primitives.MetadataExtrinsicV14) {
args := re.Called(constantsIdsMap)
func (re *RuntimeExtrinsic) Metadata(metadataTypesIds map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV14], primitives.MetadataExtrinsicV14) {
args := re.Called(metadataTypesIds)
return args.Get(0).(sc.Sequence[primitives.MetadataType]), args.Get(1).(sc.Sequence[primitives.MetadataModuleV14]), args.Get(2).(primitives.MetadataExtrinsicV14)
}

func (re *RuntimeExtrinsic) MetadataLatest(constantsIdsMap map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV15], primitives.MetadataExtrinsicV15, primitives.OuterEnums, primitives.CustomMetadata) {
args := re.Called(constantsIdsMap)
func (re *RuntimeExtrinsic) MetadataLatest(metadataTypesIds map[string]int) (sc.Sequence[primitives.MetadataType], sc.Sequence[primitives.MetadataModuleV15], primitives.MetadataExtrinsicV15, primitives.OuterEnums, primitives.CustomMetadata) {
args := re.Called(metadataTypesIds)
return args.Get(0).(sc.Sequence[primitives.MetadataType]), args.Get(1).(sc.Sequence[primitives.MetadataModuleV15]), args.Get(2).(primitives.MetadataExtrinsicV15), args.Get(3).(primitives.OuterEnums), args.Get(4).(primitives.CustomMetadata)
}
4 changes: 2 additions & 2 deletions mocks/signed_extra.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ func (m *SignedExtra) PostDispatch(pre sc.Option[sc.Sequence[types.Pre]], info *
return nil
}

func (m *SignedExtra) Metadata(constantsIdsMap map[string]int) (sc.Sequence[types.MetadataType], sc.Sequence[types.MetadataSignedExtension]) {
args := m.Called(constantsIdsMap)
func (m *SignedExtra) Metadata(metadataTypesIds map[string]int) (sc.Sequence[types.MetadataType], sc.Sequence[types.MetadataSignedExtension]) {
args := m.Called(metadataTypesIds)

return args.Get(0).(sc.Sequence[types.MetadataType]), args.Get(1).(sc.Sequence[types.MetadataSignedExtension])
}
6 changes: 3 additions & 3 deletions primitives/types/extra.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type SignedExtra interface {
PreDispatchUnsigned(call Call, info *DispatchInfo, length sc.Compact) error
PostDispatch(pre sc.Option[sc.Sequence[Pre]], info *DispatchInfo, postInfo *PostDispatchInfo, length sc.Compact, result *DispatchResult) error

Metadata(constantsIdsMap map[string]int) (sc.Sequence[MetadataType], sc.Sequence[MetadataSignedExtension])
Metadata(metadataIds map[string]int) (sc.Sequence[MetadataType], sc.Sequence[MetadataSignedExtension])
}

// signedExtra contains an array of SignedExtension, iterated through during extrinsic execution.
Expand Down Expand Up @@ -150,13 +150,13 @@ func (e signedExtra) PostDispatch(pre sc.Option[sc.Sequence[Pre]], info *Dispatc
return nil
}

func (e signedExtra) Metadata(constantsIdsMap map[string]int) (sc.Sequence[MetadataType], sc.Sequence[MetadataSignedExtension]) {
func (e signedExtra) Metadata(metadataIds map[string]int) (sc.Sequence[MetadataType], sc.Sequence[MetadataSignedExtension]) {
ids := sc.Sequence[sc.Compact]{}
extraTypes := sc.Sequence[MetadataType]{}
signedExtensions := sc.Sequence[MetadataSignedExtension]{}

for _, extra := range e.extras {
extraMetadataId := generateExtraMetadata(extra, constantsIdsMap, &extraTypes, &signedExtensions)
extraMetadataId := generateExtraMetadata(extra, metadataIds, &extraTypes, &signedExtensions)
ids = append(ids, sc.ToCompact(extraMetadataId))
}

Expand Down

0 comments on commit 3c330af

Please sign in to comment.