@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.
@@ -3555,7 +3555,7 @@ var init_fs = __esm({
3555
3555
  init_process();
3556
3556
  init_buffer();
3557
3557
 
3558
- // wallet/unlink-wallet.ts
3558
+ // wallet/unlink.ts
3559
3559
  init_process();
3560
3560
  init_buffer();
3561
3561
 
@@ -3755,6 +3755,11 @@ function parseChainConfig(chain2, value) {
3755
3755
  "artifactVersion",
3756
3756
  raw.artifactVersion
3757
3757
  ).replace(/^\/+|\/+$/g, "");
3758
+ const adapterAddress = parseOptionalString(
3759
+ chain2,
3760
+ "adapterAddress",
3761
+ raw.adapterAddress
3762
+ );
3758
3763
  const frostUrl = parseOptionalString(
3759
3764
  chain2,
3760
3765
  "frostUrl",
@@ -3765,13 +3770,33 @@ function parseChainConfig(chain2, value) {
3765
3770
  "artifactBaseUrl",
3766
3771
  raw.artifactBaseUrl
3767
3772
  )?.replace(/\/+$/, "");
3773
+ let tokenAddresses;
3774
+ if (raw.tokenAddresses !== void 0) {
3775
+ if (raw.tokenAddresses === null || typeof raw.tokenAddresses !== "object" || Array.isArray(raw.tokenAddresses)) {
3776
+ throw new InitializationError(
3777
+ `Invalid SDK config for ${chain2}: tokenAddresses must be an object`
3778
+ );
3779
+ }
3780
+ tokenAddresses = {};
3781
+ for (const [name, addr] of Object.entries(
3782
+ raw.tokenAddresses
3783
+ )) {
3784
+ tokenAddresses[name] = parseRequiredString(
3785
+ chain2,
3786
+ `tokenAddresses.${name}`,
3787
+ addr
3788
+ );
3789
+ }
3790
+ }
3768
3791
  return {
3769
3792
  chainId,
3770
3793
  gatewayUrl,
3771
3794
  ...frostUrl !== void 0 ? { frostUrl } : {},
3772
3795
  poolAddress,
3796
+ ...adapterAddress !== void 0 ? { adapterAddress } : {},
3773
3797
  artifactVersion,
3774
- ...artifactBaseUrl !== void 0 ? { artifactBaseUrl } : { artifactBaseUrl: DEFAULT_ARTIFACT_BASE_URL }
3798
+ ...artifactBaseUrl !== void 0 ? { artifactBaseUrl } : { artifactBaseUrl: DEFAULT_ARTIFACT_BASE_URL },
3799
+ ...tokenAddresses !== void 0 ? { tokenAddresses } : {}
3775
3800
  };
3776
3801
  }
3777
3802
  async function fetchChainConfig(chain2) {
@@ -28519,8 +28544,8 @@ var ContractUnknownEventPayload = class extends EventPayload {
28519
28544
  /**
28520
28545
  * @_event:
28521
28546
  */
28522
- constructor(contract, listener, filter, log) {
28523
- super(contract, listener, filter);
28547
+ constructor(contract2, listener, filter, log) {
28548
+ super(contract2, listener, filter);
28524
28549
  defineProperties(this, { log });
28525
28550
  }
28526
28551
  /**
@@ -28546,9 +28571,9 @@ var ContractEventPayload = class extends ContractUnknownEventPayload {
28546
28571
  /**
28547
28572
  * @_ignore:
28548
28573
  */
28549
- constructor(contract, listener, filter, fragment, _log) {
28550
- super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));
28551
- const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);
28574
+ constructor(contract2, listener, filter, fragment, _log) {
28575
+ super(contract2, listener, filter, new EventLog(_log, contract2.interface, fragment));
28576
+ const args = contract2.interface.decodeEventLog(fragment, this.log.data, this.log.topics);
28552
28577
  defineProperties(this, { args, fragment });
28553
28578
  }
28554
28579
  /**
@@ -28593,12 +28618,12 @@ function getResolver(value) {
28593
28618
  var PreparedTopicFilter = class {
28594
28619
  #filter;
28595
28620
  fragment;
28596
- constructor(contract, fragment, args) {
28621
+ constructor(contract2, fragment, args) {
28597
28622
  defineProperties(this, { fragment });
28598
28623
  if (fragment.inputs.length < args.length) {
28599
28624
  throw new Error("too many arguments");
28600
28625
  }
28601
- const runner = getRunner(contract.runner, "resolveName");
28626
+ const runner = getRunner(contract2.runner, "resolveName");
28602
28627
  const resolver = canResolve(runner) ? runner : null;
28603
28628
  this.#filter = (async function() {
28604
28629
  const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {
@@ -28616,7 +28641,7 @@ var PreparedTopicFilter = class {
28616
28641
  return value;
28617
28642
  });
28618
28643
  }));
28619
- return contract.interface.encodeFilterTopics(fragment, resolvedArgs);
28644
+ return contract2.interface.encodeFilterTopics(fragment, resolvedArgs);
28620
28645
  })();
28621
28646
  }
28622
28647
  getTopicFilter() {
@@ -28665,14 +28690,14 @@ async function resolveArgs(_runner, inputs, args) {
28665
28690
  });
28666
28691
  }));
28667
28692
  }
28668
- function buildWrappedFallback(contract) {
28693
+ function buildWrappedFallback(contract2) {
28669
28694
  const populateTransaction = async function(overrides) {
28670
28695
  const tx = await copyOverrides(overrides, ["data"]);
28671
- tx.to = await contract.getAddress();
28696
+ tx.to = await contract2.getAddress();
28672
28697
  if (tx.from) {
28673
- tx.from = await resolveAddress(tx.from, getResolver(contract.runner));
28698
+ tx.from = await resolveAddress(tx.from, getResolver(contract2.runner));
28674
28699
  }
28675
- const iface = contract.interface;
28700
+ const iface = contract2.interface;
28676
28701
  const noValue = getBigInt(tx.value || BN_09, "overrides.value") === BN_09;
28677
28702
  const noData = (tx.data || "0x") === "0x";
28678
28703
  if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {
@@ -28685,27 +28710,27 @@ function buildWrappedFallback(contract) {
28685
28710
  return tx;
28686
28711
  };
28687
28712
  const staticCall = async function(overrides) {
28688
- const runner = getRunner(contract.runner, "call");
28713
+ const runner = getRunner(contract2.runner, "call");
28689
28714
  assert(canCall(runner), "contract runner does not support calling", "UNSUPPORTED_OPERATION", { operation: "call" });
28690
28715
  const tx = await populateTransaction(overrides);
28691
28716
  try {
28692
28717
  return await runner.call(tx);
28693
28718
  } catch (error) {
28694
28719
  if (isCallException(error) && error.data) {
28695
- throw contract.interface.makeError(error.data, tx);
28720
+ throw contract2.interface.makeError(error.data, tx);
28696
28721
  }
28697
28722
  throw error;
28698
28723
  }
28699
28724
  };
28700
28725
  const send = async function(overrides) {
28701
- const runner = contract.runner;
28726
+ const runner = contract2.runner;
28702
28727
  assert(canSend(runner), "contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { operation: "sendTransaction" });
28703
28728
  const tx = await runner.sendTransaction(await populateTransaction(overrides));
28704
- const provider = getProvider(contract.runner);
28705
- return new ContractTransactionResponse(contract.interface, provider, tx);
28729
+ const provider = getProvider(contract2.runner);
28730
+ return new ContractTransactionResponse(contract2.interface, provider, tx);
28706
28731
  };
28707
28732
  const estimateGas = async function(overrides) {
28708
- const runner = getRunner(contract.runner, "estimateGas");
28733
+ const runner = getRunner(contract2.runner, "estimateGas");
28709
28734
  assert(canEstimate(runner), "contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { operation: "estimateGas" });
28710
28735
  return await runner.estimateGas(await populateTransaction(overrides));
28711
28736
  };
@@ -28713,7 +28738,7 @@ function buildWrappedFallback(contract) {
28713
28738
  return await send(overrides);
28714
28739
  };
28715
28740
  defineProperties(method, {
28716
- _contract: contract,
28741
+ _contract: contract2,
28717
28742
  estimateGas,
28718
28743
  populateTransaction,
28719
28744
  send,
@@ -28721,9 +28746,9 @@ function buildWrappedFallback(contract) {
28721
28746
  });
28722
28747
  return method;
28723
28748
  }
28724
- function buildWrappedMethod(contract, key) {
28749
+ function buildWrappedMethod(contract2, key) {
28725
28750
  const getFragment = function(...args) {
28726
- const fragment = contract.interface.getFunction(key, args);
28751
+ const fragment = contract2.interface.getFunction(key, args);
28727
28752
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
28728
28753
  operation: "fragment",
28729
28754
  info: { key, args }
@@ -28736,16 +28761,16 @@ function buildWrappedMethod(contract, key) {
28736
28761
  if (fragment.inputs.length + 1 === args.length) {
28737
28762
  overrides = await copyOverrides(args.pop());
28738
28763
  if (overrides.from) {
28739
- overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));
28764
+ overrides.from = await resolveAddress(overrides.from, getResolver(contract2.runner));
28740
28765
  }
28741
28766
  }
28742
28767
  if (fragment.inputs.length !== args.length) {
28743
28768
  throw new Error("internal error: fragment inputs doesn't match arguments; should not happen");
28744
28769
  }
28745
- const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);
28770
+ const resolvedArgs = await resolveArgs(contract2.runner, fragment.inputs, args);
28746
28771
  return Object.assign({}, overrides, await resolveProperties({
28747
- to: contract.getAddress(),
28748
- data: contract.interface.encodeFunctionData(fragment, resolvedArgs)
28772
+ to: contract2.getAddress(),
28773
+ data: contract2.interface.encodeFunctionData(fragment, resolvedArgs)
28749
28774
  }));
28750
28775
  };
28751
28776
  const staticCall = async function(...args) {
@@ -28756,19 +28781,19 @@ function buildWrappedMethod(contract, key) {
28756
28781
  return result;
28757
28782
  };
28758
28783
  const send = async function(...args) {
28759
- const runner = contract.runner;
28784
+ const runner = contract2.runner;
28760
28785
  assert(canSend(runner), "contract runner does not support sending transactions", "UNSUPPORTED_OPERATION", { operation: "sendTransaction" });
28761
28786
  const tx = await runner.sendTransaction(await populateTransaction(...args));
28762
- const provider = getProvider(contract.runner);
28763
- return new ContractTransactionResponse(contract.interface, provider, tx);
28787
+ const provider = getProvider(contract2.runner);
28788
+ return new ContractTransactionResponse(contract2.interface, provider, tx);
28764
28789
  };
28765
28790
  const estimateGas = async function(...args) {
28766
- const runner = getRunner(contract.runner, "estimateGas");
28791
+ const runner = getRunner(contract2.runner, "estimateGas");
28767
28792
  assert(canEstimate(runner), "contract runner does not support gas estimation", "UNSUPPORTED_OPERATION", { operation: "estimateGas" });
28768
28793
  return await runner.estimateGas(await populateTransaction(...args));
28769
28794
  };
28770
28795
  const staticCallResult = async function(...args) {
28771
- const runner = getRunner(contract.runner, "call");
28796
+ const runner = getRunner(contract2.runner, "call");
28772
28797
  assert(canCall(runner), "contract runner does not support calling", "UNSUPPORTED_OPERATION", { operation: "call" });
28773
28798
  const tx = await populateTransaction(...args);
28774
28799
  let result = "0x";
@@ -28776,12 +28801,12 @@ function buildWrappedMethod(contract, key) {
28776
28801
  result = await runner.call(tx);
28777
28802
  } catch (error) {
28778
28803
  if (isCallException(error) && error.data) {
28779
- throw contract.interface.makeError(error.data, tx);
28804
+ throw contract2.interface.makeError(error.data, tx);
28780
28805
  }
28781
28806
  throw error;
28782
28807
  }
28783
28808
  const fragment = getFragment(...args);
28784
- return contract.interface.decodeFunctionResult(fragment, result);
28809
+ return contract2.interface.decodeFunctionResult(fragment, result);
28785
28810
  };
28786
28811
  const method = async (...args) => {
28787
28812
  const fragment = getFragment(...args);
@@ -28791,8 +28816,8 @@ function buildWrappedMethod(contract, key) {
28791
28816
  return await send(...args);
28792
28817
  };
28793
28818
  defineProperties(method, {
28794
- name: contract.interface.getFunctionName(key),
28795
- _contract: contract,
28819
+ name: contract2.interface.getFunctionName(key),
28820
+ _contract: contract2,
28796
28821
  _key: key,
28797
28822
  getFragment,
28798
28823
  estimateGas,
@@ -28805,7 +28830,7 @@ function buildWrappedMethod(contract, key) {
28805
28830
  configurable: false,
28806
28831
  enumerable: true,
28807
28832
  get: () => {
28808
- const fragment = contract.interface.getFunction(key);
28833
+ const fragment = contract2.interface.getFunction(key);
28809
28834
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
28810
28835
  operation: "fragment",
28811
28836
  info: { key }
@@ -28815,9 +28840,9 @@ function buildWrappedMethod(contract, key) {
28815
28840
  });
28816
28841
  return method;
28817
28842
  }
28818
- function buildWrappedEvent(contract, key) {
28843
+ function buildWrappedEvent(contract2, key) {
28819
28844
  const getFragment = function(...args) {
28820
- const fragment = contract.interface.getEvent(key, args);
28845
+ const fragment = contract2.interface.getEvent(key, args);
28821
28846
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
28822
28847
  operation: "fragment",
28823
28848
  info: { key, args }
@@ -28825,11 +28850,11 @@ function buildWrappedEvent(contract, key) {
28825
28850
  return fragment;
28826
28851
  };
28827
28852
  const method = function(...args) {
28828
- return new PreparedTopicFilter(contract, getFragment(...args), args);
28853
+ return new PreparedTopicFilter(contract2, getFragment(...args), args);
28829
28854
  };
28830
28855
  defineProperties(method, {
28831
- name: contract.interface.getEventName(key),
28832
- _contract: contract,
28856
+ name: contract2.interface.getEventName(key),
28857
+ _contract: contract2,
28833
28858
  _key: key,
28834
28859
  getFragment
28835
28860
  });
@@ -28837,7 +28862,7 @@ function buildWrappedEvent(contract, key) {
28837
28862
  configurable: false,
28838
28863
  enumerable: true,
28839
28864
  get: () => {
28840
- const fragment = contract.interface.getEvent(key);
28865
+ const fragment = contract2.interface.getEvent(key);
28841
28866
  assert(fragment, "no matching fragment", "UNSUPPORTED_OPERATION", {
28842
28867
  operation: "fragment",
28843
28868
  info: { key }
@@ -28849,16 +28874,16 @@ function buildWrappedEvent(contract, key) {
28849
28874
  }
28850
28875
  var internal2 = /* @__PURE__ */ Symbol.for("_ethersInternal_contract");
28851
28876
  var internalValues = /* @__PURE__ */ new WeakMap();
28852
- function setInternal(contract, values) {
28853
- internalValues.set(contract[internal2], values);
28877
+ function setInternal(contract2, values) {
28878
+ internalValues.set(contract2[internal2], values);
28854
28879
  }
28855
- function getInternal(contract) {
28856
- return internalValues.get(contract[internal2]);
28880
+ function getInternal(contract2) {
28881
+ return internalValues.get(contract2[internal2]);
28857
28882
  }
28858
28883
  function isDeferred(value) {
28859
28884
  return value && typeof value === "object" && "getTopicFilter" in value && typeof value.getTopicFilter === "function" && value.fragment;
28860
28885
  }
28861
- async function getSubInfo(contract, event) {
28886
+ async function getSubInfo(contract2, event) {
28862
28887
  let topics;
28863
28888
  let fragment = null;
28864
28889
  if (Array.isArray(event)) {
@@ -28866,7 +28891,7 @@ async function getSubInfo(contract, event) {
28866
28891
  if (isHexString(name, 32)) {
28867
28892
  return name;
28868
28893
  }
28869
- const fragment2 = contract.interface.getEvent(name);
28894
+ const fragment2 = contract2.interface.getEvent(name);
28870
28895
  assertArgument(fragment2, "unknown fragment", "name", name);
28871
28896
  return fragment2.topicHash;
28872
28897
  };
@@ -28885,7 +28910,7 @@ async function getSubInfo(contract, event) {
28885
28910
  if (isHexString(event, 32)) {
28886
28911
  topics = [event];
28887
28912
  } else {
28888
- fragment = contract.interface.getEvent(event);
28913
+ fragment = contract2.interface.getEvent(event);
28889
28914
  assertArgument(fragment, "unknown fragment", "event", event);
28890
28915
  topics = [fragment.topicHash];
28891
28916
  }
@@ -28922,36 +28947,36 @@ async function getSubInfo(contract, event) {
28922
28947
  }).join("&");
28923
28948
  return { fragment, tag, topics };
28924
28949
  }
28925
- async function hasSub(contract, event) {
28926
- const { subs } = getInternal(contract);
28927
- return subs.get((await getSubInfo(contract, event)).tag) || null;
28950
+ async function hasSub(contract2, event) {
28951
+ const { subs } = getInternal(contract2);
28952
+ return subs.get((await getSubInfo(contract2, event)).tag) || null;
28928
28953
  }
28929
- async function getSub(contract, operation, event) {
28930
- const provider = getProvider(contract.runner);
28954
+ async function getSub(contract2, operation, event) {
28955
+ const provider = getProvider(contract2.runner);
28931
28956
  assert(provider, "contract runner does not support subscribing", "UNSUPPORTED_OPERATION", { operation });
28932
- const { fragment, tag, topics } = await getSubInfo(contract, event);
28933
- const { addr, subs } = getInternal(contract);
28957
+ const { fragment, tag, topics } = await getSubInfo(contract2, event);
28958
+ const { addr, subs } = getInternal(contract2);
28934
28959
  let sub2 = subs.get(tag);
28935
28960
  if (!sub2) {
28936
- const address = addr ? addr : contract;
28961
+ const address = addr ? addr : contract2;
28937
28962
  const filter = { address, topics };
28938
28963
  const listener = (log) => {
28939
28964
  let foundFragment = fragment;
28940
28965
  if (foundFragment == null) {
28941
28966
  try {
28942
- foundFragment = contract.interface.getEvent(log.topics[0]);
28967
+ foundFragment = contract2.interface.getEvent(log.topics[0]);
28943
28968
  } catch (error) {
28944
28969
  }
28945
28970
  }
28946
28971
  if (foundFragment) {
28947
28972
  const _foundFragment = foundFragment;
28948
- const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics) : [];
28949
- emit2(contract, event, args, (listener2) => {
28950
- return new ContractEventPayload(contract, listener2, event, _foundFragment, log);
28973
+ const args = fragment ? contract2.interface.decodeEventLog(fragment, log.data, log.topics) : [];
28974
+ emit2(contract2, event, args, (listener2) => {
28975
+ return new ContractEventPayload(contract2, listener2, event, _foundFragment, log);
28951
28976
  });
28952
28977
  } else {
28953
- emit2(contract, event, [], (listener2) => {
28954
- return new ContractUnknownEventPayload(contract, listener2, event, log);
28978
+ emit2(contract2, event, [], (listener2) => {
28979
+ return new ContractUnknownEventPayload(contract2, listener2, event, log);
28955
28980
  });
28956
28981
  }
28957
28982
  };
@@ -28977,9 +29002,9 @@ async function getSub(contract, operation, event) {
28977
29002
  return sub2;
28978
29003
  }
28979
29004
  var lastEmit = Promise.resolve();
28980
- async function _emit(contract, event, args, payloadFunc) {
29005
+ async function _emit(contract2, event, args, payloadFunc) {
28981
29006
  await lastEmit;
28982
- const sub2 = await hasSub(contract, event);
29007
+ const sub2 = await hasSub(contract2, event);
28983
29008
  if (!sub2) {
28984
29009
  return false;
28985
29010
  }
@@ -28990,23 +29015,23 @@ async function _emit(contract, event, args, payloadFunc) {
28990
29015
  passArgs.push(payloadFunc(once2 ? null : listener));
28991
29016
  }
28992
29017
  try {
28993
- listener.call(contract, ...passArgs);
29018
+ listener.call(contract2, ...passArgs);
28994
29019
  } catch (error) {
28995
29020
  }
28996
29021
  return !once2;
28997
29022
  });
28998
29023
  if (sub2.listeners.length === 0) {
28999
29024
  sub2.stop();
29000
- getInternal(contract).subs.delete(sub2.tag);
29025
+ getInternal(contract2).subs.delete(sub2.tag);
29001
29026
  }
29002
29027
  return count > 0;
29003
29028
  }
29004
- async function emit2(contract, event, args, payloadFunc) {
29029
+ async function emit2(contract2, event, args, payloadFunc) {
29005
29030
  try {
29006
29031
  await lastEmit;
29007
29032
  } catch (error) {
29008
29033
  }
29009
- const resultPromise = _emit(contract, event, args, payloadFunc);
29034
+ const resultPromise = _emit(contract2, event, args, payloadFunc);
29010
29035
  lastEmit = resultPromise;
29011
29036
  return await resultPromise;
29012
29037
  }
@@ -29432,8 +29457,8 @@ var BaseContract = class _BaseContract {
29432
29457
  if (runner == null) {
29433
29458
  runner = null;
29434
29459
  }
29435
- const contract = new this(target, abi, runner);
29436
- return contract;
29460
+ const contract2 = new this(target, abi, runner);
29461
+ return contract2;
29437
29462
  }
29438
29463
  };
29439
29464
  function _ContractBase() {
@@ -29734,7 +29759,7 @@ var EnsResolver = class _EnsResolver {
29734
29759
  return { url: null, linkage };
29735
29760
  }
29736
29761
  const tokenId = comps[1];
29737
- const contract = new Contract(comps[0], [
29762
+ const contract2 = new Contract(comps[0], [
29738
29763
  // ERC-721
29739
29764
  "function tokenURI(uint) view returns (string)",
29740
29765
  "function ownerOf(uint) view returns (address)",
@@ -29743,21 +29768,21 @@ var EnsResolver = class _EnsResolver {
29743
29768
  "function balanceOf(address, uint256) view returns (uint)"
29744
29769
  ], this.provider);
29745
29770
  if (scheme === "erc721") {
29746
- const tokenOwner = await contract.ownerOf(tokenId);
29771
+ const tokenOwner = await contract2.ownerOf(tokenId);
29747
29772
  if (owner !== tokenOwner) {
29748
29773
  linkage.push({ type: "!owner", value: tokenOwner });
29749
29774
  return { url: null, linkage };
29750
29775
  }
29751
29776
  linkage.push({ type: "owner", value: tokenOwner });
29752
29777
  } else if (scheme === "erc1155") {
29753
- const balance = await contract.balanceOf(owner, tokenId);
29778
+ const balance = await contract2.balanceOf(owner, tokenId);
29754
29779
  if (!balance) {
29755
29780
  linkage.push({ type: "!balance", value: "0" });
29756
29781
  return { url: null, linkage };
29757
29782
  }
29758
29783
  linkage.push({ type: "balance", value: balance.toString() });
29759
29784
  }
29760
- let metadataUrl = await contract[selector](tokenId);
29785
+ let metadataUrl = await contract2[selector](tokenId);
29761
29786
  if (metadataUrl == null || metadataUrl === "0x") {
29762
29787
  linkage.push({ type: "!metadata-url", value: "" });
29763
29788
  return { url: null, linkage };
@@ -29829,10 +29854,10 @@ var EnsResolver = class _EnsResolver {
29829
29854
  static async #getResolver(provider, name) {
29830
29855
  const ensAddr = await _EnsResolver.getEnsAddress(provider);
29831
29856
  try {
29832
- const contract = new Contract(ensAddr, [
29857
+ const contract2 = new Contract(ensAddr, [
29833
29858
  "function resolver(bytes32) view returns (address)"
29834
29859
  ], provider);
29835
- const addr = await contract.resolver(namehash(name), {
29860
+ const addr = await contract2.resolver(namehash(name), {
29836
29861
  enableCcipRead: true
29837
29862
  });
29838
29863
  if (addr === ZeroAddress) {
@@ -54558,26 +54583,34 @@ function normalizeCall2(call, index) {
54558
54583
  value: call.value
54559
54584
  };
54560
54585
  }
54561
- function normalizeInputSpec(input, index) {
54562
- const token = ensureAddress(`inputs[${index}].token`, input.token);
54586
+ function normalizeSpendInput(input, index) {
54587
+ const token = ensureAddress(`spend[${index}].token`, input.token);
54588
+ if (token.toLowerCase() === ETH_TOKEN.toLowerCase()) {
54589
+ throw new AdapterError(
54590
+ `spend[${index}].token: native ETH is not supported in adapter execution`
54591
+ );
54592
+ }
54563
54593
  if (input.amount <= 0n) {
54564
- throw new AdapterError(`inputs[${index}].amount must be greater than zero`);
54594
+ throw new AdapterError(`spend[${index}].amount must be greater than zero`);
54565
54595
  }
54566
54596
  return {
54567
54597
  token,
54568
54598
  amount: input.amount
54569
54599
  };
54570
54600
  }
54571
- function normalizeReshieldSpec(reshield, index) {
54572
- const token = ensureAddress(`reshields[${index}].token`, reshield.token);
54573
- if (reshield.minAmount < 0n) {
54601
+ function normalizeReceiveInput(receive, index) {
54602
+ const token = ensureAddress(`receive[${index}].token`, receive.token);
54603
+ if (token.toLowerCase() === ETH_TOKEN.toLowerCase()) {
54574
54604
  throw new AdapterError(
54575
- `reshields[${index}].minAmount must be non-negative`
54605
+ `receive[${index}].token: native ETH is not supported in adapter execution`
54576
54606
  );
54577
54607
  }
54608
+ if (receive.minAmount < 0n) {
54609
+ throw new AdapterError(`receive[${index}].minAmount must be non-negative`);
54610
+ }
54578
54611
  return {
54579
54612
  token,
54580
- minAmount: reshield.minAmount
54613
+ minAmount: receive.minAmount
54581
54614
  };
54582
54615
  }
54583
54616
  function randomFieldElement(randomBigintFn) {
@@ -54597,41 +54630,41 @@ function createAdapterService(deps) {
54597
54630
  "adapterAddress",
54598
54631
  params.adapterAddress
54599
54632
  );
54600
- if (!params.inputs.length) {
54601
- throw new AdapterError("at least one input token is required");
54633
+ if (!params.spend.length) {
54634
+ throw new AdapterError("at least one spend token is required");
54602
54635
  }
54603
54636
  if (!params.calls.length) {
54604
54637
  throw new AdapterError("at least one adapter call is required");
54605
54638
  }
54606
- if (!params.reshields.length) {
54607
- throw new AdapterError("at least one reshield output is required");
54639
+ if (!params.receive.length) {
54640
+ throw new AdapterError("at least one receive output is required");
54608
54641
  }
54609
- const inputs = params.inputs.map(
54610
- (input, i) => normalizeInputSpec(input, i)
54642
+ const spendInputs = params.spend.map(
54643
+ (input, i) => normalizeSpendInput(input, i)
54611
54644
  );
54612
54645
  const seenTokens = /* @__PURE__ */ new Set();
54613
- for (const input of inputs) {
54646
+ for (const input of spendInputs) {
54614
54647
  const lower = input.token.toLowerCase();
54615
54648
  if (seenTokens.has(lower)) {
54616
54649
  throw new AdapterError(
54617
- `duplicate input token ${input.token}; combine amounts per token instead`
54650
+ `duplicate spend token ${input.token}; combine amounts per token instead`
54618
54651
  );
54619
54652
  }
54620
54653
  seenTokens.add(lower);
54621
54654
  }
54622
54655
  const calls = params.calls.map((call, i) => normalizeCall2(call, i));
54623
- const reshieldSpecs = params.reshields.map(
54624
- (reshield, i) => normalizeReshieldSpec(reshield, i)
54656
+ const receiveSpecs = params.receive.map(
54657
+ (receive, i) => normalizeReceiveInput(receive, i)
54625
54658
  );
54626
- const seenReshieldTokens = /* @__PURE__ */ new Set();
54627
- for (const r2 of reshieldSpecs) {
54659
+ const seenReceiveTokens = /* @__PURE__ */ new Set();
54660
+ for (const r2 of receiveSpecs) {
54628
54661
  const lower = r2.token.toLowerCase();
54629
- if (seenReshieldTokens.has(lower)) {
54662
+ if (seenReceiveTokens.has(lower)) {
54630
54663
  throw new AdapterError(
54631
- `duplicate reshield token ${r2.token}; each reshield must target a unique token`
54664
+ `duplicate receive token ${r2.token}; each receive must target a unique token`
54632
54665
  );
54633
54666
  }
54634
- seenReshieldTokens.add(lower);
54667
+ seenReceiveTokens.add(lower);
54635
54668
  }
54636
54669
  const account = overrides?.account ?? await deps.requireActiveAccount();
54637
54670
  const signer = overrides?.signer ?? deps.requireSigner(account);
@@ -54641,19 +54674,19 @@ function createAdapterService(deps) {
54641
54674
  throw new AdapterError("deadline must be in the future");
54642
54675
  }
54643
54676
  const executionCalls = calls;
54644
- const reshields = reshieldSpecs.map(
54645
- (reshield) => {
54677
+ const reshields = receiveSpecs.map(
54678
+ (receive) => {
54646
54679
  const random = randomFieldElement(randomBigintImpl);
54647
54680
  const npk = poseidon([account.masterPublicKey, random]);
54648
54681
  return {
54649
54682
  npk,
54650
54683
  random,
54651
- token: reshield.token,
54652
- minAmount: reshield.minAmount
54684
+ token: receive.token,
54685
+ minAmount: receive.minAmount
54653
54686
  };
54654
54687
  }
54655
54688
  );
54656
- const inputTokens = inputs.map((input) => input.token);
54689
+ const inputTokens = spendInputs.map((input) => input.token);
54657
54690
  const nonce = randomFieldElement(randomBigintImpl);
54658
54691
  const adapterDataHash = computeAdapterDataHash({
54659
54692
  calls: executionCalls,
@@ -54670,7 +54703,7 @@ function createAdapterService(deps) {
54670
54703
  });
54671
54704
  const withdrawalPlans = planWithdrawalsImpl(
54672
54705
  notes,
54673
- inputs.map((input) => ({
54706
+ spendInputs.map((input) => ({
54674
54707
  token: input.token,
54675
54708
  amount: input.amount,
54676
54709
  recipient: adapterAddress
@@ -54753,7 +54786,7 @@ function createAdapterService(deps) {
54753
54786
  adapterCalldata,
54754
54787
  historyPreview: {
54755
54788
  kind: "Withdraw",
54756
- amounts: inputs.map((input) => ({
54789
+ amounts: spendInputs.map((input) => ({
54757
54790
  token: input.token,
54758
54791
  delta: (-input.amount).toString()
54759
54792
  }))
@@ -54775,6 +54808,9 @@ init_process();
54775
54808
  init_buffer();
54776
54809
  var BIP44_ETH_PREFIX = "m/44'/60'/0'/0";
54777
54810
  var ERC20_BALANCE_OF = "function balanceOf(address) view returns (uint256)";
54811
+ function isNativeToken(token) {
54812
+ return token.toLowerCase() === ETH_TOKEN.toLowerCase();
54813
+ }
54778
54814
  function createBurnerService(deps) {
54779
54815
  const { chainRpcUrl, getMasterSeed, withdrawToAddress, requestDeposit } = deps;
54780
54816
  const provider = new JsonRpcProvider(chainRpcUrl);
@@ -54822,8 +54858,8 @@ function createBurnerService(deps) {
54822
54858
  }
54823
54859
  async function getTokenBalance(address, token) {
54824
54860
  const iface = new Interface([ERC20_BALANCE_OF]);
54825
- const contract = new Contract(token, iface, provider);
54826
- const bal = await contract.getFunction("balanceOf")(address);
54861
+ const contract2 = new Contract(token, iface, provider);
54862
+ const bal = await contract2.getFunction("balanceOf")(address);
54827
54863
  return BigInt(bal ?? 0);
54828
54864
  }
54829
54865
  async function getBalance(address) {
@@ -54842,6 +54878,12 @@ function createBurnerService(deps) {
54842
54878
  }
54843
54879
  async function sweepToPool(index, params) {
54844
54880
  const { address } = await addressOf(index);
54881
+ const native = isNativeToken(params.token);
54882
+ if (native && params.amount == null) {
54883
+ throw new Error(
54884
+ "amount is required for native ETH sweeps (needed to reserve gas)"
54885
+ );
54886
+ }
54845
54887
  const amount = params.amount ?? await getTokenBalance(address, params.token);
54846
54888
  if (amount === 0n) {
54847
54889
  throw new Error("No token balance to sweep");
@@ -54852,17 +54894,20 @@ function createBurnerService(deps) {
54852
54894
  depositor: address,
54853
54895
  deposits: [{ token: params.token, amount }]
54854
54896
  });
54855
- const erc20Iface = new Interface([
54856
- "function approve(address spender, uint256 amount)"
54857
- ]);
54858
- const approveData = erc20Iface.encodeFunctionData("approve", [
54859
- params.poolAddress,
54860
- amount
54861
- ]);
54862
- await send(index, { to: params.token, data: approveData });
54897
+ if (!native) {
54898
+ const erc20Iface = new Interface([
54899
+ "function approve(address spender, uint256 amount)"
54900
+ ]);
54901
+ const approveData = erc20Iface.encodeFunctionData("approve", [
54902
+ params.poolAddress,
54903
+ amount
54904
+ ]);
54905
+ await send(index, { to: params.token, data: approveData });
54906
+ }
54863
54907
  const { txHash } = await send(index, {
54864
54908
  to: depositResult.to,
54865
- data: depositResult.calldata
54909
+ data: depositResult.calldata,
54910
+ value: depositResult.value
54866
54911
  });
54867
54912
  return { txHash };
54868
54913
  }
@@ -55572,21 +55617,27 @@ async function createBrowserWalletSDK(options) {
55572
55617
  };
55573
55618
  }
55574
55619
 
55575
- // wallet/unlink-wallet.ts
55576
- var UnlinkWallet = class _UnlinkWallet {
55620
+ // wallet/unlink.ts
55621
+ var Unlink = class _Unlink {
55577
55622
  /** @internal */
55578
55623
  sdk;
55579
55624
  /** Chain ID this wallet operates on. */
55580
55625
  chainId;
55581
55626
  /** Pool contract address this wallet transacts with. */
55582
55627
  poolAddress;
55583
- constructor(sdk, chainId, poolAddress) {
55628
+ /** Adapter contract address for DeFi operations. */
55629
+ adapterAddress;
55630
+ constructor(sdk, chainId, poolAddress, adapterAddress) {
55584
55631
  this.sdk = sdk;
55585
55632
  this.chainId = chainId;
55586
55633
  this.poolAddress = poolAddress;
55634
+ this.adapterAddress = adapterAddress;
55635
+ this.adapter = {
55636
+ address: adapterAddress
55637
+ };
55587
55638
  }
55588
55639
  /**
55589
- * Create a new UnlinkWallet instance.
55640
+ * Create a new Unlink instance.
55590
55641
  *
55591
55642
  * Handles all initialization internally:
55592
55643
  * - Resolves chain config (if using `chain` instead of explicit URLs)
@@ -55598,12 +55649,14 @@ var UnlinkWallet = class _UnlinkWallet {
55598
55649
  let chainId;
55599
55650
  let gatewayUrl;
55600
55651
  let poolAddress;
55652
+ let adapterAddress;
55601
55653
  let proverConfig = config2.prover;
55602
55654
  if ("chain" in config2) {
55603
55655
  const chainConfig = await fetchChainConfig(config2.chain);
55604
55656
  chainId = chainConfig.chainId;
55605
55657
  gatewayUrl = chainConfig.gatewayUrl;
55606
55658
  poolAddress = config2.poolAddress ?? chainConfig.poolAddress;
55659
+ adapterAddress = config2.adapterAddress ?? chainConfig.adapterAddress;
55607
55660
  proverConfig = {
55608
55661
  artifactSource: {
55609
55662
  baseUrl: config2.prover?.artifactSource?.baseUrl ?? chainConfig.artifactBaseUrl,
@@ -55615,6 +55668,7 @@ var UnlinkWallet = class _UnlinkWallet {
55615
55668
  chainId = config2.chainId;
55616
55669
  gatewayUrl = config2.gatewayUrl;
55617
55670
  poolAddress = config2.poolAddress;
55671
+ adapterAddress = config2.adapterAddress;
55618
55672
  if (typeof window !== "undefined" && !config2.prover?.artifactSource?.version) {
55619
55673
  throw new InitializationError(
55620
55674
  "prover.artifactSource.version is required in browser when using explicit gatewayUrl mode. Use chain mode or provide a pinned artifact version."
@@ -55635,7 +55689,7 @@ var UnlinkWallet = class _UnlinkWallet {
55635
55689
  autoSync: config2.autoSync
55636
55690
  }
55637
55691
  );
55638
- return new _UnlinkWallet(sdk, chainId, poolAddress);
55692
+ return new _Unlink(sdk, chainId, poolAddress, adapterAddress ?? "");
55639
55693
  }
55640
55694
  // ===== Seed Lifecycle =====
55641
55695
  /** Seed management (create, import, export, delete mnemonic). */
@@ -55666,10 +55720,10 @@ var UnlinkWallet = class _UnlinkWallet {
55666
55720
  return this.sdk.deposit.reconcile(relayId);
55667
55721
  }
55668
55722
  /**
55669
- * Execute a private transfer (1 or more recipients).
55723
+ * Send a private transfer (1 or more recipients).
55670
55724
  * Handles note selection, circuit selection, and proof generation automatically.
55671
55725
  */
55672
- async transfer(params, overrides) {
55726
+ async send(params, overrides) {
55673
55727
  return this.sdk.transfer.send(
55674
55728
  {
55675
55729
  chainId: this.chainId,
@@ -55680,9 +55734,9 @@ var UnlinkWallet = class _UnlinkWallet {
55680
55734
  );
55681
55735
  }
55682
55736
  /**
55683
- * Get a transfer plan without executing (for preview/confirmation UIs).
55737
+ * Get a send plan without executing (for preview/confirmation UIs).
55684
55738
  */
55685
- async planTransfer(params, account) {
55739
+ async planSend(params, account) {
55686
55740
  return this.sdk.transfer.plan(
55687
55741
  {
55688
55742
  chainId: this.chainId,
@@ -55692,8 +55746,8 @@ var UnlinkWallet = class _UnlinkWallet {
55692
55746
  account
55693
55747
  );
55694
55748
  }
55695
- /** Execute a pre-built transfer plan. */
55696
- async executeTransfer(plans, overrides) {
55749
+ /** Execute a pre-built send plan. */
55750
+ async executeSend(plans, overrides) {
55697
55751
  return this.sdk.transfer.execute(
55698
55752
  plans,
55699
55753
  { chainId: this.chainId, poolAddress: this.poolAddress },
@@ -55842,31 +55896,31 @@ var UnlinkWallet = class _UnlinkWallet {
55842
55896
  return this.sdk.burner.getBalance(address);
55843
55897
  }
55844
55898
  };
55845
- // ===== Adapter =====
55899
+ // ===== Interact (Private DeFi) =====
55846
55900
  /**
55847
- * Private DeFi adapter operations.
55848
- * chainId/poolAddress are injected automatically.
55901
+ * Adapter contract address (resolved from config).
55902
+ * Use for building DeFi calls that reference the adapter.
55849
55903
  */
55850
- adapter = {
55851
- /**
55852
- * Execute an atomic unshield -> call(s) -> reshield flow through an adapter.
55853
- */
55854
- execute: (params, opts, overrides) => {
55855
- return this.sdk.adapter.execute(
55856
- {
55857
- chainId: this.chainId,
55858
- poolAddress: this.poolAddress,
55859
- adapterAddress: params.adapterAddress,
55860
- inputs: params.inputs,
55861
- calls: params.calls,
55862
- reshields: params.reshields,
55863
- deadline: params.deadline
55864
- },
55865
- opts,
55866
- overrides
55867
- );
55868
- }
55869
- };
55904
+ adapter;
55905
+ /**
55906
+ * Execute an atomic unshield -> DeFi call(s) -> reshield flow through an adapter.
55907
+ * chainId/poolAddress/adapterAddress are injected automatically.
55908
+ */
55909
+ async interact(params, opts, overrides) {
55910
+ return this.sdk.adapter.execute(
55911
+ {
55912
+ chainId: this.chainId,
55913
+ poolAddress: this.poolAddress,
55914
+ adapterAddress: this.adapterAddress,
55915
+ spend: params.spend,
55916
+ calls: params.calls,
55917
+ receive: params.receive,
55918
+ deadline: params.deadline
55919
+ },
55920
+ opts,
55921
+ overrides
55922
+ );
55923
+ }
55870
55924
  // ===== Advanced =====
55871
55925
  /**
55872
55926
  * Advanced escape hatch for raw JoinSplit transaction building.
@@ -55914,6 +55968,7 @@ var defaultRng = (n2) => {
55914
55968
  }
55915
55969
  return globalThis.crypto.getRandomValues(new Uint8Array(n2));
55916
55970
  };
55971
+ var UnlinkWallet = Unlink;
55917
55972
 
55918
55973
  // utils/amounts.ts
55919
55974
  init_process();
@@ -55970,6 +56025,7 @@ export {
55970
56025
  HttpError,
55971
56026
  InitializationError,
55972
56027
  ProofError,
56028
+ Unlink,
55973
56029
  UnlinkWallet,
55974
56030
  ValidationError,
55975
56031
  computeBalances,