@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 +121 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +122 -46
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
264
|
+
const sig = await buildClobEip712Signature(signer, chainId, ts, n, address);
|
|
265
|
+
const resolvedAddress = address ?? await getSignerAddress(signer);
|
|
266
266
|
const headers = {
|
|
267
|
-
POLY_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
|
-
|
|
769
|
-
|
|
770
|
-
|
|
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
|
-
|
|
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:
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = {};
|