@unlink-xyz/core 0.1.6 → 0.1.8

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.
@@ -27209,8 +27209,8 @@ var ContractUnknownEventPayload = class extends EventPayload {
27209
27209
  /**
27210
27210
  * @_event:
27211
27211
  */
27212
- constructor(contract, listener, filter, log) {
27213
- super(contract, listener, filter);
27212
+ constructor(contract2, listener, filter, log) {
27213
+ super(contract2, listener, filter);
27214
27214
  defineProperties(this, { log });
27215
27215
  }
27216
27216
  /**
@@ -27236,9 +27236,9 @@ var ContractEventPayload = class extends ContractUnknownEventPayload {
27236
27236
  /**
27237
27237
  * @_ignore:
27238
27238
  */
27239
- constructor(contract, listener, filter, fragment, _log) {
27240
- super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));
27241
- const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);
27239
+ constructor(contract2, listener, filter, fragment, _log) {
27240
+ super(contract2, listener, filter, new EventLog(_log, contract2.interface, fragment));
27241
+ const args = contract2.interface.decodeEventLog(fragment, this.log.data, this.log.topics);
27242
27242
  defineProperties(this, { args, fragment });
27243
27243
  }
27244
27244
  /**
@@ -27283,12 +27283,12 @@ function getResolver(value) {
27283
27283
  var PreparedTopicFilter = class {
27284
27284
  #filter;
27285
27285
  fragment;
27286
- constructor(contract, fragment, args) {
27286
+ constructor(contract2, fragment, args) {
27287
27287
  defineProperties(this, { fragment });
27288
27288
  if (fragment.inputs.length < args.length) {
27289
27289
  throw new Error("too many arguments");
27290
27290
  }
27291
- const runner = getRunner(contract.runner, "resolveName");
27291
+ const runner = getRunner(contract2.runner, "resolveName");
27292
27292
  const resolver = canResolve(runner) ? runner : null;
27293
27293
  this.#filter = (async function() {
27294
27294
  const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {
@@ -27306,7 +27306,7 @@ var PreparedTopicFilter = class {
27306
27306
  return value;
27307
27307
  });
27308
27308
  }));
27309
- return contract.interface.encodeFilterTopics(fragment, resolvedArgs);
27309
+ return contract2.interface.encodeFilterTopics(fragment, resolvedArgs);
27310
27310
  })();
27311
27311
  }
27312
27312
  getTopicFilter() {
@@ -27355,14 +27355,14 @@ async function resolveArgs(_runner, inputs, args) {
27355
27355
  });
27356
27356
  }));
27357
27357
  }
27358
- function buildWrappedFallback(contract) {
27358
+ function buildWrappedFallback(contract2) {
27359
27359
  const populateTransaction = async function(overrides) {
27360
27360
  const tx = await copyOverrides(overrides, ["data"]);
27361
- tx.to = await contract.getAddress();
27361
+ tx.to = await contract2.getAddress();
27362
27362
  if (tx.from) {
27363
- tx.from = await resolveAddress(tx.from, getResolver(contract.runner));
27363
+ tx.from = await resolveAddress(tx.from, getResolver(contract2.runner));
27364
27364
  }
27365
- const iface = contract.interface;
27365
+ const iface = contract2.interface;
27366
27366
  const noValue = getBigInt(tx.value || BN_09, "overrides.value") === BN_09;
27367
27367
  const noData = (tx.data || "0x") === "0x";
27368
27368
  if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {
@@ -27375,27 +27375,27 @@ function buildWrappedFallback(contract) {
27375
27375
  return tx;
27376
27376
  };
27377
27377
  const staticCall = async function(overrides) {
27378
- const runner = getRunner(contract.runner, "call");
27378
+ const runner = getRunner(contract2.runner, "call");
27379
27379
  assert(canCall(runner), "contract runner does not support calling", "UNSUPPORTED_OPERATION", { operation: "call" });
27380
27380
  const tx = await populateTransaction(overrides);
27381
27381
  try {
27382
27382
  return await runner.call(tx);
27383
27383
  } catch (error) {
27384
27384
  if (isCallException(error) && error.data) {
27385
- throw contract.interface.makeError(error.data, tx);
27385
+ throw contract2.interface.makeError(error.data, tx);
27386
27386
  }
27387
27387
  throw error;
27388
27388
  }
27389
27389
  };
27390
27390
  const send = async function(overrides) {
27391
- const runner = contract.runner;
27391
+ const runner = contract2.runner;
27392
27392
  assert(canSend(runner), "contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { operation: "sendTransaction" });
27393
27393
  const tx = await runner.sendTransaction(await populateTransaction(overrides));
27394
- const provider = getProvider(contract.runner);
27395
- return new ContractTransactionResponse(contract.interface, provider, tx);
27394
+ const provider = getProvider(contract2.runner);
27395
+ return new ContractTransactionResponse(contract2.interface, provider, tx);
27396
27396
  };
27397
27397
  const estimateGas = async function(overrides) {
27398
- const runner = getRunner(contract.runner, "estimateGas");
27398
+ const runner = getRunner(contract2.runner, "estimateGas");
27399
27399
  assert(canEstimate(runner), "contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { operation: "estimateGas" });
27400
27400
  return await runner.estimateGas(await populateTransaction(overrides));
27401
27401
  };
@@ -27403,7 +27403,7 @@ function buildWrappedFallback(contract) {
27403
27403
  return await send(overrides);
27404
27404
  };
27405
27405
  defineProperties(method, {
27406
- _contract: contract,
27406
+ _contract: contract2,
27407
27407
  estimateGas,
27408
27408
  populateTransaction,
27409
27409
  send,
@@ -27411,9 +27411,9 @@ function buildWrappedFallback(contract) {
27411
27411
  });
27412
27412
  return method;
27413
27413
  }
27414
- function buildWrappedMethod(contract, key) {
27414
+ function buildWrappedMethod(contract2, key) {
27415
27415
  const getFragment = function(...args) {
27416
- const fragment = contract.interface.getFunction(key, args);
27416
+ const fragment = contract2.interface.getFunction(key, args);
27417
27417
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
27418
27418
  operation: "fragment",
27419
27419
  info: { key, args }
@@ -27426,16 +27426,16 @@ function buildWrappedMethod(contract, key) {
27426
27426
  if (fragment.inputs.length + 1 === args.length) {
27427
27427
  overrides = await copyOverrides(args.pop());
27428
27428
  if (overrides.from) {
27429
- overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));
27429
+ overrides.from = await resolveAddress(overrides.from, getResolver(contract2.runner));
27430
27430
  }
27431
27431
  }
27432
27432
  if (fragment.inputs.length !== args.length) {
27433
27433
  throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");
27434
27434
  }
27435
- const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);
27435
+ const resolvedArgs = await resolveArgs(contract2.runner, fragment.inputs, args);
27436
27436
  return Object.assign({}, overrides, await resolveProperties({
27437
- to: contract.getAddress(),
27438
- data: contract.interface.encodeFunctionData(fragment, resolvedArgs)
27437
+ to: contract2.getAddress(),
27438
+ data: contract2.interface.encodeFunctionData(fragment, resolvedArgs)
27439
27439
  }));
27440
27440
  };
27441
27441
  const staticCall = async function(...args) {
@@ -27446,19 +27446,19 @@ function buildWrappedMethod(contract, key) {
27446
27446
  return result;
27447
27447
  };
27448
27448
  const send = async function(...args) {
27449
- const runner = contract.runner;
27449
+ const runner = contract2.runner;
27450
27450
  assert(canSend(runner), "contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { operation: "sendTransaction" });
27451
27451
  const tx = await runner.sendTransaction(await populateTransaction(...args));
27452
- const provider = getProvider(contract.runner);
27453
- return new ContractTransactionResponse(contract.interface, provider, tx);
27452
+ const provider = getProvider(contract2.runner);
27453
+ return new ContractTransactionResponse(contract2.interface, provider, tx);
27454
27454
  };
27455
27455
  const estimateGas = async function(...args) {
27456
- const runner = getRunner(contract.runner, "estimateGas");
27456
+ const runner = getRunner(contract2.runner, "estimateGas");
27457
27457
  assert(canEstimate(runner), "contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { operation: "estimateGas" });
27458
27458
  return await runner.estimateGas(await populateTransaction(...args));
27459
27459
  };
27460
27460
  const staticCallResult = async function(...args) {
27461
- const runner = getRunner(contract.runner, "call");
27461
+ const runner = getRunner(contract2.runner, "call");
27462
27462
  assert(canCall(runner), "contract runner does not support calling", "UNSUPPORTED_OPERATION", { operation: "call" });
27463
27463
  const tx = await populateTransaction(...args);
27464
27464
  let result = "0x";
@@ -27466,12 +27466,12 @@ function buildWrappedMethod(contract, key) {
27466
27466
  result = await runner.call(tx);
27467
27467
  } catch (error) {
27468
27468
  if (isCallException(error) && error.data) {
27469
- throw contract.interface.makeError(error.data, tx);
27469
+ throw contract2.interface.makeError(error.data, tx);
27470
27470
  }
27471
27471
  throw error;
27472
27472
  }
27473
27473
  const fragment = getFragment(...args);
27474
- return contract.interface.decodeFunctionResult(fragment, result);
27474
+ return contract2.interface.decodeFunctionResult(fragment, result);
27475
27475
  };
27476
27476
  const method = async (...args) => {
27477
27477
  const fragment = getFragment(...args);
@@ -27481,8 +27481,8 @@ function buildWrappedMethod(contract, key) {
27481
27481
  return await send(...args);
27482
27482
  };
27483
27483
  defineProperties(method, {
27484
- name: contract.interface.getFunctionName(key),
27485
- _contract: contract,
27484
+ name: contract2.interface.getFunctionName(key),
27485
+ _contract: contract2,
27486
27486
  _key: key,
27487
27487
  getFragment,
27488
27488
  estimateGas,
@@ -27495,7 +27495,7 @@ function buildWrappedMethod(contract, key) {
27495
27495
  configurable: false,
27496
27496
  enumerable: true,
27497
27497
  get: () => {
27498
- const fragment = contract.interface.getFunction(key);
27498
+ const fragment = contract2.interface.getFunction(key);
27499
27499
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
27500
27500
  operation: "fragment",
27501
27501
  info: { key }
@@ -27505,9 +27505,9 @@ function buildWrappedMethod(contract, key) {
27505
27505
  });
27506
27506
  return method;
27507
27507
  }
27508
- function buildWrappedEvent(contract, key) {
27508
+ function buildWrappedEvent(contract2, key) {
27509
27509
  const getFragment = function(...args) {
27510
- const fragment = contract.interface.getEvent(key, args);
27510
+ const fragment = contract2.interface.getEvent(key, args);
27511
27511
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
27512
27512
  operation: "fragment",
27513
27513
  info: { key, args }
@@ -27515,11 +27515,11 @@ function buildWrappedEvent(contract, key) {
27515
27515
  return fragment;
27516
27516
  };
27517
27517
  const method = function(...args) {
27518
- return new PreparedTopicFilter(contract, getFragment(...args), args);
27518
+ return new PreparedTopicFilter(contract2, getFragment(...args), args);
27519
27519
  };
27520
27520
  defineProperties(method, {
27521
- name: contract.interface.getEventName(key),
27522
- _contract: contract,
27521
+ name: contract2.interface.getEventName(key),
27522
+ _contract: contract2,
27523
27523
  _key: key,
27524
27524
  getFragment
27525
27525
  });
@@ -27527,7 +27527,7 @@ function buildWrappedEvent(contract, key) {
27527
27527
  configurable: false,
27528
27528
  enumerable: true,
27529
27529
  get: () => {
27530
- const fragment = contract.interface.getEvent(key);
27530
+ const fragment = contract2.interface.getEvent(key);
27531
27531
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
27532
27532
  operation: "fragment",
27533
27533
  info: { key }
@@ -27539,16 +27539,16 @@ function buildWrappedEvent(contract, key) {
27539
27539
  }
27540
27540
  var internal2 = /* @__PURE__ */ Symbol.for("_ethersInternal_contract");
