@imtbl/sdk 0.27.12 → 0.27.14

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.
@@ -11198,7 +11198,7 @@ type ERC20BuyToken = {
11198
11198
  contractAddress: string;
11199
11199
  };
11200
11200
  /**
11201
- * Interface of the SellToken
11201
+ * The SellToken type
11202
11202
  * @property {string} id - The ERC721 token id
11203
11203
  * @property {string} collectionAddress - The ERC721 collection address
11204
11204
  */
@@ -11529,9 +11529,9 @@ type UserBalance = {
11529
11529
  * Represents the transaction requirement for a transaction.
11530
11530
  * @property {ItemType} type - The type of the transaction requirement.
11531
11531
  * @property {boolean} sufficient - If the user address has sufficient funds to cover the transaction.
11532
- * @property {TransactionRequirementItem} required - The required item balance.
11533
- * @property {TransactionRequirementItem} current - The current item balance.
11534
- * @property {TransactionRequirementDelta} delta - The delta between the required and current balances.
11532
+ * @property {ItemBalance} required - The required item balance.
11533
+ * @property {ItemBalance} current - The current item balance.
11534
+ * @property {BalanceDelta} delta - The delta between the required and current balances.
11535
11535
  */
11536
11536
  type TransactionRequirement = {
11537
11537
  type: ItemType;
@@ -11542,6 +11542,7 @@ type TransactionRequirement = {
11542
11542
  };
11543
11543
  /**
11544
11544
  * Represents the balance for either a native or ERC20 token.
11545
+ * @property {ItemType.NATIVE | ItemType.ERC20} type - Type to indicate this is a native or ERC20 token.
11545
11546
  * @property {BigNumber} balance - The balance of the item.
11546
11547
  * @property {string} formattedBalance - The formatted balance of the item.
11547
11548
  * @property {TokenInfo} token - The token info of the item.
@@ -11553,18 +11554,20 @@ type TokenBalance = {
11553
11554
  token: TokenInfo;
11554
11555
  };
11555
11556
  /**
11556
- * Represents the balance for an ERC20.
11557
+ * Represents the balance for an ERC721.
11558
+ * @property {ItemType.ERC721} type - Type to indicate this is an ERC721 token.
11557
11559
  * @property {BigNumber} balance - The balance of the item.
11558
11560
  * @property {string} formattedBalance - The formatted balance of the item.
11559
- * @property {TokenInfo} token - The token info of the item.
11561
+ * @property {string} contractAddress - The contract address of the ERC721 collection.
11562
+ * @property {string} id - The ID of the ERC721 in the collection.
11560
11563
  */
11561
- interface ERC721Balance {
11564
+ type ERC721Balance = {
11562
11565
  type: ItemType.ERC721;
11563
11566
  balance: BigNumber;
11564
11567
  formattedBalance: string;
11565
11568
  contractAddress: string;
11566
11569
  id: string;
11567
- }
11570
+ };
11568
11571
  /**
11569
11572
  * Type representing the balance of an item.
11570
11573
  */
@@ -11581,6 +11584,9 @@ type BalanceDelta = {
11581
11584
  /**
11582
11585
  * A type representing the Smart Checkout routing options available for a user
11583
11586
  * if they are configured and enabled (not geo-blocked etc.)
11587
+ * @property {boolean | undefined} onRamp - If the user can use onramp
11588
+ * @property {boolean | undefined} swap - If the user can use swap
11589
+ * @property {boolean | undefined} bridge - If the user can use bridge
11584
11590
  */
11585
11591
  type AvailableRoutingOptions = {
11586
11592
  onRamp?: boolean;
@@ -12103,7 +12109,8 @@ declare enum CheckoutErrorType {
12103
12109
  BRIDGE_GAS_ESTIMATE_ERROR = "BRIDGE_GAS_ESTIMATE_ERROR",
12104
12110
  ORDER_FEE_ERROR = "ORDER_FEE_ERROR",
12105
12111
  ITEM_REQUIREMENTS_ERROR = "ITEM_REQUIREMENTS_ERROR",
12106
- API_ERROR = "API_ERROR"
12112
+ API_ERROR = "API_ERROR",
12113
+ ORDER_EXPIRED_ERROR = "ORDER_EXPIRED_ERROR"
12107
12114
  }
12108
12115
  /**
12109
12116
  * Represents an error object with a specific type, optional message, and optional data.
@@ -15098,8 +15098,9 @@ const doesChainSupportEIP1559 = (fee) => {
15098
15098
  /**
15099
15099
  * Fetch the current gas price estimate. Supports both EIP-1559 and non-EIP1559 chains
15100
15100
  * @param {JsonRpcProvider} provider - The JSON RPC provider used to fetch fee data
15101
+ * @param {Coin} nativeToken - The native token of the chain. Gas prices will be denominated in this token
15101
15102
  * @returns {Amount | null} - The gas price in the smallest denomination of the chain's currency,
15102
- * or null if no gas price is available
15103
+ * or null if no gas price is available
15103
15104
  */
15104
15105
  const fetchGasPrice = async (provider, nativeToken) => {
15105
15106
  const feeData = await provider.getFeeData().catch(() => null);
@@ -15113,8 +15114,8 @@ const fetchGasPrice = async (provider, nativeToken) => {
15113
15114
  /**
15114
15115
  * Calculate the gas fee from the gas price and gas units used for the transaction
15115
15116
  *
15116
- * @param {Amount} gasPriceInWei - The price of gas
15117
- * @param {BigNumber} gasUsed - The total gas units that will be used for the transaction
15117
+ * @param {Amount} gasPrice - The price of gas
15118
+ * @param {BigNumber} gasEstimate - The total gas units that will be used for the transaction
15118
15119
  * @returns - The cost of the transaction in the gas token's smallest denomination (e.g. WEI)
15119
15120
  */
15120
15121
  const calculateGasFee = (gasPrice, gasEstimate) =>
@@ -15458,21 +15459,19 @@ function buildSwapParametersForMultiPoolSwap(fromAddress, trade, route, amountIn
15458
15459
  * @param options additional swap options
15459
15460
  * @returns calldata for the swap
15460
15461
  */
15461
- function buildSwapParameters(fromAddress, trade, options, secondaryFees, secondaryFeeContract) {
15462
+ function buildSwapParameters(fromAddress, trade, options, secondaryFees, secondaryFeeContract, maximumAmountIn, minimumAmountOut) {
15462
15463
  // @dev we don't support multiple swaps in a single transaction
15463
15464
  // there will always be only one swap in the trade regardless of the trade type
15464
- const { route, inputAmount, outputAmount } = trade.swaps[0];
15465
- const amountIn = toHex$1(trade.maximumAmountIn(options.slippageTolerance, inputAmount).quotient);
15466
- const amountOut = toHex$1(trade.minimumAmountOut(options.slippageTolerance, outputAmount).quotient);
15465
+ const { route } = trade.swaps[0];
15467
15466
  const isSinglePoolSwap = route.pools.length === 1;
15468
15467
  if (isSinglePoolSwap) {
15469
- return buildSwapParametersForSinglePoolSwap(fromAddress, trade, route, amountIn, amountOut, secondaryFees, secondaryFeeContract);
15468
+ return buildSwapParametersForSinglePoolSwap(fromAddress, trade, route, maximumAmountIn, minimumAmountOut, secondaryFees, secondaryFeeContract);
15470
15469
  }
15471
- return buildSwapParametersForMultiPoolSwap(fromAddress, trade, route, amountIn, amountOut, secondaryFees, secondaryFeeContract);
15470
+ return buildSwapParametersForMultiPoolSwap(fromAddress, trade, route, maximumAmountIn, minimumAmountOut, secondaryFees, secondaryFeeContract);
15472
15471
  }
15473
- function createSwapCallParametersWithFees(trade, fromAddress, swapOptions, secondaryFees) {
15472
+ function createSwapCallParametersWithFees(trade, fromAddress, swapOptions, secondaryFees, maximumAmountIn, minimumAmountOut) {
15474
15473
  const secondaryFeeContract = SecondaryFee__factory.createInterface();
15475
- const swapWithFeesCalldata = buildSwapParameters(fromAddress, trade, swapOptions, secondaryFees, secondaryFeeContract);
15474
+ const swapWithFeesCalldata = buildSwapParameters(fromAddress, trade, swapOptions, secondaryFees, secondaryFeeContract, maximumAmountIn, minimumAmountOut);
15476
15475
  return secondaryFeeContract.encodeFunctionData(multicallWithDeadlineFunctionSignature, [
15477
15476
  swapOptions.deadlineOrPreviousBlockhash,
15478
15477
  [swapWithFeesCalldata],
@@ -15492,25 +15491,34 @@ function createSwapParameters(adjustedQuote, fromAddress, slippage, deadline, se
15492
15491
  recipient: fromAddress,
15493
15492
  deadlineOrPreviousBlockhash: deadline,
15494
15493
  };
15494
+ // If the trade type is EXACT_INPUT, then the maximum amount-in is the user-specified amount (no slippage applied)
15495
+ // https://github.com/Uniswap/v3-sdk/blob/81d66099f07d1ec350767f497ef73222575fe032/src/entities/trade.ts#L456
15496
+ const maximumAmountIn = toHex$1(uncheckedTrade.maximumAmountIn(options.slippageTolerance).quotient);
15497
+ const minimumAmountOut = toHex$1(uncheckedTrade.minimumAmountOut(options.slippageTolerance).quotient);
15495
15498
  if (secondaryFees.length === 0) {
15496
15499
  // Generate swap parameters without secondary fee contract details
15497
- return SwapRouter.swapCallParameters([uncheckedTrade], options).calldata;
15500
+ return { calldata: SwapRouter.swapCallParameters([uncheckedTrade], options).calldata, maximumAmountIn };
15498
15501
  }
15499
- return createSwapCallParametersWithFees(uncheckedTrade, fromAddress, options, secondaryFees);
15502
+ return {
15503
+ calldata: createSwapCallParametersWithFees(uncheckedTrade, fromAddress, options, secondaryFees, maximumAmountIn, minimumAmountOut),
15504
+ maximumAmountIn,
15505
+ };
15500
15506
  }
15501
- function getSwap(adjustedQuote, fromAddress, slippage, deadline, peripheryRouterAddress, secondaryFeesAddress, gasPrice, secondaryFees, nativeTokenService) {
15502
- const calldata = createSwapParameters(adjustedQuote, fromAddress, slippage, deadline, secondaryFees);
15507
+ const getTransactionValue = (tokenIn, maximumAmountIn) => tokenIn.type === 'native' ? maximumAmountIn : zeroNativeCurrencyValue;
15508
+ function getSwap(tokenIn, adjustedQuote, fromAddress, slippage, deadline, peripheryRouterAddress, secondaryFeesAddress, gasPrice, secondaryFees) {
15509
+ // TODO: TP-1651: Include `refundETH` transaction as final step for native Exact Output swaps
15510
+ const { calldata, maximumAmountIn } = createSwapParameters(adjustedQuote, fromAddress, slippage, deadline, secondaryFees);
15503
15511
  // TODO: Add additional gas fee estimates for secondary fees
15504
15512
  const gasFeeEstimate = gasPrice ? calculateGasFee(gasPrice, adjustedQuote.gasEstimate) : null;
15513
+ const transactionValue = getTransactionValue(tokenIn, maximumAmountIn);
15505
15514
  return {
15506
15515
  transaction: {
15507
15516
  data: calldata,
15508
15517
  to: secondaryFees.length > 0 ? secondaryFeesAddress : peripheryRouterAddress,
15509
- value: zeroNativeCurrencyValue,
15518
+ value: transactionValue,
15510
15519
  from: fromAddress,
15511
15520
  },
15512
- // TODO: TP-1649: Remove the wrapping here
15513
- gasFeeEstimate: gasFeeEstimate ? nativeTokenService.maybeWrapAmount(gasFeeEstimate) : null,
15521
+ gasFeeEstimate: gasFeeEstimate ? toPublicAmount(gasFeeEstimate) : null,
15514
15522
  };
15515
15523
  }
15516
15524
  const adjustAmountIn = (ourQuote, amountSpecified, fees, nativeTokenService) => {
@@ -15607,7 +15615,7 @@ class ExchangeConfiguration {
15607
15615
  baseConfig;
15608
15616
  chain;
15609
15617
  secondaryFees = [];
15610
- constructor({ chainId, baseConfig, secondaryFees, overrides, }) {
15618
+ constructor({ chainId, baseConfig, secondaryFees, overrides }) {
15611
15619
  this.baseConfig = baseConfig;
15612
15620
  this.secondaryFees = secondaryFees || [];
15613
15621
  validateSecondaryFees(this.secondaryFees);
@@ -15720,7 +15728,7 @@ class Exchange {
15720
15728
  fetchGasPrice(this.provider, this.nativeToken),
15721
15729
  ]);
15722
15730
  const adjustedQuote = adjustQuoteWithFees(ourQuote, amountSpecified, fees, this.nativeTokenService);
15723
- const swap = getSwap(adjustedQuote, fromAddress, slippagePercent, deadline, this.routerContractAddress, this.secondaryFeeContractAddress, gasPrice, secondaryFees, this.nativeTokenService);
15731
+ const swap = getSwap(tokenIn, adjustedQuote, fromAddress, slippagePercent, deadline, this.routerContractAddress, this.secondaryFeeContractAddress, gasPrice, secondaryFees);
15724
15732
  const { quotedAmount, quotedAmountWithMaxSlippage } = prepareUserQuote(this.nativeTokenService, adjustedQuote, slippagePercent, otherToken);
15725
15733
  const preparedApproval = prepareApproval(tradeType, amountSpecified, quotedAmountWithMaxSlippage, {
15726
15734
  routerAddress: this.routerContractAddress,
@@ -20599,7 +20607,7 @@ class APIError extends Error {
20599
20607
 
20600
20608
  /* eslint-disable implicit-arrow-linebreak */
20601
20609
  const defaultHeaders = {
20602
- sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.27.12',
20610
+ sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.27.14',
20603
20611
  };
20604
20612
  /**
20605
20613
  * createAPIConfiguration to create a custom Configuration
@@ -21513,6 +21521,7 @@ var $e055e79256bbc1dd$export$80f4da0d409a629d;
21513
21521
  CheckoutErrorType["ORDER_FEE_ERROR"] = "ORDER_FEE_ERROR";
21514
21522
  CheckoutErrorType["ITEM_REQUIREMENTS_ERROR"] = "ITEM_REQUIREMENTS_ERROR";
21515
21523
  CheckoutErrorType["API_ERROR"] = "API_ERROR";
21524
+ CheckoutErrorType["ORDER_EXPIRED_ERROR"] = "ORDER_EXPIRED_ERROR";
21516
21525
  })($a8bc256d81a5e2c1$export$e3dc0620abde7f5a || ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a = {}));
21517
21526
  class $a8bc256d81a5e2c1$export$b722478a3cbfa3bc extends Error {
21518
21527
  message;
@@ -22039,44 +22048,53 @@ const $1564e43dde50bb61$export$8c978679845804d4 = async (walletAddress, chainId,
22039
22048
  // Hold the items in an array for post-fetching processing
22040
22049
  const items = [];
22041
22050
  const tokenType = ($887a00f8f72d61f0$export$5bd1ea2b3d18210).ERC20;
22042
- // Given that the widgets aren't yet designed to support pagination,
22043
- // fetch all the possible tokens associated to a given wallet address.
22044
- let resp;
22045
- try {
22046
- do {
22047
- // eslint-disable-next-line no-await-in-loop
22048
- resp = await blockscoutClient.getTokensByWalletAddress({
22049
- walletAddress: walletAddress,
22050
- tokenType: tokenType,
22051
- nextPage: resp?.next_page_params
22051
+ const erc20Balances = async (client)=>{
22052
+ // Given that the widgets aren't yet designed to support pagination,
22053
+ // fetch all the possible tokens associated to a given wallet address.
22054
+ let resp;
22055
+ try {
22056
+ do {
22057
+ // eslint-disable-next-line no-await-in-loop
22058
+ resp = await client.getTokensByWalletAddress({
22059
+ walletAddress: walletAddress,
22060
+ tokenType: tokenType,
22061
+ nextPage: resp?.next_page_params
22062
+ });
22063
+ items.push(...resp.items);
22064
+ }while (resp.next_page_params);
22065
+ } catch (err) {
22066
+ // In case of a 404, the wallet is a new wallet that hasn't been indexed by
22067
+ // the Blockscout just yet. This happens when a wallet hasn't had any
22068
+ // activity on the chain. In this case, simply ignore the error and return
22069
+ // no currencies.
22070
+ // In case of a malformed wallet address, Blockscout returns a 422, which
22071
+ // means we are safe to assume that a 404 is a missing wallet due to inactivity
22072
+ // or simply an incorrect wallet address was provided.
22073
+ if (err?.code !== (HttpStatusCode).NotFound) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError | getTokensByWalletAddress", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
22074
+ }
22075
+ };
22076
+ const nativeBalances = async (client)=>{
22077
+ try {
22078
+ const respNative = await client.getNativeTokenByWalletAddress({
22079
+ walletAddress: walletAddress
22052
22080
  });
22053
- items.push(...resp.items);
22054
- }while (resp.next_page_params);
22055
- } catch (err) {
22056
- // In case of a 404, the wallet is a new wallet that hasn't been indexed by
22057
- // the Blockscout just yet. This happens when a wallet hasn't had any
22058
- // activity on the chain. In this case, simply ignore the error and return
22059
- // no currencies.
22060
- // In case of a malformed wallet address, Blockscout returns a 422, which
22061
- // means we are safe to assume that a 404 is a missing wallet due to inactivity
22062
- // or simply an incorrect wallet address was provided.
22063
- if (err?.code !== (HttpStatusCode).NotFound) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError | getTokensByWalletAddress", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
22064
- }
22065
- try {
22066
- const respNative = await blockscoutClient.getNativeTokenByWalletAddress({
22067
- walletAddress: walletAddress
22068
- });
22069
- items.push(respNative);
22070
- } catch (err) {
22071
- // In case of a 404, the wallet is a new wallet that hasn't been indexed by
22072
- // the Blockscout just yet. This happens when a wallet hasn't had any
22073
- // activity on the chain. In this case, simply ignore the error and return
22074
- // no currencies.
22075
- // In case of a malformed wallet address, Blockscout returns a 422, which
22076
- // means we are safe to assume that a 404 is a missing wallet due to inactivity
22077
- // or simply an incorrect wallet address was provided.
22078
- if (err?.code !== (HttpStatusCode).NotFound) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError | getNativeTokenByWalletAddress", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
22079
- }
22081
+ items.push(respNative);
22082
+ } catch (err) {
22083
+ // In case of a 404, the wallet is a new wallet that hasn't been indexed by
22084
+ // the Blockscout just yet. This happens when a wallet hasn't had any
22085
+ // activity on the chain. In this case, simply ignore the error and return
22086
+ // no currencies.
22087
+ // In case of a malformed wallet address, Blockscout returns a 422, which
22088
+ // means we are safe to assume that a 404 is a missing wallet due to inactivity
22089
+ // or simply an incorrect wallet address was provided.
22090
+ if (err?.code !== (HttpStatusCode).NotFound) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError | getNativeTokenByWalletAddress", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
22091
+ }
22092
+ };
22093
+ // Promise all() rather than allSettled() so that the function can fail fast.
22094
+ await Promise.all([
22095
+ erc20Balances(blockscoutClient),
22096
+ nativeBalances(blockscoutClient)
22097
+ ]);
22080
22098
  const balances = [];
22081
22099
  items.forEach((item)=>{
22082
22100
  if (shouldFilter && !mapFilterTokens[item.token.address]) return;
@@ -24596,16 +24614,24 @@ const $64863c39386de592$export$7f8e2b98eca5a7f0 = async (config, provider, order
24596
24614
  let unsignedApprovalTransactions = [];
24597
24615
  let unsignedFulfillmentTransactions = [];
24598
24616
  let orderActions = [];
24599
- const fulfillOrderStartTime = new Date().getTime();
24617
+ const fulfillOrderStartTime = performance.now();
24600
24618
  try {
24601
24619
  const fulfillerAddress = await (0, $458d407830d66110$export$5280dbcb91c8b391)(config, "Time to get the address from the provider", provider.getSigner().getAddress());
24602
24620
  const { actions: actions } = await (0, $458d407830d66110$export$5280dbcb91c8b391)(config, "Time to call fulfillOrder from the orderbook", orderbook.fulfillOrder(id, fulfillerAddress, fees));
24603
24621
  orderActions = actions;
24604
24622
  unsignedApprovalTransactions = await (0, $458d407830d66110$export$5280dbcb91c8b391)(config, "Time to construct the unsigned approval transactions", (0, $a7367d01c6e76b1c$export$f64a20a30eb98855)(actions));
24605
24623
  } catch (err) {
24606
- // Silently ignore error as this is usually thrown if user does not have enough balance
24607
- const elapsedTimeInSeconds = (new Date().getTime() - fulfillOrderStartTime) / 1000;
24624
+ const elapsedTimeInSeconds = (performance.now() - fulfillOrderStartTime) / 1000;
24608
24625
  ($458d407830d66110$export$e6a390ea6399b7d8)(config, "Time to call fulfillOrder from the orderbook", elapsedTimeInSeconds);
24626
+ if (err.message.includes((OrderStatusName$1).EXPIRED)) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Order is expired", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).ORDER_EXPIRED_ERROR, {
24627
+ orderId: id
24628
+ });
24629
+ // The balances error will be handled by bulk order fulfillment but for now we
24630
+ // need to assert on this string to check that the error is not a balances error
24631
+ if (!err.message.includes("The fulfiller does not have the balances needed to fulfill")) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Error occurred while trying to fulfill the order", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).FULFILL_ORDER_LISTING_ERROR, {
24632
+ orderId: id,
24633
+ message: err.message
24634
+ });
24609
24635
  }
24610
24636
  try {
24611
24637
  unsignedFulfillmentTransactions = await (0, $458d407830d66110$export$5280dbcb91c8b391)(config, "Time to construct the unsigned fulfillment transactions", (0, $a7367d01c6e76b1c$export$396bd6ce7d3ab533)(orderActions));
@@ -25,7 +25,7 @@ var $045213b18e9f1f94$export$75be0f6af9650f2c;
25
25
  })($045213b18e9f1f94$export$75be0f6af9650f2c || ($045213b18e9f1f94$export$75be0f6af9650f2c = {}));
26
26
 
27
27
 
28
- const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.27.12";
28
+ const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.27.14";
29
29
  const $d663162fd5a0853f$export$83bf90b30cdfd29f = ()=>false;
30
30
  const $d663162fd5a0853f$export$1169f5475725171b = ()=>$d663162fd5a0853f$export$38a083d9fb5551ca;
31
31
 
@@ -16,7 +16,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
16
16
  chainID,
17
17
  coreContractAddress,
18
18
  registrationContractAddress,
19
- sdkVersion: 'ts-immutable-sdk-0.27.12',
19
+ sdkVersion: 'ts-immutable-sdk-0.27.14',
20
20
  });
21
21
  /**
22
22
  * Sets `sdkVersion` at the time of build
@@ -32,9 +32,9 @@ const production = () => createImmutableXConfiguration({
32
32
  */
33
33
  const sandbox = () => createImmutableXConfiguration({
34
34
  basePath: 'https://api.sandbox.x.immutable.com',
35
- chainID: 5,
36
- coreContractAddress: '0x7917eDb51ecD6CdB3F9854c3cc593F33de10c623',
37
- registrationContractAddress: '0x1C97Ada273C9A52253f463042f29117090Cd7D83',
35
+ chainID: 11155111,
36
+ coreContractAddress: '0x2d5C349fD8464DA06a3f90b4B0E9195F3d1b7F98',
37
+ registrationContractAddress: '0xDbA6129C02E69405622fAdc3d5A7f8d23eac3b97',
38
38
  });
39
39
  class ImxConfiguration {
40
40
  immutableXConfig;