@hypercerts-org/marketplace-sdk 0.3.35 → 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.
- package/LICENSE-APACHE +10 -0
- package/LICENSE-MIT +21 -0
- package/dist/constants/addresses.d.ts +0 -3
- package/dist/errors.d.ts +5 -0
- package/dist/index.cjs.js +112 -70
- package/dist/index.esm.js +112 -72
- package/dist/types.d.ts +7 -9
- package/package.json +18 -18
package/LICENSE-APACHE
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
Copyright 2023 Hypercerts Foundation
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
|
4
|
+
License. You may obtain a copy of the License at
|
5
|
+
|
6
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
|
8
|
+
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
|
9
|
+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
|
10
|
+
language governing permissions and limitations under the License.
|
package/LICENSE-MIT
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 Hypercerts Foundation
|
4
|
+
|
5
|
+
Copyright (c) 2022 LooksRare for portions of marketplace: https://github.com/LooksRare/contracts-exchange-v2 commit:
|
6
|
+
7fca565
|
7
|
+
|
8
|
+
Copyright (c) 2022 Paul Razvan Berg for inital template: https://github.com/paulrberg/foundry-template
|
9
|
+
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
11
|
+
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
12
|
+
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
13
|
+
persons to whom the Software is furnished to do so, subject to the following conditions:
|
14
|
+
|
15
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
16
|
+
Software.
|
17
|
+
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
19
|
+
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
20
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
21
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/dist/errors.d.ts
CHANGED
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,8 +694,8 @@ 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";
|
698
|
+
ChainId[ChainId["ARBITRUM"] = 42161] = "ARBITRUM";
|
697
699
|
})(exports.ChainId || (exports.ChainId = {}));
|
698
700
|
/** List of collection types supported by the protocol */
|
699
701
|
exports.CollectionType = void 0;
|
@@ -1098,48 +1100,46 @@ var asDeployedChain$1 = /*#__PURE__*/Object.freeze({
|
|
1098
1100
|
asDeployedChain: asDeployedChain
|
1099
1101
|
});
|
1100
1102
|
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
}
|
1107
|
-
const
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
}
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
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,
|
1130
1132
|
};
|
1131
|
-
/**
|
1132
|
-
* List of useful contract addresses
|
1133
|
-
*/
|
1134
1133
|
const addressesByNetwork = {
|
1135
1134
|
// Testnets
|
1136
|
-
[exports.ChainId.SEPOLIA]:
|
1137
|
-
[exports.ChainId.HARDHAT]:
|
1138
|
-
[exports.ChainId.BASE_SEPOLIA]:
|
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),
|
1139
1139
|
// Production nets
|
1140
|
-
[exports.ChainId.OPTIMISM]:
|
1141
|
-
[exports.ChainId.CELO]:
|
1142
|
-
[exports.ChainId.
|
1140
|
+
[exports.ChainId.OPTIMISM]: createNetworkAddresses(CHAIN_IDS.OPTIMISM),
|
1141
|
+
[exports.ChainId.CELO]: createNetworkAddresses(CHAIN_IDS.CELO),
|
1142
|
+
[exports.ChainId.ARBITRUM]: createNetworkAddresses(CHAIN_IDS.ARBITRUM),
|
1143
1143
|
};
|
1144
1144
|
|
1145
1145
|
const currencyAddressesPerChain = {
|
@@ -1174,34 +1174,53 @@ const currencyAddressesPerChain = {
|
|
1174
1174
|
USDC: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
1175
1175
|
},
|
1176
1176
|
[exports.ChainId.CELO]: {
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1177
|
+
CELO: "0x471EcE3750Da237f93B8E339c536989b8978a438",
|
1178
|
+
cUSD: "0x765DE816845861e75A25fCA122bb6898B8B1282a",
|
1179
|
+
USDC: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
|
1180
|
+
USDT: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
|
1181
1181
|
},
|
1182
|
-
[exports.ChainId.
|
1182
|
+
[exports.ChainId.ARBITRUM]: {
|
1183
1183
|
ETH: ethers.ZeroAddress,
|
1184
|
-
WETH: "
|
1185
|
-
DAI: "
|
1186
|
-
USDC: "
|
1184
|
+
WETH: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
1185
|
+
DAI: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
|
1186
|
+
USDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
1187
1187
|
},
|
1188
1188
|
};
|
1189
1189
|
const getCurrencies = (chainId) => {
|
1190
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
|
+
}
|
1191
1215
|
return {
|
1192
|
-
|
1193
|
-
symbol: "
|
1194
|
-
address: currenciesForChain.
|
1195
|
-
decimals: 18,
|
1196
|
-
},
|
1197
|
-
WETH: {
|
1198
|
-
symbol: "WETH",
|
1199
|
-
address: currenciesForChain.WETH,
|
1216
|
+
CELO: {
|
1217
|
+
symbol: "CELO",
|
1218
|
+
address: currenciesForChain.CELO,
|
1200
1219
|
decimals: 18,
|
1201
1220
|
},
|
1202
|
-
|
1203
|
-
symbol: "
|
1204
|
-
address: currenciesForChain.
|
1221
|
+
cUSD: {
|
1222
|
+
symbol: "cUSD",
|
1223
|
+
address: currenciesForChain.cUSD,
|
1205
1224
|
decimals: 18,
|
1206
1225
|
},
|
1207
1226
|
USDC: {
|
@@ -1209,6 +1228,11 @@ const getCurrencies = (chainId) => {
|
|
1209
1228
|
address: currenciesForChain.USDC,
|
1210
1229
|
decimals: 6,
|
1211
1230
|
},
|
1231
|
+
USDT: {
|
1232
|
+
symbol: "USDT",
|
1233
|
+
address: currenciesForChain.USDT,
|
1234
|
+
decimals: 6,
|
1235
|
+
},
|
1212
1236
|
};
|
1213
1237
|
};
|
1214
1238
|
const currenciesByNetwork = {
|
@@ -1217,8 +1241,8 @@ const currenciesByNetwork = {
|
|
1217
1241
|
[exports.ChainId.BASE_SEPOLIA]: getCurrencies(exports.ChainId.BASE_SEPOLIA),
|
1218
1242
|
[exports.ChainId.OPTIMISM]: getCurrencies(exports.ChainId.OPTIMISM),
|
1219
1243
|
[exports.ChainId.CELO]: getCurrencies(exports.ChainId.CELO),
|
1220
|
-
[exports.ChainId.BASE]: getCurrencies(exports.ChainId.BASE),
|
1221
1244
|
[exports.ChainId.ARBITRUM_SEPOLIA]: getCurrencies(exports.ChainId.ARBITRUM_SEPOLIA),
|
1245
|
+
[exports.ChainId.ARBITRUM]: getCurrencies(exports.ChainId.ARBITRUM),
|
1222
1246
|
};
|
1223
1247
|
|
1224
1248
|
const chainInfo = {
|
@@ -1246,6 +1270,14 @@ const chainInfo = {
|
|
1246
1270
|
baseApiUrl: "https://staging-api.hypercerts.org",
|
1247
1271
|
osApiUrl: "https://testnets-api.opensea.io"
|
1248
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
|
+
},
|
1249
1281
|
[exports.ChainId.ARBITRUM_SEPOLIA]: {
|
1250
1282
|
label: "Arbitrum Sepolia",
|
1251
1283
|
appUrl: "https://testnet.hypercerts.org",
|
@@ -1270,14 +1302,6 @@ const chainInfo = {
|
|
1270
1302
|
baseApiUrl: "https://api.hypercerts.org",
|
1271
1303
|
osApiUrl: "https://testnets-api.opensea.io"
|
1272
1304
|
},
|
1273
|
-
[exports.ChainId.BASE]: {
|
1274
|
-
label: "Base",
|
1275
|
-
appUrl: "https://app.hypercerts.org",
|
1276
|
-
explorer: "https://basescan.io",
|
1277
|
-
rpcUrl: "https://mainnet.base.org",
|
1278
|
-
baseApiUrl: "https://api.hypercerts.org",
|
1279
|
-
osApiUrl: "https://testnets-api.opensea.io"
|
1280
|
-
}
|
1281
1305
|
};
|
1282
1306
|
|
1283
1307
|
/** Maximum amount of orders in a merkle tree
|
@@ -1332,6 +1356,13 @@ class ErrorItemId extends Error {
|
|
1332
1356
|
this.name = "ErrorItemId";
|
1333
1357
|
}
|
1334
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
|
+
}
|
1335
1366
|
|
1336
1367
|
var IERC1155 = [
|
1337
1368
|
{
|
@@ -7756,11 +7787,14 @@ class HypercertExchangeClient {
|
|
7756
7787
|
* @param CreateMakerInput
|
7757
7788
|
* @returns the maker object, isCurrencyApproved, and isBalanceSufficient
|
7758
7789
|
*/
|
7759
|
-
async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency
|
7790
|
+
async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency, startTime = Math.floor(Date.now() / 1000), additionalParameters = [], }) {
|
7760
7791
|
const signer = this.getSigner();
|
7761
7792
|
if (!this.isTimestampValid(startTime) || !this.isTimestampValid(endTime)) {
|
7762
7793
|
throw new ErrorTimestamp();
|
7763
7794
|
}
|
7795
|
+
if (!currency) {
|
7796
|
+
throw new ErrorCurrency();
|
7797
|
+
}
|
7764
7798
|
const signerAddress = await signer.getAddress();
|
7765
7799
|
const spenderAddress = this.addresses.EXCHANGE_V2;
|
7766
7800
|
// Use this.provider (MulticallProvider) in order to batch the calls
|
@@ -8104,11 +8138,14 @@ class HypercertExchangeClient {
|
|
8104
8138
|
* @param currency Currency used to buy the fractions (default to WETH)
|
8105
8139
|
* @param additionalParameters Additional parameters used to support complex orders
|
8106
8140
|
*/
|
8107
|
-
async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency
|
8141
|
+
async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency, additionalParameters = [], }) {
|
8108
8142
|
const address = await this.signer?.getAddress();
|
8109
8143
|
if (!address) {
|
8110
8144
|
throw new Error("No signer address could be determined");
|
8111
8145
|
}
|
8146
|
+
if (!currency) {
|
8147
|
+
throw new ErrorCurrency();
|
8148
|
+
}
|
8112
8149
|
const chainId = this.chainId;
|
8113
8150
|
const { nonce_counter } = await this.api.fetchOrderNonce({
|
8114
8151
|
address,
|
@@ -8145,11 +8182,14 @@ class HypercertExchangeClient {
|
|
8145
8182
|
* @param sellLeftoverFraction Whether or not the seller wants to sell the leftover units
|
8146
8183
|
* @param root Merkle tree root (optional)
|
8147
8184
|
*/
|
8148
|
-
async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency
|
8185
|
+
async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency, maxUnitAmount, minUnitAmount, minUnitsToKeep, sellLeftoverFraction, root, }) {
|
8149
8186
|
const address = await this.signer?.getAddress();
|
8150
8187
|
if (!address) {
|
8151
8188
|
throw new Error("No signer address could be determined");
|
8152
8189
|
}
|
8190
|
+
if (!currency) {
|
8191
|
+
throw new ErrorCurrency();
|
8192
|
+
}
|
8153
8193
|
const chainId = this.chainId;
|
8154
8194
|
const { nonce_counter } = await this.api.fetchOrderNonce({
|
8155
8195
|
address,
|
@@ -8245,6 +8285,7 @@ const utils = {
|
|
8245
8285
|
exports.ApiClient = ApiClient;
|
8246
8286
|
exports.Eip712MakerMerkleTree = Eip712MakerMerkleTree;
|
8247
8287
|
exports.Eip712MerkleTree = Eip712MerkleTree;
|
8288
|
+
exports.ErrorCurrency = ErrorCurrency;
|
8248
8289
|
exports.ErrorItemId = ErrorItemId;
|
8249
8290
|
exports.ErrorMerkleTreeDepth = ErrorMerkleTreeDepth;
|
8250
8291
|
exports.ErrorQuoteType = ErrorQuoteType;
|
@@ -8258,6 +8299,7 @@ exports.IERC721Abi = abiIERC721;
|
|
8258
8299
|
exports.LooksRareProtocolAbi = LooksRareProtocol;
|
8259
8300
|
exports.MAX_ORDERS_PER_TREE = MAX_ORDERS_PER_TREE;
|
8260
8301
|
exports.OrderValidatorV2AAbi = OrderValidatorV2A;
|
8302
|
+
exports.SUPPORTED_CURRENCIES = SUPPORTED_CURRENCIES;
|
8261
8303
|
exports.TransferManagerAbi = TransferManager;
|
8262
8304
|
exports.WETHAbi = WETH;
|
8263
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,8 +692,8 @@ 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";
|
696
|
+
ChainId[ChainId["ARBITRUM"] = 42161] = "ARBITRUM";
|
695
697
|
})(ChainId || (ChainId = {}));
|
696
698
|
/** List of collection types supported by the protocol */
|
697
699
|
var CollectionType;
|
@@ -1096,48 +1098,46 @@ var asDeployedChain$1 = /*#__PURE__*/Object.freeze({
|
|
1096
1098
|
asDeployedChain: asDeployedChain
|
1097
1099
|
});
|
1098
1100
|
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
}
|
1105
|
-
const
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
}
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
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,
|
1128
1130
|
};
|
1129
|
-
/**
|
1130
|
-
* List of useful contract addresses
|
1131
|
-
*/
|
1132
1131
|
const addressesByNetwork = {
|
1133
1132
|
// Testnets
|
1134
|
-
[ChainId.SEPOLIA]:
|
1135
|
-
[ChainId.HARDHAT]:
|
1136
|
-
[ChainId.BASE_SEPOLIA]:
|
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),
|
1137
1137
|
// Production nets
|
1138
|
-
[ChainId.OPTIMISM]:
|
1139
|
-
[ChainId.CELO]:
|
1140
|
-
[ChainId.
|
1138
|
+
[ChainId.OPTIMISM]: createNetworkAddresses(CHAIN_IDS.OPTIMISM),
|
1139
|
+
[ChainId.CELO]: createNetworkAddresses(CHAIN_IDS.CELO),
|
1140
|
+
[ChainId.ARBITRUM]: createNetworkAddresses(CHAIN_IDS.ARBITRUM),
|
1141
1141
|
};
|
1142
1142
|
|
1143
1143
|
const currencyAddressesPerChain = {
|
@@ -1172,34 +1172,53 @@ const currencyAddressesPerChain = {
|
|
1172
1172
|
USDC: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
1173
1173
|
},
|
1174
1174
|
[ChainId.CELO]: {
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1175
|
+
CELO: "0x471EcE3750Da237f93B8E339c536989b8978a438",
|
1176
|
+
cUSD: "0x765DE816845861e75A25fCA122bb6898B8B1282a",
|
1177
|
+
USDC: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
|
1178
|
+
USDT: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
|
1179
1179
|
},
|
1180
|
-
[ChainId.
|
1180
|
+
[ChainId.ARBITRUM]: {
|
1181
1181
|
ETH: ZeroAddress,
|
1182
|
-
WETH: "
|
1183
|
-
DAI: "
|
1184
|
-
USDC: "
|
1182
|
+
WETH: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
1183
|
+
DAI: "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
|
1184
|
+
USDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
1185
1185
|
},
|
1186
1186
|
};
|
1187
1187
|
const getCurrencies = (chainId) => {
|
1188
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
|
+
}
|
1189
1213
|
return {
|
1190
|
-
|
1191
|
-
symbol: "
|
1192
|
-
address: currenciesForChain.
|
1193
|
-
decimals: 18,
|
1194
|
-
},
|
1195
|
-
WETH: {
|
1196
|
-
symbol: "WETH",
|
1197
|
-
address: currenciesForChain.WETH,
|
1214
|
+
CELO: {
|
1215
|
+
symbol: "CELO",
|
1216
|
+
address: currenciesForChain.CELO,
|
1198
1217
|
decimals: 18,
|
1199
1218
|
},
|
1200
|
-
|
1201
|
-
symbol: "
|
1202
|
-
address: currenciesForChain.
|
1219
|
+
cUSD: {
|
1220
|
+
symbol: "cUSD",
|
1221
|
+
address: currenciesForChain.cUSD,
|
1203
1222
|
decimals: 18,
|
1204
1223
|
},
|
1205
1224
|
USDC: {
|
@@ -1207,6 +1226,11 @@ const getCurrencies = (chainId) => {
|
|
1207
1226
|
address: currenciesForChain.USDC,
|
1208
1227
|
decimals: 6,
|
1209
1228
|
},
|
1229
|
+
USDT: {
|
1230
|
+
symbol: "USDT",
|
1231
|
+
address: currenciesForChain.USDT,
|
1232
|
+
decimals: 6,
|
1233
|
+
},
|
1210
1234
|
};
|
1211
1235
|
};
|
1212
1236
|
const currenciesByNetwork = {
|
@@ -1215,8 +1239,8 @@ const currenciesByNetwork = {
|
|
1215
1239
|
[ChainId.BASE_SEPOLIA]: getCurrencies(ChainId.BASE_SEPOLIA),
|
1216
1240
|
[ChainId.OPTIMISM]: getCurrencies(ChainId.OPTIMISM),
|
1217
1241
|
[ChainId.CELO]: getCurrencies(ChainId.CELO),
|
1218
|
-
[ChainId.BASE]: getCurrencies(ChainId.BASE),
|
1219
1242
|
[ChainId.ARBITRUM_SEPOLIA]: getCurrencies(ChainId.ARBITRUM_SEPOLIA),
|
1243
|
+
[ChainId.ARBITRUM]: getCurrencies(ChainId.ARBITRUM),
|
1220
1244
|
};
|
1221
1245
|
|
1222
1246
|
const chainInfo = {
|
@@ -1244,6 +1268,14 @@ const chainInfo = {
|
|
1244
1268
|
baseApiUrl: "https://staging-api.hypercerts.org",
|
1245
1269
|
osApiUrl: "https://testnets-api.opensea.io"
|
1246
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
|
+
},
|
1247
1279
|
[ChainId.ARBITRUM_SEPOLIA]: {
|
1248
1280
|
label: "Arbitrum Sepolia",
|
1249
1281
|
appUrl: "https://testnet.hypercerts.org",
|
@@ -1268,14 +1300,6 @@ const chainInfo = {
|
|
1268
1300
|
baseApiUrl: "https://api.hypercerts.org",
|
1269
1301
|
osApiUrl: "https://testnets-api.opensea.io"
|
1270
1302
|
},
|
1271
|
-
[ChainId.BASE]: {
|
1272
|
-
label: "Base",
|
1273
|
-
appUrl: "https://app.hypercerts.org",
|
1274
|
-
explorer: "https://basescan.io",
|
1275
|
-
rpcUrl: "https://mainnet.base.org",
|
1276
|
-
baseApiUrl: "https://api.hypercerts.org",
|
1277
|
-
osApiUrl: "https://testnets-api.opensea.io"
|
1278
|
-
}
|
1279
1303
|
};
|
1280
1304
|
|
1281
1305
|
/** Maximum amount of orders in a merkle tree
|
@@ -1330,6 +1354,13 @@ class ErrorItemId extends Error {
|
|
1330
1354
|
this.name = "ErrorItemId";
|
1331
1355
|
}
|
1332
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
|
+
}
|
1333
1364
|
|
1334
1365
|
var IERC1155 = [
|
1335
1366
|
{
|
@@ -7754,11 +7785,14 @@ class HypercertExchangeClient {
|
|
7754
7785
|
* @param CreateMakerInput
|
7755
7786
|
* @returns the maker object, isCurrencyApproved, and isBalanceSufficient
|
7756
7787
|
*/
|
7757
|
-
async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency
|
7788
|
+
async createMakerBid({ collection, strategyId, collectionType, subsetNonce, orderNonce, endTime, price, itemIds, amounts = [1], currency, startTime = Math.floor(Date.now() / 1000), additionalParameters = [], }) {
|
7758
7789
|
const signer = this.getSigner();
|
7759
7790
|
if (!this.isTimestampValid(startTime) || !this.isTimestampValid(endTime)) {
|
7760
7791
|
throw new ErrorTimestamp();
|
7761
7792
|
}
|
7793
|
+
if (!currency) {
|
7794
|
+
throw new ErrorCurrency();
|
7795
|
+
}
|
7762
7796
|
const signerAddress = await signer.getAddress();
|
7763
7797
|
const spenderAddress = this.addresses.EXCHANGE_V2;
|
7764
7798
|
// Use this.provider (MulticallProvider) in order to batch the calls
|
@@ -8102,11 +8136,14 @@ class HypercertExchangeClient {
|
|
8102
8136
|
* @param currency Currency used to buy the fractions (default to WETH)
|
8103
8137
|
* @param additionalParameters Additional parameters used to support complex orders
|
8104
8138
|
*/
|
8105
|
-
async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency
|
8139
|
+
async createDirectFractionsSaleMakerAsk({ itemIds, price, startTime, endTime, currency, additionalParameters = [], }) {
|
8106
8140
|
const address = await this.signer?.getAddress();
|
8107
8141
|
if (!address) {
|
8108
8142
|
throw new Error("No signer address could be determined");
|
8109
8143
|
}
|
8144
|
+
if (!currency) {
|
8145
|
+
throw new ErrorCurrency();
|
8146
|
+
}
|
8110
8147
|
const chainId = this.chainId;
|
8111
8148
|
const { nonce_counter } = await this.api.fetchOrderNonce({
|
8112
8149
|
address,
|
@@ -8143,11 +8180,14 @@ class HypercertExchangeClient {
|
|
8143
8180
|
* @param sellLeftoverFraction Whether or not the seller wants to sell the leftover units
|
8144
8181
|
* @param root Merkle tree root (optional)
|
8145
8182
|
*/
|
8146
|
-
async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency
|
8183
|
+
async createFractionalSaleMakerAsk({ itemIds, price, startTime, endTime, currency, maxUnitAmount, minUnitAmount, minUnitsToKeep, sellLeftoverFraction, root, }) {
|
8147
8184
|
const address = await this.signer?.getAddress();
|
8148
8185
|
if (!address) {
|
8149
8186
|
throw new Error("No signer address could be determined");
|
8150
8187
|
}
|
8188
|
+
if (!currency) {
|
8189
|
+
throw new ErrorCurrency();
|
8190
|
+
}
|
8151
8191
|
const chainId = this.chainId;
|
8152
8192
|
const { nonce_counter } = await this.api.fetchOrderNonce({
|
8153
8193
|
address,
|
@@ -8240,4 +8280,4 @@ const utils = {
|
|
8240
8280
|
...asDeployedChain$1,
|
8241
8281
|
};
|
8242
8282
|
|
8243
|
-
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,8 +25,8 @@ export declare enum ChainId {
|
|
27
25
|
HARDHAT = 31337,
|
28
26
|
OPTIMISM = 10,
|
29
27
|
CELO = 42220,
|
30
|
-
|
31
|
-
|
28
|
+
ARBITRUM_SEPOLIA = 421614,
|
29
|
+
ARBITRUM = 42161
|
32
30
|
}
|
33
31
|
/** ChainInfo data used to interact with HypercertExchange ecosystem */
|
34
32
|
export interface ChainInfo {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@hypercerts-org/marketplace-sdk",
|
3
|
-
"version": "0.3.
|
3
|
+
"version": "0.3.37",
|
4
4
|
"license": "MIT",
|
5
5
|
"main": "dist/index.cjs.js",
|
6
6
|
"module": "dist/index.esm.js",
|
@@ -24,6 +24,20 @@
|
|
24
24
|
"engines": {
|
25
25
|
"node": ">= 16.15.1 <= 20.x"
|
26
26
|
},
|
27
|
+
"scripts": {
|
28
|
+
"prebuild": "rm -rf ./src/typechain ./src/artifacts cache dist",
|
29
|
+
"dev": "rollup -c --bundleConfigAsCjs -w",
|
30
|
+
"build:ts": "rollup -c --bundleConfigAsCjs",
|
31
|
+
"build:sc": "hardhat compile",
|
32
|
+
"build": "yarn build:sc && yarn build:ts",
|
33
|
+
"test": "nyc hardhat test",
|
34
|
+
"doc": "typedoc --plugin typedoc-plugin-markdown --tsconfig tsconfig.build.json",
|
35
|
+
"lint": "eslint --max-warnings 0 'src/**/*.{js,ts}'",
|
36
|
+
"format:check": "prettier --check 'src/**/*.{js,ts,json,yaml,yml,md}'",
|
37
|
+
"format:write": "prettier --write 'src/**/*.{js,ts,json,yaml,yml,md}'",
|
38
|
+
"release": "release-it --only-version --set-upstream",
|
39
|
+
"supabase:types:hypercerts": "npx supabase gen types typescript --project-id zgvoyckkistexkfdmjqc --schema public > src/utils/hypercerts-database-types.ts"
|
40
|
+
},
|
27
41
|
"lint-staged": {
|
28
42
|
"*.{js,jsx,ts,tsx,json,yaml,yml}": "yarn format:write"
|
29
43
|
},
|
@@ -34,7 +48,7 @@
|
|
34
48
|
"@0no-co/graphqlsp": "^1.12.8",
|
35
49
|
"@commitlint/cli": "^17.0.2",
|
36
50
|
"@commitlint/config-conventional": "^17.0.2",
|
37
|
-
"@hypercerts-org/contracts": "2.0.0-alpha.
|
51
|
+
"@hypercerts-org/contracts": "2.0.0-alpha.11",
|
38
52
|
"@istanbuljs/nyc-config-typescript": "^1.0.2",
|
39
53
|
"@looksrare/contracts-exchange-v1": "^1.2.0",
|
40
54
|
"@looksrare/contracts-exchange-v2": "^0.1.2",
|
@@ -79,25 +93,11 @@
|
|
79
93
|
"typescript": "^5.3.3"
|
80
94
|
},
|
81
95
|
"dependencies": {
|
82
|
-
"@hypercerts-org/sdk": "2.
|
96
|
+
"@hypercerts-org/sdk": "2.3.0",
|
83
97
|
"@supabase/supabase-js": "^2.39.2",
|
84
98
|
"@urql/core": "^5.0.4",
|
85
99
|
"ethers": "^6.6.2",
|
86
100
|
"gql.tada": "^1.7.6",
|
87
101
|
"merkletreejs": "^0.3.9"
|
88
|
-
},
|
89
|
-
"scripts": {
|
90
|
-
"prebuild": "rm -rf ./src/typechain ./src/artifacts cache dist",
|
91
|
-
"dev": "rollup -c --bundleConfigAsCjs -w",
|
92
|
-
"build:ts": "rollup -c --bundleConfigAsCjs",
|
93
|
-
"build:sc": "hardhat compile",
|
94
|
-
"build": "yarn build:sc && yarn build:ts",
|
95
|
-
"test": "nyc hardhat test",
|
96
|
-
"doc": "typedoc --plugin typedoc-plugin-markdown --tsconfig tsconfig.build.json",
|
97
|
-
"lint": "eslint --max-warnings 0 'src/**/*.{js,ts}'",
|
98
|
-
"format:check": "prettier --check 'src/**/*.{js,ts,json,yaml,yml,md}'",
|
99
|
-
"format:write": "prettier --write 'src/**/*.{js,ts,json,yaml,yml,md}'",
|
100
|
-
"release": "release-it --only-version --set-upstream",
|
101
|
-
"supabase:types:hypercerts": "npx supabase gen types typescript --project-id zgvoyckkistexkfdmjqc --schema public > src/utils/hypercerts-database-types.ts"
|
102
102
|
}
|
103
|
-
}
|
103
|
+
}
|