@defuse-protocol/intents-sdk 0.84.0 → 0.85.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.
@@ -42,7 +42,7 @@ const caip2Mapping = {
42
42
  [require_caip2.Chains.Dash]: "dash:mainnet",
43
43
  [require_caip2.Chains.Plasma]: "eth:9745",
44
44
  [require_caip2.Chains.Adi]: "eth:36900",
45
- [require_caip2.Chains.Robinhood]: "eth:4663"
45
+ [require_caip2.Chains.Hood]: "eth:4663"
46
46
  };
47
47
  function toPoaNetwork(caip2) {
48
48
  if (caip2Mapping[caip2] == null) throw new Error(`Unsupported POA Bridge chain = ${caip2}`);
@@ -67,7 +67,7 @@ const tokenPrefixMapping = {
67
67
  dash: require_caip2.Chains.Dash,
68
68
  plasma: require_caip2.Chains.Plasma,
69
69
  adi: require_caip2.Chains.Adi,
70
- hood: require_caip2.Chains.Robinhood
70
+ hood: require_caip2.Chains.Hood
71
71
  };
72
72
  function contractIdToCaip2(contractId) {
73
73
  for (const [prefix, caip2] of Object.entries(tokenPrefixMapping)) if (contractId.startsWith(`${prefix}.`) || contractId.startsWith(`${prefix}-`)) return caip2;
@@ -41,7 +41,7 @@ const caip2Mapping = {
41
41
  [Chains.Dash]: "dash:mainnet",
42
42
  [Chains.Plasma]: "eth:9745",
43
43
  [Chains.Adi]: "eth:36900",
44
- [Chains.Robinhood]: "eth:4663"
44
+ [Chains.Hood]: "eth:4663"
45
45
  };
46
46
  function toPoaNetwork(caip2) {
47
47
  if (caip2Mapping[caip2] == null) throw new Error(`Unsupported POA Bridge chain = ${caip2}`);
@@ -66,7 +66,7 @@ const tokenPrefixMapping = {
66
66
  dash: Chains.Dash,
67
67
  plasma: Chains.Plasma,
68
68
  adi: Chains.Adi,
69
- hood: Chains.Robinhood
69
+ hood: Chains.Hood
70
70
  };
71
71
  function contractIdToCaip2(contractId) {
72
72
  for (const [prefix, caip2] of Object.entries(tokenPrefixMapping)) if (contractId.startsWith(`${prefix}.`) || contractId.startsWith(`${prefix}-`)) return caip2;
@@ -42,7 +42,7 @@ const Chains = {
42
42
  Abstract: "eip155:2741",
43
43
  HyperCore: "hlcore:mainnet",
44
44
  HyperEvm: "eip155:999",
45
- Robinhood: "eip155:4663"
45
+ Hood: "eip155:4663"
46
46
  };
47
47
  function getEIP155ChainId(chain) {
48
48
  (0, _defuse_protocol_internal_utils.assert)(chain.startsWith("eip155:"), "Chain is not an EIP-155 chain");
@@ -39,7 +39,7 @@ declare const Chains: {
39
39
  readonly Abstract: "eip155:2741";
40
40
  readonly HyperCore: "hlcore:mainnet";
41
41
  readonly HyperEvm: "eip155:999";
42
- readonly Robinhood: "eip155:4663";
42
+ readonly Hood: "eip155:4663";
43
43
  };
44
44
  type Chain = (typeof Chains)[keyof typeof Chains];
45
45
  //#endregion
@@ -39,7 +39,7 @@ declare const Chains: {
39
39
  readonly Abstract: "eip155:2741";
40
40
  readonly HyperCore: "hlcore:mainnet";
41
41
  readonly HyperEvm: "eip155:999";
42
- readonly Robinhood: "eip155:4663";
42
+ readonly Hood: "eip155:4663";
43
43
  };
44
44
  type Chain = (typeof Chains)[keyof typeof Chains];
45
45
  //#endregion
@@ -41,7 +41,7 @@ const Chains = {
41
41
  Abstract: "eip155:2741",
42
42
  HyperCore: "hlcore:mainnet",
43
43
  HyperEvm: "eip155:999",
44
- Robinhood: "eip155:4663"
44
+ Hood: "eip155:4663"
45
45
  };
46
46
  function getEIP155ChainId(chain) {
47
47
  assert(chain.startsWith("eip155:"), "Chain is not an EIP-155 chain");
@@ -31,7 +31,7 @@ function compareAddresses(a, b, blockchain) {
31
31
  case require_caip2.Chains.Abstract:
32
32
  case require_caip2.Chains.HyperCore:
33
33
  case require_caip2.Chains.HyperEvm:
34
- case require_caip2.Chains.Robinhood: return (0, viem.getAddress)(a) === (0, viem.getAddress)(b);
34
+ case require_caip2.Chains.Hood: return (0, viem.getAddress)(a) === (0, viem.getAddress)(b);
35
35
  case require_caip2.Chains.Aptos:
36
36
  case require_caip2.Chains.Movement:
37
37
  case require_caip2.Chains.Sui:
@@ -30,7 +30,7 @@ function compareAddresses(a, b, blockchain) {
30
30
  case Chains.Abstract:
31
31
  case Chains.HyperCore:
32
32
  case Chains.HyperEvm:
33
- case Chains.Robinhood: return getAddress(a) === getAddress(b);
33
+ case Chains.Hood: return getAddress(a) === getAddress(b);
34
34
  case Chains.Aptos:
35
35
  case Chains.Movement:
36
36
  case Chains.Sui:
@@ -52,7 +52,7 @@ function validateAddress(address, blockchain) {
52
52
  case require_caip2.Chains.Abstract:
53
53
  case require_caip2.Chains.HyperCore:
54
54
  case require_caip2.Chains.HyperEvm:
55
- case require_caip2.Chains.Robinhood: return validateEthAddress(address);
55
+ case require_caip2.Chains.Hood: return validateEthAddress(address);
56
56
  case require_caip2.Chains.Aleo: return validateAleoAddress(address);
57
57
  case require_caip2.Chains.Dash: return validateDashAddress(address);
58
58
  default: return false;
@@ -204,7 +204,7 @@ function validateXrpAddress(address) {
204
204
  * - Unified Orchard / Unified Addresses (UA)
205
205
  */
206
206
  function validateZcashAddress(address) {
207
- if (address.startsWith("t1") || address.startsWith("t3")) return /^t[13][a-km-zA-HJ-NP-Z1-9]{33}$/.test(address);
207
+ if (address.startsWith("t1") || address.startsWith("t3")) return validateZcashTransparentAddress(address);
208
208
  const expectedHrp = "tex";
209
209
  if (address.startsWith(`${expectedHrp}1`)) try {
210
210
  const decoded = _scure_base.bech32m.decodeToBytes(address);
@@ -217,6 +217,34 @@ function validateZcashAddress(address) {
217
217
  return false;
218
218
  }
219
219
  /**
220
+ * Validates Zcash transparent addresses (mainnet only).
221
+ *
222
+ * Mirrors zcash_address::ZcashAddress::from_str's Base58Check branch
223
+ * (components/zcash_address/src/encoding.rs in zcash/librustzcash):
224
+ * decode Base58Check, then match the 2-byte version prefix against the
225
+ * mainnet P2PKH/P2SH prefixes from zcash_protocol::constants::mainnet.
226
+ *
227
+ * B58_PUBKEY_ADDRESS_PREFIX = [0x1c, 0xb8] (t1...)
228
+ * B58_SCRIPT_ADDRESS_PREFIX = [0x1c, 0xbd] (t3...)
229
+ */
230
+ function validateZcashTransparentAddress(address) {
231
+ try {
232
+ const decoded = _scure_base.base58.decode(address);
233
+ if (decoded.length !== 26) return false;
234
+ const version = decoded.subarray(0, 2);
235
+ const isP2pkh = version[0] === 28 && version[1] === 184;
236
+ const isP2sh = version[0] === 28 && version[1] === 189;
237
+ if (!isP2pkh && !isP2sh) return false;
238
+ const payload = decoded.subarray(0, 22);
239
+ const checksum = decoded.subarray(22, 26);
240
+ const expectedChecksum = (0, _noble_hashes_sha2.sha256)((0, _noble_hashes_sha2.sha256)(payload)).subarray(0, 4);
241
+ for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return false;
242
+ return true;
243
+ } catch {
244
+ return false;
245
+ }
246
+ }
247
+ /**
220
248
  * Validates Tron addresses
221
249
  * Supports:
222
250
  * - hex addresses
@@ -51,7 +51,7 @@ function validateAddress(address, blockchain) {
51
51
  case Chains.Abstract:
52
52
  case Chains.HyperCore:
53
53
  case Chains.HyperEvm:
54
- case Chains.Robinhood: return validateEthAddress(address);
54
+ case Chains.Hood: return validateEthAddress(address);
55
55
  case Chains.Aleo: return validateAleoAddress(address);
56
56
  case Chains.Dash: return validateDashAddress(address);
57
57
  default: return false;
@@ -203,7 +203,7 @@ function validateXrpAddress(address) {
203
203
  * - Unified Orchard / Unified Addresses (UA)
204
204
  */
205
205
  function validateZcashAddress(address) {
206
- if (address.startsWith("t1") || address.startsWith("t3")) return /^t[13][a-km-zA-HJ-NP-Z1-9]{33}$/.test(address);
206
+ if (address.startsWith("t1") || address.startsWith("t3")) return validateZcashTransparentAddress(address);
207
207
  const expectedHrp = "tex";
208
208
  if (address.startsWith(`${expectedHrp}1`)) try {
209
209
  const decoded = bech32m.decodeToBytes(address);
@@ -216,6 +216,34 @@ function validateZcashAddress(address) {
216
216
  return false;
217
217
  }
218
218
  /**
219
+ * Validates Zcash transparent addresses (mainnet only).
220
+ *
221
+ * Mirrors zcash_address::ZcashAddress::from_str's Base58Check branch
222
+ * (components/zcash_address/src/encoding.rs in zcash/librustzcash):
223
+ * decode Base58Check, then match the 2-byte version prefix against the
224
+ * mainnet P2PKH/P2SH prefixes from zcash_protocol::constants::mainnet.
225
+ *
226
+ * B58_PUBKEY_ADDRESS_PREFIX = [0x1c, 0xb8] (t1...)
227
+ * B58_SCRIPT_ADDRESS_PREFIX = [0x1c, 0xbd] (t3...)
228
+ */
229
+ function validateZcashTransparentAddress(address) {
230
+ try {
231
+ const decoded = base58.decode(address);
232
+ if (decoded.length !== 26) return false;
233
+ const version = decoded.subarray(0, 2);
234
+ const isP2pkh = version[0] === 28 && version[1] === 184;
235
+ const isP2sh = version[0] === 28 && version[1] === 189;
236
+ if (!isP2pkh && !isP2sh) return false;
237
+ const payload = decoded.subarray(0, 22);
238
+ const checksum = decoded.subarray(22, 26);
239
+ const expectedChecksum = sha256(sha256(payload)).subarray(0, 4);
240
+ for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return false;
241
+ return true;
242
+ } catch {
243
+ return false;
244
+ }
245
+ }
246
+ /**
219
247
  * Validates Tron addresses
220
248
  * Supports:
221
249
  * - hex addresses
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defuse-protocol/intents-sdk",
3
- "version": "0.84.0",
3
+ "version": "0.85.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "repository": {
@@ -59,7 +59,7 @@
59
59
  "valibot": "^1.0.0",
60
60
  "viem": "^2.0.0",
61
61
  "@defuse-protocol/contract-types": "0.6.4",
62
- "@defuse-protocol/internal-utils": "0.38.0"
62
+ "@defuse-protocol/internal-utils": "0.39.0"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@ton/core": "^0.60.0",