@zoralabs/coins-sdk 0.2.3 → 0.2.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @zoralabs/coins-sdk
2
2
 
3
+ ## 0.2.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 3d5f9152: Removing `tradeCoin` function as its currently incompatible with UniswapV4 backed coins
8
+ - d8727949: Add create coin $ZORA initial buy
9
+
3
10
  ## 0.2.3
4
11
 
5
12
  ### Patch Changes
@@ -1,23 +1,30 @@
1
1
  import { coinFactoryABI as zoraFactoryImplABI } from "@zoralabs/protocol-deployments";
2
2
  import { Address, TransactionReceipt, WalletClient, SimulateContractParameters, ContractEventArgsFromTopics, Account } from "viem";
3
- import { GenericPublicClient } from "src/utils/genericPublicClient";
4
- import { ValidMetadataURI } from "src/metadata";
3
+ import { GenericPublicClient } from "../utils/genericPublicClient";
4
+ import { ValidMetadataURI } from "../metadata";
5
5
  export type CoinDeploymentLogArgs = ContractEventArgsFromTopics<typeof zoraFactoryImplABI, "CoinCreatedV4">;
6
6
  export declare enum DeployCurrency {
7
7
  ZORA = 1,
8
8
  ETH = 2
9
9
  }
10
+ export declare enum InitialPurchaseCurrency {
11
+ ETH = 1
12
+ }
10
13
  export type CreateCoinArgs = {
11
14
  name: string;
12
15
  symbol: string;
13
16
  uri: ValidMetadataURI;
14
- chainId: number;
17
+ chainId?: number;
15
18
  owners?: Address[];
16
19
  payoutRecipient: Address;
17
20
  platformReferrer?: Address;
18
21
  currency?: DeployCurrency;
22
+ initialPurchase?: {
23
+ currency: InitialPurchaseCurrency;
24
+ amount: bigint;
25
+ };
19
26
  };
20
- export declare function createCoinCall({ name, symbol, uri, owners, payoutRecipient, currency, chainId, platformReferrer, }: CreateCoinArgs): Promise<SimulateContractParameters<typeof zoraFactoryImplABI, "deploy">>;
27
+ export declare function createCoinCall({ name, symbol, uri, owners, payoutRecipient, currency, chainId, platformReferrer, initialPurchase, }: CreateCoinArgs): Promise<SimulateContractParameters<typeof zoraFactoryImplABI, "deploy">>;
21
28
  /**
22
29
  * Gets the deployed coin address from transaction receipt logs
23
30
  * @param receipt Transaction receipt containing the CoinCreated event
@@ -1 +1 @@
1
- {"version":3,"file":"createCoin.d.ts","sourceRoot":"","sources":["../../src/actions/createCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,0BAA0B,EAC1B,2BAA2B,EAM3B,OAAO,EACR,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAA8B,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQ5E,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAC7D,OAAO,kBAAkB,EACzB,eAAe,CAChB,CAAC;AAEF,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,GAAG,IAAI;CACR;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,gBAAgB,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AAqBF,wBAAsB,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,GAAG,EACH,MAAM,EACN,eAAe,EACf,QAAQ,EACR,OAAiB,EACjB,gBAA+D,GAChE,EAAE,cAAc,GAAG,OAAO,CACzB,0BAA0B,CAAC,OAAO,kBAAkB,EAAE,QAAQ,CAAC,CAChE,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,GAC1B,qBAAqB,GAAG,SAAS,CAOnC;AAGD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB,EACjC,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC7B;;;;;;;;;;;;;;;;;;;;;;;GAyBF"}
1
+ {"version":3,"file":"createCoin.d.ts","sourceRoot":"","sources":["../../src/actions/createCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,0BAA0B,EAC1B,2BAA2B,EAM3B,OAAO,EACR,MAAM,MAAM,CAAC;AAId,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAA8B,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQ3E,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAC7D,OAAO,kBAAkB,EACzB,eAAe,CAChB,CAAC;AAEF,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,GAAG,IAAI;CACR;AAED,oBAAY,uBAAuB;IACjC,GAAG,IAAI;CAER;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,gBAAgB,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,eAAe,CAAC,EAAE;QAChB,QAAQ,EAAE,uBAAuB,CAAC;QAClC,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAqBF,wBAAsB,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,GAAG,EACH,MAAM,EACN,eAAe,EACf,QAAQ,EACR,OAAiB,EACjB,gBAA+D,EAC/D,eAAe,GAChB,EAAE,cAAc,GAAG,OAAO,CACzB,0BAA0B,CAAC,OAAO,kBAAkB,EAAE,QAAQ,CAAC,CAChE,CA8CA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,GAC1B,qBAAqB,GAAG,SAAS,CAOnC;AAGD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB,EACjC,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC7B;;;;;;;;;;;;;;;;;;;;;;;GAyBF"}
@@ -1,5 +1,5 @@
1
1
  import { Address, SimulateContractParameters, WalletClient } from "viem";
2
- import { GenericPublicClient } from "src/utils/genericPublicClient";
2
+ import { GenericPublicClient } from "../utils/genericPublicClient";
3
3
  export type UpdateCoinURIArgs = {
4
4
  coin: Address;
5
5
  newURI: string;
@@ -1 +1 @@
1
- {"version":3,"file":"updateCoinURI.d.ts","sourceRoot":"","sources":["../../src/actions/updateCoinURI.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAEP,0BAA0B,EAC1B,YAAY,EACb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,IAAI,GACL,EAAE,iBAAiB,GAAG,0BAA0B,CAYhD;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB;;;;;;;;;;;;;;;;;GAgBlC"}
1
+ {"version":3,"file":"updateCoinURI.d.ts","sourceRoot":"","sources":["../../src/actions/updateCoinURI.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAEP,0BAA0B,EAC1B,YAAY,EACb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,IAAI,GACL,EAAE,iBAAiB,GAAG,0BAA0B,CAYhD;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB;;;;;;;;;;;;;;;;;GAgBlC"}
@@ -1,5 +1,5 @@
1
1
  import { Address, SimulateContractParameters, WalletClient } from "viem";
2
- import { GenericPublicClient } from "src/utils/genericPublicClient";
2
+ import { GenericPublicClient } from "../utils/genericPublicClient";
3
3
  export type UpdatePayoutRecipientArgs = {
4
4
  coin: Address;
5
5
  newPayoutRecipient: string;
@@ -1 +1 @@
1
- {"version":3,"file":"updatePayoutRecipient.d.ts","sourceRoot":"","sources":["../../src/actions/updatePayoutRecipient.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAEP,0BAA0B,EAC1B,YAAY,EACb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,IAAI,GACL,EAAE,yBAAyB,GAAG,0BAA0B,CAQxD;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,EAC/B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;GAgBlC"}
1
+ {"version":3,"file":"updatePayoutRecipient.d.ts","sourceRoot":"","sources":["../../src/actions/updatePayoutRecipient.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EAEP,0BAA0B,EAC1B,YAAY,EACb,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,EAClB,IAAI,GACL,EAAE,yBAAyB,GAAG,0BAA0B,CAQxD;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,EAC/B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;GAgBlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,mBAAmB,WAAW,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,mBAAmB,WAAW,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,mBAAmB,WAAW,CAAC;AAG/B,cAAc,WAAW,CAAC;AAC1B,mBAAmB,WAAW,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.cjs CHANGED
@@ -6,10 +6,11 @@ var _protocoldeployments = require('@zoralabs/protocol-deployments');
6
6
 
7
7
 
8
8
  var _viem = require('viem');
9
+ var _chains = require('viem/chains');
9
10
 
10
11
  // src/constants.ts
11
12
 
12
- var _chains = require('viem/chains');
13
+
13
14
  var COIN_FACTORY_ADDRESS = _protocoldeployments.coinFactoryAddress["8453"];
14
15
  var SUPERCHAIN_WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
15
16
  var USDC_WETH_POOLS_BY_CHAIN = {
@@ -133,9 +134,6 @@ function getAttribution() {
133
134
  return _viem.slice.call(void 0, hash, 0, 4);
134
135
  }
135
136
 
136
- // src/actions/createCoin.ts
137
-
138
-
139
137
  // src/utils/poolConfigUtils.ts
140
138
 
141
139
 
@@ -179,12 +177,54 @@ var COIN_ZORA_PAIR_POOL_CONFIG = {
179
177
  })
180
178
  };
181
179
 
180
+ // src/utils/getPrepurchaseHook.ts
181
+
182
+
183
+
184
+
185
+
186
+
187
+ var BASE_UDSC_ADDRESS = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
188
+ var USDC_ZORA_FEE = 3e3;
189
+ var WETH_BASE_FEE = 3e3;
190
+ var encodeFee = (fee) => _viem.pad.call(void 0, _viem.toHex.call(void 0, fee), { size: 3 });
191
+ var getPrepurchaseHook = async ({
192
+ payoutRecipient,
193
+ initialPurchase,
194
+ chainId
195
+ }) => {
196
+ if (initialPurchase.currency !== 1 /* ETH */ && chainId !== _chains.base.id) {
197
+ throw new Error("Initial purchase currency and/or chain not supported");
198
+ }
199
+ const path = _viem.concat.call(void 0, [
200
+ _protocoldeployments.wethAddress[_chains.base.id],
201
+ encodeFee(WETH_BASE_FEE),
202
+ BASE_UDSC_ADDRESS,
203
+ encodeFee(USDC_ZORA_FEE),
204
+ ZORA_ADDRESS
205
+ ]);
206
+ return _protocoldeployments.encodeBuySupplyWithMultiHopSwapRouterHookCall.call(void 0, {
207
+ ethValue: initialPurchase.amount,
208
+ buyRecipient: payoutRecipient,
209
+ exactInputParams: {
210
+ path,
211
+ amountIn: initialPurchase.amount,
212
+ amountOutMinimum: initialPurchase.amountOutMinimum || 0n
213
+ },
214
+ chainId: _chains.base.id
215
+ });
216
+ };
217
+
182
218
  // src/actions/createCoin.ts
183
219
  var DeployCurrency = /* @__PURE__ */ ((DeployCurrency2) => {
184
220
  DeployCurrency2[DeployCurrency2["ZORA"] = 1] = "ZORA";
185
221
  DeployCurrency2[DeployCurrency2["ETH"] = 2] = "ETH";
186
222
  return DeployCurrency2;
187
223
  })(DeployCurrency || {});
