@polymarket/clob-client-v2 1.0.2 → 1.0.3-canary.0

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/dist/index.cjs CHANGED
@@ -202,8 +202,8 @@ var signTypedDataWithSigner = async ({
202
202
  };
203
203
 
204
204
  // src/signing/eip712.ts
205
- var buildClobEip712Signature = async (signer, chainId, timestamp, nonce) => {
206
- const address = await getSignerAddress(signer);
205
+ var buildClobEip712Signature = async (signer, chainId, timestamp, nonce, address) => {
206
+ const resolvedAddress = address ?? await getSignerAddress(signer);
207
207
  const ts = timestamp.toString();
208
208
  const domain = {
209
209
  name: "ClobAuthDomain",
@@ -219,7 +219,7 @@ var buildClobEip712Signature = async (signer, chainId, timestamp, nonce) => {
219
219
  ]
220
220
  };
221
221
  const value = {
222
- address,
222
+ address: resolvedAddress,
223
223
  timestamp: ts,
224
224
  nonce,
225
225
  message: MSG_TO_SIGN
@@ -252,7 +252,7 @@ var buildPolyHmacSignature = (secret, timestamp, method, requestPath, body) => {
252
252
  };
253
253
 
254
254
  // src/headers/index.ts
255
- var createL1Headers = async (signer, chainId, nonce, timestamp) => {
255
+ var createL1Headers = async (signer, chainId, nonce, timestamp, address) => {
256
256
  let ts = Math.floor(Date.now() / 1e3);
257
257
  if (timestamp !== void 0) {
258
258
  ts = timestamp;
@@ -261,10 +261,10 @@ var createL1Headers = async (signer, chainId, nonce, timestamp) => {
261
261
  if (nonce !== void 0) {
262
262
  n = nonce;
263
263
  }
264
- const sig = await buildClobEip712Signature(signer, chainId, ts, n);
265
- const address = await getSignerAddress(signer);
264
+ const sig = await buildClobEip712Signature(signer, chainId, ts, n, address);
265
+ const resolvedAddress = address ?? await getSignerAddress(signer);
266
266
  const headers = {
267
- POLY_ADDRESS: address,
267
+ POLY_ADDRESS: resolvedAddress,
268
268
  POLY_SIGNATURE: sig,
269
269
  POLY_TIMESTAMP: `${ts}`,
270
270
  POLY_NONCE: `${n}`
@@ -719,22 +719,51 @@ var SignatureTypeV2 = /* @__PURE__ */ ((SignatureTypeV22) => {
719
719
  })(SignatureTypeV2 || {});
720
720
 
721
721
  // src/order-utils/exchangeOrderBuilderV2.ts
722
+ var ORDER_TYPE_STRING = "Order(uint256 salt,address maker,address signer,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint8 side,uint8 signatureType,uint256 timestamp,bytes32 metadata,bytes32 builder)";
723
+ var ORDER_TYPE_HASH = (0, import_viem3.keccak256)((0, import_viem3.toHex)(ORDER_TYPE_STRING));
724
+ var DOMAIN_TYPE_HASH = (0, import_viem3.keccak256)(
725
+ (0, import_viem3.toHex)("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
726
+ );
727
+ var TYPED_DATA_SIGN_STRUCT = [
728
+ { name: "contents", type: "Order" },
729
+ { name: "name", type: "string" },
730
+ { name: "version", type: "string" },
731
+ { name: "chainId", type: "uint256" },
732
+ { name: "verifyingContract", type: "address" },
733
+ { name: "salt", type: "bytes32" }
734
+ ];
735
+ var CTF_EXCHANGE_NAME_HASH = (0, import_viem3.keccak256)((0, import_viem3.toHex)(CTF_EXCHANGE_V2_DOMAIN_NAME));
736
+ var CTF_EXCHANGE_VERSION_HASH = (0, import_viem3.keccak256)((0, import_viem3.toHex)(CTF_EXCHANGE_V2_DOMAIN_VERSION));
722
737
  var ExchangeOrderBuilderV2 = class {
723
738
  constructor(contractAddress, chainId, signer, generateSalt = generateOrderSalt) {
724
739
  this.contractAddress = contractAddress;
725
740
  this.chainId = chainId;
726
741
  this.signer = signer;
727
742
  this.generateSalt = generateSalt;
743
+ this.appDomainSep = (0, import_viem3.keccak256)(
744
+ (0, import_viem3.encodeAbiParameters)(
745
+ [
746
+ { type: "bytes32" },
747
+ { type: "bytes32" },
748
+ { type: "bytes32" },
749
+ { type: "uint256" },
750
+ { type: "address" }
751
+ ],
752
+ [
753
+ DOMAIN_TYPE_HASH,
754
+ CTF_EXCHANGE_NAME_HASH,
755
+ CTF_EXCHANGE_VERSION_HASH,
756
+ BigInt(chainId),
757
+ contractAddress
758
+ ]
759
+ )
760
+ );
728
761
  }
729
762
  contractAddress;
730
763
  chainId;
731
764
  signer;
732
765
  generateSalt;
733
- /**
734
- * build an order object including the signature.
735
- * @param orderData
736
- * @returns a SignedOrder object (order + signature)
737
- */
766
+ appDomainSep;
738
767
  async buildSignedOrder(orderData) {
739
768
  const order = await this.buildOrder(orderData);
740
769
  const orderTypedData = this.buildOrderTypedData(order);
@@ -744,11 +773,6 @@ var ExchangeOrderBuilderV2 = class {
744
773
  signature: orderSignature
745
774
  };
746
775
  }
747
- /**
748
- * Creates an Order object from order data.
749
- * @param OrderData
750
- * @returns a Order object (not signed)
751
- */
752
776
  async buildOrder({
753
777
  maker,
754
778
  tokenId,
@@ -765,9 +789,11 @@ var ExchangeOrderBuilderV2 = class {
765
789
  if (!signer) {
766
790
  signer = maker;
767
791
  }
768
- const signerAddress = await getSignerAddress(this.signer);
769
- if (signer !== signerAddress) {
770
- throw new Error("signer does not match");
792
+ if (signatureType !== 3 /* POLY_1271 */) {
793
+ const signerAddress = await getSignerAddress(this.signer);
794
+ if (signer !== signerAddress) {
795
+ throw new Error("signer does not match");
796
+ }
771
797
  }
772
798
  return {
773
799
  salt: this.generateSalt(),
@@ -784,11 +810,6 @@ var ExchangeOrderBuilderV2 = class {
784
810
  expiration: expiration ?? "0"
785
811
  };
786
812
  }
787
- /**
788
- * Parses an Order object to EIP712 typed data
789
- * @param order
790
- * @returns a EIP712TypedData object
791
- */
792
813
  buildOrderTypedData(order) {
793
814
  return {
794
815
  primaryType: "Order",
@@ -817,29 +838,78 @@ var ExchangeOrderBuilderV2 = class {
817
838
  }
818
839
  };
819
840
  }
820
- /**
821
- * Generates order's signature from a EIP712TypedData object + the signer address
822
- * @param typedData
823
- * @returns a OrderSignature that is an string
824
- */
825
- buildOrderSignature(typedData) {
841
+ async buildOrderSignature(typedData) {
826
842
  delete typedData.types.EIP712Domain;
827
- return signTypedDataWithSigner({
843
+ const msg = typedData.message;
844
+ if (msg.signatureType !== 3 /* POLY_1271 */) {
845
+ return signTypedDataWithSigner({
846
+ signer: this.signer,
847
+ domain: typedData.domain,
848
+ types: typedData.types,
849
+ value: typedData.message,
850
+ primaryType: typedData.primaryType
851
+ });
852
+ }
853
+ const contentsHash = (0, import_viem3.keccak256)(
854
+ (0, import_viem3.encodeAbiParameters)(
855
+ [
856
+ { type: "bytes32" },
857
+ { type: "uint256" },
858
+ { type: "address" },
859
+ { type: "address" },
860
+ { type: "uint256" },
861
+ { type: "uint256" },
862
+ { type: "uint256" },
863
+ { type: "uint8" },
864
+ { type: "uint8" },
865
+ { type: "uint256" },
866
+ { type: "bytes32" },
867
+ { type: "bytes32" }
868
+ ],
869
+ [
870
+ ORDER_TYPE_HASH,
871
+ BigInt(msg.salt),
872
+ msg.maker,
873
+ msg.signer,
874
+ BigInt(msg.tokenId),
875
+ BigInt(msg.makerAmount),
876
+ BigInt(msg.takerAmount),
877
+ msg.side,
878
+ msg.signatureType,
879
+ BigInt(msg.timestamp),
880
+ msg.metadata,
881
+ msg.builder
882
+ ]
883
+ )
884
+ );
885
+ const innerSig = await signTypedDataWithSigner({
828
886
  signer: this.signer,
829
- domain: typedData.domain,
830
- types: typedData.types,
831
- value: typedData.message,
832
- primaryType: typedData.primaryType
887
+ domain: {
888
+ name: CTF_EXCHANGE_V2_DOMAIN_NAME,
889
+ version: CTF_EXCHANGE_V2_DOMAIN_VERSION,
890
+ chainId: this.chainId,
891
+ verifyingContract: this.contractAddress
892
+ },
893
+ types: {
894
+ TypedDataSign: TYPED_DATA_SIGN_STRUCT,
895
+ Order: CTF_EXCHANGE_V2_ORDER_STRUCT
896
+ },
897
+ primaryType: "TypedDataSign",
898
+ value: {
899
+ contents: typedData.message,
900
+ name: "DepositWallet",
901
+ version: "1",
902
+ chainId: this.chainId,
903
+ verifyingContract: msg.signer,
904
+ salt: bytes32Zero
905
+ }
833
906
  });
907
+ const ctLen = ORDER_TYPE_STRING.length;
908
+ const lenHex = ctLen.toString(16).padStart(4, "0");
909
+ return `0x${innerSig.slice(2)}${this.appDomainSep.slice(2)}${contentsHash.slice(2)}${(0, import_viem3.toHex)(ORDER_TYPE_STRING).slice(2)}${lenHex}`;
834
910
  }
835
- /**
836
- * Generates the hash of the order from a EIP712TypedData object.
837
- * @param orderTypedData
838
- * @returns a OrderHash that is an string
839
- */
840
911
  buildOrderHash(orderTypedData) {
841
- const digest = (0, import_viem3.hashTypedData)(orderTypedData);
842
- return digest;
912
+ return (0, import_viem3.hashTypedData)(orderTypedData);
843
913
  }
844
914
  };
845
915
 
@@ -1143,9 +1213,10 @@ var ROUNDING_CONFIG = {
1143
1213
  var createMarketOrder = async (eoaSigner, chainId, signatureType, funderAddress, userMarketOrder, options, version) => {
1144
1214
  const eoaSignerAddress = await getSignerAddress(eoaSigner);
1145
1215
  const maker = funderAddress === void 0 ? eoaSignerAddress : funderAddress;
1216
+ const signerForOrder = signatureType === 3 /* POLY_1271 */ ? maker : eoaSignerAddress;
1146
1217
  const contractConfig = getContractConfig(chainId);
1147
1218
  const orderData = await buildMarketOrderCreationArgs(
1148
- eoaSignerAddress,
1219
+ signerForOrder,
1149
1220
  maker,
1150
1221
  signatureType,
1151
1222
  userMarketOrder,
@@ -1173,9 +1244,10 @@ var createMarketOrder = async (eoaSigner, chainId, signatureType, funderAddress,
1173
1244
  var createOrder = async (eoaSigner, chainId, signatureType, funderAddress, userOrder, options, version) => {
1174
1245
  const eoaSignerAddress = await getSignerAddress(eoaSigner);
1175
1246
  const maker = funderAddress === void 0 ? eoaSignerAddress : funderAddress;
1247
+ const signerForOrder = signatureType === 3 /* POLY_1271 */ ? maker : eoaSignerAddress;
1176
1248
  const contractConfig = getContractConfig(chainId);
1177
1249
  const orderData = await buildOrderCreationArgs(
1178
- eoaSignerAddress,
1250
+ signerForOrder,
1179
1251
  maker,
1180
1252
  signatureType,
1181
1253
  userOrder,
@@ -1326,6 +1398,8 @@ var ClobClient = class {
1326
1398
  tokenConditionMap;
1327
1399
  useServerTime;
1328
1400
  builderConfig;
1401
+ signatureType;
1402
+ funderAddress;
1329
1403
  cachedVersion;
1330
1404
  retryOnError;
1331
1405
  throwOnError;
@@ -1357,6 +1431,8 @@ var ClobClient = class {
1357
1431
  funderAddress,
1358
1432
  getSigner
1359
1433
  );
1434
+ this.signatureType = signatureType ?? 0 /* EOA */;
1435
+ this.funderAddress = funderAddress;
1360
1436
  this.tickSizes = {};
1361
1437
  this.negRisk = {};
1362
1438
  this.feeRates = {};