@polkadot/types
Version:
Implementation of the Parity codec
106 lines (105 loc) • 4.9 kB
JavaScript
import { objectSpread } from '@polkadot/util';
function palletsFromV15(registry, palletV15) {
const deprecationInfo = registry.createTypeUnsafe('ItemDeprecationInfoV16', ['NotDeprecated']);
const associatedTypes = registry.createTypeUnsafe('Vec<PalletAssociatedTypeMetadataV16>', [[]]);
const viewFunctions = registry.createTypeUnsafe('Vec<PalletViewFunctionMetadataV16>', [[]]);
return registry.createTypeUnsafe('PalletMetadataV16', [
objectSpread({}, palletV15, {
associatedTypes,
calls: palletV15.calls.isSome ? convertCalls(registry, palletV15.calls.unwrap()) : null,
constants: convertConstants(registry, palletV15.constants),
deprecationInfo,
errors: palletV15.errors.isSome ? converErrors(registry, palletV15.errors.unwrap()) : null,
events: palletV15.events.isSome ? convertEvents(registry, palletV15.events.unwrap()) : null,
storage: palletV15.storage.isSome ? convertStorage(registry, palletV15.storage.unwrap()) : null,
viewFunctions
})
]);
}
function convertStorage(registry, storage) {
const deprecationInfo = registry.createTypeUnsafe('ItemDeprecationInfoV16', ['NotDeprecated']);
const items = storage.items.map((item) => registry.createTypeUnsafe('StorageEntryMetadataV16', [
objectSpread({}, item, { deprecationInfo })
]));
return registry.createTypeUnsafe('PalletStorageMetadataV16', [{
items: registry.createTypeUnsafe('Vec<StorageEntryMetadataV16>', [items]),
prefix: storage.prefix
}]);
}
function convertCalls(registry, calls) {
const deprecationInfo = registry.createTypeUnsafe('EnumDeprecationInfoV16', []);
return registry.createTypeUnsafe('PalletCallMetadataV16', [{
deprecationInfo,
type: calls.type
}]);
}
function convertEvents(registry, events) {
const deprecationInfo = registry.createTypeUnsafe('EnumDeprecationInfoV16', []);
return registry.createTypeUnsafe('PalletEventMetadataV16', [{
deprecationInfo,
type: events.type
}]);
}
function convertConstants(registry, constants) {
const deprecationInfo = registry.createTypeUnsafe('ItemDeprecationInfoV16', ['NotDeprecated']);
return registry.createTypeUnsafe('Vec<PalletConstantMetadataV16>', [
constants.map((constant) => registry.createTypeUnsafe('PalletConstantMetadataV16', [
objectSpread({}, constant, { deprecationInfo })
]))
]);
}
function converErrors(registry, errors) {
const deprecationInfo = registry.createTypeUnsafe('EnumDeprecationInfoV16', []);
return registry.createTypeUnsafe('PalletErrorMetadataV16', [{
deprecationInfo,
type: errors.type
}]);
}
function extrinsicFromV15(registry, extrinsicV15) {
const transactionExtensions = extrinsicV15.signedExtensions.map(({ additionalSigned, identifier, type }) => registry.createTypeUnsafe('TransactionExtensionMetadataV16', [{
identifier,
implict: additionalSigned,
type
}]));
const indexes = transactionExtensions.map((_, i) => registry.createTypeUnsafe('Compact<u32>', [i]));
const transactionExtensionsByVersion = registry.createTypeUnsafe('BTreeMap<u8, Vec<Compact<u32>>>', [new Map([[registry.createTypeUnsafe('u8', [extrinsicV15.version]), registry.createTypeUnsafe('Vec<Compact<u32>>', [indexes])]])]);
return registry.createTypeUnsafe('ExtrinsicMetadataV16', [
{
addressType: extrinsicV15.addressType,
callType: extrinsicV15.callType,
signatureType: extrinsicV15.signatureType,
transactionExtensions,
transactionExtensionsByVersion,
versions: [extrinsicV15.version]
}
]);
}
function apisFromV15(registry, runtimeApiV15) {
const deprecationInfo = registry.createTypeUnsafe('ItemDeprecationInfoV16', ['NotDeprecated']);
const methods = runtimeApiV15.methods.map((method) => registry.createTypeUnsafe('RuntimeApiMethodMetadataV16', [objectSpread({}, method, { deprecationInfo })]));
return registry.createTypeUnsafe('RuntimeApiMetadataV16', [
objectSpread({}, runtimeApiV15, {
deprecationInfo,
methods,
version: registry.createTypeUnsafe('Compact<u32>', [0])
})
]);
}
/**
* Convert the Metadata to v16
* @internal
**/
export function toV16(registry, v15, _) {
const pallets = v15.pallets.map((pallet) => {
return palletsFromV15(registry, pallet);
});
const extrinsic = extrinsicFromV15(registry, v15.extrinsic);
const apis = v15.apis.map((runtimeApi) => apisFromV15(registry, runtimeApi));
return registry.createTypeUnsafe('MetadataV16', [
objectSpread({}, v15, {
apis,
extrinsic,
pallets
})
]);
}