@hypercerts-org/marketplace-sdk 0.3.36 → 0.3.37

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.
@@ -1,7 +1,4 @@
1
1
  import { Addresses, ChainId } from "../types";
2
- /**
3
- * List of useful contract addresses
4
- */
5
2
  export declare const addressesByNetwork: {
6
3
  [chainId in ChainId]: Addresses;
7
4
  };
package/dist/errors.d.ts CHANGED
@@ -28,3 +28,8 @@ export declare class ErrorItemId extends Error {
28
28
  readonly name = "ErrorItemId";
29
29
  constructor();
30
30
  }
31
+ /** Currency is not supported */
32
+ export declare class ErrorCurrency extends Error {
33
+ readonly name = "ErrorCurrency";
34
+ constructor();
35
+ }
package/dist/index.cjs.js CHANGED
@@ -684,6 +684,8 @@ var strategies = /*#__PURE__*/Object.freeze({
684
684
  strategyInfo: strategyInfo
685
685
  });
686
686
 
687
+ /** All possible supported currencies */
688
+ const SUPPORTED_CURRENCIES = ["ETH", "WETH", "DAI", "CELO", "cUSD", "USDT", "USDC"];
687
689
  /** List of supported chains */
688
690
  exports.ChainId = void 0;
689
691
  (function (ChainId) {
@@ -692,7 +694,6 @@ exports.ChainId = void 0;
692
694
  ChainId[ChainId["HARDHAT"] = 31337] = "HARDHAT";
693
695
  ChainId[ChainId["OPTIMISM"] = 10] = "OPTIMISM";
694
696
  ChainId[ChainId["CELO"] = 42220] = "CELO";
695
- ChainId[ChainId["BASE"] = 8453] = "BASE";
696
697
  ChainId[ChainId["ARBITRUM_SEPOLIA"] = 421614] = "ARBITRUM_SEPOLIA";
697
698
  ChainId[ChainId["ARBITRUM"] = 42161] = "ARBITRUM";
698
699
  })(exports.ChainId || (exports.ChainId = {}));
@@ -1099,48 +1100,46 @@ var asDeployedChain$1 = /*#__PURE__*/Object.freeze({
1099
1100
  asDeployedChain: asDeployedChain
1100
1101
  });
1101
1102
 
