@zoralabs/coins-sdk 0.1.0 → 0.1.2

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,28 @@
1
1
  # @zoralabs/coins-sdk
2
2
 
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [73e95f69]
8
+ - Updated dependencies [0c50e8e7]
9
+ - @zoralabs/protocol-deployments@0.5.6
10
+
11
+ ## 0.1.1
12
+
13
+ ### Patch Changes
14
+
15
+ - 9ed0ce76: - Publishing new coins hooks in `@zoralabs/protocol-deployments`
16
+ - In coins, pulling ISwapRouter from `@zoralabs/shared-contracts`, and updated the shared interface to match the full interface of the ISwapRouter. This new interface is published in `@zoralabs/protocol-deployments`.
17
+ - Removed publishing of the factory addresses directly in the wagmi config of the coins package, as that's inconsistent with the rest of the packages.
18
+ - Updated the `@zoralabs/coins-sdk` to use `@zoralabs/protocol-deployments` for abis and addresses, which significantly reduces the dependency tree of it and has it follow the patterns of the other sdk packages.
19
+ - Updated dependencies [9ed0ce76]
20
+ - Updated dependencies [ce3022d8]
21
+ - Updated dependencies [ce3022d8]
22
+ - Updated dependencies [9ed0ce76]
23
+ - Updated dependencies [9ed0ce76]
24
+ - @zoralabs/protocol-deployments@0.5.5
25
+
3
26
  ## 0.1.0
4
27
 
5
28
  ### Minor Changes
@@ -1,4 +1,4 @@
1
- import { zoraFactoryImplABI } from "@zoralabs/coins";
1
+ import { coinFactoryABI as zoraFactoryImplABI } from "@zoralabs/protocol-deployments";
2
2
  import { Address, TransactionReceipt, WalletClient, SimulateContractParameters, ContractEventArgsFromTopics } from "viem";
3
3
  import { GenericPublicClient } from "src/utils/genericPublicClient";
4
4
  import { ValidMetadataURI } from "src/metadata";
