@d9-network/ink 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-BiucMVzj.mjs +18 -0
- package/dist/index-DgYVGyHC.d.cts +593 -0
- package/dist/index-Doyoeg38.d.mts +591 -0
- package/dist/index.cjs +43 -210
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -418
- package/dist/index.d.mts +13 -418
- package/dist/index.mjs +31 -204
- package/dist/index.mjs.map +1 -1
- package/dist/indexer/index.cjs +11 -0
- package/dist/indexer/index.d.cts +2 -0
- package/dist/indexer/index.d.mts +2 -0
- package/dist/indexer/index.mjs +3 -0
- package/dist/indexer-Buc6flPW.cjs +572 -0
- package/dist/indexer-Buc6flPW.cjs.map +1 -0
- package/dist/indexer-C-EZviUx.mjs +449 -0
- package/dist/indexer-C-EZviUx.mjs.map +1 -0
- package/package.json +11 -2
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { _ as isMessageCall, d as PSP22_SELECTORS, f as buildLabelMap, g as getSelectorForLabel, h as getLabelForSelector, m as getAllSelectors, p as buildSelectorMap, t as indexer_exports, v as isPSP22Call } from "./indexer-C-EZviUx.mjs";
|
|
1
2
|
import { Binary } from "polkadot-api";
|
|
2
3
|
import { fromHex } from "polkadot-api/utils";
|
|
3
4
|
import { getInkDynamicBuilder, getInkLookup } from "@polkadot-api/ink-contracts";
|
|
@@ -5,7 +6,7 @@ import { ss58Decode } from "@polkadot-labs/hdkd-helpers";
|
|
|
5
6
|
import { HexSink, Src } from "@subsquid/scale-codec";
|
|
6
7
|
import { AccountId, Bytes as Bytes$1, Option, Struct, Tuple, Variant, Vector, _void, bool, i128, i16, i32, i64, i8, str, u128, u16, u32, u64, u8 } from "@polkadot-api/substrate-bindings";
|
|
7
8
|
import { blake2b } from "@noble/hashes/blake2.js";
|
|
8
|
-
import { AbortedError, AbortedError as AbortedError$1, ContractError, ContractError as ContractError$1, ContractExecutionError, D9_SS58_PREFIX, DecodeError, DecodeError as DecodeError$1, EncodeError, LangError, LangError as LangError$1, MetadataError, MetadataError as MetadataError$1, NetworkError, SignerError, TimeoutError, TimeoutError as TimeoutError$1, TransactionError, TransactionError as TransactionError$1, isContractError, isErrorType } from "@d9-network/spec";
|
|
9
|
+
import { AbortedError, AbortedError as AbortedError$1, ContractError, ContractError as ContractError$1, ContractExecutionError, D9_SS58_PREFIX, DecodeError, DecodeError as DecodeError$1, EncodeError, LangError, LangError as LangError$1, MetadataError, MetadataError as MetadataError$1, NetworkError, SignerError, TimeoutError, TimeoutError as TimeoutError$1, TransactionError, TransactionError as TransactionError$1, isContractError, isErrorType, toD9Address } from "@d9-network/spec";
|
|
9
10
|
import { catchError, filter, from, map, mergeMap, of, share } from "rxjs";
|
|
10
11
|
|
|
11
12
|
//#region src/encode.ts
|
|
@@ -501,7 +502,7 @@ var ContractEventParser = class {
|
|
|
501
502
|
constructor(descriptor, contractAddress) {
|
|
502
503
|
if (!descriptor.metadata) throw new Error("Contract descriptor must include metadata");
|
|
503
504
|
this.metadata = descriptor.metadata;
|
|
504
|
-
this.contractAddress = contractAddress;
|
|
505
|
+
this.contractAddress = toD9Address(contractAddress);
|
|
505
506
|
this.eventDecoders = buildAllEventDecoders(this.metadata);
|
|
506
507
|
this.contractAddressBytes = ss58Decode(contractAddress)[0];
|
|
507
508
|
this.eventSignatures = /* @__PURE__ */ new Map();
|
|
@@ -527,7 +528,7 @@ var ContractEventParser = class {
|
|
|
527
528
|
parseEvent(chainEvent) {
|
|
528
529
|
const extracted = this.extractContractEmittedEvent(chainEvent);
|
|
529
530
|
if (!extracted) return null;
|
|
530
|
-
const { contract, data, topics, blockNumber, blockHash, eventIndex } = extracted;
|
|
531
|
+
const { contract, data, topics, blockNumber, blockHash, eventIndex, extrinsicIndex } = extracted;
|
|
531
532
|
if (!this.bytesEqual(contract, this.contractAddressBytes)) return null;
|
|
532
533
|
if (topics.length === 0) return null;
|
|
533
534
|
const signature = topics[0];
|
|
@@ -551,17 +552,19 @@ var ContractEventParser = class {
|
|
|
551
552
|
}
|
|
552
553
|
try {
|
|
553
554
|
const decodedData = decoder(data.slice(1));
|
|
555
|
+
const rawEvent = {
|
|
556
|
+
blockNumber,
|
|
557
|
+
blockHash,
|
|
558
|
+
eventIndex,
|
|
559
|
+
contractAddress: this.getContractAddress(),
|
|
560
|
+
data,
|
|
561
|
+
topics
|
|
562
|
+
};
|
|
563
|
+
if (extrinsicIndex !== void 0) rawEvent.extrinsicIndex = extrinsicIndex;
|
|
554
564
|
return {
|
|
555
565
|
type: eventLabel,
|
|
556
566
|
value: decodedData,
|
|
557
|
-
raw:
|
|
558
|
-
blockNumber,
|
|
559
|
-
blockHash,
|
|
560
|
-
eventIndex,
|
|
561
|
-
contractAddress: this.getContractAddress(),
|
|
562
|
-
data,
|
|
563
|
-
topics
|
|
564
|
-
}
|
|
567
|
+
raw: rawEvent
|
|
565
568
|
};
|
|
566
569
|
} catch (error) {
|
|
567
570
|
console.warn(`Failed to decode event ${eventLabel}:`, error);
|
|
@@ -702,13 +705,16 @@ var ContractEventParser = class {
|
|
|
702
705
|
const blockNumber = typeof record.blockNumber === "number" ? record.blockNumber : 0;
|
|
703
706
|
const blockHash = typeof record.blockHash === "string" ? record.blockHash : "";
|
|
704
707
|
const eventIndex = typeof record.eventIndex === "number" ? record.eventIndex : 0;
|
|
708
|
+
let extrinsicIndex;
|
|
709
|
+
if (record.phase && typeof record.phase === "object" && record.phase.type === "ApplyExtrinsic" && typeof record.phase.value === "number") extrinsicIndex = record.phase.value;
|
|
705
710
|
return {
|
|
706
711
|
contract,
|
|
707
712
|
data,
|
|
708
713
|
topics,
|
|
709
714
|
blockNumber,
|
|
710
715
|
blockHash,
|
|
711
|
-
eventIndex
|
|
716
|
+
eventIndex,
|
|
717
|
+
extrinsicIndex
|
|
712
718
|
};
|
|
713
719
|
}
|
|
714
720
|
/**
|
|
@@ -875,7 +881,7 @@ function createNativeTransferStream(client, getEvents, watchAddress) {
|
|
|
875
881
|
* @example
|
|
876
882
|
* ```ts
|
|
877
883
|
* import { createMessageBuilder } from '@d9-network/ink';
|
|
878
|
-
* import { contracts } from '@
|
|
884
|
+
* import { contracts } from '@d9-network/spec';
|
|
879
885
|
*
|
|
880
886
|
* const builder = createMessageBuilder(contracts.usdt);
|
|
881
887
|
*
|
|
@@ -1333,7 +1339,7 @@ function createD9InkContract(descriptor, address, options) {
|
|
|
1333
1339
|
* @example
|
|
1334
1340
|
* ```ts
|
|
1335
1341
|
* import { createD9InkSdk } from "@d9-network/ink";
|
|
1336
|
-
* import { contracts } from "@
|
|
1342
|
+
* import { contracts } from "@d9-network/spec";
|
|
1337
1343
|
*
|
|
1338
1344
|
* const sdk = createD9InkSdk(client);
|
|
1339
1345
|
* const usdtContract = sdk.getContract(
|
|
@@ -1923,190 +1929,6 @@ function isCallType(call, label) {
|
|
|
1923
1929
|
return call.type === label;
|
|
1924
1930
|
}
|
|
1925
1931
|
|
|
1926
|
-
//#endregion
|
|
1927
|
-
//#region src/selectors.ts
|
|
1928
|
-
/**
|
|
1929
|
-
* PSP22 standard selectors for quick reference
|
|
1930
|
-
*
|
|
1931
|
-
* These are derived from the PSP22 standard and are consistent across implementations.
|
|
1932
|
-
* Use these when you need to quickly check if call data matches a specific PSP22 method.
|
|
1933
|
-
*
|
|
1934
|
-
* @example
|
|
1935
|
-
* ```ts
|
|
1936
|
-
* import { PSP22_SELECTORS, extractSelectorHex } from "@d9-network/ink";
|
|
1937
|
-
*
|
|
1938
|
-
* const selectorHex = extractSelectorHex(callData);
|
|
1939
|
-
* if (selectorHex === PSP22_SELECTORS.transfer) {
|
|
1940
|
-
* // This is a PSP22::transfer call
|
|
1941
|
-
* }
|
|
1942
|
-
* ```
|
|
1943
|
-
*/
|
|
1944
|
-
const PSP22_SELECTORS = {
|
|
1945
|
-
totalSupply: "162df8c2",
|
|
1946
|
-
balanceOf: "6568382f",
|
|
1947
|
-
allowance: "4d47d921",
|
|
1948
|
-
transfer: "db20f9f5",
|
|
1949
|
-
transferFrom: "54b3c76e",
|
|
1950
|
-
approve: "b20f1bbd",
|
|
1951
|
-
increaseAllowance: "96d6b57a",
|
|
1952
|
-
decreaseAllowance: "fecb57d5"
|
|
1953
|
-
};
|
|
1954
|
-
/**
|
|
1955
|
-
* Build a selector lookup map from contract metadata
|
|
1956
|
-
*
|
|
1957
|
-
* @param metadata - Contract metadata
|
|
1958
|
-
* @returns Map of selector hex (without 0x) -> SelectorInfo
|
|
1959
|
-
*
|
|
1960
|
-
* @example
|
|
1961
|
-
* ```ts
|
|
1962
|
-
* import { contracts } from "@d9-network/spec";
|
|
1963
|
-
* import { buildSelectorMap } from "@d9-network/ink";
|
|
1964
|
-
*
|
|
1965
|
-
* const selectors = buildSelectorMap(contracts.usdt.metadata);
|
|
1966
|
-
* const info = selectors.get("db20f9f5");
|
|
1967
|
-
* if (info) {
|
|
1968
|
-
* console.log(info.label); // "PSP22::transfer"
|
|
1969
|
-
* }
|
|
1970
|
-
* ```
|
|
1971
|
-
*/
|
|
1972
|
-
function buildSelectorMap(metadata) {
|
|
1973
|
-
const map$1 = /* @__PURE__ */ new Map();
|
|
1974
|
-
const messages = metadata.spec.messages;
|
|
1975
|
-
for (const message of messages) {
|
|
1976
|
-
const selectorHex = message.selector.startsWith("0x") ? message.selector.slice(2).toLowerCase() : message.selector.toLowerCase();
|
|
1977
|
-
const selector = hexToBytes(selectorHex);
|
|
1978
|
-
map$1.set(selectorHex, {
|
|
1979
|
-
label: message.label,
|
|
1980
|
-
selector,
|
|
1981
|
-
selectorHex,
|
|
1982
|
-
mutates: message.mutates,
|
|
1983
|
-
payable: message.payable
|
|
1984
|
-
});
|
|
1985
|
-
}
|
|
1986
|
-
return map$1;
|
|
1987
|
-
}
|
|
1988
|
-
/**
|
|
1989
|
-
* Build a reverse lookup map (label -> selector info)
|
|
1990
|
-
*
|
|
1991
|
-
* @param metadata - Contract metadata
|
|
1992
|
-
* @returns Map of label -> SelectorInfo
|
|
1993
|
-
*
|
|
1994
|
-
* @example
|
|
1995
|
-
* ```ts
|
|
1996
|
-
* const labelMap = buildLabelMap(contracts.usdt.metadata);
|
|
1997
|
-
* const info = labelMap.get("PSP22::transfer");
|
|
1998
|
-
* console.log(info?.selectorHex); // "db20f9f5"
|
|
1999
|
-
* ```
|
|
2000
|
-
*/
|
|
2001
|
-
function buildLabelMap(metadata) {
|
|
2002
|
-
const map$1 = /* @__PURE__ */ new Map();
|
|
2003
|
-
const selectorMap = buildSelectorMap(metadata);
|
|
2004
|
-
for (const info of selectorMap.values()) map$1.set(info.label, info);
|
|
2005
|
-
return map$1;
|
|
2006
|
-
}
|
|
2007
|
-
/**
|
|
2008
|
-
* Get selector for a message label
|
|
2009
|
-
*
|
|
2010
|
-
* @param metadata - Contract metadata
|
|
2011
|
-
* @param label - Message label (e.g., "PSP22::transfer")
|
|
2012
|
-
* @returns Selector info or null if not found
|
|
2013
|
-
*
|
|
2014
|
-
* @example
|
|
2015
|
-
* ```ts
|
|
2016
|
-
* const info = getSelectorForLabel(contracts.usdt.metadata, "PSP22::transfer");
|
|
2017
|
-
* console.log(info?.selectorHex); // "db20f9f5"
|
|
2018
|
-
* ```
|
|
2019
|
-
*/
|
|
2020
|
-
function getSelectorForLabel(metadata, label) {
|
|
2021
|
-
return buildLabelMap(metadata).get(label) ?? null;
|
|
2022
|
-
}
|
|
2023
|
-
/**
|
|
2024
|
-
* Get message label for a selector
|
|
2025
|
-
*
|
|
2026
|
-
* @param metadata - Contract metadata
|
|
2027
|
-
* @param selector - Selector as Uint8Array or hex string (with or without 0x)
|
|
2028
|
-
* @returns Selector info or null if not found
|
|
2029
|
-
*
|
|
2030
|
-
* @example
|
|
2031
|
-
* ```ts
|
|
2032
|
-
* const info = getLabelForSelector(contracts.usdt.metadata, "db20f9f5");
|
|
2033
|
-
* console.log(info?.label); // "PSP22::transfer"
|
|
2034
|
-
*
|
|
2035
|
-
* // Also works with Uint8Array
|
|
2036
|
-
* const info2 = getLabelForSelector(contracts.usdt.metadata, callData.slice(0, 4));
|
|
2037
|
-
* ```
|
|
2038
|
-
*/
|
|
2039
|
-
function getLabelForSelector(metadata, selector) {
|
|
2040
|
-
const selectorHex = normalizeSelector(selector);
|
|
2041
|
-
return buildSelectorMap(metadata).get(selectorHex) ?? null;
|
|
2042
|
-
}
|
|
2043
|
-
/**
|
|
2044
|
-
* Check if call data matches a specific message
|
|
2045
|
-
*
|
|
2046
|
-
* @param metadata - Contract metadata
|
|
2047
|
-
* @param callData - Call data bytes or hex string
|
|
2048
|
-
* @param label - Message label to check
|
|
2049
|
-
* @returns True if the call data selector matches the label
|
|
2050
|
-
*
|
|
2051
|
-
* @example
|
|
2052
|
-
* ```ts
|
|
2053
|
-
* if (isMessageCall(contracts.usdt.metadata, callData, "PSP22::transfer")) {
|
|
2054
|
-
* // This is a transfer call
|
|
2055
|
-
* }
|
|
2056
|
-
* ```
|
|
2057
|
-
*/
|
|
2058
|
-
function isMessageCall(metadata, callData, label) {
|
|
2059
|
-
const bytes = typeof callData === "string" ? hexToBytes(callData) : callData;
|
|
2060
|
-
if (bytes.length < 4) return false;
|
|
2061
|
-
const callSelectorHex = bytesToHex(bytes.slice(0, 4));
|
|
2062
|
-
const info = getSelectorForLabel(metadata, label);
|
|
2063
|
-
return info !== null && info.selectorHex === callSelectorHex;
|
|
2064
|
-
}
|
|
2065
|
-
/**
|
|
2066
|
-
* Check if call data matches a PSP22 method
|
|
2067
|
-
*
|
|
2068
|
-
* @param callData - Call data bytes or hex string
|
|
2069
|
-
* @param method - PSP22 method name (e.g., "transfer", "transferFrom")
|
|
2070
|
-
* @returns True if the call data selector matches the PSP22 method
|
|
2071
|
-
*
|
|
2072
|
-
* @example
|
|
2073
|
-
* ```ts
|
|
2074
|
-
* if (isPSP22Call(callData, "transfer")) {
|
|
2075
|
-
* // This is a PSP22::transfer call
|
|
2076
|
-
* }
|
|
2077
|
-
* ```
|
|
2078
|
-
*/
|
|
2079
|
-
function isPSP22Call(callData, method) {
|
|
2080
|
-
const bytes = typeof callData === "string" ? hexToBytes(callData) : callData;
|
|
2081
|
-
if (bytes.length < 4) return false;
|
|
2082
|
-
return bytesToHex(bytes.slice(0, 4)) === PSP22_SELECTORS[method];
|
|
2083
|
-
}
|
|
2084
|
-
/**
|
|
2085
|
-
* Get all selectors from contract metadata
|
|
2086
|
-
*
|
|
2087
|
-
* @param metadata - Contract metadata
|
|
2088
|
-
* @returns Array of SelectorInfo for all messages
|
|
2089
|
-
*/
|
|
2090
|
-
function getAllSelectors(metadata) {
|
|
2091
|
-
const selectorMap = buildSelectorMap(metadata);
|
|
2092
|
-
return Array.from(selectorMap.values());
|
|
2093
|
-
}
|
|
2094
|
-
function normalizeSelector(selector) {
|
|
2095
|
-
if (selector instanceof Uint8Array) return bytesToHex(selector);
|
|
2096
|
-
return selector.startsWith("0x") ? selector.slice(2).toLowerCase() : selector.toLowerCase();
|
|
2097
|
-
}
|
|
2098
|
-
function hexToBytes(hex) {
|
|
2099
|
-
const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
2100
|
-
const bytes = new Uint8Array(clean.length / 2);
|
|
2101
|
-
for (let i = 0; i < bytes.length; i++) bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
|
|
2102
|
-
return bytes;
|
|
2103
|
-
}
|
|
2104
|
-
function bytesToHex(bytes) {
|
|
2105
|
-
let hex = "";
|
|
2106
|
-
for (let i = 0; i < bytes.length; i++) hex += bytes[i].toString(16).padStart(2, "0");
|
|
2107
|
-
return hex;
|
|
2108
|
-
}
|
|
2109
|
-
|
|
2110
1932
|
//#endregion
|
|
2111
1933
|
//#region src/extrinsic-parser.ts
|
|
2112
1934
|
/**
|
|
@@ -2168,6 +1990,10 @@ var ExtrinsicParser = class {
|
|
|
2168
1990
|
const call = this.callParser.parseCall(raw);
|
|
2169
1991
|
if (!call) return null;
|
|
2170
1992
|
if (this.options.messageLabels && this.options.messageLabels.length > 0 && !this.options.messageLabels.includes(call.type)) return null;
|
|
1993
|
+
let signer = String(extrinsic.signer ?? "");
|
|
1994
|
+
if (signer && signer.length >= 32) try {
|
|
1995
|
+
signer = toD9Address(signer);
|
|
1996
|
+
} catch {}
|
|
2171
1997
|
return {
|
|
2172
1998
|
call,
|
|
2173
1999
|
extrinsic: {
|
|
@@ -2175,7 +2001,7 @@ var ExtrinsicParser = class {
|
|
|
2175
2001
|
blockNumber: extrinsic.blockNumber ?? 0,
|
|
2176
2002
|
blockHash: extrinsic.blockHash ?? "",
|
|
2177
2003
|
index: extrinsic.index ?? 0,
|
|
2178
|
-
signer
|
|
2004
|
+
signer
|
|
2179
2005
|
},
|
|
2180
2006
|
contractAddress,
|
|
2181
2007
|
value
|
|
@@ -2259,10 +2085,11 @@ var ExtrinsicParser = class {
|
|
|
2259
2085
|
}
|
|
2260
2086
|
extractContractAddress(dest) {
|
|
2261
2087
|
if (!dest) return null;
|
|
2262
|
-
|
|
2263
|
-
if (typeof dest === "
|
|
2264
|
-
if (typeof dest === "object" && "
|
|
2265
|
-
|
|
2088
|
+
let address = null;
|
|
2089
|
+
if (typeof dest === "string") address = dest;
|
|
2090
|
+
else if (typeof dest === "object" && "type" in dest && "value" in dest) address = dest.value;
|
|
2091
|
+
else if (typeof dest === "object" && "Id" in dest) address = dest.Id;
|
|
2092
|
+
return address ? toD9Address(address) : null;
|
|
2266
2093
|
}
|
|
2267
2094
|
extractBytes(data) {
|
|
2268
2095
|
if (!data) return null;
|
|
@@ -2422,5 +2249,5 @@ function gasExceedsLimit(gas, limit) {
|
|
|
2422
2249
|
}
|
|
2423
2250
|
|
|
2424
2251
|
//#endregion
|
|
2425
|
-
export { AbortedError, ContractCallParser, ContractError, ContractEventParser, ContractExecutionError, DecodeError, EncodeError, ExtrinsicParser, InkCodecs, LangError, MetadataError, NetworkError, PSP22_SELECTORS, SignerError, TimeoutError, TransactionError, applyGasMargin, buildAllEventDecoders, buildAllMessageDecoders, buildEventDecoder, buildLabelMap, buildMessageDecoder, buildSelectorMap, compareGasWeight, createAsciiEventTopic, createCodecRegistry, createContractEventStream, createD9InkContract, createD9InkSdk, createExtrinsicParser, createMessageBuilder, createNativeTransferStream, createPSP22TransferStream, createTypedRpc, decodeContractCallResult, decodeInkValue, encodeCall, encodeContractCall, encodeContractCallWithLimits, estimateTransactionCost, extractContractEmittedData, formatGasInfo, gasExceedsLimit, getAllSelectors, getEventSignature, getLabelForSelector, getSelectorForLabel, isApplyExtrinsicPhase, isBalancesTransferEvent, isCallType, isContractCalledEvent, isContractEmittedEvent, isContractError, isErrorType, isEventType, isLangError, isMessageCall, isPSP22Call, unwrapInkResult };
|
|
2252
|
+
export { AbortedError, ContractCallParser, ContractError, ContractEventParser, ContractExecutionError, DecodeError, EncodeError, ExtrinsicParser, InkCodecs, LangError, MetadataError, NetworkError, PSP22_SELECTORS, SignerError, TimeoutError, TransactionError, applyGasMargin, buildAllEventDecoders, buildAllMessageDecoders, buildEventDecoder, buildLabelMap, buildMessageDecoder, buildSelectorMap, compareGasWeight, createAsciiEventTopic, createCodecRegistry, createContractEventStream, createD9InkContract, createD9InkSdk, createExtrinsicParser, createMessageBuilder, createNativeTransferStream, createPSP22TransferStream, createTypedRpc, decodeContractCallResult, decodeInkValue, encodeCall, encodeContractCall, encodeContractCallWithLimits, estimateTransactionCost, extractContractEmittedData, formatGasInfo, gasExceedsLimit, getAllSelectors, getEventSignature, getLabelForSelector, getSelectorForLabel, indexer_exports as indexer, isApplyExtrinsicPhase, isBalancesTransferEvent, isCallType, isContractCalledEvent, isContractEmittedEvent, isContractError, isErrorType, isEventType, isLangError, isMessageCall, isPSP22Call, unwrapInkResult };
|
|
2426
2253
|
//# sourceMappingURL=index.mjs.map
|