224
+ var InitialPurchaseCurrency = /* @__PURE__ */ ((InitialPurchaseCurrency2) => {
225
+ InitialPurchaseCurrency2[InitialPurchaseCurrency2["ETH"] = 1] = "ETH";
226
+ return InitialPurchaseCurrency2;
227
+ })(InitialPurchaseCurrency || {});
188
228
  function getPoolConfig(currency, chainId) {
189
229
  if (currency === 1 /* ZORA */ && chainId == _chains.baseSepolia.id) {
190
230
  throw new Error("ZORA is not supported on Base Sepolia");
@@ -206,7 +246,8 @@ async function createCoinCall({
206
246
  payoutRecipient,
207
247
  currency,
208
248
  chainId = _chains.base.id,
209
- platformReferrer = "0x0000000000000000000000000000000000000000"
249
+ platformReferrer = "0x0000000000000000000000000000000000000000",
250
+ initialPurchase
210
251
  }) {
211
252
  if (!owners) {
212
253
  owners = [payoutRecipient];
@@ -216,6 +257,18 @@ async function createCoinCall({
216
257
  }
217
258
  const poolConfig = getPoolConfig(currency, chainId);
218
259
  await validateMetadataURIContent(uri);
260
+ let deployHook = {
261
+ hook: _viem.zeroAddress,
262
+ hookData: "0x",
263
+ value: 0n
264
+ };
265
+ if (initialPurchase) {
266
+ deployHook = await getPrepurchaseHook({
267
+ initialPurchase,
268
+ payoutRecipient,
269
+ chainId
270
+ });
271
+ }
219
272
  return {
220
273
  abi: _protocoldeployments.coinFactoryABI,
221
274
  functionName: "deploy",
@@ -228,13 +281,12 @@ async function createCoinCall({
228
281
  symbol,
229
282
  poolConfig,
230
283
  platformReferrer,
231
- _viem.zeroAddress,
232
- // hookAddress
233
- "0x",
234
- // hookData
284
+ deployHook.hook,
285
+ deployHook.hookData,
235
286
  _viem.keccak256.call(void 0, _viem.toBytes.call(void 0, Math.random().toString()))
236
287
  // coinSalt
237
288
  ],
289
+ value: deployHook.value,
238
290
  dataSuffix: getAttribution()
239
291
  };
240
292
  }
@@ -266,98 +318,6 @@ async function createCoin(call, walletClient, publicClient, options) {
266
318
  };
267
319
  }
268
320
 
269
- // src/actions/tradeCoin.ts
270
-
271
-
272
-
273
-
274
-
275
-
276
-
277
- var OP_BRIDGE_ADDRESS = "0x4200000000000000000000000000000000000016";
278
- async function simulateBuy({
279
- target,
280
- requestedOrderSize,
281
- publicClient
282
- }) {
283
- const numberResult = await publicClient.simulateContract({
284
- address: target,
285
- abi: _protocoldeployments.coinABI,
286
- functionName: "buy",
287
- dataSuffix: getAttribution(),
288
- args: [
289
- OP_BRIDGE_ADDRESS,
290
- requestedOrderSize,
291
- 0n,
292
- // minAmountOut
293
- 0n,
294
- // sqrtPriceLimitX96
295
- _viem.zeroAddress
296
- // tradeReferrer
297
- ],
298
- // We want to ensure that the multicall3 contract has enough ETH to buy in the simulation
299
- stateOverride: [
300
- {
301
- address: _chains.baseSepolia.contracts.multicall3.address,
302
- balance: _viem.parseEther.call(void 0, "10000000")
303
- }
304
- ]
305
- });
306
- const orderSize = numberResult.result[0];
307
- const amountOut = numberResult.result[1];
308
- return { orderSize, amountOut };
309
- }
310
- function tradeCoinCall({
311
- target,
312
- direction,
313
- args: {
314
- recipient,
315
- orderSize,
316
- minAmountOut = 0n,
317
- sqrtPriceLimitX96 = 0n,
318
- tradeReferrer = _viem.zeroAddress
319
- }
320
- }) {
321
- return {
322
- abi: _protocoldeployments.coinABI,
323
- functionName: direction,
324
- address: target,
325
- args: [
326
- recipient,
327
- orderSize,
328
- minAmountOut,
329
- sqrtPriceLimitX96,
330
- tradeReferrer
331
- ],
332
- value: direction === "buy" ? orderSize : 0n
333
- };
334
- }
335
- function getTradeFromLogs(receipt, direction) {
336
- const eventLogs = _viem.parseEventLogs.call(void 0, {
337
- abi: _protocoldeployments.coinABI,
338
- logs: receipt.logs
339
- });
340
- if (direction === "buy") {
341
- return _optionalChain([eventLogs, 'access', _9 => _9.find, 'call', _10 => _10((log) => log.eventName === "CoinBuy"), 'optionalAccess', _11 => _11.args]);
342
- }
343
- return _optionalChain([eventLogs, 'access', _12 => _12.find, 'call', _13 => _13((log) => log.eventName === "CoinSell"), 'optionalAccess', _14 => _14.args]);
344
- }
345
- async function tradeCoin(params, walletClient, publicClient) {
346
- validateClientNetwork(publicClient);
347
- const { request } = await publicClient.simulateContract({
348
- ...tradeCoinCall(params),
349
- account: walletClient.account
350
- });
351
- const hash = await walletClient.writeContract(request);
352
- const receipt = await publicClient.waitForTransactionReceipt({ hash });
353
- const trade = getTradeFromLogs(receipt, params.direction);
354
- return {
355
- hash,
356
- receipt,
357
- trade
358
- };
359
- }
360
-
361
321
  // src/actions/getOnchainCoinDetails.ts
362
322
 
363
323
 
@@ -400,7 +360,7 @@ async function getOnchainCoinDetails({
400
360
  allowFailure: false
401
361
  }
402
362
  );
403
- const USDC_WETH_POOL = USDC_WETH_POOLS_BY_CHAIN[_optionalChain([publicClient, 'access', _15 => _15.chain, 'optionalAccess', _16 => _16.id]) || 0];
363
+ const USDC_WETH_POOL = USDC_WETH_POOLS_BY_CHAIN[_optionalChain([publicClient, 'access', _9 => _9.chain, 'optionalAccess', _10 => _10.id]) || 0];
404
364
  const [
405
365
  coinWethPoolSlot0,
406
366
  coinWethPoolToken0,
@@ -770,8 +730,5 @@ var getCoinsLastTradedUnique = (query = {}, options) => createExploreQuery(query
770
730
 
771
731
 
772
732
 
773
-
774
-
775
-
776
- exports.DeployCurrency = DeployCurrency; exports.cleanAndValidateMetadataURI = cleanAndValidateMetadataURI; exports.createCoin = createCoin; exports.createCoinCall = createCoinCall; exports.getCoin = getCoin2; exports.getCoinComments = getCoinComments2; exports.getCoinCreateFromLogs = getCoinCreateFromLogs; exports.getCoins = getCoins2; exports.getCoinsLastTraded = getCoinsLastTraded; exports.getCoinsLastTradedUnique = getCoinsLastTradedUnique; exports.getCoinsMostValuable = getCoinsMostValuable; exports.getCoinsNew = getCoinsNew; exports.getCoinsTopGainers = getCoinsTopGainers; exports.getCoinsTopVolume24h = getCoinsTopVolume24h; exports.getOnchainCoinDetails = getOnchainCoinDetails; exports.getProfile = getProfile2; exports.getProfileBalances = getProfileBalances2; exports.getProfileCoins = getProfileCoins2; exports.getTradeFromLogs = getTradeFromLogs; exports.setApiKey = setApiKey; exports.simulateBuy = simulateBuy; exports.tradeCoin = tradeCoin; exports.tradeCoinCall = tradeCoinCall; exports.updateCoinURI = updateCoinURI; exports.updateCoinURICall = updateCoinURICall; exports.updatePayoutRecipient = updatePayoutRecipient; exports.updatePayoutRecipientCall = updatePayoutRecipientCall; exports.validateMetadataJSON = validateMetadataJSON; exports.validateMetadataURIContent = validateMetadataURIContent;
733
+ exports.DeployCurrency = DeployCurrency; exports.InitialPurchaseCurrency = InitialPurchaseCurrency; exports.cleanAndValidateMetadataURI = cleanAndValidateMetadataURI; exports.createCoin = createCoin; exports.createCoinCall = createCoinCall; exports.getCoin = getCoin2; exports.getCoinComments = getCoinComments2; exports.getCoinCreateFromLogs = getCoinCreateFromLogs; exports.getCoins = getCoins2; exports.getCoinsLastTraded = getCoinsLastTraded; exports.getCoinsLastTradedUnique = getCoinsLastTradedUnique; exports.getCoinsMostValuable = getCoinsMostValuable; exports.getCoinsNew = getCoinsNew; exports.getCoinsTopGainers = getCoinsTopGainers; exports.getCoinsTopVolume24h = getCoinsTopVolume24h; exports.getOnchainCoinDetails = getOnchainCoinDetails; exports.getProfile = getProfile2; exports.getProfileBalances = getProfileBalances2; exports.getProfileCoins = getProfileCoins2; exports.setApiKey = setApiKey; exports.updateCoinURI = updateCoinURI; exports.updateCoinURICall = updateCoinURICall; exports.updatePayoutRecipient = updatePayoutRecipient; exports.updatePayoutRecipientCall = updatePayoutRecipientCall; exports.validateMetadataJSON = validateMetadataJSON; exports.validateMetadataURIContent = validateMetadataURIContent;
777
734
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/zora-protocol-private/zora-protocol-private/packages/coins-sdk/dist/index.cjs","../src/actions/createCoin.ts","../src/constants.ts","../src/utils/validateClientNetwork.ts","../src/metadata/cleanAndValidateMetadataURI.ts","../src/metadata/validateMetadataJSON.ts","../src/metadata/validateMetadataURIContent.ts","../src/utils/attribution.ts","../src/utils/poolConfigUtils.ts","../src/actions/tradeCoin.ts","../src/actions/getOnchainCoinDetails.ts","../src/actions/updateCoinURI.ts","../src/actions/updatePayoutRecipient.ts","../src/client/client.gen.ts","../src/client/sdk.gen.ts","../src/api/api-key.ts","../src/api/queries.ts","../src/api/explore.ts"],"names":["base","baseSepolia","DeployCurrency","zeroAddress","keccak256","parseEventLogs","coinABI","getCoin","getCoins","getCoinComments","getProfile","getProfileCoins","getProfileBalances"],"mappings":"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","file":"/home/runner/work/zora-protocol-private/zora-protocol-private/packages/coins-sdk/dist/index.cjs","sourcesContent":[null,"import { coinFactoryABI as zoraFactoryImplABI } from \"@zoralabs/protocol-deployments\";\nimport {\n Address,\n TransactionReceipt,\n WalletClient,\n SimulateContractParameters,\n ContractEventArgsFromTopics,\n parseEventLogs,\n zeroAddress,\n keccak256,\n toBytes,\n Hex,\n Account,\n} from \"viem\";\nimport { COIN_FACTORY_ADDRESS } from \"../constants\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\nimport { validateMetadataURIContent, ValidMetadataURI } from \"src/metadata\";\nimport { getAttribution } from \"../utils/attribution\";\nimport { base, baseSepolia } from \"viem/chains\";\nimport {\n COIN_ETH_PAIR_POOL_CONFIG,\n COIN_ZORA_PAIR_POOL_CONFIG,\n} from \"src/utils/poolConfigUtils\";\n\nexport type CoinDeploymentLogArgs = ContractEventArgsFromTopics<\n typeof zoraFactoryImplABI,\n \"CoinCreatedV4\"\n>;\n\nexport enum DeployCurrency {\n ZORA = 1,\n ETH = 2,\n}\n\nexport type CreateCoinArgs = {\n name: string;\n symbol: string;\n uri: ValidMetadataURI;\n chainId: number;\n owners?: Address[];\n payoutRecipient: Address;\n platformReferrer?: Address;\n currency?: DeployCurrency;\n};\n\nfunction getPoolConfig(currency: DeployCurrency, chainId: number) {\n if (currency === DeployCurrency.ZORA && chainId == baseSepolia.id) {\n throw new Error(\"ZORA is not supported on Base Sepolia\");\n }\n\n switch (currency) {\n case DeployCurrency.ZORA:\n return COIN_ZORA_PAIR_POOL_CONFIG[\n chainId as keyof typeof COIN_ZORA_PAIR_POOL_CONFIG\n ];\n case DeployCurrency.ETH:\n return COIN_ETH_PAIR_POOL_CONFIG[\n chainId as keyof typeof COIN_ETH_PAIR_POOL_CONFIG\n ];\n default:\n throw new Error(\"Invalid currency\");\n }\n}\n\nexport async function createCoinCall({\n name,\n symbol,\n uri,\n owners,\n payoutRecipient,\n currency,\n chainId = base.id,\n platformReferrer = \"0x0000000000000000000000000000000000000000\",\n}: CreateCoinArgs): Promise<\n SimulateContractParameters<typeof zoraFactoryImplABI, \"deploy\">\n> {\n if (!owners) {\n owners = [payoutRecipient];\n }\n\n if (!currency) {\n currency = chainId !== base.id ? DeployCurrency.ETH : DeployCurrency.ZORA;\n }\n\n const poolConfig = getPoolConfig(currency, chainId);\n\n // This will throw an error if the metadata is not valid\n await validateMetadataURIContent(uri);\n\n return {\n abi: zoraFactoryImplABI,\n functionName: \"deploy\",\n address: COIN_FACTORY_ADDRESS,\n args: [\n payoutRecipient,\n owners,\n uri,\n name,\n symbol,\n poolConfig,\n platformReferrer,\n zeroAddress, // hookAddress\n \"0x\" as Hex, // hookData\n keccak256(toBytes(Math.random().toString())), // coinSalt\n ],\n dataSuffix: getAttribution(),\n } as const;\n}\n\n/**\n * Gets the deployed coin address from transaction receipt logs\n * @param receipt Transaction receipt containing the CoinCreated event\n * @returns The deployment information if found\n */\nexport function getCoinCreateFromLogs(\n receipt: TransactionReceipt,\n): CoinDeploymentLogArgs | undefined {\n const eventLogs = parseEventLogs({\n abi: zoraFactoryImplABI,\n logs: receipt.logs,\n });\n\n return eventLogs.find((log) => log.eventName === \"CoinCreatedV4\")?.args;\n}\n\n// Update createCoin to return both receipt and coin address\nexport async function createCoin(\n call: CreateCoinArgs,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n options?: {\n gasMultiplier?: number;\n account?: Account | Address;\n },\n) {\n validateClientNetwork(publicClient);\n\n const createCoinRequest = await createCoinCall(call);\n const { request } = await publicClient.simulateContract({\n ...createCoinRequest,\n account: options?.account ?? walletClient.account,\n });\n\n // Add a 2/5th buffer on gas.\n if (request.gas) {\n // Gas limit multiplier is a percentage argument.\n request.gas = (request.gas * BigInt(options?.gasMultiplier ?? 100)) / 100n;\n }\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const deployment = getCoinCreateFromLogs(receipt);\n\n return {\n hash,\n receipt,\n address: deployment?.coin,\n deployment,\n };\n}\n","import { coinFactoryAddress as zoraFactoryImplAddress } from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\nimport { base } from \"viem/chains\";\n\n// this is the same across all chains due to deterministic deploys.\nexport const COIN_FACTORY_ADDRESS = zoraFactoryImplAddress[\"8453\"] as Address;\n\nexport const SUPERCHAIN_WETH_ADDRESS =\n \"0x4200000000000000000000000000000000000006\";\n\nexport const USDC_WETH_POOLS_BY_CHAIN: Record<number, Address> = {\n [base.id]: \"0xd0b53D9277642d899DF5C87A3966A349A798F224\",\n};\n","import { PublicClient } from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\n\nexport const validateClientNetwork = (\n publicClient: PublicClient<any, any, any, any>,\n) => {\n const clientChainId = publicClient?.chain?.id;\n if (clientChainId === base.id) {\n return;\n }\n if (clientChainId === baseSepolia.id) {\n return;\n }\n\n throw new Error(\n \"Client network needs to be base or baseSepolia for current coin deployments.\",\n );\n};\n","export type ValidMetadataURI =\n | `ipfs://${string}`\n | `ar://${string}`\n | `data:${string}`\n | `https://${string}`;\n\n/**\n * Clean the metadata URI to HTTPS format\n * @param metadataURI - The metadata URI to clean from IPFS or Arweave\n * @returns The cleaned metadata URI\n * @throws If the metadata URI is a data URI\n */\nexport function cleanAndValidateMetadataURI(uri: ValidMetadataURI) {\n if (uri.startsWith(\"ipfs://\")) {\n return uri.replace(\n \"ipfs://\",\n \"https://magic.decentralized-content.com/ipfs/\",\n );\n }\n if (uri.startsWith(\"ar://\")) {\n return uri.replace(\"ar://\", \"http://arweave.net/\");\n }\n if (uri.startsWith(\"data:\")) {\n return uri;\n // throw new Error(\"Data URIs are not supported\");\n }\n if (uri.startsWith(\"http://\") || uri.startsWith(\"https://\")) {\n return uri;\n }\n\n throw new Error(\"Invalid metadata URI\");\n}\n","export type ValidMetadataJSON = {\n name: string;\n description: string;\n image: string;\n animation_url?: string;\n content?: { uri: string; mime?: string };\n};\n\nfunction validateURIString(uri: unknown) {\n if (typeof uri !== \"string\") {\n throw new Error(\"URI must be a string\");\n }\n if (uri.startsWith(\"ipfs://\")) {\n return true;\n }\n if (uri.startsWith(\"ar://\")) {\n return true;\n }\n if (uri.startsWith(\"https://\")) {\n return true;\n }\n if (uri.startsWith(\"data:\")) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Validate the metadata JSON object\n * @param metadata - The metadata object to validate\n */\nexport function validateMetadataJSON(metadata: ValidMetadataJSON | unknown) {\n if (typeof metadata !== \"object\" || !metadata) {\n throw new Error(\"Metadata must be an object and exist\");\n }\n if (typeof (metadata as { name: unknown }).name !== \"string\") {\n throw new Error(\"Metadata name is required and must be a string\");\n }\n if (typeof (metadata as { description: unknown }).description !== \"string\") {\n throw new Error(\"Metadata description is required and must be a string\");\n }\n if (typeof (metadata as { image: unknown }).image === \"string\") {\n if (!validateURIString((metadata as { image: string }).image)) {\n throw new Error(\"Metadata image is not a valid URI\");\n }\n } else {\n throw new Error(\"Metadata image is required and must be a string\");\n }\n if (\"animation_url\" in metadata) {\n if (\n typeof (metadata as { animation_url?: unknown }).animation_url !==\n \"string\"\n ) {\n throw new Error(\"Metadata animation_url, if provided, must be a string\");\n }\n if (!validateURIString(metadata.animation_url)) {\n throw new Error(\"Metadata animation_url is not a valid URI\");\n }\n }\n const content =\n \"content\" in metadata && (metadata as { content?: unknown }).content;\n if (content) {\n if (typeof (content as { uri?: unknown }).uri !== \"string\") {\n throw new Error(\"If provided, content.uri must be a string\");\n }\n if (!validateURIString((content as { uri: string }).uri)) {\n throw new Error(\"If provided, content.uri must be a valid URI string\");\n }\n if (typeof (content as { mime?: unknown }).mime !== \"string\") {\n throw new Error(\"If provided, content.mime must be a string\");\n }\n }\n\n return true;\n}\n","import {\n cleanAndValidateMetadataURI,\n ValidMetadataURI,\n} from \"./cleanAndValidateMetadataURI\";\nimport { validateMetadataJSON } from \"./validateMetadataJSON\";\n\n/**\n * Validate the metadata URI Content\n * @param metadataURI - The metadata URI to validate\n * @returns true if the metadata is valid, throws an error otherwise\n */\nexport async function validateMetadataURIContent(\n metadataURI: ValidMetadataURI,\n) {\n const cleanedURI = cleanAndValidateMetadataURI(metadataURI);\n const response = await fetch(cleanedURI);\n if (!response.ok) {\n throw new Error(\"Metadata fetch failed\");\n }\n if (\n ![\"application/json\", \"text/plain\"].includes(\n response.headers.get(\"content-type\") ?? \"\",\n )\n ) {\n throw new Error(\"Metadata is not a valid JSON or plain text response type\");\n }\n const metadataJson = await response.json();\n return validateMetadataJSON(metadataJson);\n}\n","import { Hex, keccak256, slice, toHex } from \"viem\";\n\nexport function getAttribution(): Hex {\n const hash = keccak256(toHex(\"api-sdk.zora.engineering\"));\n return slice(hash, 0, 4) as Hex;\n}\n","import { encodeMultiCurvePoolConfig } from \"@zoralabs/protocol-deployments\";\nimport { parseUnits, zeroAddress } from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\n\nconst ZORA_DECIMALS = 18;\n\n/**\n * =========================\n * COIN_ETH_PAIR_POOL_CONFIG\n * =========================\n */\n\nexport const ZORA_ADDRESS = \"0x1111111111166b7fe7bd91427724b487980afc69\";\n\nconst COIN_ETH_PAIR_LOWER_TICK = -250000;\nconst COIN_ETH_PAIR_UPPER_TICK = -195_000;\nconst COIN_ETH_PAIR_NUM_DISCOVERY_POSITIONS = 11;\nconst COIN_ETH_PAIR_MAX_DISCOVERY_SUPPLY_SHARE = parseUnits(\"0.05\", 18);\n\nexport const COIN_ETH_PAIR_POOL_CONFIG = {\n [base.id]: encodeMultiCurvePoolConfig({\n currency: zeroAddress,\n tickLower: [COIN_ETH_PAIR_LOWER_TICK],\n tickUpper: [COIN_ETH_PAIR_UPPER_TICK],\n numDiscoveryPositions: [COIN_ETH_PAIR_NUM_DISCOVERY_POSITIONS],\n maxDiscoverySupplyShare: [COIN_ETH_PAIR_MAX_DISCOVERY_SUPPLY_SHARE],\n }),\n [baseSepolia.id]: encodeMultiCurvePoolConfig({\n currency: zeroAddress,\n tickLower: [COIN_ETH_PAIR_LOWER_TICK],\n tickUpper: [COIN_ETH_PAIR_UPPER_TICK],\n numDiscoveryPositions: [COIN_ETH_PAIR_NUM_DISCOVERY_POSITIONS],\n maxDiscoverySupplyShare: [COIN_ETH_PAIR_MAX_DISCOVERY_SUPPLY_SHARE],\n }),\n};\n\nconst COIN_ZORA_PAIR_LOWER_TICK = -138_000; // ( -250000 in ETH land ~= $23 = -138_000 in Zora token land at .022)\nconst COIN_ZORA_PAIR_UPPER_TICK = -81_000; // (-195_000 ~= 5782 = -81_000 in Zora token land at .022)\nconst COIN_ZORA_PAIR_NUM_DISCOVERY_POSITIONS = 11;\nconst COIN_ZORA_PAIR_MAX_DISCOVERY_SUPPLY_SHARE = parseUnits(\n \"0.05\",\n ZORA_DECIMALS,\n);\n\nexport const COIN_ZORA_PAIR_POOL_CONFIG = {\n [base.id]: encodeMultiCurvePoolConfig({\n currency: ZORA_ADDRESS,\n tickLower: [COIN_ZORA_PAIR_LOWER_TICK],\n tickUpper: [COIN_ZORA_PAIR_UPPER_TICK],\n numDiscoveryPositions: [COIN_ZORA_PAIR_NUM_DISCOVERY_POSITIONS],\n maxDiscoverySupplyShare: [COIN_ZORA_PAIR_MAX_DISCOVERY_SUPPLY_SHARE],\n }),\n};\n","import { coinABI } from \"@zoralabs/protocol-deployments\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n TransactionReceipt,\n WalletClient,\n SimulateContractParameters,\n parseEther,\n zeroAddress,\n ContractEventArgsFromTopics,\n parseEventLogs,\n} from \"viem\";\nimport { baseSepolia } from \"viem/chains\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\nimport { getAttribution } from \"../utils/attribution\";\n// Define trade event args type\n\nexport type SellEventArgs = ContractEventArgsFromTopics<\n typeof coinABI,\n \"CoinSell\"\n>;\nexport type BuyEventArgs = ContractEventArgsFromTopics<\n typeof coinABI,\n \"CoinBuy\"\n>;\n\nexport type TradeEventArgs = SellEventArgs | BuyEventArgs;\n\n// We'll use this address to ensure it will have funds to simulate an eth trade.\n// @dev: This only works on OP chains and is a fix for a bug. Another approach should be taken long term.\nconst OP_BRIDGE_ADDRESS =\n \"0x4200000000000000000000000000000000000016\" as Address;\n\n/**\n * Simulates a buy order to get the expected output amount\n * @param {Object} params - The simulation parameters\n * @param {Address} params.target - The target coin contract address\n * @param {bigint} params.requestedOrderSize - The desired input amount for the buy\n * @param {PublicClient} params.publicClient - The viem public client instance\n * @returns {Promise<{orderSize: bigint, amountOut: bigint}>} The simulated order size and output amount\n */\nexport async function simulateBuy({\n target,\n requestedOrderSize,\n publicClient,\n}: {\n target: Address;\n requestedOrderSize: bigint;\n publicClient: GenericPublicClient;\n}): Promise<{ orderSize: bigint; amountOut: bigint }> {\n const numberResult = await publicClient.simulateContract({\n address: target,\n abi: coinABI,\n functionName: \"buy\",\n dataSuffix: getAttribution(),\n args: [\n OP_BRIDGE_ADDRESS,\n requestedOrderSize,\n 0n, // minAmountOut\n 0n, // sqrtPriceLimitX96\n zeroAddress, // tradeReferrer\n ],\n // We want to ensure that the multicall3 contract has enough ETH to buy in the simulation\n stateOverride: [\n {\n address: baseSepolia.contracts.multicall3.address,\n balance: parseEther(\"10000000\"),\n },\n ],\n });\n const orderSize = numberResult.result[0];\n const amountOut = numberResult.result[1];\n return { orderSize, amountOut };\n}\n\n/**\n * Parameters for creating a trade call\n * @typedef {Object} TradeParams\n * @property {'sell' | 'buy'} direction - The trade direction\n * @property {Address} target - The target coin contract address\n * @property {Object} args - The trade arguments\n * @property {Address} args.recipient - The recipient of the trade output\n * @property {bigint} args.orderSize - The size of the order\n * @property {bigint} [args.minAmountOut] - The minimum amount to receive\n * @property {bigint} [args.sqrtPriceLimitX96] - The price limit for the trade\n * @property {Address} [args.tradeReferrer] - The referrer address for the trade\n */\nexport type TradeParams = {\n direction: \"sell\" | \"buy\";\n target: Address;\n args: {\n recipient: Address;\n orderSize: bigint;\n minAmountOut?: bigint;\n sqrtPriceLimitX96?: bigint;\n tradeReferrer?: Address;\n };\n};\n\n/**\n * Creates a trade call parameters object for buy or sell\n * @param {TradeParams} params - The trade parameters\n * @returns {SimulateContractParameters} The contract call parameters\n */\nexport function tradeCoinCall({\n target,\n direction,\n args: {\n recipient,\n orderSize,\n minAmountOut = 0n,\n sqrtPriceLimitX96 = 0n,\n tradeReferrer = zeroAddress,\n },\n}: TradeParams): SimulateContractParameters {\n return {\n abi: coinABI,\n functionName: direction,\n address: target,\n args: [\n recipient,\n orderSize,\n minAmountOut,\n sqrtPriceLimitX96,\n tradeReferrer,\n ],\n value: direction === \"buy\" ? orderSize : 0n,\n } as const;\n}\n\n/**\n * Gets the trade event from transaction receipt logs\n * @param {TransactionReceipt} receipt - The transaction receipt containing the logs\n * @param {'buy' | 'sell'} direction - The direction of the trade\n * @returns {TradeEventArgs | undefined} The decoded trade event args if found\n */\nexport function getTradeFromLogs(\n receipt: TransactionReceipt,\n direction: \"buy\" | \"sell\",\n): TradeEventArgs | undefined {\n const eventLogs = parseEventLogs({\n abi: coinABI,\n logs: receipt.logs,\n });\n\n if (direction === \"buy\") {\n return eventLogs.find((log) => log.eventName === \"CoinBuy\")?.args;\n }\n return eventLogs.find((log) => log.eventName === \"CoinSell\")?.args;\n}\n\n/**\n * Executes a trade transaction\n * @param {TradeParams} params - The trade parameters\n * @param {PublicClient} publicClient - The viem public client instance\n * @param {WalletClient} walletClient - The viem wallet client instance\n * @returns {Promise<{\n * hash: `0x${string}`,\n * receipt: TransactionReceipt,\n * trade: TradeEventArgs | undefined\n * }>} The transaction result with trade details\n */\nexport async function tradeCoin(\n params: TradeParams,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n) {\n validateClientNetwork(publicClient);\n const { request } = await publicClient.simulateContract({\n ...tradeCoinCall(params),\n account: walletClient.account,\n });\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const trade = getTradeFromLogs(receipt, params.direction);\n\n return {\n hash,\n receipt,\n trade,\n };\n}\n","import { coinABI, iUniswapV3PoolABI } from \"@zoralabs/protocol-deployments\";\nimport {\n SUPERCHAIN_WETH_ADDRESS,\n USDC_WETH_POOLS_BY_CHAIN,\n} from \"../constants\";\nimport { GenericPublicClient } from \"../utils/genericPublicClient\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n erc20Abi,\n formatEther,\n isAddressEqual,\n zeroAddress,\n} from \"viem\";\n\ntype Slot0Result = {\n sqrtPriceX96: bigint;\n tick: number;\n observationIndex: number;\n observationCardinality: number;\n observationCardinalityNext: number;\n feeProtocol: number;\n unlocked: boolean;\n};\n\ntype PricingResult = {\n eth: bigint;\n usdc: bigint | null;\n usdcDecimal: number | null;\n ethDecimal: number;\n};\n\n/**\n * Represents the current state of a coin\n * @typedef {Object} OnchainCoinDetails\n * @property {bigint} balance - The user's balance of the coin\n * @property {PricingResult} marketCap - The market cap of the coin\n * @property {PricingResult} liquidity - The liquidity of the coin\n * @property {Address} pool - Pool address\n * @property {Slot0Result} poolState - Current state of the UniswapV3 pool\n * @property {Address[]} owners - List of owners for the coin\n * @property {Address} payoutRecipient - The payout recipient address\n */\nexport type OnchainCoinDetails = {\n balance: bigint;\n marketCap: PricingResult;\n liquidity: PricingResult;\n pool: Address;\n poolState: Slot0Result;\n owners: readonly Address[];\n payoutRecipient: Address;\n};\n\n/**\n * Gets the current state of a coin for a user\n * @param {Object} params - The query parameters\n * @param {Address} params.coin - The coin contract address\n * @param {Address} params.user - The user address to check balance for\n * @param {PublicClient} params.publicClient - The viem public client instance\n * @returns {Promise<OnchainCoinDetails>} The coin's current state\n */\nexport async function getOnchainCoinDetails({\n coin,\n user = zeroAddress,\n publicClient,\n}: {\n coin: Address;\n user?: Address;\n publicClient: GenericPublicClient;\n}): Promise<OnchainCoinDetails> {\n validateClientNetwork(publicClient);\n const [balance, pool, owners, payoutRecipient] = await publicClient.multicall(\n {\n contracts: [\n {\n address: coin,\n abi: coinABI,\n functionName: \"balanceOf\",\n args: [user],\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"poolAddress\",\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"owners\",\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"payoutRecipient\",\n },\n ],\n allowFailure: false,\n },\n );\n\n const USDC_WETH_POOL = USDC_WETH_POOLS_BY_CHAIN[publicClient.chain?.id || 0];\n\n const [\n coinWethPoolSlot0,\n coinWethPoolToken0,\n coinReservesRaw,\n coinTotalSupply,\n wethReservesRaw,\n usdcWethSlot0,\n ] = await publicClient.multicall({\n contracts: [\n {\n address: pool,\n abi: iUniswapV3PoolABI,\n functionName: \"slot0\",\n },\n {\n address: pool,\n abi: iUniswapV3PoolABI,\n functionName: \"token0\",\n },\n {\n address: coin,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [pool],\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"totalSupply\",\n },\n {\n address: SUPERCHAIN_WETH_ADDRESS,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [pool],\n },\n {\n address: USDC_WETH_POOL ?? coin,\n abi: iUniswapV3PoolABI,\n functionName: \"slot0\",\n },\n ],\n allowFailure: false,\n });\n\n const wethPriceInUsdc = USDC_WETH_POOL\n ? uniswapV3SqrtPriceToBigIntScaled(\n usdcWethSlot0.sqrtPriceX96,\n 18,\n 6,\n true,\n 18,\n )\n : null;\n\n const coinPriceInWeth = uniswapV3SqrtPriceToBigIntScaled(\n coinWethPoolSlot0.sqrtPriceX96,\n 18,\n 18,\n isAddressEqual(coinWethPoolToken0, coin),\n 18,\n );\n\n // Divide by 10^18 to remove percision from `coinPriceInWeth` after math since bigint is decimal.\n const marketCap = (coinPriceInWeth * coinTotalSupply) / 10n ** 18n;\n\n const wethLiquidity = wethReservesRaw;\n // Divide by 10^18 to remove percision from `coinPriceInWeth` after math since bigint is decimal.\n const tokenLiquidity = (coinReservesRaw * coinPriceInWeth) / 10n ** 18n;\n\n return {\n balance,\n pool,\n owners,\n payoutRecipient,\n marketCap: convertEthOutput(marketCap, wethPriceInUsdc),\n liquidity: convertEthOutput(\n wethLiquidity + tokenLiquidity,\n wethPriceInUsdc,\n ),\n poolState: coinWethPoolSlot0,\n };\n}\n\nfunction convertEthOutput(amountETH: bigint, wethToUsdc: bigint | null) {\n return {\n eth: amountETH,\n ethDecimal: parseFloat(formatEther(amountETH)),\n usdc: wethToUsdc ? amountETH * wethToUsdc : null,\n usdcDecimal: wethToUsdc\n ? parseFloat(formatEther((amountETH * wethToUsdc) / 10n ** 18n))\n : null,\n };\n}\n\nfunction uniswapV3SqrtPriceToBigIntScaled(\n sqrtPriceX96: bigint,\n token0Decimals: number,\n token1Decimals: number,\n isToken0Coin: boolean,\n scaleDecimals: number = 18,\n): bigint {\n // (sqrtPrice^2 / 2^192) => ratio\n // We'll do: ratioScaled = (sqrtPrice^2 * 10^scaleDecimals) / 2^192\n const numerator = sqrtPriceX96 * sqrtPriceX96;\n const denominator = 2n ** 192n;\n const scaleFactor = 10n ** BigInt(scaleDecimals);\n\n // raw ratioScaled\n let ratioScaled = (numerator * scaleFactor) / denominator; // BigInt\n\n // Adjust for difference in decimals:\n // ratioScaled *= 10^(dec0 - dec1)\n const decimalsDiff = BigInt(token0Decimals - token1Decimals);\n if (decimalsDiff > 0n) {\n ratioScaled *= 10n ** decimalsDiff;\n } else if (decimalsDiff < 0n) {\n ratioScaled /= 10n ** -decimalsDiff;\n }\n\n if (!isToken0Coin) {\n // We want the reciprocal: coin is token1 => coinPriceInToken0 = 1 / ratio\n // But we also want it scaled by 10^scaleDecimals\n // reciprocalScaled = (10^scaleDecimals * 10^(decimalsDiff)) / ratioScaled\n // (assuming ratioScaled != 0)\n if (ratioScaled === 0n) {\n return 0n; // or some huge number representing infinity\n }\n ratioScaled = (scaleFactor * scaleFactor) / ratioScaled;\n // or if we already included decimalsDiff above, handle carefully.\n }\n\n return ratioScaled;\n}\n","import { coinABI } from \"@zoralabs/protocol-deployments\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\nimport { getAttribution } from \"../utils/attribution\";\n\nexport type UpdateCoinURIArgs = {\n coin: Address;\n newURI: string;\n};\n\nexport function updateCoinURICall({\n newURI,\n coin,\n}: UpdateCoinURIArgs): SimulateContractParameters {\n if (!newURI.startsWith(\"ipfs://\")) {\n throw new Error(\"URI needs to be an ipfs:// prefix uri\");\n }\n\n return {\n abi: coinABI,\n address: coin,\n functionName: \"setContractURI\",\n args: [newURI],\n dataSuffix: getAttribution(),\n };\n}\n\nexport async function updateCoinURI(\n args: UpdateCoinURIArgs,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n) {\n validateClientNetwork(publicClient);\n const call = updateCoinURICall(args);\n const { request } = await publicClient.simulateContract({\n ...call,\n account: walletClient.account!,\n });\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const eventLogs = parseEventLogs({ abi: coinABI, logs: receipt.logs });\n const uriUpdated = eventLogs.find(\n (log) => log.eventName === \"ContractURIUpdated\",\n );\n\n return { hash, receipt, uriUpdated };\n}\n","import { coinABI } from \"@zoralabs/protocol-deployments\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\nimport { getAttribution } from \"../utils/attribution\";\n\nexport type UpdatePayoutRecipientArgs = {\n coin: Address;\n newPayoutRecipient: string;\n};\n\nexport function updatePayoutRecipientCall({\n newPayoutRecipient,\n coin,\n}: UpdatePayoutRecipientArgs): SimulateContractParameters {\n return {\n abi: coinABI,\n address: coin,\n functionName: \"setPayoutRecipient\",\n args: [newPayoutRecipient],\n dataSuffix: getAttribution(),\n };\n}\n\nexport async function updatePayoutRecipient(\n args: UpdatePayoutRecipientArgs,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n) {\n validateClientNetwork(publicClient);\n const call = updatePayoutRecipientCall(args);\n const { request } = await publicClient.simulateContract({\n ...call,\n account: walletClient.account!,\n });\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const eventLogs = parseEventLogs({ abi: coinABI, logs: receipt.logs });\n const payoutRecipientUpdated = eventLogs.find(\n (log) => log.eventName === \"CoinPayoutRecipientUpdated\",\n );\n\n return { hash, receipt, payoutRecipientUpdated };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ClientOptions } from \"./types.gen\";\nimport {\n type Config,\n type ClientOptions as DefaultClientOptions,\n createClient,\n createConfig,\n} from \"@hey-api/client-fetch\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends DefaultClientOptions = ClientOptions> =\n (\n override?: Config<DefaultClientOptions & T>,\n ) => Config<Required<DefaultClientOptions> & T>;\n\nexport const client = createClient(\n createConfig<ClientOptions>({\n baseUrl: \"https://api-sdk.zora.engineering/\",\n }),\n);\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n Options as ClientOptions,\n TDataShape,\n Client,\n} from \"@hey-api/client-fetch\";\nimport type {\n GetApiKeyData,\n GetApiKeyResponse,\n GetCoinData,\n GetCoinResponse,\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinsData,\n GetCoinsResponse,\n SetCreateUploadJwtData,\n SetCreateUploadJwtResponse,\n GetExploreData,\n GetExploreResponse,\n GetProfileData,\n GetProfileResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\n GetProfileCoinsData,\n GetProfileCoinsResponse,\n} from \"./types.gen\";\nimport { client as _heyApiClient } from \"./client.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n> = ClientOptions<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * zoraSDK_apiKey query\n */\nexport const getApiKey = <ThrowOnError extends boolean = false>(\n options: Options<GetApiKeyData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetApiKeyResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/apiKey\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_coin query\n */\nexport const getCoin = <ThrowOnError extends boolean = false>(\n options: Options<GetCoinData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetCoinResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/coin\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_coinComments query\n */\nexport const getCoinComments = <ThrowOnError extends boolean = false>(\n options: Options<GetCoinCommentsData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetCoinCommentsResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/coinComments\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_coins query\n */\nexport const getCoins = <ThrowOnError extends boolean = false>(\n options: Options<GetCoinsData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetCoinsResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/coins\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_createUploadJWT mutation\n */\nexport const setCreateUploadJwt = <ThrowOnError extends boolean = false>(\n options?: Options<SetCreateUploadJwtData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).post<\n SetCreateUploadJwtResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/createUploadJWT\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * zoraSDK_explore query\n */\nexport const getExplore = <ThrowOnError extends boolean = false>(\n options: Options<GetExploreData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetExploreResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/explore\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_profile query\n */\nexport const getProfile = <ThrowOnError extends boolean = false>(\n options: Options<GetProfileData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetProfileResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/profile\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_profileBalances query\n */\nexport const getProfileBalances = <ThrowOnError extends boolean = false>(\n options: Options<GetProfileBalancesData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetProfileBalancesResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/profileBalances\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_profileCoins query\n */\nexport const getProfileCoins = <ThrowOnError extends boolean = false>(\n options: Options<GetProfileCoinsData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetProfileCoinsResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/profileCoins\",\n ...options,\n });\n};\n","let apiKey: string | undefined;\nexport function setApiKey(key: string) {\n apiKey = key;\n}\n\nexport function getApiKeyMeta() {\n if (!apiKey) {\n return {};\n }\n return {\n headers: {\n \"api-key\": apiKey,\n },\n };\n}\n","import {\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinData,\n GetCoinResponse,\n GetCoinsData,\n GetCoinsResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\n GetProfileCoinsData,\n GetProfileCoinsResponse,\n GetProfileData,\n GetProfileResponse,\n} from \"../client/types.gen\";\nimport {\n getCoin as getCoinSDK,\n getCoins as getCoinsSDK,\n getCoinComments as getCoinCommentsSDK,\n getProfile as getProfileSDK,\n getProfileBalances as getProfileBalancesSDK,\n getProfileCoins as getProfileCoinsSDK,\n} from \"../client/sdk.gen\";\nimport { getApiKeyMeta } from \"./api-key\";\nimport { RequestOptionsType } from \"./query-types\";\nimport { RequestResult } from \"@hey-api/client-fetch\";\n\nexport type { RequestResult };\n\ntype GetCoinQuery = GetCoinData[\"query\"];\nexport type { GetCoinQuery, GetCoinData };\nexport type { GetCoinResponse } from \"../client/types.gen\";\n\nexport type CoinData = NonNullable<GetCoinResponse[\"zora20Token\"]>;\n\nexport const getCoin = async (\n query: GetCoinQuery,\n options?: RequestOptionsType<GetCoinData>,\n): Promise<RequestResult<GetCoinResponse>> => {\n return await getCoinSDK({\n ...options,\n query,\n ...getApiKeyMeta(),\n });\n};\n\ntype GetCoinsQuery = GetCoinsData[\"query\"];\nexport type { GetCoinsQuery, GetCoinsData };\nexport type { GetCoinsResponse } from \"../client/types.gen\";\n\nexport const getCoins = async (\n query: GetCoinsQuery,\n options?: RequestOptionsType<GetCoinsData>,\n): Promise<RequestResult<GetCoinsResponse>> => {\n return await getCoinsSDK({\n query: {\n coins: query.coins.map((coinData) => JSON.stringify(coinData)) as any,\n },\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetCoinCommentsQuery = GetCoinCommentsData[\"query\"];\nexport type { GetCoinCommentsQuery, GetCoinCommentsData };\nexport type { GetCoinCommentsResponse } from \"../client/types.gen\";\n\nexport const getCoinComments = async (\n query: GetCoinCommentsQuery,\n options?: RequestOptionsType<GetCoinCommentsData>,\n): Promise<RequestResult<GetCoinCommentsResponse>> => {\n return await getCoinCommentsSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetProfileQuery = GetProfileData[\"query\"];\nexport type { GetProfileQuery, GetProfileData };\nexport type { GetProfileResponse } from \"../client/types.gen\";\n\nexport const getProfile = async (\n query: GetProfileQuery,\n options?: RequestOptionsType<GetProfileData>,\n): Promise<RequestResult<GetProfileResponse>> => {\n return await getProfileSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetProfileCoinsQuery = GetProfileCoinsData[\"query\"];\nexport type { GetProfileCoinsQuery, GetProfileCoinsData };\nexport type { GetProfileCoinsResponse } from \"../client/types.gen\";\n\nexport const getProfileCoins = async (\n query: GetProfileCoinsQuery,\n options?: RequestOptionsType<GetProfileCoinsData>,\n): Promise<RequestResult<GetProfileCoinsResponse>> => {\n return await getProfileCoinsSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetProfileBalancesQuery = GetProfileBalancesData[\"query\"];\nexport type { GetProfileBalancesQuery, GetProfileBalancesData };\nexport type { GetProfileBalancesResponse } from \"../client/types.gen\";\n\nexport const getProfileBalances = async (\n query: GetProfileBalancesQuery,\n options?: RequestOptionsType<GetProfileBalancesData>,\n): Promise<RequestResult<GetProfileBalancesResponse>> => {\n return await getProfileBalancesSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n","import { getExplore as getExploreSDK } from \"../client/sdk.gen\";\nimport type { GetExploreData, GetExploreResponse } from \"../client/types.gen\";\nimport { getApiKeyMeta } from \"./api-key\";\nimport { RequestOptionsType } from \"./query-types\";\n\n/**\n * The inner type for the explore queries that omits listType.\n * This is used to create the query object for the explore queries.\n */\nexport type QueryRequestType = Omit<GetExploreData[\"query\"], \"listType\">;\n\ntype ExploreResponse = { data?: GetExploreResponse };\n\nexport type ListType = GetExploreData[\"query\"][\"listType\"];\n\nexport type { ExploreResponse };\n\nexport type { GetExploreData };\n\n/**\n * Creates an explore query with the specified list type\n */\nconst createExploreQuery = (\n query: QueryRequestType,\n listType: ListType,\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n getExploreSDK({\n ...options,\n query: { ...query, listType },\n ...getApiKeyMeta(),\n });\n\n/** Get top gaining coins */\nexport const getCoinsTopGainers = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"TOP_GAINERS\", options);\n\n/** Get coins with highest 24h volume */\nexport const getCoinsTopVolume24h = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"TOP_VOLUME_24H\", options);\n\n/** Get most valuable coins */\nexport const getCoinsMostValuable = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"MOST_VALUABLE\", options);\n\n/** Get newly created coins */\nexport const getCoinsNew = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> => createExploreQuery(query, \"NEW\", options);\n\n/** Get recently traded coins */\nexport const getCoinsLastTraded = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"LAST_TRADED\", options);\n\n/** Get recently traded unique coins */\nexport const getCoinsLastTradedUnique = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"LAST_TRADED_UNIQUE\", options);\n"]}
1
+ {"version":3,"sources":["/home/runner/work/zora-protocol-private/zora-protocol-private/packages/coins-sdk/dist/index.cjs","../src/actions/createCoin.ts","../src/constants.ts","../src/utils/validateClientNetwork.ts","../src/metadata/cleanAndValidateMetadataURI.ts","../src/metadata/validateMetadataJSON.ts","../src/metadata/validateMetadataURIContent.ts","../src/utils/attribution.ts","../src/utils/poolConfigUtils.ts","../src/utils/getPrepurchaseHook.ts","../src/actions/getOnchainCoinDetails.ts","../src/actions/updateCoinURI.ts","../src/actions/updatePayoutRecipient.ts","../src/client/client.gen.ts","../src/client/sdk.gen.ts","../src/api/api-key.ts","../src/api/queries.ts","../src/api/explore.ts"],"names":["base","baseSepolia","toHex","DeployCurrency","InitialPurchaseCurrency","zeroAddress","keccak256","coinABI","parseEventLogs","getCoin","getCoins","getCoinComments","getProfile","getProfileCoins","getProfileBalances"],"mappings":"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","file":"/home/runner/work/zora-protocol-private/zora-protocol-private/packages/coins-sdk/dist/index.cjs","sourcesContent":[null,"import { coinFactoryABI as zoraFactoryImplABI } from \"@zoralabs/protocol-deployments\";\nimport {\n Address,\n TransactionReceipt,\n WalletClient,\n SimulateContractParameters,\n ContractEventArgsFromTopics,\n parseEventLogs,\n zeroAddress,\n keccak256,\n toBytes,\n Hex,\n Account,\n} from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\nimport { COIN_FACTORY_ADDRESS } from \"../constants\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport { GenericPublicClient } from \"../utils/genericPublicClient\";\nimport { validateMetadataURIContent, ValidMetadataURI } from \"../metadata\";\nimport { getAttribution } from \"../utils/attribution\";\nimport {\n COIN_ETH_PAIR_POOL_CONFIG,\n COIN_ZORA_PAIR_POOL_CONFIG,\n} from \"../utils/poolConfigUtils\";\nimport { getPrepurchaseHook } from \"../utils/getPrepurchaseHook\";\n\nexport type CoinDeploymentLogArgs = ContractEventArgsFromTopics<\n typeof zoraFactoryImplABI,\n \"CoinCreatedV4\"\n>;\n\nexport enum DeployCurrency {\n ZORA = 1,\n ETH = 2,\n}\n\nexport enum InitialPurchaseCurrency {\n ETH = 1,\n // TODO: Add USDC and ZORA support with signature approvals\n}\n\nexport type CreateCoinArgs = {\n name: string;\n symbol: string;\n uri: ValidMetadataURI;\n chainId?: number;\n owners?: Address[];\n payoutRecipient: Address;\n platformReferrer?: Address;\n currency?: DeployCurrency;\n initialPurchase?: {\n currency: InitialPurchaseCurrency;\n amount: bigint;\n };\n};\n\nfunction getPoolConfig(currency: DeployCurrency, chainId: number) {\n if (currency === DeployCurrency.ZORA && chainId == baseSepolia.id) {\n throw new Error(\"ZORA is not supported on Base Sepolia\");\n }\n\n switch (currency) {\n case DeployCurrency.ZORA:\n return COIN_ZORA_PAIR_POOL_CONFIG[\n chainId as keyof typeof COIN_ZORA_PAIR_POOL_CONFIG\n ];\n case DeployCurrency.ETH:\n return COIN_ETH_PAIR_POOL_CONFIG[\n chainId as keyof typeof COIN_ETH_PAIR_POOL_CONFIG\n ];\n default:\n throw new Error(\"Invalid currency\");\n }\n}\n\nexport async function createCoinCall({\n name,\n symbol,\n uri,\n owners,\n payoutRecipient,\n currency,\n chainId = base.id,\n platformReferrer = \"0x0000000000000000000000000000000000000000\",\n initialPurchase,\n}: CreateCoinArgs): Promise<\n SimulateContractParameters<typeof zoraFactoryImplABI, \"deploy\">\n> {\n if (!owners) {\n owners = [payoutRecipient];\n }\n\n if (!currency) {\n currency = chainId !== base.id ? DeployCurrency.ETH : DeployCurrency.ZORA;\n }\n\n const poolConfig = getPoolConfig(currency, chainId);\n\n // This will throw an error if the metadata is not valid\n await validateMetadataURIContent(uri);\n\n let deployHook = {\n hook: zeroAddress as Address,\n hookData: \"0x\" as Hex,\n value: 0n,\n };\n if (initialPurchase) {\n deployHook = await getPrepurchaseHook({\n initialPurchase,\n payoutRecipient,\n chainId,\n });\n }\n\n return {\n abi: zoraFactoryImplABI,\n functionName: \"deploy\",\n address: COIN_FACTORY_ADDRESS,\n args: [\n payoutRecipient,\n owners,\n uri,\n name,\n symbol,\n poolConfig,\n platformReferrer,\n deployHook.hook,\n deployHook.hookData,\n keccak256(toBytes(Math.random().toString())), // coinSalt\n ],\n value: deployHook.value,\n dataSuffix: getAttribution(),\n } as const;\n}\n\n/**\n * Gets the deployed coin address from transaction receipt logs\n * @param receipt Transaction receipt containing the CoinCreated event\n * @returns The deployment information if found\n */\nexport function getCoinCreateFromLogs(\n receipt: TransactionReceipt,\n): CoinDeploymentLogArgs | undefined {\n const eventLogs = parseEventLogs({\n abi: zoraFactoryImplABI,\n logs: receipt.logs,\n });\n\n return eventLogs.find((log) => log.eventName === \"CoinCreatedV4\")?.args;\n}\n\n// Update createCoin to return both receipt and coin address\nexport async function createCoin(\n call: CreateCoinArgs,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n options?: {\n gasMultiplier?: number;\n account?: Account | Address;\n },\n) {\n validateClientNetwork(publicClient);\n\n const createCoinRequest = await createCoinCall(call);\n const { request } = await publicClient.simulateContract({\n ...createCoinRequest,\n account: options?.account ?? walletClient.account,\n });\n\n // Add a 2/5th buffer on gas.\n if (request.gas) {\n // Gas limit multiplier is a percentage argument.\n request.gas = (request.gas * BigInt(options?.gasMultiplier ?? 100)) / 100n;\n }\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const deployment = getCoinCreateFromLogs(receipt);\n\n return {\n hash,\n receipt,\n address: deployment?.coin,\n deployment,\n };\n}\n","import { coinFactoryAddress as zoraFactoryImplAddress } from \"@zoralabs/protocol-deployments\";\nimport { Address } from \"viem\";\nimport { base } from \"viem/chains\";\n\n// this is the same across all chains due to deterministic deploys.\nexport const COIN_FACTORY_ADDRESS = zoraFactoryImplAddress[\"8453\"] as Address;\n\nexport const SUPERCHAIN_WETH_ADDRESS =\n \"0x4200000000000000000000000000000000000006\";\n\nexport const USDC_WETH_POOLS_BY_CHAIN: Record<number, Address> = {\n [base.id]: \"0xd0b53D9277642d899DF5C87A3966A349A798F224\",\n};\n","import { PublicClient } from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\n\nexport const validateClientNetwork = (\n publicClient: PublicClient<any, any, any, any>,\n) => {\n const clientChainId = publicClient?.chain?.id;\n if (clientChainId === base.id) {\n return;\n }\n if (clientChainId === baseSepolia.id) {\n return;\n }\n\n throw new Error(\n \"Client network needs to be base or baseSepolia for current coin deployments.\",\n );\n};\n","export type ValidMetadataURI =\n | `ipfs://${string}`\n | `ar://${string}`\n | `data:${string}`\n | `https://${string}`;\n\n/**\n * Clean the metadata URI to HTTPS format\n * @param metadataURI - The metadata URI to clean from IPFS or Arweave\n * @returns The cleaned metadata URI\n * @throws If the metadata URI is a data URI\n */\nexport function cleanAndValidateMetadataURI(uri: ValidMetadataURI) {\n if (uri.startsWith(\"ipfs://\")) {\n return uri.replace(\n \"ipfs://\",\n \"https://magic.decentralized-content.com/ipfs/\",\n );\n }\n if (uri.startsWith(\"ar://\")) {\n return uri.replace(\"ar://\", \"http://arweave.net/\");\n }\n if (uri.startsWith(\"data:\")) {\n return uri;\n // throw new Error(\"Data URIs are not supported\");\n }\n if (uri.startsWith(\"http://\") || uri.startsWith(\"https://\")) {\n return uri;\n }\n\n throw new Error(\"Invalid metadata URI\");\n}\n","export type ValidMetadataJSON = {\n name: string;\n description: string;\n image: string;\n animation_url?: string;\n content?: { uri: string; mime?: string };\n};\n\nfunction validateURIString(uri: unknown) {\n if (typeof uri !== \"string\") {\n throw new Error(\"URI must be a string\");\n }\n if (uri.startsWith(\"ipfs://\")) {\n return true;\n }\n if (uri.startsWith(\"ar://\")) {\n return true;\n }\n if (uri.startsWith(\"https://\")) {\n return true;\n }\n if (uri.startsWith(\"data:\")) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Validate the metadata JSON object\n * @param metadata - The metadata object to validate\n */\nexport function validateMetadataJSON(metadata: ValidMetadataJSON | unknown) {\n if (typeof metadata !== \"object\" || !metadata) {\n throw new Error(\"Metadata must be an object and exist\");\n }\n if (typeof (metadata as { name: unknown }).name !== \"string\") {\n throw new Error(\"Metadata name is required and must be a string\");\n }\n if (typeof (metadata as { description: unknown }).description !== \"string\") {\n throw new Error(\"Metadata description is required and must be a string\");\n }\n if (typeof (metadata as { image: unknown }).image === \"string\") {\n if (!validateURIString((metadata as { image: string }).image)) {\n throw new Error(\"Metadata image is not a valid URI\");\n }\n } else {\n throw new Error(\"Metadata image is required and must be a string\");\n }\n if (\"animation_url\" in metadata) {\n if (\n typeof (metadata as { animation_url?: unknown }).animation_url !==\n \"string\"\n ) {\n throw new Error(\"Metadata animation_url, if provided, must be a string\");\n }\n if (!validateURIString(metadata.animation_url)) {\n throw new Error(\"Metadata animation_url is not a valid URI\");\n }\n }\n const content =\n \"content\" in metadata && (metadata as { content?: unknown }).content;\n if (content) {\n if (typeof (content as { uri?: unknown }).uri !== \"string\") {\n throw new Error(\"If provided, content.uri must be a string\");\n }\n if (!validateURIString((content as { uri: string }).uri)) {\n throw new Error(\"If provided, content.uri must be a valid URI string\");\n }\n if (typeof (content as { mime?: unknown }).mime !== \"string\") {\n throw new Error(\"If provided, content.mime must be a string\");\n }\n }\n\n return true;\n}\n","import {\n cleanAndValidateMetadataURI,\n ValidMetadataURI,\n} from \"./cleanAndValidateMetadataURI\";\nimport { validateMetadataJSON } from \"./validateMetadataJSON\";\n\n/**\n * Validate the metadata URI Content\n * @param metadataURI - The metadata URI to validate\n * @returns true if the metadata is valid, throws an error otherwise\n */\nexport async function validateMetadataURIContent(\n metadataURI: ValidMetadataURI,\n) {\n const cleanedURI = cleanAndValidateMetadataURI(metadataURI);\n const response = await fetch(cleanedURI);\n if (!response.ok) {\n throw new Error(\"Metadata fetch failed\");\n }\n if (\n ![\"application/json\", \"text/plain\"].includes(\n response.headers.get(\"content-type\") ?? \"\",\n )\n ) {\n throw new Error(\"Metadata is not a valid JSON or plain text response type\");\n }\n const metadataJson = await response.json();\n return validateMetadataJSON(metadataJson);\n}\n","import { Hex, keccak256, slice, toHex } from \"viem\";\n\nexport function getAttribution(): Hex {\n const hash = keccak256(toHex(\"api-sdk.zora.engineering\"));\n return slice(hash, 0, 4) as Hex;\n}\n","import { encodeMultiCurvePoolConfig } from \"@zoralabs/protocol-deployments\";\nimport { parseUnits, zeroAddress } from \"viem\";\nimport { base, baseSepolia } from \"viem/chains\";\n\nconst ZORA_DECIMALS = 18;\n\n/**\n * =========================\n * COIN_ETH_PAIR_POOL_CONFIG\n * =========================\n */\n\nexport const ZORA_ADDRESS = \"0x1111111111166b7fe7bd91427724b487980afc69\";\n\nconst COIN_ETH_PAIR_LOWER_TICK = -250000;\nconst COIN_ETH_PAIR_UPPER_TICK = -195_000;\nconst COIN_ETH_PAIR_NUM_DISCOVERY_POSITIONS = 11;\nconst COIN_ETH_PAIR_MAX_DISCOVERY_SUPPLY_SHARE = parseUnits(\"0.05\", 18);\n\nexport const COIN_ETH_PAIR_POOL_CONFIG = {\n [base.id]: encodeMultiCurvePoolConfig({\n currency: zeroAddress,\n tickLower: [COIN_ETH_PAIR_LOWER_TICK],\n tickUpper: [COIN_ETH_PAIR_UPPER_TICK],\n numDiscoveryPositions: [COIN_ETH_PAIR_NUM_DISCOVERY_POSITIONS],\n maxDiscoverySupplyShare: [COIN_ETH_PAIR_MAX_DISCOVERY_SUPPLY_SHARE],\n }),\n [baseSepolia.id]: encodeMultiCurvePoolConfig({\n currency: zeroAddress,\n tickLower: [COIN_ETH_PAIR_LOWER_TICK],\n tickUpper: [COIN_ETH_PAIR_UPPER_TICK],\n numDiscoveryPositions: [COIN_ETH_PAIR_NUM_DISCOVERY_POSITIONS],\n maxDiscoverySupplyShare: [COIN_ETH_PAIR_MAX_DISCOVERY_SUPPLY_SHARE],\n }),\n};\n\nconst COIN_ZORA_PAIR_LOWER_TICK = -138_000; // ( -250000 in ETH land ~= $23 = -138_000 in Zora token land at .022)\nconst COIN_ZORA_PAIR_UPPER_TICK = -81_000; // (-195_000 ~= 5782 = -81_000 in Zora token land at .022)\nconst COIN_ZORA_PAIR_NUM_DISCOVERY_POSITIONS = 11;\nconst COIN_ZORA_PAIR_MAX_DISCOVERY_SUPPLY_SHARE = parseUnits(\n \"0.05\",\n ZORA_DECIMALS,\n);\n\nexport const COIN_ZORA_PAIR_POOL_CONFIG = {\n [base.id]: encodeMultiCurvePoolConfig({\n currency: ZORA_ADDRESS,\n tickLower: [COIN_ZORA_PAIR_LOWER_TICK],\n tickUpper: [COIN_ZORA_PAIR_UPPER_TICK],\n numDiscoveryPositions: [COIN_ZORA_PAIR_NUM_DISCOVERY_POSITIONS],\n maxDiscoverySupplyShare: [COIN_ZORA_PAIR_MAX_DISCOVERY_SUPPLY_SHARE],\n }),\n};\n","import {\n encodeBuySupplyWithMultiHopSwapRouterHookCall,\n wethAddress,\n} from \"@zoralabs/protocol-deployments\";\nimport { InitialPurchaseCurrency } from \"../actions/createCoin\";\nimport { Address, concat, Hex, pad, toHex } from \"viem\";\nimport { ZORA_ADDRESS } from \"./poolConfigUtils\";\nimport { base } from \"viem/chains\";\n\nconst BASE_UDSC_ADDRESS = \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\";\n\nconst USDC_ZORA_FEE = 3000;\nconst WETH_BASE_FEE = 3000;\n\nconst encodeFee = (fee: number) => pad(toHex(fee), { size: 3 });\n\nexport const getPrepurchaseHook = async ({\n payoutRecipient,\n initialPurchase,\n chainId,\n}: {\n initialPurchase: {\n currency: InitialPurchaseCurrency;\n amount: bigint;\n amountOutMinimum?: bigint;\n };\n payoutRecipient: Address;\n chainId: number;\n}) => {\n if (\n initialPurchase.currency !== InitialPurchaseCurrency.ETH &&\n chainId !== base.id\n ) {\n throw new Error(\"Initial purchase currency and/or chain not supported\");\n }\n\n const path = concat([\n wethAddress[base.id],\n encodeFee(WETH_BASE_FEE),\n BASE_UDSC_ADDRESS,\n encodeFee(USDC_ZORA_FEE),\n ZORA_ADDRESS,\n ]);\n\n return encodeBuySupplyWithMultiHopSwapRouterHookCall({\n ethValue: initialPurchase.amount,\n buyRecipient: payoutRecipient,\n exactInputParams: {\n path,\n amountIn: initialPurchase.amount,\n amountOutMinimum: initialPurchase.amountOutMinimum || 0n,\n },\n chainId: base.id,\n }) as {\n hook: Address;\n hookData: Hex;\n value: bigint;\n };\n};\n","import { coinABI, iUniswapV3PoolABI } from \"@zoralabs/protocol-deployments\";\nimport {\n SUPERCHAIN_WETH_ADDRESS,\n USDC_WETH_POOLS_BY_CHAIN,\n} from \"../constants\";\nimport { GenericPublicClient } from \"../utils/genericPublicClient\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n erc20Abi,\n formatEther,\n isAddressEqual,\n zeroAddress,\n} from \"viem\";\n\ntype Slot0Result = {\n sqrtPriceX96: bigint;\n tick: number;\n observationIndex: number;\n observationCardinality: number;\n observationCardinalityNext: number;\n feeProtocol: number;\n unlocked: boolean;\n};\n\ntype PricingResult = {\n eth: bigint;\n usdc: bigint | null;\n usdcDecimal: number | null;\n ethDecimal: number;\n};\n\n/**\n * Represents the current state of a coin\n * @typedef {Object} OnchainCoinDetails\n * @property {bigint} balance - The user's balance of the coin\n * @property {PricingResult} marketCap - The market cap of the coin\n * @property {PricingResult} liquidity - The liquidity of the coin\n * @property {Address} pool - Pool address\n * @property {Slot0Result} poolState - Current state of the UniswapV3 pool\n * @property {Address[]} owners - List of owners for the coin\n * @property {Address} payoutRecipient - The payout recipient address\n */\nexport type OnchainCoinDetails = {\n balance: bigint;\n marketCap: PricingResult;\n liquidity: PricingResult;\n pool: Address;\n poolState: Slot0Result;\n owners: readonly Address[];\n payoutRecipient: Address;\n};\n\n/**\n * Gets the current state of a coin for a user\n * @param {Object} params - The query parameters\n * @param {Address} params.coin - The coin contract address\n * @param {Address} params.user - The user address to check balance for\n * @param {PublicClient} params.publicClient - The viem public client instance\n * @returns {Promise<OnchainCoinDetails>} The coin's current state\n */\nexport async function getOnchainCoinDetails({\n coin,\n user = zeroAddress,\n publicClient,\n}: {\n coin: Address;\n user?: Address;\n publicClient: GenericPublicClient;\n}): Promise<OnchainCoinDetails> {\n validateClientNetwork(publicClient);\n const [balance, pool, owners, payoutRecipient] = await publicClient.multicall(\n {\n contracts: [\n {\n address: coin,\n abi: coinABI,\n functionName: \"balanceOf\",\n args: [user],\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"poolAddress\",\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"owners\",\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"payoutRecipient\",\n },\n ],\n allowFailure: false,\n },\n );\n\n const USDC_WETH_POOL = USDC_WETH_POOLS_BY_CHAIN[publicClient.chain?.id || 0];\n\n const [\n coinWethPoolSlot0,\n coinWethPoolToken0,\n coinReservesRaw,\n coinTotalSupply,\n wethReservesRaw,\n usdcWethSlot0,\n ] = await publicClient.multicall({\n contracts: [\n {\n address: pool,\n abi: iUniswapV3PoolABI,\n functionName: \"slot0\",\n },\n {\n address: pool,\n abi: iUniswapV3PoolABI,\n functionName: \"token0\",\n },\n {\n address: coin,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [pool],\n },\n {\n address: coin,\n abi: coinABI,\n functionName: \"totalSupply\",\n },\n {\n address: SUPERCHAIN_WETH_ADDRESS,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [pool],\n },\n {\n address: USDC_WETH_POOL ?? coin,\n abi: iUniswapV3PoolABI,\n functionName: \"slot0\",\n },\n ],\n allowFailure: false,\n });\n\n const wethPriceInUsdc = USDC_WETH_POOL\n ? uniswapV3SqrtPriceToBigIntScaled(\n usdcWethSlot0.sqrtPriceX96,\n 18,\n 6,\n true,\n 18,\n )\n : null;\n\n const coinPriceInWeth = uniswapV3SqrtPriceToBigIntScaled(\n coinWethPoolSlot0.sqrtPriceX96,\n 18,\n 18,\n isAddressEqual(coinWethPoolToken0, coin),\n 18,\n );\n\n // Divide by 10^18 to remove percision from `coinPriceInWeth` after math since bigint is decimal.\n const marketCap = (coinPriceInWeth * coinTotalSupply) / 10n ** 18n;\n\n const wethLiquidity = wethReservesRaw;\n // Divide by 10^18 to remove percision from `coinPriceInWeth` after math since bigint is decimal.\n const tokenLiquidity = (coinReservesRaw * coinPriceInWeth) / 10n ** 18n;\n\n return {\n balance,\n pool,\n owners,\n payoutRecipient,\n marketCap: convertEthOutput(marketCap, wethPriceInUsdc),\n liquidity: convertEthOutput(\n wethLiquidity + tokenLiquidity,\n wethPriceInUsdc,\n ),\n poolState: coinWethPoolSlot0,\n };\n}\n\nfunction convertEthOutput(amountETH: bigint, wethToUsdc: bigint | null) {\n return {\n eth: amountETH,\n ethDecimal: parseFloat(formatEther(amountETH)),\n usdc: wethToUsdc ? amountETH * wethToUsdc : null,\n usdcDecimal: wethToUsdc\n ? parseFloat(formatEther((amountETH * wethToUsdc) / 10n ** 18n))\n : null,\n };\n}\n\nfunction uniswapV3SqrtPriceToBigIntScaled(\n sqrtPriceX96: bigint,\n token0Decimals: number,\n token1Decimals: number,\n isToken0Coin: boolean,\n scaleDecimals: number = 18,\n): bigint {\n // (sqrtPrice^2 / 2^192) => ratio\n // We'll do: ratioScaled = (sqrtPrice^2 * 10^scaleDecimals) / 2^192\n const numerator = sqrtPriceX96 * sqrtPriceX96;\n const denominator = 2n ** 192n;\n const scaleFactor = 10n ** BigInt(scaleDecimals);\n\n // raw ratioScaled\n let ratioScaled = (numerator * scaleFactor) / denominator; // BigInt\n\n // Adjust for difference in decimals:\n // ratioScaled *= 10^(dec0 - dec1)\n const decimalsDiff = BigInt(token0Decimals - token1Decimals);\n if (decimalsDiff > 0n) {\n ratioScaled *= 10n ** decimalsDiff;\n } else if (decimalsDiff < 0n) {\n ratioScaled /= 10n ** -decimalsDiff;\n }\n\n if (!isToken0Coin) {\n // We want the reciprocal: coin is token1 => coinPriceInToken0 = 1 / ratio\n // But we also want it scaled by 10^scaleDecimals\n // reciprocalScaled = (10^scaleDecimals * 10^(decimalsDiff)) / ratioScaled\n // (assuming ratioScaled != 0)\n if (ratioScaled === 0n) {\n return 0n; // or some huge number representing infinity\n }\n ratioScaled = (scaleFactor * scaleFactor) / ratioScaled;\n // or if we already included decimalsDiff above, handle carefully.\n }\n\n return ratioScaled;\n}\n","import { coinABI } from \"@zoralabs/protocol-deployments\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"../utils/genericPublicClient\";\nimport { getAttribution } from \"../utils/attribution\";\n\nexport type UpdateCoinURIArgs = {\n coin: Address;\n newURI: string;\n};\n\nexport function updateCoinURICall({\n newURI,\n coin,\n}: UpdateCoinURIArgs): SimulateContractParameters {\n if (!newURI.startsWith(\"ipfs://\")) {\n throw new Error(\"URI needs to be an ipfs:// prefix uri\");\n }\n\n return {\n abi: coinABI,\n address: coin,\n functionName: \"setContractURI\",\n args: [newURI],\n dataSuffix: getAttribution(),\n };\n}\n\nexport async function updateCoinURI(\n args: UpdateCoinURIArgs,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n) {\n validateClientNetwork(publicClient);\n const call = updateCoinURICall(args);\n const { request } = await publicClient.simulateContract({\n ...call,\n account: walletClient.account!,\n });\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const eventLogs = parseEventLogs({ abi: coinABI, logs: receipt.logs });\n const uriUpdated = eventLogs.find(\n (log) => log.eventName === \"ContractURIUpdated\",\n );\n\n return { hash, receipt, uriUpdated };\n}\n","import { coinABI } from \"@zoralabs/protocol-deployments\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"../utils/genericPublicClient\";\nimport { getAttribution } from \"../utils/attribution\";\n\nexport type UpdatePayoutRecipientArgs = {\n coin: Address;\n newPayoutRecipient: string;\n};\n\nexport function updatePayoutRecipientCall({\n newPayoutRecipient,\n coin,\n}: UpdatePayoutRecipientArgs): SimulateContractParameters {\n return {\n abi: coinABI,\n address: coin,\n functionName: \"setPayoutRecipient\",\n args: [newPayoutRecipient],\n dataSuffix: getAttribution(),\n };\n}\n\nexport async function updatePayoutRecipient(\n args: UpdatePayoutRecipientArgs,\n walletClient: WalletClient,\n publicClient: GenericPublicClient,\n) {\n validateClientNetwork(publicClient);\n const call = updatePayoutRecipientCall(args);\n const { request } = await publicClient.simulateContract({\n ...call,\n account: walletClient.account!,\n });\n const hash = await walletClient.writeContract(request);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n const eventLogs = parseEventLogs({ abi: coinABI, logs: receipt.logs });\n const payoutRecipientUpdated = eventLogs.find(\n (log) => log.eventName === \"CoinPayoutRecipientUpdated\",\n );\n\n return { hash, receipt, payoutRecipientUpdated };\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ClientOptions } from \"./types.gen\";\nimport {\n type Config,\n type ClientOptions as DefaultClientOptions,\n createClient,\n createConfig,\n} from \"@hey-api/client-fetch\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends DefaultClientOptions = ClientOptions> =\n (\n override?: Config<DefaultClientOptions & T>,\n ) => Config<Required<DefaultClientOptions> & T>;\n\nexport const client = createClient(\n createConfig<ClientOptions>({\n baseUrl: \"https://api-sdk.zora.engineering/\",\n }),\n);\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n Options as ClientOptions,\n TDataShape,\n Client,\n} from \"@hey-api/client-fetch\";\nimport type {\n GetApiKeyData,\n GetApiKeyResponse,\n GetCoinData,\n GetCoinResponse,\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinsData,\n GetCoinsResponse,\n SetCreateUploadJwtData,\n SetCreateUploadJwtResponse,\n GetExploreData,\n GetExploreResponse,\n GetProfileData,\n GetProfileResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\n GetProfileCoinsData,\n GetProfileCoinsResponse,\n} from \"./types.gen\";\nimport { client as _heyApiClient } from \"./client.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n> = ClientOptions<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * zoraSDK_apiKey query\n */\nexport const getApiKey = <ThrowOnError extends boolean = false>(\n options: Options<GetApiKeyData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetApiKeyResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/apiKey\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_coin query\n */\nexport const getCoin = <ThrowOnError extends boolean = false>(\n options: Options<GetCoinData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetCoinResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/coin\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_coinComments query\n */\nexport const getCoinComments = <ThrowOnError extends boolean = false>(\n options: Options<GetCoinCommentsData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetCoinCommentsResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/coinComments\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_coins query\n */\nexport const getCoins = <ThrowOnError extends boolean = false>(\n options: Options<GetCoinsData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetCoinsResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/coins\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_createUploadJWT mutation\n */\nexport const setCreateUploadJwt = <ThrowOnError extends boolean = false>(\n options?: Options<SetCreateUploadJwtData, ThrowOnError>,\n) => {\n return (options?.client ?? _heyApiClient).post<\n SetCreateUploadJwtResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/createUploadJWT\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * zoraSDK_explore query\n */\nexport const getExplore = <ThrowOnError extends boolean = false>(\n options: Options<GetExploreData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetExploreResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/explore\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_profile query\n */\nexport const getProfile = <ThrowOnError extends boolean = false>(\n options: Options<GetProfileData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetProfileResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/profile\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_profileBalances query\n */\nexport const getProfileBalances = <ThrowOnError extends boolean = false>(\n options: Options<GetProfileBalancesData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetProfileBalancesResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/profileBalances\",\n ...options,\n });\n};\n\n/**\n * zoraSDK_profileCoins query\n */\nexport const getProfileCoins = <ThrowOnError extends boolean = false>(\n options: Options<GetProfileCoinsData, ThrowOnError>,\n) => {\n return (options.client ?? _heyApiClient).get<\n GetProfileCoinsResponse,\n unknown,\n ThrowOnError\n >({\n security: [\n {\n name: \"api-key\",\n type: \"apiKey\",\n },\n ],\n url: \"/profileCoins\",\n ...options,\n });\n};\n","let apiKey: string | undefined;\nexport function setApiKey(key: string) {\n apiKey = key;\n}\n\nexport function getApiKeyMeta() {\n if (!apiKey) {\n return {};\n }\n return {\n headers: {\n \"api-key\": apiKey,\n },\n };\n}\n","import {\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinData,\n GetCoinResponse,\n GetCoinsData,\n GetCoinsResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\n GetProfileCoinsData,\n GetProfileCoinsResponse,\n GetProfileData,\n GetProfileResponse,\n} from \"../client/types.gen\";\nimport {\n getCoin as getCoinSDK,\n getCoins as getCoinsSDK,\n getCoinComments as getCoinCommentsSDK,\n getProfile as getProfileSDK,\n getProfileBalances as getProfileBalancesSDK,\n getProfileCoins as getProfileCoinsSDK,\n} from \"../client/sdk.gen\";\nimport { getApiKeyMeta } from \"./api-key\";\nimport { RequestOptionsType } from \"./query-types\";\nimport { RequestResult } from \"@hey-api/client-fetch\";\n\nexport type { RequestResult };\n\ntype GetCoinQuery = GetCoinData[\"query\"];\nexport type { GetCoinQuery, GetCoinData };\nexport type { GetCoinResponse } from \"../client/types.gen\";\n\nexport type CoinData = NonNullable<GetCoinResponse[\"zora20Token\"]>;\n\nexport const getCoin = async (\n query: GetCoinQuery,\n options?: RequestOptionsType<GetCoinData>,\n): Promise<RequestResult<GetCoinResponse>> => {\n return await getCoinSDK({\n ...options,\n query,\n ...getApiKeyMeta(),\n });\n};\n\ntype GetCoinsQuery = GetCoinsData[\"query\"];\nexport type { GetCoinsQuery, GetCoinsData };\nexport type { GetCoinsResponse } from \"../client/types.gen\";\n\nexport const getCoins = async (\n query: GetCoinsQuery,\n options?: RequestOptionsType<GetCoinsData>,\n): Promise<RequestResult<GetCoinsResponse>> => {\n return await getCoinsSDK({\n query: {\n coins: query.coins.map((coinData) => JSON.stringify(coinData)) as any,\n },\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetCoinCommentsQuery = GetCoinCommentsData[\"query\"];\nexport type { GetCoinCommentsQuery, GetCoinCommentsData };\nexport type { GetCoinCommentsResponse } from \"../client/types.gen\";\n\nexport const getCoinComments = async (\n query: GetCoinCommentsQuery,\n options?: RequestOptionsType<GetCoinCommentsData>,\n): Promise<RequestResult<GetCoinCommentsResponse>> => {\n return await getCoinCommentsSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetProfileQuery = GetProfileData[\"query\"];\nexport type { GetProfileQuery, GetProfileData };\nexport type { GetProfileResponse } from \"../client/types.gen\";\n\nexport const getProfile = async (\n query: GetProfileQuery,\n options?: RequestOptionsType<GetProfileData>,\n): Promise<RequestResult<GetProfileResponse>> => {\n return await getProfileSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetProfileCoinsQuery = GetProfileCoinsData[\"query\"];\nexport type { GetProfileCoinsQuery, GetProfileCoinsData };\nexport type { GetProfileCoinsResponse } from \"../client/types.gen\";\n\nexport const getProfileCoins = async (\n query: GetProfileCoinsQuery,\n options?: RequestOptionsType<GetProfileCoinsData>,\n): Promise<RequestResult<GetProfileCoinsResponse>> => {\n return await getProfileCoinsSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n\ntype GetProfileBalancesQuery = GetProfileBalancesData[\"query\"];\nexport type { GetProfileBalancesQuery, GetProfileBalancesData };\nexport type { GetProfileBalancesResponse } from \"../client/types.gen\";\n\nexport const getProfileBalances = async (\n query: GetProfileBalancesQuery,\n options?: RequestOptionsType<GetProfileBalancesData>,\n): Promise<RequestResult<GetProfileBalancesResponse>> => {\n return await getProfileBalancesSDK({\n query,\n ...getApiKeyMeta(),\n ...options,\n });\n};\n","import { getExplore as getExploreSDK } from \"../client/sdk.gen\";\nimport type { GetExploreData, GetExploreResponse } from \"../client/types.gen\";\nimport { getApiKeyMeta } from \"./api-key\";\nimport { RequestOptionsType } from \"./query-types\";\n\n/**\n * The inner type for the explore queries that omits listType.\n * This is used to create the query object for the explore queries.\n */\nexport type QueryRequestType = Omit<GetExploreData[\"query\"], \"listType\">;\n\ntype ExploreResponse = { data?: GetExploreResponse };\n\nexport type ListType = GetExploreData[\"query\"][\"listType\"];\n\nexport type { ExploreResponse };\n\nexport type { GetExploreData };\n\n/**\n * Creates an explore query with the specified list type\n */\nconst createExploreQuery = (\n query: QueryRequestType,\n listType: ListType,\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n getExploreSDK({\n ...options,\n query: { ...query, listType },\n ...getApiKeyMeta(),\n });\n\n/** Get top gaining coins */\nexport const getCoinsTopGainers = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"TOP_GAINERS\", options);\n\n/** Get coins with highest 24h volume */\nexport const getCoinsTopVolume24h = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"TOP_VOLUME_24H\", options);\n\n/** Get most valuable coins */\nexport const getCoinsMostValuable = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"MOST_VALUABLE\", options);\n\n/** Get newly created coins */\nexport const getCoinsNew = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> => createExploreQuery(query, \"NEW\", options);\n\n/** Get recently traded coins */\nexport const getCoinsLastTraded = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"LAST_TRADED\", options);\n\n/** Get recently traded unique coins */\nexport const getCoinsLastTradedUnique = (\n query: QueryRequestType = {},\n options?: RequestOptionsType<GetExploreData>,\n): Promise<ExploreResponse> =>\n createExploreQuery(query, \"LAST_TRADED_UNIQUE\", options);\n"]}