@@ -1 +1 @@
1
- {"version":3,"file":"createCoin.d.ts","sourceRoot":"","sources":["../../src/actions/createCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,0BAA0B,EAC1B,2BAA2B,EAG5B,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAA8B,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAC7D,OAAO,kBAAkB,EACzB,aAAa,CACd,CAAC;AAMF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAsB,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,GAAG,EACH,MAAM,EACN,eAAe,EACf,kBAAuB,EACvB,gBAA+D,GAChE,EAAE,cAAc,GAAG,OAAO,CACzB,0BAA0B,CAAC,OAAO,kBAAkB,EAAE,QAAQ,CAAC,CAChE,CA4BA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,GAC1B,qBAAqB,GAAG,SAAS,CAMnC;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;CACxB;;;;;;;;;;;;;;;;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,EAG5B,MAAM,MAAM,CAAC;AAGd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAA8B,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5E,MAAM,MAAM,qBAAqB,GAAG,2BAA2B,CAC7D,OAAO,kBAAkB,EACzB,aAAa,CACd,CAAC;AAMF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAsB,cAAc,CAAC,EACnC,IAAI,EACJ,MAAM,EACN,GAAG,EACH,MAAM,EACN,eAAe,EACf,kBAAuB,EACvB,gBAA+D,GAChE,EAAE,cAAc,GAAG,OAAO,CACzB,0BAA0B,CAAC,OAAO,kBAAkB,EAAE,QAAQ,CAAC,CAChE,CA6BA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,GAC1B,qBAAqB,GAAG,SAAS,CAMnC;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;CACxB;;;;;;;;;;;;;;;;GAyBF"}
@@ -1,4 +1,4 @@
1
- import { coinABI } from "@zoralabs/coins";
1
+ import { coinABI } from "@zoralabs/protocol-deployments";
2
2
  import { Address, TransactionReceipt, WalletClient, SimulateContractParameters, ContractEventArgsFromTopics } from "viem";
3
3
  import { GenericPublicClient } from "src/utils/genericPublicClient";
4
4
  export type SellEventArgs = ContractEventArgsFromTopics<typeof coinABI, "CoinSell">;
@@ -1 +1 @@
1
- {"version":3,"file":"tradeCoin.d.ts","sourceRoot":"","sources":["../../src/actions/tradeCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,0BAA0B,EAG1B,2BAA2B,EAE5B,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGpE,MAAM,MAAM,aAAa,GAAG,2BAA2B,CACrD,OAAO,OAAO,EACd,UAAU,CACX,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,2BAA2B,CACpD,OAAO,OAAO,EACd,SAAS,CACV,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAO1D;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,kBAAkB,EAClB,YAAY,GACb,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,mBAAmB,CAAC;CACnC,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBpD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE;QACJ,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,IAAI,EAAE,EACJ,SAAS,EACT,SAAS,EACT,YAAiB,EACjB,iBAAsB,EACtB,aAA2B,GAC5B,GACF,EAAE,WAAW,GAAG,0BAA0B,CAc1C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,cAAc,GAAG,SAAS,CAU5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB;;;;GAgBlC"}
1
+ {"version":3,"file":"tradeCoin.d.ts","sourceRoot":"","sources":["../../src/actions/tradeCoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,0BAA0B,EAG1B,2BAA2B,EAE5B,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIpE,MAAM,MAAM,aAAa,GAAG,2BAA2B,CACrD,OAAO,OAAO,EACd,UAAU,CACX,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,2BAA2B,CACpD,OAAO,OAAO,EACd,SAAS,CACV,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAO1D;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,EAChC,MAAM,EACN,kBAAkB,EAClB,YAAY,GACb,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,mBAAmB,CAAC;CACnC,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBpD;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE;QACJ,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,SAAS,EACT,IAAI,EAAE,EACJ,SAAS,EACT,SAAS,EACT,YAAiB,EACjB,iBAAsB,EACtB,aAA2B,GAC5B,GACF,EAAE,WAAW,GAAG,0BAA0B,CAc1C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,cAAc,GAAG,SAAS,CAU5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,mBAAmB;;;;GAgBlC"}
@@ -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;AAEpE,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,CAWhD;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,+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 +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;AAEpE,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,CAOxD;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,+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 +1 @@
1
- {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/api/explore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAEzE,KAAK,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AAE3D,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,YAAY,EAAE,cAAc,EAAE,CAAC;AAgB/B,4BAA4B;AAC5B,eAAO,MAAM,kBAAkB,WACtB,gBAAgB,YACb,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CACyB,CAAC;AAEpD,wCAAwC;AACxC,eAAO,MAAM,oBAAoB,WACxB,gBAAgB,YACb,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CAC4B,CAAC;AAEvD,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB,WACxB,gBAAgB,YACb,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CAC2B,CAAC;AAEtD,8BAA8B;AAC9B,eAAO,MAAM,WAAW,WACf,gBAAgB,YACb,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CAA8C,CAAC;AAEzE,gCAAgC;AAChC,eAAO,MAAM,kBAAkB,WACtB,gBAAgB,YACb,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CACyB,CAAC;AAEpD,uCAAuC;AACvC,eAAO,MAAM,wBAAwB,WAC5B,gBAAgB,YACb,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CACgC,CAAC"}
1
+ {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/api/explore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAEzE,KAAK,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AAE3D,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,YAAY,EAAE,cAAc,EAAE,CAAC;AAgB/B,4BAA4B;AAC5B,eAAO,MAAM,kBAAkB,GAC7B,QAAO,gBAAqB,EAC5B,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CACyB,CAAC;AAEpD,wCAAwC;AACxC,eAAO,MAAM,oBAAoB,GAC/B,QAAO,gBAAqB,EAC5B,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CAC4B,CAAC;AAEvD,8BAA8B;AAC9B,eAAO,MAAM,oBAAoB,GAC/B,QAAO,gBAAqB,EAC5B,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CAC2B,CAAC;AAEtD,8BAA8B;AAC9B,eAAO,MAAM,WAAW,GACtB,QAAO,gBAAqB,EAC5B,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CAA8C,CAAC;AAEzE,gCAAgC;AAChC,eAAO,MAAM,kBAAkB,GAC7B,QAAO,gBAAqB,EAC5B,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CACyB,CAAC;AAEpD,uCAAuC;AACvC,eAAO,MAAM,wBAAwB,GACnC,QAAO,gBAAqB,EAC5B,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,eAAe,CACgC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/api/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,KAAK,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;AAEnE,eAAO,MAAM,OAAO,UACX,YAAY,YACT,kBAAkB,CAAC,WAAW,CAAC,KACxC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAMxC,CAAC;AAEF,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,QAAQ,UACZ,aAAa,YACV,kBAAkB,CAAC,YAAY,CAAC,KACzC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAQzC,CAAC;AAEF,KAAK,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,eAAO,MAAM,eAAe,UACnB,oBAAoB,YACjB,kBAAkB,CAAC,mBAAmB,CAAC,KAChD,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAMhD,CAAC;AAEF,KAAK,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,UAAU,UACd,eAAe,YACZ,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAM3C,CAAC;AAEF,KAAK,uBAAuB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC/D,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEtE,eAAO,MAAM,kBAAkB,UACtB,uBAAuB,YACpB,kBAAkB,CAAC,sBAAsB,CAAC,KACnD,OAAO,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAMnD,CAAC"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/api/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,KAAK,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;AAEnE,eAAO,MAAM,OAAO,GAClB,OAAO,YAAY,EACnB,UAAU,kBAAkB,CAAC,WAAW,CAAC,KACxC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAMxC,CAAC;AAEF,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,QAAQ,GACnB,OAAO,aAAa,EACpB,UAAU,kBAAkB,CAAC,YAAY,CAAC,KACzC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAQzC,CAAC;AAEF,KAAK,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,eAAO,MAAM,eAAe,GAC1B,OAAO,oBAAoB,EAC3B,UAAU,kBAAkB,CAAC,mBAAmB,CAAC,KAChD,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAMhD,CAAC;AAEF,KAAK,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,UAAU,GACrB,OAAO,eAAe,EACtB,UAAU,kBAAkB,CAAC,cAAc,CAAC,KAC3C,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAM3C,CAAC;AAEF,KAAK,uBAAuB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC/D,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEtE,eAAO,MAAM,kBAAkB,GAC7B,OAAO,uBAAuB,EAC9B,UAAU,kBAAkB,CAAC,sBAAsB,CAAC,KACnD,OAAO,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAMnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.gen.d.ts","sourceRoot":"","sources":["../../src/client/sdk.gen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.gen.d.ts","sourceRoot":"","sources":["../../src/client/sdk.gen.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/actions/createCoin.ts
2
- var _coins = require('@zoralabs/coins');
2
+ var _protocoldeployments = require('@zoralabs/protocol-deployments');
3
3
 
4
4
 
5
5
  var _viem = require('viem');
@@ -7,7 +7,7 @@ var _viem = require('viem');
7
7
  // src/constants.ts
8
8
 
9
9
  var _chains = require('viem/chains');
10
- var COIN_FACTORY_ADDRESS = _coins.zoraFactoryImplAddress["8453"];
10
+ var COIN_FACTORY_ADDRESS = _protocoldeployments.coinFactoryAddress["8453"];
11
11
  var SUPERCHAIN_WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
12
12
  var USDC_WETH_POOLS_BY_CHAIN = {
13
13
  [_chains.base.id]: "0xd0b53D9277642d899DF5C87A3966A349A798F224"
@@ -123,6 +123,13 @@ async function validateMetadataURIContent(metadataURI) {
123
123
  return validateMetadataJSON(metadataJson);
124
124
  }
125
125
 
126
+ // src/utils/attribution.ts
127
+
128
+ function getAttribution() {
129
+ const hash = _viem.keccak256.call(void 0, _viem.toHex.call(void 0, "api-sdk.zora.engineering"));
130
+ return _viem.slice.call(void 0, hash, 0, 4);
131
+ }
132
+
126
133
  // src/actions/createCoin.ts
127
134
  var POOL_CONFIG = "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f70fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000b1a2bc2ec50000";
128
135
  async function createCoinCall({
@@ -141,7 +148,7 @@ async function createCoinCall({
141
148
  const poolConfig = POOL_CONFIG;
142
149
  await validateMetadataURIContent(uri);
143
150
  return {
144
- abi: _coins.zoraFactoryImplABI,
151
+ abi: _protocoldeployments.coinFactoryABI,
145
152
  functionName: "deploy",
146
153
  address: COIN_FACTORY_ADDRESS,
147
154
  args: [
@@ -154,12 +161,13 @@ async function createCoinCall({
154
161
  platformReferrer,
155
162
  orderSize
156
163
  ],
157
- value: initialPurchaseWei
164
+ value: initialPurchaseWei,
165
+ dataSuffix: getAttribution()
158
166
  };
159
167
  }
160
168
  function getCoinCreateFromLogs(receipt) {
161
169
  const eventLogs = _viem.parseEventLogs.call(void 0, {
162
- abi: _coins.zoraFactoryImplABI,
170
+ abi: _protocoldeployments.coinFactoryABI,
163
171
  logs: receipt.logs
164
172
  });
165
173
  return _optionalChain([eventLogs, 'access', _3 => _3.find, 'call', _4 => _4((log) => log.eventName === "CoinCreated"), 'optionalAccess', _5 => _5.args]);
@@ -201,8 +209,9 @@ async function simulateBuy({
201
209
  }) {
202
210
  const numberResult = await publicClient.simulateContract({
203
211
  address: target,
204
- abi: _coins.coinABI,
212
+ abi: _protocoldeployments.coinABI,
205
213
  functionName: "buy",
214
+ dataSuffix: getAttribution(),
206
215
  args: [
207
216
  OP_BRIDGE_ADDRESS,
208
217
  requestedOrderSize,
@@ -237,7 +246,7 @@ function tradeCoinCall({
237
246
  }
238
247
  }) {
239
248
  return {
240
- abi: _coins.coinABI,
249
+ abi: _protocoldeployments.coinABI,
241
250
  functionName: direction,
242
251
  address: target,
243
252
  args: [
@@ -252,7 +261,7 @@ function tradeCoinCall({
252
261
  }
253
262
  function getTradeFromLogs(receipt, direction) {
254
263
  const eventLogs = _viem.parseEventLogs.call(void 0, {
255
- abi: _coins.coinABI,
264
+ abi: _protocoldeployments.coinABI,
256
265
  logs: receipt.logs
257
266
  });
258
267
  if (direction === "buy") {
@@ -295,23 +304,23 @@ async function getOnchainCoinDetails({
295
304
  contracts: [
296
305
  {
297
306
  address: coin,
298
- abi: _coins.coinABI,
307
+ abi: _protocoldeployments.coinABI,
299
308
  functionName: "balanceOf",
300
309
  args: [user]
301
310
  },
302
311
  {
303
312
  address: coin,
304
- abi: _coins.coinABI,
313
+ abi: _protocoldeployments.coinABI,
305
314
  functionName: "poolAddress"
306
315
  },
307
316
  {
308
317
  address: coin,
309
- abi: _coins.coinABI,
318
+ abi: _protocoldeployments.coinABI,
310
319
  functionName: "owners"
311
320
  },
312
321
  {
313
322
  address: coin,
314
- abi: _coins.coinABI,
323
+ abi: _protocoldeployments.coinABI,
315
324
  functionName: "payoutRecipient"
316
325
  }
317
326
  ],
@@ -330,12 +339,12 @@ async function getOnchainCoinDetails({
330
339
  contracts: [
331
340
  {
332
341
  address: pool,
333
- abi: _coins.iUniswapV3PoolABI,
342
+ abi: _protocoldeployments.iUniswapV3PoolABI,
334
343
  functionName: "slot0"
335
344
  },
336
345
  {
337
346
  address: pool,
338
- abi: _coins.iUniswapV3PoolABI,
347
+ abi: _protocoldeployments.iUniswapV3PoolABI,
339
348
  functionName: "token0"
340
349
  },
341
350
  {
@@ -346,7 +355,7 @@ async function getOnchainCoinDetails({
346
355
  },
347
356
  {
348
357
  address: coin,
349
- abi: _coins.coinABI,
358
+ abi: _protocoldeployments.coinABI,
350
359
  functionName: "totalSupply"
351
360
  },
352
361
  {
@@ -357,7 +366,7 @@ async function getOnchainCoinDetails({
357
366
  },
358
367
  {
359
368
  address: _nullishCoalesce(USDC_WETH_POOL, () => ( coin)),
360
- abi: _coins.iUniswapV3PoolABI,
369
+ abi: _protocoldeployments.iUniswapV3PoolABI,
361
370
  functionName: "slot0"
362
371
  }
363
372
  ],
@@ -434,10 +443,11 @@ function updateCoinURICall({
434
443
  throw new Error("URI needs to be an ipfs:// prefix uri");
435
444
  }
436
445
  return {
437
- abi: _coins.coinABI,
446
+ abi: _protocoldeployments.coinABI,
438
447
  address: coin,
439
448
  functionName: "setContractURI",
440
- args: [newURI]
449
+ args: [newURI],
450
+ dataSuffix: getAttribution()
441
451
  };
442
452
  }
443
453
  async function updateCoinURI(args, walletClient, publicClient) {
@@ -449,7 +459,7 @@ async function updateCoinURI(args, walletClient, publicClient) {
449
459
  });
450
460
  const hash = await walletClient.writeContract(request);
451
461
  const receipt = await publicClient.waitForTransactionReceipt({ hash });
452
- const eventLogs = _viem.parseEventLogs.call(void 0, { abi: _coins.coinABI, logs: receipt.logs });
462
+ const eventLogs = _viem.parseEventLogs.call(void 0, { abi: _protocoldeployments.coinABI, logs: receipt.logs });
453
463
  const uriUpdated = eventLogs.find(
454
464
  (log) => log.eventName === "ContractURIUpdated"
455
465
  );
@@ -466,10 +476,11 @@ function updatePayoutRecipientCall({
466
476
  coin
467
477
  }) {
468
478
  return {
469
- abi: _coins.coinABI,
479
+ abi: _protocoldeployments.coinABI,
470
480
  address: coin,
471
481
  functionName: "setPayoutRecipient",
472
- args: [newPayoutRecipient]
482
+ args: [newPayoutRecipient],
483
+ dataSuffix: getAttribution()
473
484
  };
474
485
  }
475
486
  async function updatePayoutRecipient(args, walletClient, publicClient) {
@@ -481,7 +492,7 @@ async function updatePayoutRecipient(args, walletClient, publicClient) {
481
492
  });
482
493
  const hash = await walletClient.writeContract(request);
483
494
  const receipt = await publicClient.waitForTransactionReceipt({ hash });
484
- const eventLogs = _viem.parseEventLogs.call(void 0, { abi: _coins.coinABI, logs: receipt.logs });
495
+ const eventLogs = _viem.parseEventLogs.call(void 0, { abi: _protocoldeployments.coinABI, logs: receipt.logs });
485
496
  const payoutRecipientUpdated = eventLogs.find(
486
497
  (log) => log.eventName === "CoinPayoutRecipientUpdated"
487
498
  );
@@ -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/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","parseEventLogs","zeroAddress","coinABI","getCoin","getCoins","getCoinComments","getProfile","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 { zoraFactoryImplABI } from \"@zoralabs/coins\";\nimport {\n Address,\n TransactionReceipt,\n WalletClient,\n SimulateContractParameters,\n ContractEventArgsFromTopics,\n parseEventLogs,\n Hex,\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\";\n\nexport type CoinDeploymentLogArgs = ContractEventArgsFromTopics<\n typeof zoraFactoryImplABI,\n \"CoinCreated\"\n>;\n\n// This is the default pool config matching zora.co front-end. TODO: Allow users to customize further parameters within safe contract limits.\nconst POOL_CONFIG =\n \"0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f70fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000b1a2bc2ec50000\" as Hex;\n\nexport type CreateCoinArgs = {\n name: string;\n symbol: string;\n uri: ValidMetadataURI;\n owners?: Address[];\n payoutRecipient: Address;\n platformReferrer?: Address;\n initialPurchaseWei?: bigint;\n};\n\nexport async function createCoinCall({\n name,\n symbol,\n uri,\n owners,\n payoutRecipient,\n initialPurchaseWei = 0n,\n platformReferrer = \"0x0000000000000000000000000000000000000000\",\n}: CreateCoinArgs): Promise<\n SimulateContractParameters<typeof zoraFactoryImplABI, \"deploy\">\n> {\n if (!owners) {\n owners = [payoutRecipient];\n }\n\n const orderSize: bigint = initialPurchaseWei;\n // The default pool config for\n const poolConfig = POOL_CONFIG;\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 orderSize,\n ],\n value: initialPurchaseWei,\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 return eventLogs.find((log) => log.eventName === \"CoinCreated\")?.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 },\n) {\n validateClientNetwork(publicClient);\n\n const createCoinRequest = await createCoinCall(call);\n const { request } = await publicClient.simulateContract({\n ...createCoinRequest,\n 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 { zoraFactoryImplAddress } from \"@zoralabs/coins\";\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 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 { coinABI } from \"@zoralabs/coins\";\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\";\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 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/coins\";\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/coins\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\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 };\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/coins\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\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 };\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 GetCoinData,\n GetCoinResponse,\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinsData,\n GetCoinsResponse,\n GetExploreData,\n GetExploreResponse,\n GetProfileData,\n GetProfileResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\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_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 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 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 url: \"/coins\",\n ...options,\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 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 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 url: \"/profileBalances\",\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 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} 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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/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","parseEventLogs","zeroAddress","coinABI","getCoin","getCoins","getCoinComments","getProfile","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 Hex,\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\";\n\nexport type CoinDeploymentLogArgs = ContractEventArgsFromTopics<\n typeof zoraFactoryImplABI,\n \"CoinCreated\"\n>;\n\n// This is the default pool config matching zora.co front-end. TODO: Allow users to customize further parameters within safe contract limits.\nconst POOL_CONFIG =\n \"0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f70fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000b1a2bc2ec50000\" as Hex;\n\nexport type CreateCoinArgs = {\n name: string;\n symbol: string;\n uri: ValidMetadataURI;\n owners?: Address[];\n payoutRecipient: Address;\n platformReferrer?: Address;\n initialPurchaseWei?: bigint;\n};\n\nexport async function createCoinCall({\n name,\n symbol,\n uri,\n owners,\n payoutRecipient,\n initialPurchaseWei = 0n,\n platformReferrer = \"0x0000000000000000000000000000000000000000\",\n}: CreateCoinArgs): Promise<\n SimulateContractParameters<typeof zoraFactoryImplABI, \"deploy\">\n> {\n if (!owners) {\n owners = [payoutRecipient];\n }\n\n const orderSize: bigint = initialPurchaseWei;\n // The default pool config for\n const poolConfig = POOL_CONFIG;\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 orderSize,\n ],\n value: initialPurchaseWei,\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 return eventLogs.find((log) => log.eventName === \"CoinCreated\")?.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 },\n) {\n validateClientNetwork(publicClient);\n\n const createCoinRequest = await createCoinCall(call);\n const { request } = await publicClient.simulateContract({\n ...createCoinRequest,\n 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 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 { 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 GetCoinData,\n GetCoinResponse,\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinsData,\n GetCoinsResponse,\n GetExploreData,\n GetExploreResponse,\n GetProfileData,\n GetProfileResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\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_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 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 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 url: \"/coins\",\n ...options,\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 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 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 url: \"/profileBalances\",\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 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} 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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"]}
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  // src/actions/createCoin.ts
2
- import { zoraFactoryImplABI } from "@zoralabs/coins";
2
+ import { coinFactoryABI as zoraFactoryImplABI } from "@zoralabs/protocol-deployments";
3
3
  import {
4
4
  parseEventLogs
5
5
  } from "viem";
6
6
 
7
7
  // src/constants.ts
8
- import { zoraFactoryImplAddress } from "@zoralabs/coins";
8
+ import { coinFactoryAddress as zoraFactoryImplAddress } from "@zoralabs/protocol-deployments";
9
9
  import { base } from "viem/chains";
10
10
  var COIN_FACTORY_ADDRESS = zoraFactoryImplAddress["8453"];
11
11
  var SUPERCHAIN_WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
@@ -123,6 +123,13 @@ async function validateMetadataURIContent(metadataURI) {
123
123
  return validateMetadataJSON(metadataJson);
124
124
  }
125
125
 
126
+ // src/utils/attribution.ts
127
+ import { keccak256, slice, toHex } from "viem";
128
+ function getAttribution() {
129
+ const hash = keccak256(toHex("api-sdk.zora.engineering"));
130
+ return slice(hash, 0, 4);
131
+ }
132
+
126
133
  // src/actions/createCoin.ts
127
134
  var POOL_CONFIG = "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f70fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000b1a2bc2ec50000";
128
135
  async function createCoinCall({
@@ -154,7 +161,8 @@ async function createCoinCall({
154
161
  platformReferrer,
155
162
  orderSize
156
163
  ],
157
- value: initialPurchaseWei
164
+ value: initialPurchaseWei,
165
+ dataSuffix: getAttribution()
158
166
  };
159
167
  }
160
168
  function getCoinCreateFromLogs(receipt) {
@@ -186,7 +194,7 @@ async function createCoin(call, walletClient, publicClient, options) {
186
194
  }
187
195
 
188
196
  // src/actions/tradeCoin.ts
189
- import { coinABI } from "@zoralabs/coins";
197
+ import { coinABI } from "@zoralabs/protocol-deployments";
190
198
  import {
191
199
  parseEther,
192
200
  zeroAddress,
@@ -203,6 +211,7 @@ async function simulateBuy({
203
211
  address: target,
204
212
  abi: coinABI,
205
213
  functionName: "buy",
214
+ dataSuffix: getAttribution(),
206
215
  args: [
207
216
  OP_BRIDGE_ADDRESS,
208
217
  requestedOrderSize,
@@ -277,7 +286,7 @@ async function tradeCoin(params, walletClient, publicClient) {
277
286
  }
278
287
 
279
288
  // src/actions/getOnchainCoinDetails.ts
280
- import { coinABI as coinABI2, iUniswapV3PoolABI } from "@zoralabs/coins";
289
+ import { coinABI as coinABI2, iUniswapV3PoolABI } from "@zoralabs/protocol-deployments";
281
290
  import {
282
291
  erc20Abi,
283
292
  formatEther,
@@ -422,7 +431,7 @@ function uniswapV3SqrtPriceToBigIntScaled(sqrtPriceX96, token0Decimals, token1De
422
431
  }
423
432
 
424
433
  // src/actions/updateCoinURI.ts
425
- import { coinABI as coinABI3 } from "@zoralabs/coins";
434
+ import { coinABI as coinABI3 } from "@zoralabs/protocol-deployments";
426
435
  import {
427
436
  parseEventLogs as parseEventLogs3
428
437
  } from "viem";
@@ -437,7 +446,8 @@ function updateCoinURICall({
437
446
  abi: coinABI3,
438
447
  address: coin,
439
448
  functionName: "setContractURI",
440
- args: [newURI]
449
+ args: [newURI],
450
+ dataSuffix: getAttribution()
441
451
  };
442
452
  }
443
453
  async function updateCoinURI(args, walletClient, publicClient) {
@@ -457,7 +467,7 @@ async function updateCoinURI(args, walletClient, publicClient) {
457
467
  }
458
468
 
459
469
  // src/actions/updatePayoutRecipient.ts
460
- import { coinABI as coinABI4 } from "@zoralabs/coins";
470
+ import { coinABI as coinABI4 } from "@zoralabs/protocol-deployments";
461
471
  import {
462
472
  parseEventLogs as parseEventLogs4
463
473
  } from "viem";
@@ -469,7 +479,8 @@ function updatePayoutRecipientCall({
469
479
  abi: coinABI4,
470
480
  address: coin,
471
481
  functionName: "setPayoutRecipient",
472
- args: [newPayoutRecipient]
482
+ args: [newPayoutRecipient],
483
+ dataSuffix: getAttribution()
473
484
  };
474
485
  }
475
486
  async function updatePayoutRecipient(args, walletClient, publicClient) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/actions/createCoin.ts","../src/constants.ts","../src/utils/validateClientNetwork.ts","../src/metadata/cleanAndValidateMetadataURI.ts","../src/metadata/validateMetadataJSON.ts","../src/metadata/validateMetadataURIContent.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"],"sourcesContent":["import { zoraFactoryImplABI } from \"@zoralabs/coins\";\nimport {\n Address,\n TransactionReceipt,\n WalletClient,\n SimulateContractParameters,\n ContractEventArgsFromTopics,\n parseEventLogs,\n Hex,\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\";\n\nexport type CoinDeploymentLogArgs = ContractEventArgsFromTopics<\n typeof zoraFactoryImplABI,\n \"CoinCreated\"\n>;\n\n// This is the default pool config matching zora.co front-end. TODO: Allow users to customize further parameters within safe contract limits.\nconst POOL_CONFIG =\n \"0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f70fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000b1a2bc2ec50000\" as Hex;\n\nexport type CreateCoinArgs = {\n name: string;\n symbol: string;\n uri: ValidMetadataURI;\n owners?: Address[];\n payoutRecipient: Address;\n platformReferrer?: Address;\n initialPurchaseWei?: bigint;\n};\n\nexport async function createCoinCall({\n name,\n symbol,\n uri,\n owners,\n payoutRecipient,\n initialPurchaseWei = 0n,\n platformReferrer = \"0x0000000000000000000000000000000000000000\",\n}: CreateCoinArgs): Promise<\n SimulateContractParameters<typeof zoraFactoryImplABI, \"deploy\">\n> {\n if (!owners) {\n owners = [payoutRecipient];\n }\n\n const orderSize: bigint = initialPurchaseWei;\n // The default pool config for\n const poolConfig = POOL_CONFIG;\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 orderSize,\n ],\n value: initialPurchaseWei,\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 return eventLogs.find((log) => log.eventName === \"CoinCreated\")?.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 },\n) {\n validateClientNetwork(publicClient);\n\n const createCoinRequest = await createCoinCall(call);\n const { request } = await publicClient.simulateContract({\n ...createCoinRequest,\n 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 { zoraFactoryImplAddress } from \"@zoralabs/coins\";\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 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 { coinABI } from \"@zoralabs/coins\";\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\";\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 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/coins\";\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/coins\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\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 };\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/coins\";\nimport { validateClientNetwork } from \"../utils/validateClientNetwork\";\nimport {\n Address,\n parseEventLogs,\n SimulateContractParameters,\n WalletClient,\n} from \"viem\";\nimport { GenericPublicClient } from \"src/utils/genericPublicClient\";\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 };\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 GetCoinData,\n GetCoinResponse,\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinsData,\n GetCoinsResponse,\n GetExploreData,\n GetExploreResponse,\n GetProfileData,\n GetProfileResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\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_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 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 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 url: \"/coins\",\n ...options,\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 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 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 url: \"/profileBalances\",\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 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} 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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"],"mappings":"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","names":["base","parseEventLogs","baseSepolia","coinABI","zeroAddress","coinABI","coinABI","parseEventLogs","coinABI","coinABI","parseEventLogs","coinABI","getCoin","getCoins","getCoinComments","getProfile","getProfileBalances"]}
1
+ {"version":3,"sources":["../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/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"],"sourcesContent":["import { coinFactoryABI as zoraFactoryImplABI } from \"@zoralabs/protocol-deployments\";\nimport {\n Address,\n TransactionReceipt,\n WalletClient,\n SimulateContractParameters,\n ContractEventArgsFromTopics,\n parseEventLogs,\n Hex,\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\";\n\nexport type CoinDeploymentLogArgs = ContractEventArgsFromTopics<\n typeof zoraFactoryImplABI,\n \"CoinCreated\"\n>;\n\n// This is the default pool config matching zora.co front-end. TODO: Allow users to customize further parameters within safe contract limits.\nconst POOL_CONFIG =\n \"0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f70fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf2c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000b1a2bc2ec50000\" as Hex;\n\nexport type CreateCoinArgs = {\n name: string;\n symbol: string;\n uri: ValidMetadataURI;\n owners?: Address[];\n payoutRecipient: Address;\n platformReferrer?: Address;\n initialPurchaseWei?: bigint;\n};\n\nexport async function createCoinCall({\n name,\n symbol,\n uri,\n owners,\n payoutRecipient,\n initialPurchaseWei = 0n,\n platformReferrer = \"0x0000000000000000000000000000000000000000\",\n}: CreateCoinArgs): Promise<\n SimulateContractParameters<typeof zoraFactoryImplABI, \"deploy\">\n> {\n if (!owners) {\n owners = [payoutRecipient];\n }\n\n const orderSize: bigint = initialPurchaseWei;\n // The default pool config for\n const poolConfig = POOL_CONFIG;\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 orderSize,\n ],\n value: initialPurchaseWei,\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 return eventLogs.find((log) => log.eventName === \"CoinCreated\")?.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 },\n) {\n validateClientNetwork(publicClient);\n\n const createCoinRequest = await createCoinCall(call);\n const { request } = await publicClient.simulateContract({\n ...createCoinRequest,\n 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 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 { 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 GetCoinData,\n GetCoinResponse,\n GetCoinCommentsData,\n GetCoinCommentsResponse,\n GetCoinsData,\n GetCoinsResponse,\n GetExploreData,\n GetExploreResponse,\n GetProfileData,\n GetProfileResponse,\n GetProfileBalancesData,\n GetProfileBalancesResponse,\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_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 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 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 url: \"/coins\",\n ...options,\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 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 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 url: \"/profileBalances\",\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 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} 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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 meta: 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"],"mappings":"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","names":["base","parseEventLogs","baseSepolia","baseSepolia","parseEventLogs","coinABI","zeroAddress","coinABI","coinABI","parseEventLogs","coinABI","parseEventLogs","coinABI","parseEventLogs","coinABI","parseEventLogs","getCoin","getCoins","getCoinComments","getProfile","getProfileBalances"]}
@@ -0,0 +1,3 @@
1
+ import { Hex } from "viem";
2
+ export declare function getAttribution(): Hex;
3
+ //# sourceMappingURL=attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/utils/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAA2B,MAAM,MAAM,CAAC;AAEpD,wBAAgB,cAAc,IAAI,GAAG,CAGpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateClientNetwork.d.ts","sourceRoot":"","sources":["../../src/utils/validateClientNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGpC,eAAO,MAAM,qBAAqB,iBAClB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,SAa/C,CAAC"}
1
+ {"version":3,"file":"validateClientNetwork.d.ts","sourceRoot":"","sources":["../../src/utils/validateClientNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGpC,eAAO,MAAM,qBAAqB,GAChC,cAAc,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,SAa/C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/coins-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "repository": "https://github.com/ourzora/zora-protocol",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@hey-api/client-fetch": "^0.8.3",
26
- "@zoralabs/coins": "^0.7.1"
26
+ "@zoralabs/protocol-deployments": "^0.5.6"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "abitype": "^1.0.8",
@@ -1,4 +1,4 @@
1
- import { zoraFactoryImplABI } from "@zoralabs/coins";
1
+ import { coinFactoryABI as zoraFactoryImplABI } from "@zoralabs/protocol-deployments";
2
2
  import {
3
3
  Address,
4
4
  TransactionReceipt,
@@ -12,6 +12,7 @@ import { COIN_FACTORY_ADDRESS } from "../constants";
12
12
  import { validateClientNetwork } from "../utils/validateClientNetwork";
13
13
  import { GenericPublicClient } from "src/utils/genericPublicClient";
14
14
  import { validateMetadataURIContent, ValidMetadataURI } from "src/metadata";
15
+ import { getAttribution } from "../utils/attribution";
15
16
 
16
17
  export type CoinDeploymentLogArgs = ContractEventArgsFromTopics<
17
18
  typeof zoraFactoryImplABI,
@@ -69,6 +70,7 @@ export async function createCoinCall({
69
70
  orderSize,
70
71
  ],
71
72
  value: initialPurchaseWei,
73
+ dataSuffix: getAttribution(),
72
74
  } as const;
73
75
  }
74
76
 
@@ -1,4 +1,4 @@
1
- import { coinABI, iUniswapV3PoolABI } from "@zoralabs/coins";
1
+ import { coinABI, iUniswapV3PoolABI } from "@zoralabs/protocol-deployments";
2
2
  import {
3
3
  SUPERCHAIN_WETH_ADDRESS,
4
4
  USDC_WETH_POOLS_BY_CHAIN,
@@ -1,4 +1,4 @@
1
- import { coinABI } from "@zoralabs/coins";
1
+ import { coinABI } from "@zoralabs/protocol-deployments";
2
2
  import { validateClientNetwork } from "../utils/validateClientNetwork";
3
3
  import {
4
4
  Address,
@@ -12,6 +12,7 @@ import {
12
12
  } from "viem";
13
13
  import { baseSepolia } from "viem/chains";
14
14
  import { GenericPublicClient } from "src/utils/genericPublicClient";
15
+ import { getAttribution } from "../utils/attribution";
15
16
  // Define trade event args type
16
17
 
17
18
  export type SellEventArgs = ContractEventArgsFromTopics<
@@ -51,6 +52,7 @@ export async function simulateBuy({
51
52
  address: target,
52
53
  abi: coinABI,
53
54
  functionName: "buy",
55
+ dataSuffix: getAttribution(),
54
56
  args: [
55
57
  OP_BRIDGE_ADDRESS,
56
58
  requestedOrderSize,
@@ -1,4 +1,4 @@
1
- import { coinABI } from "@zoralabs/coins";
1
+ import { coinABI } from "@zoralabs/protocol-deployments";
2
2
  import { validateClientNetwork } from "../utils/validateClientNetwork";
3
3
  import {
4
4
  Address,
@@ -7,6 +7,7 @@ import {
7
7
  WalletClient,
8
8
  } from "viem";
9
9
  import { GenericPublicClient } from "src/utils/genericPublicClient";
10
+ import { getAttribution } from "../utils/attribution";
10
11
 
11
12
  export type UpdateCoinURIArgs = {
12
13
  coin: Address;
@@ -26,6 +27,7 @@ export function updateCoinURICall({
26
27
  address: coin,
27
28
  functionName: "setContractURI",
28
29
  args: [newURI],
30
+ dataSuffix: getAttribution(),
29
31
  };
30
32
  }
31
33
 
@@ -1,4 +1,4 @@
1
- import { coinABI } from "@zoralabs/coins";
1
+ import { coinABI } from "@zoralabs/protocol-deployments";
2
2
  import { validateClientNetwork } from "../utils/validateClientNetwork";
3
3
  import {
4
4
  Address,
@@ -7,6 +7,7 @@ import {
7
7
  WalletClient,
8
8
  } from "viem";
9
9
  import { GenericPublicClient } from "src/utils/genericPublicClient";
10
+ import { getAttribution } from "../utils/attribution";
10
11
 
11
12
  export type UpdatePayoutRecipientArgs = {
12
13
  coin: Address;
@@ -22,6 +23,7 @@ export function updatePayoutRecipientCall({
22
23
  address: coin,
23
24
  functionName: "setPayoutRecipient",
24
25
  args: [newPayoutRecipient],
26
+ dataSuffix: getAttribution(),
25
27
  };
26
28
  }
27
29
 
package/src/constants.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { zoraFactoryImplAddress } from "@zoralabs/coins";
1
+ import { coinFactoryAddress as zoraFactoryImplAddress } from "@zoralabs/protocol-deployments";
2
2
  import { Address } from "viem";
3
3
  import { base } from "viem/chains";
4
4
 
@@ -0,0 +1,6 @@
1
+ import { Hex, keccak256, slice, toHex } from "viem";
2
+
3
+ export function getAttribution(): Hex {
4
+ const hash = keccak256(toHex("api-sdk.zora.engineering"));
5
+ return slice(hash, 0, 4) as Hex;
6
+ }