27541
27541
  var internalValues = /* @__PURE__ */ new WeakMap();
27542
- function setInternal(contract, values) {
27543
- internalValues.set(contract[internal2], values);
27542
+ function setInternal(contract2, values) {
27543
+ internalValues.set(contract2[internal2], values);
27544
27544
  }
27545
- function getInternal(contract) {
27546
- return internalValues.get(contract[internal2]);
27545
+ function getInternal(contract2) {
27546
+ return internalValues.get(contract2[internal2]);
27547
27547
  }
27548
27548
  function isDeferred(value) {
27549
27549
  return value && typeof value === "object" && "getTopicFilter" in value && typeof value.getTopicFilter === "function" && value.fragment;
27550
27550
  }
27551
- async function getSubInfo(contract, event) {
27551
+ async function getSubInfo(contract2, event) {
27552
27552
  let topics;
27553
27553
  let fragment = null;
27554
27554
  if (Array.isArray(event)) {
@@ -27556,7 +27556,7 @@ async function getSubInfo(contract, event) {
27556
27556
  if (isHexString(name, 32)) {
27557
27557
  return name;
27558
27558
  }
27559
- const fragment2 = contract.interface.getEvent(name);
27559
+ const fragment2 = contract2.interface.getEvent(name);
27560
27560
  assertArgument(fragment2, "unknown fragment", "name", name);
27561
27561
  return fragment2.topicHash;
27562
27562
  };
@@ -27575,7 +27575,7 @@ async function getSubInfo(contract, event) {
27575
27575
  if (isHexString(event, 32)) {
27576
27576
  topics = [event];
27577
27577
  } else {
27578
- fragment = contract.interface.getEvent(event);
27578
+ fragment = contract2.interface.getEvent(event);
27579
27579
  assertArgument(fragment, "unknown fragment", "event", event);
27580
27580
  topics = [fragment.topicHash];
27581
27581
  }
@@ -27612,36 +27612,36 @@ async function getSubInfo(contract, event) {
27612
27612
  }).join("&");
27613
27613
  return { fragment, tag, topics };
27614
27614
  }
27615
- async function hasSub(contract, event) {
27616
- const { subs } = getInternal(contract);
27617
- return subs.get((await getSubInfo(contract, event)).tag) || null;
27615
+ async function hasSub(contract2, event) {
27616
+ const { subs } = getInternal(contract2);
27617
+ return subs.get((await getSubInfo(contract2, event)).tag) || null;
27618
27618
  }
27619
- async function getSub(contract, operation, event) {
27620
- const provider = getProvider(contract.runner);
27619
+ async function getSub(contract2, operation, event) {
27620
+ const provider = getProvider(contract2.runner);
27621
27621
  assert(provider, "contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { operation });
27622
- const { fragment, tag, topics } = await getSubInfo(contract, event);
27623
- const { addr, subs } = getInternal(contract);
27622
+ const { fragment, tag, topics } = await getSubInfo(contract2, event);
27623
+ const { addr, subs } = getInternal(contract2);
27624
27624
  let sub2 = subs.get(tag);
27625
27625
  if (!sub2) {
27626
- const address = addr ? addr : contract;
27626
+ const address = addr ? addr : contract2;
27627
27627
  const filter = { address, topics };
27628
27628
  const listener = (log) => {
27629
27629
  let foundFragment = fragment;
27630
27630
  if (foundFragment == null) {
27631
27631
  try {
27632
- foundFragment = contract.interface.getEvent(log.topics[0]);
27632
+ foundFragment = contract2.interface.getEvent(log.topics[0]);
27633
27633
  } catch (error) {
27634
27634
  }
27635
27635
  }
27636
27636
  if (foundFragment) {
27637
27637
  const _foundFragment = foundFragment;
27638
- const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics) : [];
27639
- emit2(contract, event, args, (listener2) => {
27640
- return new ContractEventPayload(contract, listener2, event, _foundFragment, log);
27638
+ const args = fragment ? contract2.interface.decodeEventLog(fragment, log.data, log.topics) : [];
27639
+ emit2(contract2, event, args, (listener2) => {
27640
+ return new ContractEventPayload(contract2, listener2, event, _foundFragment, log);
27641
27641
  });
27642
27642
  } else {
27643
- emit2(contract, event, [], (listener2) => {
27644
- return new ContractUnknownEventPayload(contract, listener2, event, log);
27643
+ emit2(contract2, event, [], (listener2) => {
27644
+ return new ContractUnknownEventPayload(contract2, listener2, event, log);
27645
27645
  });
27646
27646
  }
27647
27647
  };
@@ -27667,9 +27667,9 @@ async function getSub(contract, operation, event) {
27667
27667
  return sub2;
27668
27668
  }
27669
27669
  var lastEmit = Promise.resolve();
27670
- async function _emit(contract, event, args, payloadFunc) {
27670
+ async function _emit(contract2, event, args, payloadFunc) {
27671
27671
  await lastEmit;
27672
- const sub2 = await hasSub(contract, event);
27672
+ const sub2 = await hasSub(contract2, event);
27673
27673
  if (!sub2) {
27674
27674
  return false;
27675
27675
  }
@@ -27680,23 +27680,23 @@ async function _emit(contract, event, args, payloadFunc) {
27680
27680
  passArgs.push(payloadFunc(once2 ? null : listener));
27681
27681
  }
27682
27682
  try {
27683
- listener.call(contract, ...passArgs);
27683
+ listener.call(contract2, ...passArgs);
27684
27684
  } catch (error) {
27685
27685
  }
27686
27686
  return !once2;
27687
27687
  });
27688
27688
  if (sub2.listeners.length === 0) {
27689
27689
  sub2.stop();
27690
- getInternal(contract).subs.delete(sub2.tag);
27690
+ getInternal(contract2).subs.delete(sub2.tag);
27691
27691
  }
27692
27692
  return count > 0;
27693
27693
  }
27694
- async function emit2(contract, event, args, payloadFunc) {
27694
+ async function emit2(contract2, event, args, payloadFunc) {
27695
27695
  try {
27696
27696
  await lastEmit;
27697
27697
  } catch (error) {
27698
27698
  }
27699
- const resultPromise = _emit(contract, event, args, payloadFunc);
27699
+ const resultPromise = _emit(contract2, event, args, payloadFunc);
27700
27700
  lastEmit = resultPromise;
27701
27701
  return await resultPromise;
27702
27702
  }
@@ -28122,8 +28122,8 @@ var BaseContract = class _BaseContract {
28122
28122
  if (runner == null) {
28123
28123
  runner = null;
28124
28124
  }
28125
- const contract = new this(target, abi, runner);
28126
- return contract;
28125
+ const contract2 = new this(target, abi, runner);
28126
+ return contract2;
28127
28127
  }
28128
28128
  };
28129
28129
  function _ContractBase() {
@@ -28424,7 +28424,7 @@ var EnsResolver = class _EnsResolver {
28424
28424
  return { url: null, linkage };
28425
28425
  }
28426
28426
  const tokenId = comps[1];
28427
- const contract = new Contract(comps[0], [
28427
+ const contract2 = new Contract(comps[0], [
28428
28428
  // ERC-721
28429
28429
  "function tokenURI(uint) view returns (string)",
28430
28430
  "function ownerOf(uint) view returns (address)",
@@ -28433,21 +28433,21 @@ var EnsResolver = class _EnsResolver {
28433
28433
  "function balanceOf(address, uint256) view returns (uint)"
28434
28434
  ], this.provider);
28435
28435
  if (scheme === "erc721") {
28436
- const tokenOwner = await contract.ownerOf(tokenId);
28436
+ const tokenOwner = await contract2.ownerOf(tokenId);
28437
28437
  if (owner !== tokenOwner) {
28438
28438
  linkage.push({ type: "!owner", value: tokenOwner });
28439
28439
  return { url: null, linkage };
28440
28440
  }
28441
28441
  linkage.push({ type: "owner", value: tokenOwner });
28442
28442
  } else if (scheme === "erc1155") {
28443
- const balance = await contract.balanceOf(owner, tokenId);
28443
+ const balance = await contract2.balanceOf(owner, tokenId);
28444
28444
  if (!balance) {
28445
28445
  linkage.push({ type: "!balance", value: "0" });
28446
28446
  return { url: null, linkage };
28447
28447
  }
28448
28448
  linkage.push({ type: "balance", value: balance.toString() });
28449
28449
  }
28450
- let metadataUrl = await contract[selector](tokenId);
28450
+ let metadataUrl = await contract2[selector](tokenId);
28451
28451
  if (metadataUrl == null || metadataUrl === "0x") {
28452
28452
  linkage.push({ type: "!metadata-url", value: "" });
28453
28453
  return { url: null, linkage };
@@ -28519,10 +28519,10 @@ var EnsResolver = class _EnsResolver {
28519
28519
  static async #getResolver(provider, name) {
28520
28520
  const ensAddr = await _EnsResolver.getEnsAddress(provider);
28521
28521
  try {
28522
- const contract = new Contract(ensAddr, [
28522
+ const contract2 = new Contract(ensAddr, [
28523
28523
  "function resolver(bytes32) view returns (address)"
28524
28524
  ], provider);
28525
- const addr = await contract.resolver(namehash(name), {
28525
+ const addr = await contract2.resolver(namehash(name), {
28526
28526
  enableCcipRead: true
28527
28527
  });
28528
28528
  if (addr === ZeroAddress) {
@@ -34869,6 +34869,10 @@ var Runtime = {
34869
34869
  };
34870
34870
 
34871
34871
  // config.ts
34872
+ var DEFAULT_RPC_URLS = {
34873
+ "monad-testnet": "https://testnet-rpc.monad.xyz",
34874
+ "monad-testnet-staging": "https://testnet-rpc.monad.xyz"
34875
+ };
34872
34876
  var CONFIG_URL = "https://config.unlink.xyz/networks.json";
34873
34877
  function parseRequiredString(chain2, field, value) {
34874
34878
  if (typeof value !== "string" || value.trim().length === 0) {
@@ -34918,6 +34922,11 @@ function parseChainConfig(chain2, value) {
34918
34922
  "artifactVersion",
34919
34923
  raw.artifactVersion
34920
34924
  ).replace(/^\/+|\/+$/g, "");
34925
+ const adapterAddress = parseOptionalString(
34926
+ chain2,
34927
+ "adapterAddress",
34928
+ raw.adapterAddress
34929
+ );
34921
34930
  const frostUrl = parseOptionalString(
34922
34931
  chain2,
34923
34932
  "frostUrl",
@@ -34928,13 +34937,33 @@ function parseChainConfig(chain2, value) {
34928
34937
  "artifactBaseUrl",
34929
34938
  raw.artifactBaseUrl
34930
34939
  )?.replace(/\/+$/, "");
34940
+ let tokenAddresses;
34941
+ if (raw.tokenAddresses !== void 0) {
34942
+ if (raw.tokenAddresses === null || typeof raw.tokenAddresses !== "object" || Array.isArray(raw.tokenAddresses)) {
34943
+ throw new InitializationError(
34944
+ `Invalid SDK config for ${chain2}: tokenAddresses must be an object`
34945
+ );
34946
+ }
34947
+ tokenAddresses = {};
34948
+ for (const [name, addr] of Object.entries(
34949
+ raw.tokenAddresses
34950
+ )) {
34951
+ tokenAddresses[name] = parseRequiredString(
34952
+ chain2,
34953
+ `tokenAddresses.${name}`,
34954
+ addr
34955
+ );
34956
+ }
34957
+ }
34931
34958
  return {
34932
34959
  chainId,
34933
34960
  gatewayUrl,
34934
34961
  ...frostUrl !== void 0 ? { frostUrl } : {},
34935
34962
  poolAddress,
34963
+ ...adapterAddress !== void 0 ? { adapterAddress } : {},
34936
34964
  artifactVersion,
34937
- ...artifactBaseUrl !== void 0 ? { artifactBaseUrl } : { artifactBaseUrl: DEFAULT_ARTIFACT_BASE_URL }
34965
+ ...artifactBaseUrl !== void 0 ? { artifactBaseUrl } : { artifactBaseUrl: DEFAULT_ARTIFACT_BASE_URL },
34966
+ ...tokenAddresses !== void 0 ? { tokenAddresses } : {}
34938
34967
  };
34939
34968
  }
34940
34969
  async function fetchChainConfig(chain2) {
@@ -53345,7 +53374,7 @@ function buildCall(params) {
53345
53374
  }
53346
53375
  return { to, data, value };
53347
53376
  }
53348
- function buildApproveCall(token, spender, amount) {
53377
+ function approve(token, spender, amount) {
53349
53378
  const normalizedToken = ensureAddress("token", token);
53350
53379
  const normalizedSpender = ensureAddress("spender", spender);
53351
53380
  const normalizedAmount = ensureNonNegative("amount", amount);
@@ -53359,6 +53388,44 @@ function buildApproveCall(token, spender, amount) {
53359
53388
  value: 0n
53360
53389
  };
53361
53390
  }
53391
+ function toCall(tx) {
53392
+ if (tx.to == null) {
53393
+ throw new AdapterError("tx.to is required");
53394
+ }
53395
+ const to = ensureAddress("tx.to", tx.to);
53396
+ if (tx.data == null) {
53397
+ throw new AdapterError("tx.data is required");
53398
+ }
53399
+ const data = ensureHexData("tx.data", tx.data);
53400
+ let value;
53401
+ if (tx.value == null) {
53402
+ value = 0n;
53403
+ } else {
53404
+ try {
53405
+ value = BigInt(tx.value);
53406
+ } catch {
53407
+ throw new AdapterError(
53408
+ `tx.value must be convertible to bigint, received: ${String(tx.value)}`
53409
+ );
53410
+ }
53411
+ }
53412
+ return { to, data, value: ensureNonNegative("tx.value", value) };
53413
+ }
53414
+ function contract(address, abi) {
53415
+ const to = ensureAddress("contract.address", address);
53416
+ const iface = new Interface(abi);
53417
+ return new Proxy(
53418
+ {},
53419
+ {
53420
+ get(_, method) {
53421
+ return (...args) => {
53422
+ const data = iface.encodeFunctionData(method, args);
53423
+ return { to, data, value: 0n };
53424
+ };
53425
+ }
53426
+ }
53427
+ );
53428
+ }
53362
53429
  function encodeAdapterExecute(params) {
53363
53430
  const transactCalldata = ensureHexData(
53364
53431
  "transactCalldata",
@@ -53382,6 +53449,7 @@ function encodeAdapterExecute(params) {
53382
53449
  deadline
53383
53450
  ]);
53384
53451
  }
53452
+ var buildApproveCall = approve;
53385
53453
 
53386
53454
  // transactions/transaction-planner.ts
53387
53455
  init_process();
@@ -54499,7 +54567,7 @@ function createNoteSyncService(stateStore, options = {}) {
54499
54567
  };
54500
54568
  }
54501
54569
 
54502
- // wallet/unlink-wallet.ts
54570
+ // wallet/unlink.ts
54503
54571
  init_process();
54504
54572
  init_buffer();
54505
54573
 
@@ -54796,26 +54864,34 @@ function normalizeCall2(call, index) {
54796
54864
  value: call.value
54797
54865
  };
54798
54866
  }
54799
- function normalizeInputSpec(input, index) {
54800
- const token = ensureAddress(`inputs[${index}].token`, input.token);
54867
+ function normalizeSpendInput(input, index) {
54868
+ const token = ensureAddress(`spend[${index}].token`, input.token);
54869
+ if (token.toLowerCase() === ETH_TOKEN.toLowerCase()) {
54870
+ throw new AdapterError(
54871
+ `spend[${index}].token: native ETH is not supported in adapter execution`
54872
+ );
54873
+ }
54801
54874
  if (input.amount <= 0n) {
54802
- throw new AdapterError(`inputs[${index}].amount must be greater than zero`);
54875
+ throw new AdapterError(`spend[${index}].amount must be greater than zero`);
54803
54876
  }
54804
54877
  return {
54805
54878
  token,
54806
54879
  amount: input.amount
54807
54880
  };
54808
54881
  }
54809
- function normalizeReshieldSpec(reshield, index) {
54810
- const token = ensureAddress(`reshields[${index}].token`, reshield.token);
54811
- if (reshield.minAmount < 0n) {
54882
+ function normalizeReceiveInput(receive, index) {
54883
+ const token = ensureAddress(`receive[${index}].token`, receive.token);
54884
+ if (token.toLowerCase() === ETH_TOKEN.toLowerCase()) {
54812
54885
  throw new AdapterError(
54813
- `reshields[${index}].minAmount must be non-negative`
54886
+ `receive[${index}].token: native ETH is not supported in adapter execution`
54814
54887
  );
54815
54888
  }
54889
+ if (receive.minAmount < 0n) {
54890
+ throw new AdapterError(`receive[${index}].minAmount must be non-negative`);
54891
+ }
54816
54892
  return {
54817
54893
  token,
54818
- minAmount: reshield.minAmount
54894
+ minAmount: receive.minAmount
54819
54895
  };
54820
54896
  }
54821
54897
  function randomFieldElement(randomBigintFn) {
@@ -54835,41 +54911,41 @@ function createAdapterService(deps) {
54835
54911
  "adapterAddress",
54836
54912
  params.adapterAddress
54837
54913
  );
54838
- if (!params.inputs.length) {
54839
- throw new AdapterError("at least one input token is required");
54914
+ if (!params.spend.length) {
54915
+ throw new AdapterError("at least one spend token is required");
54840
54916
  }
54841
54917
  if (!params.calls.length) {
54842
54918
  throw new AdapterError("at least one adapter call is required");
54843
54919
  }
54844
- if (!params.reshields.length) {
54845
- throw new AdapterError("at least one reshield output is required");
54920
+ if (!params.receive.length) {
54921
+ throw new AdapterError("at least one receive output is required");
54846
54922
  }
54847
- const inputs = params.inputs.map(
54848
- (input, i) => normalizeInputSpec(input, i)
54923
+ const spendInputs = params.spend.map(
54924
+ (input, i) => normalizeSpendInput(input, i)
54849
54925
  );
54850
54926
  const seenTokens = /* @__PURE__ */ new Set();
54851
- for (const input of inputs) {
54927
+ for (const input of spendInputs) {
54852
54928
  const lower = input.token.toLowerCase();
54853
54929
  if (seenTokens.has(lower)) {
54854
54930
  throw new AdapterError(
54855
- `duplicate input token ${input.token}; combine amounts per token instead`
54931
+ `duplicate spend token ${input.token}; combine amounts per token instead`
54856
54932
  );
54857
54933
  }
54858
54934
  seenTokens.add(lower);
54859
54935
  }
54860
54936
  const calls = params.calls.map((call, i) => normalizeCall2(call, i));
54861
- const reshieldSpecs = params.reshields.map(
54862
- (reshield, i) => normalizeReshieldSpec(reshield, i)
54937
+ const receiveSpecs = params.receive.map(
54938
+ (receive, i) => normalizeReceiveInput(receive, i)
54863
54939
  );
54864
- const seenReshieldTokens = /* @__PURE__ */ new Set();
54865
- for (const r2 of reshieldSpecs) {
54940
+ const seenReceiveTokens = /* @__PURE__ */ new Set();
54941
+ for (const r2 of receiveSpecs) {
54866
54942
  const lower = r2.token.toLowerCase();
54867
- if (seenReshieldTokens.has(lower)) {
54943
+ if (seenReceiveTokens.has(lower)) {
54868
54944
  throw new AdapterError(
54869
- `duplicate reshield token ${r2.token}; each reshield must target a unique token`
54945
+ `duplicate receive token ${r2.token}; each receive must target a unique token`
54870
54946
  );
54871
54947
  }
54872
- seenReshieldTokens.add(lower);
54948
+ seenReceiveTokens.add(lower);
54873
54949
  }
54874
54950
  const account = overrides?.account ?? await deps.requireActiveAccount();
54875
54951
  const signer = overrides?.signer ?? deps.requireSigner(account);
@@ -54879,19 +54955,19 @@ function createAdapterService(deps) {
54879
54955
  throw new AdapterError("deadline must be in the future");
54880
54956
  }
54881
54957
  const executionCalls = calls;
54882
- const reshields = reshieldSpecs.map(
54883
- (reshield) => {
54958
+ const reshields = receiveSpecs.map(
54959
+ (receive) => {
54884
54960
  const random = randomFieldElement(randomBigintImpl);
54885
54961
  const npk = poseidon([account.masterPublicKey, random]);
54886
54962
  return {
54887
54963
  npk,
54888
54964
  random,
54889
- token: reshield.token,
54890
- minAmount: reshield.minAmount
54965
+ token: receive.token,
54966
+ minAmount: receive.minAmount
54891
54967
  };
54892
54968
  }
54893
54969
  );
54894
- const inputTokens = inputs.map((input) => input.token);
54970
+ const inputTokens = spendInputs.map((input) => input.token);
54895
54971
  const nonce = randomFieldElement(randomBigintImpl);
54896
54972
  const adapterDataHash = computeAdapterDataHash({
54897
54973
  calls: executionCalls,
@@ -54908,7 +54984,7 @@ function createAdapterService(deps) {
54908
54984
  });
54909
54985
  const withdrawalPlans = planWithdrawalsImpl(
54910
54986
  notes,
54911
- inputs.map((input) => ({
54987
+ spendInputs.map((input) => ({
54912
54988
  token: input.token,
54913
54989
  amount: input.amount,
54914
54990
  recipient: adapterAddress
@@ -54991,7 +55067,7 @@ function createAdapterService(deps) {
54991
55067
  adapterCalldata,
54992
55068
  historyPreview: {
54993
55069
  kind: "Withdraw",
54994
- amounts: inputs.map((input) => ({
55070
+ amounts: spendInputs.map((input) => ({
54995
55071
  token: input.token,
54996
55072
  delta: (-input.amount).toString()
54997
55073
  }))
@@ -55013,6 +55089,9 @@ init_process();
55013
55089
  init_buffer();
55014
55090
  var BIP44_ETH_PREFIX = "m/44'/60'/0'/0";
55015
55091
  var ERC20_BALANCE_OF = "function balanceOf(address) view returns (uint256)";
55092
+ function isNativeToken(token) {
55093
+ return token.toLowerCase() === ETH_TOKEN.toLowerCase();
55094
+ }
55016
55095
  function createBurnerService(deps) {
55017
55096
  const { chainRpcUrl, getMasterSeed, withdrawToAddress, requestDeposit } = deps;
55018
55097
  const provider = new JsonRpcProvider(chainRpcUrl);
@@ -55060,8 +55139,8 @@ function createBurnerService(deps) {
55060
55139
  }
55061
55140
  async function getTokenBalance(address, token) {
55062
55141
  const iface = new Interface([ERC20_BALANCE_OF]);
55063
- const contract = new Contract(token, iface, provider);
55064
- const bal = await contract.getFunction("balanceOf")(address);
55142
+ const contract2 = new Contract(token, iface, provider);
55143
+ const bal = await contract2.getFunction("balanceOf")(address);
55065
55144
  return BigInt(bal ?? 0);
55066
55145
  }
55067
55146
  async function getBalance(address) {
@@ -55080,6 +55159,12 @@ function createBurnerService(deps) {
55080
55159
  }
55081
55160
  async function sweepToPool(index, params) {
55082
55161
  const { address } = await addressOf(index);
55162
+ const native = isNativeToken(params.token);
55163
+ if (native && params.amount == null) {
55164
+ throw new Error(
55165
+ "amount is required for native ETH sweeps (needed to reserve gas)"
55166
+ );
55167
+ }
55083
55168
  const amount = params.amount ?? await getTokenBalance(address, params.token);
55084
55169
  if (amount === 0n) {
55085
55170
  throw new Error("No token balance to sweep");
@@ -55090,17 +55175,20 @@ function createBurnerService(deps) {
55090
55175
  depositor: address,
55091
55176
  deposits: [{ token: params.token, amount }]
55092
55177
  });
55093
- const erc20Iface = new Interface([
55094
- "function approve(address spender, uint256 amount)"
55095
- ]);
55096
- const approveData = erc20Iface.encodeFunctionData("approve", [
55097
- params.poolAddress,
55098
- amount
55099
- ]);
55100
- await send(index, { to: params.token, data: approveData });
55178
+ if (!native) {
55179
+ const erc20Iface = new Interface([
55180
+ "function approve(address spender, uint256 amount)"
55181
+ ]);
55182
+ const approveData = erc20Iface.encodeFunctionData("approve", [
55183
+ params.poolAddress,
55184
+ amount
55185
+ ]);
55186
+ await send(index, { to: params.token, data: approveData });
55187
+ }
55101
55188
  const { txHash } = await send(index, {
55102
55189
  to: depositResult.to,
55103
- data: depositResult.calldata
55190
+ data: depositResult.calldata,
55191
+ value: depositResult.value
55104
55192
  });
55105
55193
  return { txHash };
55106
55194
  }
@@ -55810,21 +55898,27 @@ async function createBrowserWalletSDK(options) {
55810
55898
  };
55811
55899
  }
55812
55900
 
55813
- // wallet/unlink-wallet.ts
55814
- var UnlinkWallet = class _UnlinkWallet {
55901
+ // wallet/unlink.ts
55902
+ var Unlink = class _Unlink {
55815
55903
  /** @internal */
55816
55904
  sdk;
55817
55905
  /** Chain ID this wallet operates on. */
55818
55906
  chainId;
55819
55907
  /** Pool contract address this wallet transacts with. */
55820
55908
  poolAddress;
55821
- constructor(sdk, chainId, poolAddress) {
55909
+ /** Adapter contract address for DeFi operations. */
55910
+ adapterAddress;
55911
+ constructor(sdk, chainId, poolAddress, adapterAddress) {
55822
55912
  this.sdk = sdk;
55823
55913
  this.chainId = chainId;
55824
55914
  this.poolAddress = poolAddress;
55915
+ this.adapterAddress = adapterAddress;
55916
+ this.adapter = {
55917
+ address: adapterAddress
55918
+ };
55825
55919
  }
55826
55920
  /**
55827
- * Create a new UnlinkWallet instance.
55921
+ * Create a new Unlink instance.
55828
55922
  *
55829
55923
  * Handles all initialization internally:
55830
55924
  * - Resolves chain config (if using `chain` instead of explicit URLs)
@@ -55836,12 +55930,14 @@ var UnlinkWallet = class _UnlinkWallet {
55836
55930
  let chainId;
55837
55931
  let gatewayUrl;
55838
55932
  let poolAddress;
55933
+ let adapterAddress;
55839
55934
  let proverConfig = config2.prover;
55840
55935
  if ("chain" in config2) {
55841
55936
  const chainConfig = await fetchChainConfig(config2.chain);
55842
55937
  chainId = chainConfig.chainId;
55843
55938
  gatewayUrl = chainConfig.gatewayUrl;
55844
55939
  poolAddress = config2.poolAddress ?? chainConfig.poolAddress;
55940
+ adapterAddress = config2.adapterAddress ?? chainConfig.adapterAddress;
55845
55941
  proverConfig = {
55846
55942
  artifactSource: {
55847
55943
  baseUrl: config2.prover?.artifactSource?.baseUrl ?? chainConfig.artifactBaseUrl,
@@ -55853,6 +55949,7 @@ var UnlinkWallet = class _UnlinkWallet {
55853
55949
  chainId = config2.chainId;
55854
55950
  gatewayUrl = config2.gatewayUrl;
55855
55951
  poolAddress = config2.poolAddress;
55952
+ adapterAddress = config2.adapterAddress;
55856
55953
  if (typeof window !== "undefined" && !config2.prover?.artifactSource?.version) {
55857
55954
  throw new InitializationError(
55858
55955
  "prover.artifactSource.version is required in browser when using explicit gatewayUrl mode. Use chain mode or provide a pinned artifact version."
@@ -55873,7 +55970,7 @@ var UnlinkWallet = class _UnlinkWallet {
55873
55970
  autoSync: config2.autoSync
55874
55971
  }
55875
55972
  );
55876
- return new _UnlinkWallet(sdk, chainId, poolAddress);
55973
+ return new _Unlink(sdk, chainId, poolAddress, adapterAddress ?? "");
55877
55974
  }
55878
55975
  // ===== Seed Lifecycle =====
55879
55976
  /** Seed management (create, import, export, delete mnemonic). */
@@ -55904,10 +56001,10 @@ var UnlinkWallet = class _UnlinkWallet {
55904
56001
  return this.sdk.deposit.reconcile(relayId);
55905
56002
  }
55906
56003
  /**
55907
- * Execute a private transfer (1 or more recipients).
56004
+ * Send a private transfer (1 or more recipients).
55908
56005
  * Handles note selection, circuit selection, and proof generation automatically.
55909
56006
  */
55910
- async transfer(params, overrides) {
56007
+ async send(params, overrides) {
55911
56008
  return this.sdk.transfer.send(
55912
56009
  {
55913
56010
  chainId: this.chainId,
@@ -55918,9 +56015,9 @@ var UnlinkWallet = class _UnlinkWallet {
55918
56015
  );
55919
56016
  }
55920
56017
  /**
55921
- * Get a transfer plan without executing (for preview/confirmation UIs).
56018
+ * Get a send plan without executing (for preview/confirmation UIs).
55922
56019
  */
55923
- async planTransfer(params, account) {
56020
+ async planSend(params, account) {
55924
56021
  return this.sdk.transfer.plan(
55925
56022
  {
55926
56023
  chainId: this.chainId,
@@ -55930,8 +56027,8 @@ var UnlinkWallet = class _UnlinkWallet {
55930
56027
  account
55931
56028
  );
55932
56029
  }
55933
- /** Execute a pre-built transfer plan. */
55934
- async executeTransfer(plans, overrides) {
56030
+ /** Execute a pre-built send plan. */
56031
+ async executeSend(plans, overrides) {
55935
56032
  return this.sdk.transfer.execute(
55936
56033
  plans,
55937
56034
  { chainId: this.chainId, poolAddress: this.poolAddress },
@@ -56080,31 +56177,31 @@ var UnlinkWallet = class _UnlinkWallet {
56080
56177
  return this.sdk.burner.getBalance(address);
56081
56178
  }
56082
56179
  };
56083
- // ===== Adapter =====
56180
+ // ===== Interact (Private DeFi) =====
56084
56181
  /**
56085
- * Private DeFi adapter operations.
56086
- * chainId/poolAddress are injected automatically.
56182
+ * Adapter contract address (resolved from config).
56183
+ * Use for building DeFi calls that reference the adapter.
56087
56184
  */
56088
- adapter = {
56089
- /**
56090
- * Execute an atomic unshield -> call(s) -> reshield flow through an adapter.
56091
- */
56092
- execute: (params, opts, overrides) => {
56093
- return this.sdk.adapter.execute(
56094
- {
56095
- chainId: this.chainId,
56096
- poolAddress: this.poolAddress,
56097
- adapterAddress: params.adapterAddress,
56098
- inputs: params.inputs,
56099
- calls: params.calls,
56100
- reshields: params.reshields,
56101
- deadline: params.deadline
56102
- },
56103
- opts,
56104
- overrides
56105
- );
56106
- }
56107
- };
56185
+ adapter;
56186
+ /**
56187
+ * Execute an atomic unshield -> DeFi call(s) -> reshield flow through an adapter.
56188
+ * chainId/poolAddress/adapterAddress are injected automatically.
56189
+ */
56190
+ async interact(params, opts, overrides) {
56191
+ return this.sdk.adapter.execute(
56192
+ {
56193
+ chainId: this.chainId,
56194
+ poolAddress: this.poolAddress,
56195
+ adapterAddress: this.adapterAddress,
56196
+ spend: params.spend,
56197
+ calls: params.calls,
56198
+ receive: params.receive,
56199
+ deadline: params.deadline
56200
+ },
56201
+ opts,
56202
+ overrides
56203
+ );
56204
+ }
56108
56205
  // ===== Advanced =====
56109
56206
  /**
56110
56207
  * Advanced escape hatch for raw JoinSplit transaction building.
@@ -56152,12 +56249,14 @@ var defaultRng = (n2) => {
56152
56249
  }
56153
56250
  return globalThis.crypto.getRandomValues(new Uint8Array(n2));
56154
56251
  };
56252
+ var UnlinkWallet = Unlink;
56155
56253
  export {
56156
56254
  ADAPTER_EXECUTE_ABI,
56157
56255
  AdapterError,
56158
56256
  CORE_SCHEMA_VERSION,
56159
56257
  CoreError,
56160
56258
  DEFAULT_JOB_TIMEOUT_MS,
56259
+ DEFAULT_RPC_URLS,
56161
56260
  DEPOSIT_ABI,
56162
56261
  ETH_TOKEN,
56163
56262
  FieldSize,
@@ -56175,8 +56274,10 @@ export {
56175
56274
  ReconcileError,
56176
56275
  SNARK_SCALAR_FIELD,
56177
56276
  SchemaMismatchError,
56277
+ Unlink,
56178
56278
  UnlinkWallet,
56179
56279
  ValidationError,
56280
+ approve,
56180
56281
  assertNonNegative,
56181
56282
  buildApproveCall,
56182
56283
  buildCall,
@@ -56186,6 +56287,7 @@ export {
56186
56287
  computeCommitment,
56187
56288
  computeMasterPublicKey,
56188
56289
  computeNullifyingKey,
56290
+ contract,
56189
56291
  createBroadcasterClient,
56190
56292
  createBrowserWalletSDK,
56191
56293
  createCiphertextStore,
@@ -56258,6 +56360,7 @@ export {
56258
56360
  syncDeposit,
56259
56361
  syncTransact,
56260
56362
  toAccountView,
56363
+ toCall,
56261
56364
  transact,
56262
56365
  validateKey,
56263
56366
  verifySignature,