1102
- const sepoliaAddresses = {
1103
- EXCHANGE_V2: contracts.deployments[11155111].HypercertExchange,
1104
- TRANSFER_MANAGER_V2: contracts.deployments[11155111].TransferManager,
1105
- ORDER_VALIDATOR_V2: contracts.deployments[11155111].OrderValidatorV2A,
1106
- MINTER: contracts.deployments[11155111].HypercertMinterUUPS,
1107
- };
1108
- const baseSepoliaAddresses = {
1109
- EXCHANGE_V2: contracts.deployments[84532].HypercertExchange,
1110
- TRANSFER_MANAGER_V2: contracts.deployments[84532].TransferManager,
1111
- ORDER_VALIDATOR_V2: contracts.deployments[84532].OrderValidatorV2A,
1112
- MINTER: contracts.deployments[84532].HypercertMinterUUPS,
1113
- };
1114
- const optimismAddresses = {
1115
- EXCHANGE_V2: contracts.deployments[10].HypercertExchange,
1116
- TRANSFER_MANAGER_V2: contracts.deployments[10].TransferManager,
1117
- ORDER_VALIDATOR_V2: contracts.deployments[10].OrderValidatorV2A,
1118
- MINTER: contracts.deployments[10].HypercertMinterUUPS,
1119
- };
1120
- const celoAddresses = {
1121
- EXCHANGE_V2: contracts.deployments[42220].HypercertExchange,
1122
- TRANSFER_MANAGER_V2: contracts.deployments[42220].TransferManager,
1123
- ORDER_VALIDATOR_V2: contracts.deployments[42220].OrderValidatorV2A,
1124
- MINTER: contracts.deployments[42220].HypercertMinterUUPS,
1125
- };
1126
- const baseAddresses = {
1127
- EXCHANGE_V2: contracts.deployments[8453].HypercertExchange,
1128
- TRANSFER_MANAGER_V2: contracts.deployments[8453].TransferManager,
1129
- ORDER_VALIDATOR_V2: contracts.deployments[8453].OrderValidatorV2A,
1130
- MINTER: contracts.deployments[8453].HypercertMinterUUPS,
1103
+ function getRequiredAddress(chainId, contractName) {
1104
+ const chainIdStr = chainId.toString();
1105
+ const deployment = contracts.deployments[chainIdStr];
1106
+ if (!deployment) {
1107
+ throw new Error(`Missing deployment for chain ${chainId}`);
1108
+ }
1109
+ const address = deployment[contractName];
1110
+ if (!address) {
1111
+ throw new Error(`Missing required address for ${contractName} on chain ${chainId}`);
1112
+ }
1113
+ return ethers.getAddress(address);
1114
+ }
1115
+ // Helper function to create addresses for a network
1116
+ const createNetworkAddresses = (chainId) => ({
1117
+ EXCHANGE_V2: getRequiredAddress(chainId, "HypercertExchange"),
1118
+ TRANSFER_MANAGER_V2: getRequiredAddress(chainId, "TransferManager"),
1119
+ ORDER_VALIDATOR_V2: getRequiredAddress(chainId, "OrderValidatorV2A"),
1120
+ MINTER: getRequiredAddress(chainId, "HypercertMinterUUPS"),
1121
+ });
1122
+ // Network chain IDs
1123
+ const CHAIN_IDS = {
1124
+ // Testnets
1125
+ SEPOLIA: 11155111,
1126
+ BASE_SEPOLIA: 84532,
1127
+ ARBITRUM_SEPOLIA: 421614,
1128
+ // Mainnets
1129
+ OPTIMISM: 10,
1130
+ CELO: 42220,
1131
+ ARBITRUM: 42161,
1131
1132
  };
1132
- /**
1133
- * List of useful contract addresses
1134
- */
1135
1133
  const addressesByNetwork = {
1136
1134
  // Testnets
1137
- [exports.ChainId.SEPOLIA]: sepoliaAddresses,
1138
- [exports.ChainId.HARDHAT]: sepoliaAddresses,
1139
- [exports.ChainId.BASE_SEPOLIA]: baseSepoliaAddresses,
1135
+ [exports.ChainId.SEPOLIA]: createNetworkAddresses(CHAIN_IDS.SEPOLIA),
1136
+ [exports.ChainId.HARDHAT]: createNetworkAddresses(CHAIN_IDS.SEPOLIA), // Using Sepolia for Hardhat
1137
+ [exports.ChainId.BASE_SEPOLIA]: createNetworkAddresses(CHAIN_IDS.BASE_SEPOLIA),
1138
+ [exports.ChainId.ARBITRUM_SEPOLIA]: createNetworkAddresses(CHAIN_IDS.ARBITRUM_SEPOLIA),
1140
1139
  // Production nets
1141
- [exports.ChainId.OPTIMISM]: optimismAddresses,
1142
- [exports.ChainId.CELO]: celoAddresses,
1143
- [exports.ChainId.BASE]: baseAddresses,
1140
+ [exports.ChainId.OPTIMISM]: createNetworkAddresses(CHAIN_IDS.OPTIMISM),
1141
+ [exports.ChainId.CELO]: createNetworkAddresses(CHAIN_IDS.CELO),
1142
+ [exports.ChainId.ARBITRUM]: createNetworkAddresses(CHAIN_IDS.ARBITRUM),
1144
1143
  };
1145
1144
 
1146
1145
  const currencyAddressesPerChain = {
@@ -1175,16 +1174,10 @@ const currencyAddressesPerChain = {
1175
1174
  USDC: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
1176
1175
  },
1177
1176
  [exports.ChainId.CELO]: {
1178
- ETH: ethers.ZeroAddress,
1179
- WETH: "0x66803fb87abd4aac3cbb3fad7c3aa01f6f3fb207",
1180
- DAI: "0xE4fE50cdD716522A56204352f00AA110F731932d",
1181
- USDC: "0xef4229c8c3250C675F21BCefa42f58EfbfF6002a",
1182
- },
1183
- [exports.ChainId.BASE]: {
1184
- ETH: ethers.ZeroAddress,
1185
- WETH: "0x4200000000000000000000000000000000000006",
1186
- DAI: "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb",
1187
- USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
1177
+ CELO: "0x471EcE3750Da237f93B8E339c536989b8978a438",
1178
+ cUSD: "0x765DE816845861e75A25fCA122bb6898B8B1282a",
1179
+ USDC: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
1180
+ USDT: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
1188
1181
  },
1189
1182
  [exports.ChainId.ARBITRUM]: {
1190
1183
  ETH: ethers.ZeroAddress,
@@ -1195,20 +1188,39 @@ const currencyAddressesPerChain = {
1195
1188
  };
1196
1189
  const getCurrencies = (chainId) => {
1197
1190
  const currenciesForChain = currencyAddressesPerChain[chainId];
1191
+ if ("ETH" in currenciesForChain) {
1192
+ return {
1193
+ ETH: {
1194
+ symbol: "ETH",
1195
+ address: currenciesForChain.ETH,
1196
+ decimals: 18,
1197
+ },
1198
+ WETH: {
1199
+ symbol: "WETH",
1200
+ address: currenciesForChain.WETH,
1201
+ decimals: 18,
1202
+ },
1203
+ DAI: {
1204
+ symbol: "DAI",
1205
+ address: currenciesForChain.DAI,
1206
+ decimals: 18,
1207
+ },
1208
+ USDC: {
1209
+ symbol: "USDC",
1210
+ address: currenciesForChain.USDC,
1211
+ decimals: 6,
1212
+ },
1213
+ };
1214
+ }
1198
1215
  return {
1199
- ETH: {
1200
- symbol: "ETH",
1201
- address: currenciesForChain.ETH,
1202
- decimals: 18,
1203
- },
1204
- WETH: {
1205
- symbol: "WETH",
1206
- address: currenciesForChain.WETH,
1216
+ CELO: {
1217
+ symbol: "CELO",
1218
+ address: currenciesForChain.CELO,
1207
1219
  decimals: 18,
1208
1220
  },
1209
- DAI: {
1210
- symbol: "DAI",
1211
- address: currenciesForChain.DAI,
1221
+ cUSD: {
1222
+ symbol: "cUSD",
1223
+ address: currenciesForChain.cUSD,
1212
1224
  decimals: 18,
1213
1225
  },
1214
1226
  USDC: {
@@ -1216,6 +1228,11 @@ const getCurrencies = (chainId) => {
1216
1228
  address: currenciesForChain.USDC,
1217
1229
  decimals: 6,
1218
1230
  },
1231
+ USDT: {
1232
+ symbol: "USDT",
1233
+ address: currenciesForChain.USDT,
1234
+ decimals: 6,
1235
+ },
1219
1236
  };
1220
1237
  };
1221
1238
  const currenciesByNetwork = {
@@ -1224,7 +1241,6 @@ const currenciesByNetwork = {
1224
1241
  [exports.ChainId.BASE_SEPOLIA]: getCurrencies(exports.ChainId.BASE_SEPOLIA),
1225
1242
  [exports.ChainId.OPTIMISM]: getCurrencies(exports.ChainId.OPTIMISM),
1226
1243
  [exports.ChainId.CELO]: getCurrencies(exports.ChainId.CELO),
1227
- [exports.ChainId.BASE]: getCurrencies(exports.ChainId.BASE),
1228
1244
  [exports.ChainId.ARBITRUM_SEPOLIA]: getCurrencies(exports.ChainId.ARBITRUM_SEPOLIA),
1229
1245
  [exports.ChainId.ARBITRUM]: getCurrencies(exports.ChainId.ARBITRUM),
1230
1246
  };
@@ -1254,6 +1270,14 @@ const chainInfo = {
1254
1270
  baseApiUrl: "https://staging-api.hypercerts.org",
1255
1271
  osApiUrl: "https://testnets-api.opensea.io"
1256
1272
  },
1273
+ [exports.ChainId.ARBITRUM]: {
1274
+ label: "Arbitrum",
1275
+ appUrl: "https://app.hypercerts.org",
1276
+ explorer: "https://arbitrum.io",
1277
+ rpcUrl: "https://arbitrum.io",
1278
+ baseApiUrl: "https://api.hypercerts.org",
1279
+ osApiUrl: "https://testnets-api.opensea.io"
1280
+ },
1257
1281
  [exports.ChainId.ARBITRUM_SEPOLIA]: {
1258
1282
  label: "Arbitrum Sepolia",
1259
1283
  appUrl: "https://testnet.hypercerts.org",
@@ -1278,14 +1302,6 @@ const chainInfo = {
1278
1302
  baseApiUrl: "https://api.hypercerts.org",
1279
1303
  osApiUrl: "https://testnets-api.opensea.io"
1280
1304
  },
1281
- [exports.ChainId.BASE]: {
1282
- label: "Base",
1283
- appUrl: "https://app.hypercerts.org",
1284
- explorer: "https://basescan.io",
1285
- rpcUrl: "https://mainnet.base.org",
1286
- baseApiUrl: "https://api.hypercerts.org",
1287
- osApiUrl: "https://testnets-api.opensea.io"
1288
- }
1289
1305
  };
1290
1306
 
1291
1307
  /** Maximum amount of orders in a merkle tree
@@ -1340,6 +1356,13 @@ class ErrorItemId extends Error {
1340
1356
  this.name = "ErrorItemId";
1341
1357
  }
1342
1358
  }
1359
+ /** Currency is not supported */
1360
+ class ErrorCurrency extends Error {
1361
+ constructor() {
1362
+ super("Currency is not defined or supported");
1363
+ this.name = "ErrorCurrency";
1364
+ }
1365
+ }
1343
1366
 
1344
1367
  var IERC1155 = [
1345
1368
  {
@@ -7764,11 +7787,14 @@ class HypercertExchangeClient {
7764
7787
  * @param CreateMakerInput
7765
7788
  * @returns the maker object, isCurrencyApproved, and isBalanceSufficient
7766
7789
  */
7767
- async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency = this.currencies.WETH.address, startTime = Math.floor(Date.now() / 1000), additionalParameters = [], }) {
7790
+ async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency, startTime = Math.floor(Date.now() / 1000), additionalParameters = [], }) {
7768
7791
  const signer = this.getSigner();
7769
7792
  if (!this.isTimestampValid(startTime) || !this.isTimestampValid(endTime)) {
7770
7793
  throw new ErrorTimestamp();
7771
7794
  }
7795
+ if (!currency) {
7796
+ throw new ErrorCurrency();
7797
+ }
7772
7798
  const signerAddress = await signer.getAddress();
7773
7799
  const spenderAddress = this.addresses.EXCHANGE_V2;
7774
7800
  // Use this.provider (MulticallProvider) in order to batch the calls
@@ -8112,11 +8138,14 @@ class HypercertExchangeClient {
8112
8138
  * @param currency Currency used to buy the fractions (default to WETH)
8113
8139
  * @param additionalParameters Additional parameters used to support complex orders
8114
8140
  */
8115
- async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency = this.currencies.WETH.address, additionalParameters = [], }) {
8141
+ async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency, additionalParameters = [], }) {
8116
8142
  const address = await this.signer?.getAddress();
8117
8143
  if (!address) {
8118
8144
  throw new Error("No signer address could be determined");
8119
8145
  }
8146
+ if (!currency) {
8147
+ throw new ErrorCurrency();
8148
+ }
8120
8149
  const chainId = this.chainId;
8121
8150
  const { nonce_counter } = await this.api.fetchOrderNonce({
8122
8151
  address,
@@ -8153,11 +8182,14 @@ class HypercertExchangeClient {
8153
8182
  * @param sellLeftoverFraction Whether or not the seller wants to sell the leftover units
8154
8183
  * @param root Merkle tree root (optional)
8155
8184
  */
8156
- async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency = this.currencies.WETH.address, maxUnitAmount, minUnitAmount, minUnitsToKeep, sellLeftoverFraction, root, }) {
8185
+ async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency, maxUnitAmount, minUnitAmount, minUnitsToKeep, sellLeftoverFraction, root, }) {
8157
8186
  const address = await this.signer?.getAddress();
8158
8187
  if (!address) {
8159
8188
  throw new Error("No signer address could be determined");
8160
8189
  }
8190
+ if (!currency) {
8191
+ throw new ErrorCurrency();
8192
+ }
8161
8193
  const chainId = this.chainId;
8162
8194
  const { nonce_counter } = await this.api.fetchOrderNonce({
8163
8195
  address,
@@ -8253,6 +8285,7 @@ const utils = {
8253
8285
  exports.ApiClient = ApiClient;
8254
8286
  exports.Eip712MakerMerkleTree = Eip712MakerMerkleTree;
8255
8287
  exports.Eip712MerkleTree = Eip712MerkleTree;
8288
+ exports.ErrorCurrency = ErrorCurrency;
8256
8289
  exports.ErrorItemId = ErrorItemId;
8257
8290
  exports.ErrorMerkleTreeDepth = ErrorMerkleTreeDepth;
8258
8291
  exports.ErrorQuoteType = ErrorQuoteType;
@@ -8266,6 +8299,7 @@ exports.IERC721Abi = abiIERC721;
8266
8299
  exports.LooksRareProtocolAbi = LooksRareProtocol;
8267
8300
  exports.MAX_ORDERS_PER_TREE = MAX_ORDERS_PER_TREE;
8268
8301
  exports.OrderValidatorV2AAbi = OrderValidatorV2A;
8302
+ exports.SUPPORTED_CURRENCIES = SUPPORTED_CURRENCIES;
8269
8303
  exports.TransferManagerAbi = TransferManager;
8270
8304
  exports.WETHAbi = WETH;
8271
8305
  exports.addressesByNetwork = addressesByNetwork;
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Contract, ZeroAddress, AbiCoder, TypedDataEncoder, keccak256, solidityPackedKeccak256, ethers, ZeroHash, MaxUint256 } from 'ethers';
1
+ import { Contract, ZeroAddress, AbiCoder, TypedDataEncoder, keccak256, solidityPackedKeccak256, ethers, getAddress, ZeroHash, MaxUint256 } from 'ethers';
2
2
  import { HypercertExchangeAbi, TransferManagerAbi, OrderValidatorV2AAbi, deployments, asDeployedChain as asDeployedChain$2 } from '@hypercerts-org/contracts';
3
3
  import { MerkleTree } from 'merkletreejs';
4
4
  import { keccak256 as keccak256$1 } from 'js-sha3';
@@ -682,6 +682,8 @@ var strategies = /*#__PURE__*/Object.freeze({
682
682
  strategyInfo: strategyInfo
683
683
  });
684
684
 
685
+ /** All possible supported currencies */
686
+ const SUPPORTED_CURRENCIES = ["ETH", "WETH", "DAI", "CELO", "cUSD", "USDT", "USDC"];
685
687
  /** List of supported chains */
686
688
  var ChainId;
687
689
  (function (ChainId) {
@@ -690,7 +692,6 @@ var ChainId;
690
692
  ChainId[ChainId["HARDHAT"] = 31337] = "HARDHAT";
691
693
  ChainId[ChainId["OPTIMISM"] = 10] = "OPTIMISM";
692
694
  ChainId[ChainId["CELO"] = 42220] = "CELO";
693
- ChainId[ChainId["BASE"] = 8453] = "BASE";
694
695
  ChainId[ChainId["ARBITRUM_SEPOLIA"] = 421614] = "ARBITRUM_SEPOLIA";
695
696
  ChainId[ChainId["ARBITRUM"] = 42161] = "ARBITRUM";
696
697
  })(ChainId || (ChainId = {}));
@@ -1097,48 +1098,46 @@ var asDeployedChain$1 = /*#__PURE__*/Object.freeze({
1097
1098
  asDeployedChain: asDeployedChain
1098
1099
  });
1099
1100
 
1100
- const sepoliaAddresses = {
1101
- EXCHANGE_V2: deployments[11155111].HypercertExchange,
1102
- TRANSFER_MANAGER_V2: deployments[11155111].TransferManager,
1103
- ORDER_VALIDATOR_V2: deployments[11155111].OrderValidatorV2A,
1104
- MINTER: deployments[11155111].HypercertMinterUUPS,
1105
- };
1106
- const baseSepoliaAddresses = {
1107
- EXCHANGE_V2: deployments[84532].HypercertExchange,
1108
- TRANSFER_MANAGER_V2: deployments[84532].TransferManager,
1109
- ORDER_VALIDATOR_V2: deployments[84532].OrderValidatorV2A,
1110
- MINTER: deployments[84532].HypercertMinterUUPS,
1111
- };
1112
- const optimismAddresses = {
1113
- EXCHANGE_V2: deployments[10].HypercertExchange,
1114
- TRANSFER_MANAGER_V2: deployments[10].TransferManager,
1115
- ORDER_VALIDATOR_V2: deployments[10].OrderValidatorV2A,
1116
- MINTER: deployments[10].HypercertMinterUUPS,
1117
- };
1118
- const celoAddresses = {
1119
- EXCHANGE_V2: deployments[42220].HypercertExchange,
1120
- TRANSFER_MANAGER_V2: deployments[42220].TransferManager,
1121
- ORDER_VALIDATOR_V2: deployments[42220].OrderValidatorV2A,
1122
- MINTER: deployments[42220].HypercertMinterUUPS,
1123
- };
1124
- const baseAddresses = {
1125
- EXCHANGE_V2: deployments[8453].HypercertExchange,
1126
- TRANSFER_MANAGER_V2: deployments[8453].TransferManager,
1127
- ORDER_VALIDATOR_V2: deployments[8453].OrderValidatorV2A,
1128
- MINTER: deployments[8453].HypercertMinterUUPS,
1101
+ function getRequiredAddress(chainId, contractName) {
1102
+ const chainIdStr = chainId.toString();
1103
+ const deployment = deployments[chainIdStr];
1104
+ if (!deployment) {
1105
+ throw new Error(`Missing deployment for chain ${chainId}`);
1106
+ }
1107
+ const address = deployment[contractName];
1108
+ if (!address) {
1109
+ throw new Error(`Missing required address for ${contractName} on chain ${chainId}`);
1110
+ }
1111
+ return getAddress(address);
1112
+ }
1113
+ // Helper function to create addresses for a network
1114
+ const createNetworkAddresses = (chainId) => ({
1115
+ EXCHANGE_V2: getRequiredAddress(chainId, "HypercertExchange"),
1116
+ TRANSFER_MANAGER_V2: getRequiredAddress(chainId, "TransferManager"),
1117
+ ORDER_VALIDATOR_V2: getRequiredAddress(chainId, "OrderValidatorV2A"),
1118
+ MINTER: getRequiredAddress(chainId, "HypercertMinterUUPS"),
1119
+ });
1120
+ // Network chain IDs
1121
+ const CHAIN_IDS = {
1122
+ // Testnets
1123
+ SEPOLIA: 11155111,
1124
+ BASE_SEPOLIA: 84532,
1125
+ ARBITRUM_SEPOLIA: 421614,
1126
+ // Mainnets
1127
+ OPTIMISM: 10,
1128
+ CELO: 42220,
1129
+ ARBITRUM: 42161,
1129
1130
  };
1130
- /**
1131
- * List of useful contract addresses
1132
- */
1133
1131
  const addressesByNetwork = {
1134
1132
  // Testnets
1135
- [ChainId.SEPOLIA]: sepoliaAddresses,
1136
- [ChainId.HARDHAT]: sepoliaAddresses,
1137
- [ChainId.BASE_SEPOLIA]: baseSepoliaAddresses,
1133
+ [ChainId.SEPOLIA]: createNetworkAddresses(CHAIN_IDS.SEPOLIA),
1134
+ [ChainId.HARDHAT]: createNetworkAddresses(CHAIN_IDS.SEPOLIA), // Using Sepolia for Hardhat
1135
+ [ChainId.BASE_SEPOLIA]: createNetworkAddresses(CHAIN_IDS.BASE_SEPOLIA),
1136
+ [ChainId.ARBITRUM_SEPOLIA]: createNetworkAddresses(CHAIN_IDS.ARBITRUM_SEPOLIA),
1138
1137
  // Production nets
1139
- [ChainId.OPTIMISM]: optimismAddresses,
1140
- [ChainId.CELO]: celoAddresses,
1141
- [ChainId.BASE]: baseAddresses,
1138
+ [ChainId.OPTIMISM]: createNetworkAddresses(CHAIN_IDS.OPTIMISM),
1139
+ [ChainId.CELO]: createNetworkAddresses(CHAIN_IDS.CELO),
1140
+ [ChainId.ARBITRUM]: createNetworkAddresses(CHAIN_IDS.ARBITRUM),
1142
1141
  };
1143
1142
 
1144
1143
  const currencyAddressesPerChain = {
@@ -1173,16 +1172,10 @@ const currencyAddressesPerChain = {
1173
1172
  USDC: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
1174
1173
  },
1175
1174
  [ChainId.CELO]: {
1176
- ETH: ZeroAddress,
1177
- WETH: "0x66803fb87abd4aac3cbb3fad7c3aa01f6f3fb207",
1178
- DAI: "0xE4fE50cdD716522A56204352f00AA110F731932d",
1179
- USDC: "0xef4229c8c3250C675F21BCefa42f58EfbfF6002a",
1180
- },
1181
- [ChainId.BASE]: {
1182
- ETH: ZeroAddress,
1183
- WETH: "0x4200000000000000000000000000000000000006",
1184
- DAI: "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb",
1185
- USDC: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
1175
+ CELO: "0x471EcE3750Da237f93B8E339c536989b8978a438",
1176
+ cUSD: "0x765DE816845861e75A25fCA122bb6898B8B1282a",
1177
+ USDC: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
1178
+ USDT: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
1186
1179
  },
1187
1180
  [ChainId.ARBITRUM]: {
1188
1181
  ETH: ZeroAddress,
@@ -1193,20 +1186,39 @@ const currencyAddressesPerChain = {
1193
1186
  };
1194
1187
  const getCurrencies = (chainId) => {
1195
1188
  const currenciesForChain = currencyAddressesPerChain[chainId];
1189
+ if ("ETH" in currenciesForChain) {
1190
+ return {
1191
+ ETH: {
1192
+ symbol: "ETH",
1193
+ address: currenciesForChain.ETH,
1194
+ decimals: 18,
1195
+ },
1196
+ WETH: {
1197
+ symbol: "WETH",
1198
+ address: currenciesForChain.WETH,
1199
+ decimals: 18,
1200
+ },
1201
+ DAI: {
1202
+ symbol: "DAI",
1203
+ address: currenciesForChain.DAI,
1204
+ decimals: 18,
1205
+ },
1206
+ USDC: {
1207
+ symbol: "USDC",
1208
+ address: currenciesForChain.USDC,
1209
+ decimals: 6,
1210
+ },
1211
+ };
1212
+ }
1196
1213
  return {
1197
- ETH: {
1198
- symbol: "ETH",
1199
- address: currenciesForChain.ETH,
1200
- decimals: 18,
1201
- },
1202
- WETH: {
1203
- symbol: "WETH",
1204
- address: currenciesForChain.WETH,
1214
+ CELO: {
1215
+ symbol: "CELO",
1216
+ address: currenciesForChain.CELO,
1205
1217
  decimals: 18,
1206
1218
  },
1207
- DAI: {
1208
- symbol: "DAI",
1209
- address: currenciesForChain.DAI,
1219
+ cUSD: {
1220
+ symbol: "cUSD",
1221
+ address: currenciesForChain.cUSD,
1210
1222
  decimals: 18,
1211
1223
  },
1212
1224
  USDC: {
@@ -1214,6 +1226,11 @@ const getCurrencies = (chainId) => {
1214
1226
  address: currenciesForChain.USDC,
1215
1227
  decimals: 6,
1216
1228
  },
1229
+ USDT: {
1230
+ symbol: "USDT",
1231
+ address: currenciesForChain.USDT,
1232
+ decimals: 6,
1233
+ },
1217
1234
  };
1218
1235
  };
1219
1236
  const currenciesByNetwork = {
@@ -1222,7 +1239,6 @@ const currenciesByNetwork = {
1222
1239
  [ChainId.BASE_SEPOLIA]: getCurrencies(ChainId.BASE_SEPOLIA),
1223
1240
  [ChainId.OPTIMISM]: getCurrencies(ChainId.OPTIMISM),
1224
1241
  [ChainId.CELO]: getCurrencies(ChainId.CELO),
1225
- [ChainId.BASE]: getCurrencies(ChainId.BASE),
1226
1242
  [ChainId.ARBITRUM_SEPOLIA]: getCurrencies(ChainId.ARBITRUM_SEPOLIA),
1227
1243
  [ChainId.ARBITRUM]: getCurrencies(ChainId.ARBITRUM),
1228
1244
  };
@@ -1252,6 +1268,14 @@ const chainInfo = {
1252
1268
  baseApiUrl: "https://staging-api.hypercerts.org",
1253
1269
  osApiUrl: "https://testnets-api.opensea.io"
1254
1270
  },
1271
+ [ChainId.ARBITRUM]: {
1272
+ label: "Arbitrum",
1273
+ appUrl: "https://app.hypercerts.org",
1274
+ explorer: "https://arbitrum.io",
1275
+ rpcUrl: "https://arbitrum.io",
1276
+ baseApiUrl: "https://api.hypercerts.org",
1277
+ osApiUrl: "https://testnets-api.opensea.io"
1278
+ },
1255
1279
  [ChainId.ARBITRUM_SEPOLIA]: {
1256
1280
  label: "Arbitrum Sepolia",
1257
1281
  appUrl: "https://testnet.hypercerts.org",
@@ -1276,14 +1300,6 @@ const chainInfo = {
1276
1300
  baseApiUrl: "https://api.hypercerts.org",
1277
1301
  osApiUrl: "https://testnets-api.opensea.io"
1278
1302
  },
1279
- [ChainId.BASE]: {
1280
- label: "Base",
1281
- appUrl: "https://app.hypercerts.org",
1282
- explorer: "https://basescan.io",
1283
- rpcUrl: "https://mainnet.base.org",
1284
- baseApiUrl: "https://api.hypercerts.org",
1285
- osApiUrl: "https://testnets-api.opensea.io"
1286
- }
1287
1303
  };
1288
1304
 
1289
1305
  /** Maximum amount of orders in a merkle tree
@@ -1338,6 +1354,13 @@ class ErrorItemId extends Error {
1338
1354
  this.name = "ErrorItemId";
1339
1355
  }
1340
1356
  }
1357
+ /** Currency is not supported */
1358
+ class ErrorCurrency extends Error {
1359
+ constructor() {
1360
+ super("Currency is not defined or supported");
1361
+ this.name = "ErrorCurrency";
1362
+ }
1363
+ }
1341
1364
 
1342
1365
  var IERC1155 = [
1343
1366
  {
@@ -7762,11 +7785,14 @@ class HypercertExchangeClient {
7762
7785
  * @param CreateMakerInput
7763
7786
  * @returns the maker object, isCurrencyApproved, and isBalanceSufficient
7764
7787
  */
7765
- async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency = this.currencies.WETH.address, startTime = Math.floor(Date.now() / 1000), additionalParameters = [], }) {
7788
+ async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency, startTime = Math.floor(Date.now() / 1000), additionalParameters = [], }) {
7766
7789
  const signer = this.getSigner();
7767
7790
  if (!this.isTimestampValid(startTime) || !this.isTimestampValid(endTime)) {
7768
7791
  throw new ErrorTimestamp();
7769
7792
  }
7793
+ if (!currency) {
7794
+ throw new ErrorCurrency();
7795
+ }
7770
7796
  const signerAddress = await signer.getAddress();
7771
7797
  const spenderAddress = this.addresses.EXCHANGE_V2;
7772
7798
  // Use this.provider (MulticallProvider) in order to batch the calls
@@ -8110,11 +8136,14 @@ class HypercertExchangeClient {
8110
8136
  * @param currency Currency used to buy the fractions (default to WETH)
8111
8137
  * @param additionalParameters Additional parameters used to support complex orders
8112
8138
  */
8113
- async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency = this.currencies.WETH.address, additionalParameters = [], }) {
8139
+ async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency, additionalParameters = [], }) {
8114
8140
  const address = await this.signer?.getAddress();
8115
8141
  if (!address) {
8116
8142
  throw new Error("No signer address could be determined");
8117
8143
  }
8144
+ if (!currency) {
8145
+ throw new ErrorCurrency();
8146
+ }
8118
8147
  const chainId = this.chainId;
8119
8148
  const { nonce_counter } = await this.api.fetchOrderNonce({
8120
8149
  address,
@@ -8151,11 +8180,14 @@ class HypercertExchangeClient {
8151
8180
  * @param sellLeftoverFraction Whether or not the seller wants to sell the leftover units
8152
8181
  * @param root Merkle tree root (optional)
8153
8182
  */
8154
- async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency = this.currencies.WETH.address, maxUnitAmount, minUnitAmount, minUnitsToKeep, sellLeftoverFraction, root, }) {
8183
+ async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency, maxUnitAmount, minUnitAmount, minUnitsToKeep, sellLeftoverFraction, root, }) {
8155
8184
  const address = await this.signer?.getAddress();
8156
8185
  if (!address) {
8157
8186
  throw new Error("No signer address could be determined");
8158
8187
  }
8188
+ if (!currency) {
8189
+ throw new ErrorCurrency();
8190
+ }
8159
8191
  const chainId = this.chainId;
8160
8192
  const { nonce_counter } = await this.api.fetchOrderNonce({
8161
8193
  address,
@@ -8248,4 +8280,4 @@ const utils = {
8248
8280
  ...asDeployedChain$1,
8249
8281
  };
8250
8282
 
8251
- export { ApiClient, ChainId, CollectionType, Eip712MakerMerkleTree, Eip712MerkleTree, ErrorItemId, ErrorMerkleTreeDepth, ErrorQuoteType, ErrorSigner, ErrorStrategyType, ErrorTimestamp, HypercertExchangeClient, IERC1155 as IERC1155Abi, abiIERC20 as IERC20Abi, abiIERC721 as IERC721Abi, LooksRareProtocol as LooksRareProtocolAbi, MAX_ORDERS_PER_TREE, MerkleTreeNodePosition, OrderValidatorCode, OrderValidatorV2A as OrderValidatorV2AAbi, QuoteType, StrategyType, TransferManager as TransferManagerAbi, WETH as WETHAbi, addressesByNetwork, chainInfo, currenciesByNetwork, defaultMerkleTree, utils };
8283
+ export { ApiClient, ChainId, CollectionType, Eip712MakerMerkleTree, Eip712MerkleTree, ErrorCurrency, ErrorItemId, ErrorMerkleTreeDepth, ErrorQuoteType, ErrorSigner, ErrorStrategyType, ErrorTimestamp, HypercertExchangeClient, IERC1155 as IERC1155Abi, abiIERC20 as IERC20Abi, abiIERC721 as IERC721Abi, LooksRareProtocol as LooksRareProtocolAbi, MAX_ORDERS_PER_TREE, MerkleTreeNodePosition, OrderValidatorCode, OrderValidatorV2A as OrderValidatorV2AAbi, QuoteType, SUPPORTED_CURRENCIES, StrategyType, TransferManager as TransferManagerAbi, WETH as WETHAbi, addressesByNetwork, chainInfo, currenciesByNetwork, defaultMerkleTree, utils };
package/dist/types.d.ts CHANGED
@@ -7,19 +7,17 @@ export interface Addresses {
7
7
  ORDER_VALIDATOR_V2: `0x${string}`;
8
8
  MINTER: `0x${string}`;
9
9
  }
10
- /** List of supported currencies */
11
- export interface Currencies {
12
- ETH: Currency;
13
- WETH: Currency;
14
- USDC: Currency;
15
- DAI: Currency;
16
- }
17
10
  /** Available information about a currency */
18
11
  export interface Currency {
19
12
  symbol: string;
20
13
  address: `0x${string}`;
21
14
  decimals: number;
22
15
  }
16
+ /** All possible supported currencies */
17
+ export declare const SUPPORTED_CURRENCIES: readonly ["ETH", "WETH", "DAI", "CELO", "cUSD", "USDT", "USDC"];
18
+ export type SupportedCurrencySymbol = (typeof SUPPORTED_CURRENCIES)[number];
19
+ /** Type for currency configuration */
20
+ export type Currencies = Partial<Record<SupportedCurrencySymbol, Currency>>;
23
21
  /** List of supported chains */
24
22
  export declare enum ChainId {
25
23
  SEPOLIA = 11155111,
@@ -27,7 +25,6 @@ export declare enum ChainId {
27
25
  HARDHAT = 31337,
28
26
  OPTIMISM = 10,
29
27
  CELO = 42220,
30
- BASE = 8453,
31
28
  ARBITRUM_SEPOLIA = 421614,
32
29
  ARBITRUM = 42161
33
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hypercerts-org/marketplace-sdk",
3
- "version": "0.3.36",
3
+ "version": "0.3.37",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
@@ -48,7 +48,7 @@
48
48
  "@0no-co/graphqlsp": "^1.12.8",
49
49
  "@commitlint/cli": "^17.0.2",
50
50
  "@commitlint/config-conventional": "^17.0.2",
51
- "@hypercerts-org/contracts": "2.0.0-alpha.9",
51
+ "@hypercerts-org/contracts": "2.0.0-alpha.11",
52
52
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
53
53
  "@looksrare/contracts-exchange-v1": "^1.2.0",
54
54
  "@looksrare/contracts-exchange-v2": "^0.1.2",
@@ -93,7 +93,7 @@
93
93
  "typescript": "^5.3.3"
94
94
  },
95
95
  "dependencies": {
96
- "@hypercerts-org/sdk": "2.2.0-beta.3",
96
+ "@hypercerts-org/sdk": "2.3.0",
97
97
  "@supabase/supabase-js": "^2.39.2",
98
98
  "@urql/core": "^5.0.4",
99
99
  "ethers": "^6.6.2",