@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/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 '@polkadot-api/descriptors';
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 "@polkadot-api/descriptors";
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: String(extrinsic.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
- if (typeof dest === "string") return dest;
2263
- if (typeof dest === "object" && "type" in dest && "value" in dest) return dest.value;
2264
- if (typeof dest === "object" && "Id" in dest) return dest.Id;
2265
- return null;
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