mirror of
https://github.com/pezkuwichain/pezkuwi-api.git
synced 2026-07-23 16:35:46 +00:00
feat: add PAPI rebrand packages
- @pezkuwi/papi-utils (rebrand of @polkadot-api/utils) - @pezkuwi/bizinikiwi-bindings (rebrand of @polkadot-api/substrate-bindings) - @pezkuwi/metadata-builders (rebrand of @polkadot-api/metadata-builders) - @pezkuwi/merkleize-metadata (rebrand of @polkadot-api/merkleize-metadata) All @polkadot-api references replaced with @pezkuwi equivalents.
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# @polkadot-api/metadata-builders
|
||||
|
||||
This package has multiple functions that read a metadata object, denormalizes it, and builds other structures needed for different processes
|
||||
|
||||
## getLookupFn
|
||||
|
||||
```ts
|
||||
interface MetadataLookup {
|
||||
(id: number): LookupEntry
|
||||
metadata: V14 | V15
|
||||
}
|
||||
|
||||
function getLookupFn(metadata: Metadata): MetadataLookup
|
||||
```
|
||||
|
||||
Given the a metadata, returns a function that will give the `LookupEntry` for an id along. The function also has access to the original metadata, as it's usually needed to work with the actual lookup.
|
||||
|
||||
The `LookupEntry` is a denormalized data structure for one entry in the metadata. It also "shortcuts" type references when those are pointers (composites or tuples of length 1). Essentially, it's a union of each of the different types that can be found in the lookup, mostly equivalent to something like:
|
||||
|
||||
```ts
|
||||
type TerminalVar =
|
||||
| PrimitiveVar // u8, str, char, i128, etc.
|
||||
| CompactVar
|
||||
| BitSequenceVar
|
||||
| AccountId32
|
||||
|
||||
type ComposedVar =
|
||||
| TupleVar
|
||||
| StructVar
|
||||
| SequenceVar
|
||||
| ArrayVar
|
||||
| OptionVar
|
||||
| ResultVar
|
||||
| EnumVar
|
||||
|
||||
type LookupEntry = TerminalVar | ComposedVar
|
||||
```
|
||||
|
||||
Where, for instance, a StructVar is of the shape
|
||||
|
||||
```ts
|
||||
type StructVar = {
|
||||
type: "struct"
|
||||
value: Record<string, LookupEntry>
|
||||
}
|
||||
```
|
||||
|
||||
It's useful to get types referenced by storage calls, etc.
|
||||
|
||||
## getDynamicBuilder
|
||||
|
||||
```ts
|
||||
function getDynamicBuilder(metadataLookup: MetadataLookup): {
|
||||
buildDefinition: (id: number) => Codec
|
||||
buildConstant: (pallet: string, name: string) => Codec
|
||||
buildEvent: (pallet: string, name: string) => VariantEntry
|
||||
buildError: (pallet: string, name: string) => VariantEntry
|
||||
buildCall: (pallet: string, name: string) => VariantEntry
|
||||
buildStorage: (pallet: string, entry: string) => StorageEntry
|
||||
buildRuntimeCall: (api: string, method: string) => RuntimeEntry
|
||||
}
|
||||
```
|
||||
|
||||
Generates all the codecs needed to SCALE encode or decode the data for any interaction with the chain.
|
||||
|
||||
`buildDefinition` returns the codec for the type identified by the parameter `id`
|
||||
|
||||
`buildConstant` returns the codec for the requested constant (equivalent as calling `buildDefinition` with the type id of that constant)
|
||||
|
||||
`buildEvent`, `buildError` and `buildCall` return an object with the codec, and the indices of the pallet and entry within the metadata:
|
||||
|
||||
```ts
|
||||
interface VariantEntry {
|
||||
location: [number, number] // [palletIdx, entryIdx],
|
||||
codec: Codec
|
||||
}
|
||||
```
|
||||
|
||||
`buildStorage` creates all the encoders/decoders needed to encode a storage call and decode its result:
|
||||
|
||||
```ts
|
||||
interface StorageEntry {
|
||||
// Encodes the arguments of the storage call.
|
||||
enc: (...args: any[]) => string
|
||||
// Decodes the result from the storage call.
|
||||
dec: (value: string) => any
|
||||
// Decodes the arguments of the storage call
|
||||
keyDecoder: (value: string) => any[]
|
||||
// Expected number of arguments
|
||||
len: number
|
||||
// Decoded fallback value as defined in the metadata entry
|
||||
fallback: unknown
|
||||
}
|
||||
```
|
||||
|
||||
Similarly, `buildRuntimeCall` returns the codecs for both encoding the arguments of the runtime call, and the codec for decoding the result
|
||||
|
||||
```ts
|
||||
interface RuntimeEntry {
|
||||
args: Codec<any[]>
|
||||
value: Codec<any>
|
||||
}
|
||||
```
|
||||
|
||||
## getChecksumBuilder
|
||||
|
||||
```ts
|
||||
function getChecksumBuilder(metadataLookup: MetadataLookup): {
|
||||
buildDefinition: (id: number) => string | null
|
||||
buildRuntimeCall: (api: string, method: string) => string | null
|
||||
buildStorage: (pallet: string, entry: string) => string | null
|
||||
buildCall: (pallet: string, name: string) => string | null
|
||||
buildEvent: (pallet: string, name: string) => string | null
|
||||
buildError: (pallet: string, name: string) => string | null
|
||||
buildConstant: (pallet: string, constantName: string) => string | null
|
||||
}
|
||||
```
|
||||
|
||||
Generates the checksums for the different components defined in the metadata.
|
||||
|
||||
`buildDefinition` builds the checksum of one of the types in the lookup. The rest of the methods build the checksum for each of the interfaces of the chain.
|
||||
Reference in New Issue
Block a user