@metamask/transaction-pay-controller 22.4.0 → 22.6.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/CHANGELOG.md +28 -1
- package/dist/TransactionPayController-method-action-types.cjs.map +1 -1
- package/dist/TransactionPayController-method-action-types.d.cts +23 -1
- package/dist/TransactionPayController-method-action-types.d.cts.map +1 -1
- package/dist/TransactionPayController-method-action-types.d.mts +23 -1
- package/dist/TransactionPayController-method-action-types.d.mts.map +1 -1
- package/dist/TransactionPayController-method-action-types.mjs.map +1 -1
- package/dist/TransactionPayController.cjs +36 -4
- package/dist/TransactionPayController.cjs.map +1 -1
- package/dist/TransactionPayController.d.cts +18 -2
- package/dist/TransactionPayController.d.cts.map +1 -1
- package/dist/TransactionPayController.d.mts +18 -2
- package/dist/TransactionPayController.d.mts.map +1 -1
- package/dist/TransactionPayController.mjs +36 -4
- package/dist/TransactionPayController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/strategy/across/across-quotes.cjs +127 -31
- package/dist/strategy/across/across-quotes.cjs.map +1 -1
- package/dist/strategy/across/across-quotes.d.cts.map +1 -1
- package/dist/strategy/across/across-quotes.d.mts.map +1 -1
- package/dist/strategy/across/across-quotes.mjs +127 -31
- package/dist/strategy/across/across-quotes.mjs.map +1 -1
- package/dist/strategy/across/across-submit.cjs +219 -18
- package/dist/strategy/across/across-submit.cjs.map +1 -1
- package/dist/strategy/across/across-submit.d.cts.map +1 -1
- package/dist/strategy/across/across-submit.d.mts.map +1 -1
- package/dist/strategy/across/across-submit.mjs +221 -20
- package/dist/strategy/across/across-submit.mjs.map +1 -1
- package/dist/strategy/across/transactions.cjs +21 -1
- package/dist/strategy/across/transactions.cjs.map +1 -1
- package/dist/strategy/across/transactions.d.cts +8 -0
- package/dist/strategy/across/transactions.d.cts.map +1 -1
- package/dist/strategy/across/transactions.d.mts +8 -0
- package/dist/strategy/across/transactions.d.mts.map +1 -1
- package/dist/strategy/across/transactions.mjs +19 -0
- package/dist/strategy/across/transactions.mjs.map +1 -1
- package/dist/strategy/relay/polymarket/calldata.cjs +28 -0
- package/dist/strategy/relay/polymarket/calldata.cjs.map +1 -0
- package/dist/strategy/relay/polymarket/calldata.d.cts +14 -0
- package/dist/strategy/relay/polymarket/calldata.d.cts.map +1 -0
- package/dist/strategy/relay/polymarket/calldata.d.mts +14 -0
- package/dist/strategy/relay/polymarket/calldata.d.mts.map +1 -0
- package/dist/strategy/relay/polymarket/calldata.mjs +21 -0
- package/dist/strategy/relay/polymarket/calldata.mjs.map +1 -0
- package/dist/strategy/relay/polymarket/constants.cjs +9 -0
- package/dist/strategy/relay/polymarket/constants.cjs.map +1 -0
- package/dist/strategy/relay/polymarket/constants.d.cts +6 -0
- package/dist/strategy/relay/polymarket/constants.d.cts.map +1 -0
- package/dist/strategy/relay/polymarket/constants.d.mts +6 -0
- package/dist/strategy/relay/polymarket/constants.d.mts.map +1 -0
- package/dist/strategy/relay/polymarket/constants.mjs +6 -0
- package/dist/strategy/relay/polymarket/constants.mjs.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.cjs +170 -0
- package/dist/strategy/relay/polymarket/withdraw.cjs.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.d.cts +13 -0
- package/dist/strategy/relay/polymarket/withdraw.d.cts.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.d.mts +13 -0
- package/dist/strategy/relay/polymarket/withdraw.d.mts.map +1 -0
- package/dist/strategy/relay/polymarket/withdraw.mjs +164 -0
- package/dist/strategy/relay/polymarket/withdraw.mjs.map +1 -0
- package/dist/strategy/relay/relay-quotes.cjs +8 -2
- package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.cts.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.mts.map +1 -1
- package/dist/strategy/relay/relay-quotes.mjs +8 -2
- package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
- package/dist/strategy/relay/relay-submit.cjs +52 -18
- package/dist/strategy/relay/relay-submit.cjs.map +1 -1
- package/dist/strategy/relay/relay-submit.d.cts.map +1 -1
- package/dist/strategy/relay/relay-submit.d.mts.map +1 -1
- package/dist/strategy/relay/relay-submit.mjs +52 -18
- package/dist/strategy/relay/relay-submit.mjs.map +1 -1
- package/dist/strategy/relay/types.cjs.map +1 -1
- package/dist/strategy/relay/types.d.cts +2 -1
- package/dist/strategy/relay/types.d.cts.map +1 -1
- package/dist/strategy/relay/types.d.mts +2 -1
- package/dist/strategy/relay/types.d.mts.map +1 -1
- package/dist/strategy/relay/types.mjs.map +1 -1
- package/dist/tests/messenger-mock.cjs +6 -0
- package/dist/tests/messenger-mock.cjs.map +1 -1
- package/dist/tests/messenger-mock.d.cts +14 -0
- package/dist/tests/messenger-mock.d.cts.map +1 -1
- package/dist/tests/messenger-mock.d.mts +14 -0
- package/dist/tests/messenger-mock.d.mts.map +1 -1
- package/dist/tests/messenger-mock.mjs +6 -0
- package/dist/tests/messenger-mock.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +27 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +27 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/feature-flags.cjs +1 -1
- package/dist/utils/feature-flags.cjs.map +1 -1
- package/dist/utils/feature-flags.d.cts +0 -1
- package/dist/utils/feature-flags.d.cts.map +1 -1
- package/dist/utils/feature-flags.d.mts +0 -1
- package/dist/utils/feature-flags.d.mts.map +1 -1
- package/dist/utils/feature-flags.mjs +1 -1
- package/dist/utils/feature-flags.mjs.map +1 -1
- package/dist/utils/gas-station.cjs +1 -1
- package/dist/utils/gas-station.cjs.map +1 -1
- package/dist/utils/gas-station.mjs +1 -1
- package/dist/utils/gas-station.mjs.map +1 -1
- package/dist/utils/quotes.cjs +8 -3
- package/dist/utils/quotes.cjs.map +1 -1
- package/dist/utils/quotes.d.cts.map +1 -1
- package/dist/utils/quotes.d.mts.map +1 -1
- package/dist/utils/quotes.mjs +8 -3
- package/dist/utils/quotes.mjs.map +1 -1
- package/dist/utils/source-amounts.cjs +10 -8
- package/dist/utils/source-amounts.cjs.map +1 -1
- package/dist/utils/source-amounts.d.cts.map +1 -1
- package/dist/utils/source-amounts.d.mts.map +1 -1
- package/dist/utils/source-amounts.mjs +10 -8
- package/dist/utils/source-amounts.mjs.map +1 -1
- package/dist/utils/token.cjs +9 -6
- package/dist/utils/token.cjs.map +1 -1
- package/dist/utils/token.d.cts.map +1 -1
- package/dist/utils/token.d.mts.map +1 -1
- package/dist/utils/token.mjs +9 -6
- package/dist/utils/token.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calldata.cjs","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/calldata.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAG/C,MAAM,KAAK,GAAG,IAAI,eAAS,CAAC;IAC1B,mDAAmD;IACnD,mEAAmE;IACnE,iEAAiE;IACjE,sDAAsD;CACvD,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,OAAY,EAAE,MAAc;IACxD,OAAO,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAQ,CAAC;AACvE,CAAC;AAFD,sCAEC;AAED,SAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,SAAS,EACT,MAAM,GAKP;IACC,OAAO,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAQ,CAAC;AAC/E,CAAC;AAVD,oCAUC;AAED,SAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,MAAM,GAKP;IACC,OAAO,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAQ,CAAC;AAC7E,CAAC;AAVD,gCAUC;AAED,SAAgB,6BAA6B,CAAC,IAAS;IACrD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/D,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAHD,sEAGC","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { Hex } from '@metamask/utils';\n\nconst iface = new Interface([\n 'function approve(address spender, uint256 amount)',\n 'function unwrap(address asset, address recipient, uint256 amount)',\n 'function wrap(address asset, address recipient, uint256 amount)',\n 'function transfer(address recipient, uint256 amount)',\n]);\n\nexport function encodeApprove(spender: Hex, amount: bigint): Hex {\n return iface.encodeFunctionData('approve', [spender, amount]) as Hex;\n}\n\nexport function encodeUnwrap({\n asset,\n recipient,\n amount,\n}: {\n asset: Hex;\n recipient: Hex;\n amount: bigint;\n}): Hex {\n return iface.encodeFunctionData('unwrap', [asset, recipient, amount]) as Hex;\n}\n\nexport function encodeWrap({\n asset,\n recipient,\n amount,\n}: {\n asset: Hex;\n recipient: Hex;\n amount: bigint;\n}): Hex {\n return iface.encodeFunctionData('wrap', [asset, recipient, amount]) as Hex;\n}\n\nexport function extractErc20TransferRecipient(data: Hex): Hex {\n const [recipient] = iface.decodeFunctionData('transfer', data);\n return recipient as Hex;\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
export declare function encodeApprove(spender: Hex, amount: bigint): Hex;
|
|
3
|
+
export declare function encodeUnwrap({ asset, recipient, amount, }: {
|
|
4
|
+
asset: Hex;
|
|
5
|
+
recipient: Hex;
|
|
6
|
+
amount: bigint;
|
|
7
|
+
}): Hex;
|
|
8
|
+
export declare function encodeWrap({ asset, recipient, amount, }: {
|
|
9
|
+
asset: Hex;
|
|
10
|
+
recipient: Hex;
|
|
11
|
+
amount: bigint;
|
|
12
|
+
}): Hex;
|
|
13
|
+
export declare function extractErc20TransferRecipient(data: Hex): Hex;
|
|
14
|
+
//# sourceMappingURL=calldata.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calldata.d.cts","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/calldata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAS3C,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAE/D;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,SAAS,EACT,MAAM,GACP,EAAE;IACD,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,GAAG,CAEN;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,MAAM,GACP,EAAE;IACD,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,GAAG,CAEN;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAG5D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
export declare function encodeApprove(spender: Hex, amount: bigint): Hex;
|
|
3
|
+
export declare function encodeUnwrap({ asset, recipient, amount, }: {
|
|
4
|
+
asset: Hex;
|
|
5
|
+
recipient: Hex;
|
|
6
|
+
amount: bigint;
|
|
7
|
+
}): Hex;
|
|
8
|
+
export declare function encodeWrap({ asset, recipient, amount, }: {
|
|
9
|
+
asset: Hex;
|
|
10
|
+
recipient: Hex;
|
|
11
|
+
amount: bigint;
|
|
12
|
+
}): Hex;
|
|
13
|
+
export declare function extractErc20TransferRecipient(data: Hex): Hex;
|
|
14
|
+
//# sourceMappingURL=calldata.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calldata.d.mts","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/calldata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAS3C,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAE/D;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,SAAS,EACT,MAAM,GACP,EAAE;IACD,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,GAAG,CAEN;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,MAAM,GACP,EAAE;IACD,KAAK,EAAE,GAAG,CAAC;IACX,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,GAAG,CAEN;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAG5D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Interface } from "@ethersproject/abi";
|
|
2
|
+
const iface = new Interface([
|
|
3
|
+
'function approve(address spender, uint256 amount)',
|
|
4
|
+
'function unwrap(address asset, address recipient, uint256 amount)',
|
|
5
|
+
'function wrap(address asset, address recipient, uint256 amount)',
|
|
6
|
+
'function transfer(address recipient, uint256 amount)',
|
|
7
|
+
]);
|
|
8
|
+
export function encodeApprove(spender, amount) {
|
|
9
|
+
return iface.encodeFunctionData('approve', [spender, amount]);
|
|
10
|
+
}
|
|
11
|
+
export function encodeUnwrap({ asset, recipient, amount, }) {
|
|
12
|
+
return iface.encodeFunctionData('unwrap', [asset, recipient, amount]);
|
|
13
|
+
}
|
|
14
|
+
export function encodeWrap({ asset, recipient, amount, }) {
|
|
15
|
+
return iface.encodeFunctionData('wrap', [asset, recipient, amount]);
|
|
16
|
+
}
|
|
17
|
+
export function extractErc20TransferRecipient(data) {
|
|
18
|
+
const [recipient] = iface.decodeFunctionData('transfer', data);
|
|
19
|
+
return recipient;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=calldata.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calldata.mjs","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/calldata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,2BAA2B;AAG/C,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC;IAC1B,mDAAmD;IACnD,mEAAmE;IACnE,iEAAiE;IACjE,sDAAsD;CACvD,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,OAAY,EAAE,MAAc;IACxD,OAAO,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAQ,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,SAAS,EACT,MAAM,GAKP;IACC,OAAO,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAQ,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,MAAM,GAKP;IACC,OAAO,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAQ,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAS;IACrD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/D,OAAO,SAAgB,CAAC;AAC1B,CAAC","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { Hex } from '@metamask/utils';\n\nconst iface = new Interface([\n 'function approve(address spender, uint256 amount)',\n 'function unwrap(address asset, address recipient, uint256 amount)',\n 'function wrap(address asset, address recipient, uint256 amount)',\n 'function transfer(address recipient, uint256 amount)',\n]);\n\nexport function encodeApprove(spender: Hex, amount: bigint): Hex {\n return iface.encodeFunctionData('approve', [spender, amount]) as Hex;\n}\n\nexport function encodeUnwrap({\n asset,\n recipient,\n amount,\n}: {\n asset: Hex;\n recipient: Hex;\n amount: bigint;\n}): Hex {\n return iface.encodeFunctionData('unwrap', [asset, recipient, amount]) as Hex;\n}\n\nexport function encodeWrap({\n asset,\n recipient,\n amount,\n}: {\n asset: Hex;\n recipient: Hex;\n amount: bigint;\n}): Hex {\n return iface.encodeFunctionData('wrap', [asset, recipient, amount]) as Hex;\n}\n\nexport function extractErc20TransferRecipient(data: Hex): Hex {\n const [recipient] = iface.decodeFunctionData('transfer', data);\n return recipient as Hex;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SWEEP_RELAYER_SETTLE_DELAY_MS = exports.SWEEP_BALANCE_RETRY_DELAY_MS = exports.SWEEP_BALANCE_RETRY_ATTEMPTS = exports.POLYMARKET_COLLATERAL_ONRAMP_POLYGON = exports.POLYMARKET_COLLATERAL_OFFRAMP_POLYGON = void 0;
|
|
4
|
+
exports.POLYMARKET_COLLATERAL_OFFRAMP_POLYGON = '0x2957922Eb93258b93368531d39fAcCA3B4dC5854';
|
|
5
|
+
exports.POLYMARKET_COLLATERAL_ONRAMP_POLYGON = '0x93070a847efEf7F70739046A929D47a521F5B8ee';
|
|
6
|
+
exports.SWEEP_BALANCE_RETRY_ATTEMPTS = 5;
|
|
7
|
+
exports.SWEEP_BALANCE_RETRY_DELAY_MS = 1000;
|
|
8
|
+
exports.SWEEP_RELAYER_SETTLE_DELAY_MS = 3000;
|
|
9
|
+
//# sourceMappingURL=constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,qCAAqC,GAChD,4CAAmD,CAAC;AAEzC,QAAA,oCAAoC,GAC/C,4CAAmD,CAAC;AAEzC,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAEjC,QAAA,4BAA4B,GAAG,IAAI,CAAC;AAEpC,QAAA,6BAA6B,GAAG,IAAI,CAAC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport const POLYMARKET_COLLATERAL_OFFRAMP_POLYGON =\n '0x2957922Eb93258b93368531d39fAcCA3B4dC5854' as Hex;\n\nexport const POLYMARKET_COLLATERAL_ONRAMP_POLYGON =\n '0x93070a847efEf7F70739046A929D47a521F5B8ee' as Hex;\n\nexport const SWEEP_BALANCE_RETRY_ATTEMPTS = 5;\n\nexport const SWEEP_BALANCE_RETRY_DELAY_MS = 1000;\n\nexport const SWEEP_RELAYER_SETTLE_DELAY_MS = 3000;\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const POLYMARKET_COLLATERAL_OFFRAMP_POLYGON: `0x${string}`;
|
|
2
|
+
export declare const POLYMARKET_COLLATERAL_ONRAMP_POLYGON: `0x${string}`;
|
|
3
|
+
export declare const SWEEP_BALANCE_RETRY_ATTEMPTS = 5;
|
|
4
|
+
export declare const SWEEP_BALANCE_RETRY_DELAY_MS = 1000;
|
|
5
|
+
export declare const SWEEP_RELAYER_SETTLE_DELAY_MS = 3000;
|
|
6
|
+
//# sourceMappingURL=constants.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qCAAqC,eACG,CAAC;AAEtD,eAAO,MAAM,oCAAoC,eACI,CAAC;AAEtD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,eAAO,MAAM,6BAA6B,OAAO,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const POLYMARKET_COLLATERAL_OFFRAMP_POLYGON: `0x${string}`;
|
|
2
|
+
export declare const POLYMARKET_COLLATERAL_ONRAMP_POLYGON: `0x${string}`;
|
|
3
|
+
export declare const SWEEP_BALANCE_RETRY_ATTEMPTS = 5;
|
|
4
|
+
export declare const SWEEP_BALANCE_RETRY_DELAY_MS = 1000;
|
|
5
|
+
export declare const SWEEP_RELAYER_SETTLE_DELAY_MS = 3000;
|
|
6
|
+
//# sourceMappingURL=constants.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qCAAqC,eACG,CAAC;AAEtD,eAAO,MAAM,oCAAoC,eACI,CAAC;AAEtD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,eAAO,MAAM,6BAA6B,OAAO,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const POLYMARKET_COLLATERAL_OFFRAMP_POLYGON = '0x2957922Eb93258b93368531d39fAcCA3B4dC5854';
|
|
2
|
+
export const POLYMARKET_COLLATERAL_ONRAMP_POLYGON = '0x93070a847efEf7F70739046A929D47a521F5B8ee';
|
|
3
|
+
export const SWEEP_BALANCE_RETRY_ATTEMPTS = 5;
|
|
4
|
+
export const SWEEP_BALANCE_RETRY_DELAY_MS = 1000;
|
|
5
|
+
export const SWEEP_RELAYER_SETTLE_DELAY_MS = 3000;
|
|
6
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qCAAqC,GAChD,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,oCAAoC,GAC/C,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport const POLYMARKET_COLLATERAL_OFFRAMP_POLYGON =\n '0x2957922Eb93258b93368531d39fAcCA3B4dC5854' as Hex;\n\nexport const POLYMARKET_COLLATERAL_ONRAMP_POLYGON =\n '0x93070a847efEf7F70739046A929D47a521F5B8ee' as Hex;\n\nexport const SWEEP_BALANCE_RETRY_ATTEMPTS = 5;\n\nexport const SWEEP_BALANCE_RETRY_DELAY_MS = 1000;\n\nexport const SWEEP_RELAYER_SETTLE_DELAY_MS = 3000;\n"]}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sweepPolymarketDepositWallet = exports.submitPolymarketWithdraw = exports.applyPolymarketDepositWalletOverrides = void 0;
|
|
4
|
+
const utils_1 = require("@metamask/utils");
|
|
5
|
+
const constants_1 = require("../../../constants.cjs");
|
|
6
|
+
const logger_1 = require("../../../logger.cjs");
|
|
7
|
+
const token_1 = require("../../../utils/token.cjs");
|
|
8
|
+
const calldata_1 = require("./calldata.cjs");
|
|
9
|
+
const constants_2 = require("./constants.cjs");
|
|
10
|
+
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'polymarket-withdraw');
|
|
11
|
+
async function applyPolymarketDepositWalletOverrides(body, request, messenger) {
|
|
12
|
+
const depositWalletAddress = await getDepositWalletAddress(messenger, request.from);
|
|
13
|
+
body.originCurrency = constants_1.POLYGON_USDCE_ADDRESS;
|
|
14
|
+
body.user = depositWalletAddress;
|
|
15
|
+
body.refundTo = depositWalletAddress;
|
|
16
|
+
body.useDepositAddress = true;
|
|
17
|
+
body.strict = true;
|
|
18
|
+
}
|
|
19
|
+
exports.applyPolymarketDepositWalletOverrides = applyPolymarketDepositWalletOverrides;
|
|
20
|
+
async function submitPolymarketWithdraw(quote, from, messenger) {
|
|
21
|
+
const depositWalletAddress = await getDepositWalletAddress(messenger, from);
|
|
22
|
+
const relayDepositAddress = extractRelayDepositAddress(quote.original);
|
|
23
|
+
const amount = BigInt(quote.sourceAmount.raw);
|
|
24
|
+
const preSubmitUsdceBalance = await readUsdceBalanceOrZero(messenger, depositWalletAddress);
|
|
25
|
+
log('Submitting unwrap batch to Relay deposit address', {
|
|
26
|
+
depositWalletAddress,
|
|
27
|
+
relayDepositAddress,
|
|
28
|
+
amount: amount.toString(),
|
|
29
|
+
preSubmitUsdceBalance: preSubmitUsdceBalance.toString(),
|
|
30
|
+
});
|
|
31
|
+
const result = await submitDepositWalletBatch(messenger, {
|
|
32
|
+
eoa: from,
|
|
33
|
+
depositWallet: depositWalletAddress,
|
|
34
|
+
calls: [
|
|
35
|
+
{
|
|
36
|
+
target: constants_1.POLYGON_PUSD_ADDRESS,
|
|
37
|
+
value: '0',
|
|
38
|
+
data: (0, calldata_1.encodeApprove)(constants_2.POLYMARKET_COLLATERAL_OFFRAMP_POLYGON, amount),
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
target: constants_2.POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,
|
|
42
|
+
value: '0',
|
|
43
|
+
data: (0, calldata_1.encodeUnwrap)({
|
|
44
|
+
asset: constants_1.POLYGON_USDCE_ADDRESS,
|
|
45
|
+
recipient: relayDepositAddress,
|
|
46
|
+
amount,
|
|
47
|
+
}),
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
return { ...result, preSubmitUsdceBalance };
|
|
52
|
+
}
|
|
53
|
+
exports.submitPolymarketWithdraw = submitPolymarketWithdraw;
|
|
54
|
+
async function sweepPolymarketDepositWallet(from, messenger, options) {
|
|
55
|
+
const isRefund = options.relayStatus === 'refund' || options.relayStatus === 'refunded';
|
|
56
|
+
const waitForBalanceAbove = isRefund
|
|
57
|
+
? options.preSubmitUsdceBalance
|
|
58
|
+
: undefined;
|
|
59
|
+
const depositWalletAddress = await getDepositWalletAddress(messenger, from);
|
|
60
|
+
const usdceBalance = await readDepositWalletUsdceBalance(messenger, depositWalletAddress, waitForBalanceAbove);
|
|
61
|
+
if (usdceBalance === undefined) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (usdceBalance === 0n) {
|
|
65
|
+
log('USDC.e sweep: nothing to wrap');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (waitForBalanceAbove !== undefined && usdceBalance > waitForBalanceAbove) {
|
|
69
|
+
log('USDC.e sweep: waiting for relayer RPC to catch up to new balance');
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, constants_2.SWEEP_RELAYER_SETTLE_DELAY_MS));
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
await submitDepositWalletBatch(messenger, {
|
|
74
|
+
eoa: from,
|
|
75
|
+
depositWallet: depositWalletAddress,
|
|
76
|
+
calls: [
|
|
77
|
+
{
|
|
78
|
+
target: constants_1.POLYGON_USDCE_ADDRESS,
|
|
79
|
+
value: '0',
|
|
80
|
+
data: (0, calldata_1.encodeApprove)(constants_2.POLYMARKET_COLLATERAL_ONRAMP_POLYGON, usdceBalance),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
target: constants_2.POLYMARKET_COLLATERAL_ONRAMP_POLYGON,
|
|
84
|
+
value: '0',
|
|
85
|
+
data: (0, calldata_1.encodeWrap)({
|
|
86
|
+
asset: constants_1.POLYGON_USDCE_ADDRESS,
|
|
87
|
+
recipient: depositWalletAddress,
|
|
88
|
+
amount: usdceBalance,
|
|
89
|
+
}),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
log('USDC.e sweep: batch submission failed', { error });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.sweepPolymarketDepositWallet = sweepPolymarketDepositWallet;
|
|
99
|
+
async function readUsdceBalanceOrZero(messenger, depositWalletAddress) {
|
|
100
|
+
try {
|
|
101
|
+
const raw = await (0, token_1.getLiveTokenBalance)(messenger, depositWalletAddress, constants_1.CHAIN_ID_POLYGON, constants_1.POLYGON_USDCE_ADDRESS);
|
|
102
|
+
return BigInt(raw);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
log('USDC.e balance read failed, defaulting to zero', { error });
|
|
106
|
+
return 0n;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function readDepositWalletUsdceBalance(messenger, depositWalletAddress, waitForBalanceAbove) {
|
|
110
|
+
const shouldRetry = waitForBalanceAbove !== undefined;
|
|
111
|
+
const maxAttempts = shouldRetry ? constants_2.SWEEP_BALANCE_RETRY_ATTEMPTS : 1;
|
|
112
|
+
let lastBalance = 0n;
|
|
113
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
114
|
+
if (attempt > 1) {
|
|
115
|
+
await new Promise((resolve) => setTimeout(resolve, constants_2.SWEEP_BALANCE_RETRY_DELAY_MS));
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const raw = await (0, token_1.getLiveTokenBalance)(messenger, depositWalletAddress, constants_1.CHAIN_ID_POLYGON, constants_1.POLYGON_USDCE_ADDRESS);
|
|
119
|
+
lastBalance = BigInt(raw);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
log('USDC.e sweep: failed to read deposit wallet balance', { error });
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
log('USDC.e sweep: deposit wallet balance', {
|
|
126
|
+
depositWalletAddress,
|
|
127
|
+
balance: lastBalance.toString(),
|
|
128
|
+
attempt,
|
|
129
|
+
waitForBalanceAbove: waitForBalanceAbove?.toString(),
|
|
130
|
+
});
|
|
131
|
+
const hasIncreased = waitForBalanceAbove === undefined || lastBalance > waitForBalanceAbove;
|
|
132
|
+
if (hasIncreased) {
|
|
133
|
+
return lastBalance;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return lastBalance;
|
|
137
|
+
}
|
|
138
|
+
async function getDepositWalletAddress(messenger, eoa) {
|
|
139
|
+
const depositWalletAddress = await messenger.call('TransactionPayController:polymarketGetDepositWalletAddress', { eoa });
|
|
140
|
+
log('Polymarket callback: getDepositWalletAddress', {
|
|
141
|
+
eoa,
|
|
142
|
+
depositWalletAddress,
|
|
143
|
+
});
|
|
144
|
+
return depositWalletAddress;
|
|
145
|
+
}
|
|
146
|
+
async function submitDepositWalletBatch(messenger, params) {
|
|
147
|
+
log('Polymarket callback: submitDepositWalletBatch', {
|
|
148
|
+
eoa: params.eoa,
|
|
149
|
+
depositWallet: params.depositWallet,
|
|
150
|
+
callCount: params.calls.length,
|
|
151
|
+
});
|
|
152
|
+
const result = await messenger.call('TransactionPayController:polymarketSubmitDepositWalletBatch', params);
|
|
153
|
+
log('Polymarket callback: submitDepositWalletBatch returned', {
|
|
154
|
+
sourceHash: result.sourceHash,
|
|
155
|
+
});
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
function extractRelayDepositAddress(relayQuote) {
|
|
159
|
+
const depositStep = relayQuote.steps.find((step) => step.id === 'deposit');
|
|
160
|
+
if (depositStep?.kind !== 'transaction') {
|
|
161
|
+
throw new Error('Polymarket deposit wallet withdraw: Relay quote has no deposit step');
|
|
162
|
+
}
|
|
163
|
+
const transactionStep = depositStep;
|
|
164
|
+
const depositCallData = transactionStep.items[0]?.data?.data;
|
|
165
|
+
if (!depositCallData) {
|
|
166
|
+
throw new Error('Polymarket deposit wallet withdraw: Relay quote deposit step is missing calldata');
|
|
167
|
+
}
|
|
168
|
+
return (0, calldata_1.extractErc20TransferRecipient)(depositCallData);
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=withdraw.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.cjs","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/withdraw.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport {\n CHAIN_ID_POLYGON,\n POLYGON_PUSD_ADDRESS,\n POLYGON_USDCE_ADDRESS,\n} from '../../../constants';\nimport { projectLogger } from '../../../logger';\nimport type {\n QuoteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../../types';\nimport { getLiveTokenBalance } from '../../../utils/token';\nimport type {\n RelayQuote,\n RelayQuoteRequest,\n RelayStatus,\n RelayTransactionStep,\n} from '../types';\nimport {\n encodeApprove,\n encodeUnwrap,\n encodeWrap,\n extractErc20TransferRecipient,\n} from './calldata';\nimport {\n POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,\n POLYMARKET_COLLATERAL_ONRAMP_POLYGON,\n SWEEP_BALANCE_RETRY_ATTEMPTS,\n SWEEP_BALANCE_RETRY_DELAY_MS,\n SWEEP_RELAYER_SETTLE_DELAY_MS,\n} from './constants';\n\nconst log = createModuleLogger(projectLogger, 'polymarket-withdraw');\n\nexport async function applyPolymarketDepositWalletOverrides(\n body: RelayQuoteRequest,\n request: QuoteRequest,\n messenger: TransactionPayControllerMessenger,\n): Promise<void> {\n const depositWalletAddress = await getDepositWalletAddress(\n messenger,\n request.from,\n );\n\n body.originCurrency = POLYGON_USDCE_ADDRESS;\n body.user = depositWalletAddress;\n body.refundTo = depositWalletAddress;\n body.useDepositAddress = true;\n body.strict = true;\n}\n\nexport async function submitPolymarketWithdraw(\n quote: TransactionPayQuote<RelayQuote>,\n from: Hex,\n messenger: TransactionPayControllerMessenger,\n): Promise<{ sourceHash: Hex; preSubmitUsdceBalance: bigint }> {\n const depositWalletAddress = await getDepositWalletAddress(messenger, from);\n const relayDepositAddress = extractRelayDepositAddress(quote.original);\n const amount = BigInt(quote.sourceAmount.raw);\n\n const preSubmitUsdceBalance = await readUsdceBalanceOrZero(\n messenger,\n depositWalletAddress,\n );\n\n log('Submitting unwrap batch to Relay deposit address', {\n depositWalletAddress,\n relayDepositAddress,\n amount: amount.toString(),\n preSubmitUsdceBalance: preSubmitUsdceBalance.toString(),\n });\n\n const result = await submitDepositWalletBatch(messenger, {\n eoa: from,\n depositWallet: depositWalletAddress,\n calls: [\n {\n target: POLYGON_PUSD_ADDRESS,\n value: '0',\n data: encodeApprove(POLYMARKET_COLLATERAL_OFFRAMP_POLYGON, amount),\n },\n {\n target: POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,\n value: '0',\n data: encodeUnwrap({\n asset: POLYGON_USDCE_ADDRESS,\n recipient: relayDepositAddress,\n amount,\n }),\n },\n ],\n });\n\n return { ...result, preSubmitUsdceBalance };\n}\n\nexport async function sweepPolymarketDepositWallet(\n from: Hex,\n messenger: TransactionPayControllerMessenger,\n options: {\n relayStatus: RelayStatus | 'timeout';\n preSubmitUsdceBalance: bigint;\n },\n): Promise<void> {\n const isRefund =\n options.relayStatus === 'refund' || options.relayStatus === 'refunded';\n const waitForBalanceAbove = isRefund\n ? options.preSubmitUsdceBalance\n : undefined;\n\n const depositWalletAddress = await getDepositWalletAddress(messenger, from);\n const usdceBalance = await readDepositWalletUsdceBalance(\n messenger,\n depositWalletAddress,\n waitForBalanceAbove,\n );\n\n if (usdceBalance === undefined) {\n return;\n }\n\n if (usdceBalance === 0n) {\n log('USDC.e sweep: nothing to wrap');\n return;\n }\n\n if (waitForBalanceAbove !== undefined && usdceBalance > waitForBalanceAbove) {\n log('USDC.e sweep: waiting for relayer RPC to catch up to new balance');\n await new Promise((resolve) =>\n setTimeout(resolve, SWEEP_RELAYER_SETTLE_DELAY_MS),\n );\n }\n\n try {\n await submitDepositWalletBatch(messenger, {\n eoa: from,\n depositWallet: depositWalletAddress,\n calls: [\n {\n target: POLYGON_USDCE_ADDRESS,\n value: '0',\n data: encodeApprove(\n POLYMARKET_COLLATERAL_ONRAMP_POLYGON,\n usdceBalance,\n ),\n },\n {\n target: POLYMARKET_COLLATERAL_ONRAMP_POLYGON,\n value: '0',\n data: encodeWrap({\n asset: POLYGON_USDCE_ADDRESS,\n recipient: depositWalletAddress,\n amount: usdceBalance,\n }),\n },\n ],\n });\n } catch (error) {\n log('USDC.e sweep: batch submission failed', { error });\n }\n}\n\nasync function readUsdceBalanceOrZero(\n messenger: TransactionPayControllerMessenger,\n depositWalletAddress: Hex,\n): Promise<bigint> {\n try {\n const raw = await getLiveTokenBalance(\n messenger,\n depositWalletAddress,\n CHAIN_ID_POLYGON,\n POLYGON_USDCE_ADDRESS,\n );\n return BigInt(raw);\n } catch (error) {\n log('USDC.e balance read failed, defaulting to zero', { error });\n return 0n;\n }\n}\n\nasync function readDepositWalletUsdceBalance(\n messenger: TransactionPayControllerMessenger,\n depositWalletAddress: Hex,\n waitForBalanceAbove: bigint | undefined,\n): Promise<bigint | undefined> {\n const shouldRetry = waitForBalanceAbove !== undefined;\n const maxAttempts = shouldRetry ? SWEEP_BALANCE_RETRY_ATTEMPTS : 1;\n let lastBalance = 0n;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n if (attempt > 1) {\n await new Promise((resolve) =>\n setTimeout(resolve, SWEEP_BALANCE_RETRY_DELAY_MS),\n );\n }\n\n try {\n const raw = await getLiveTokenBalance(\n messenger,\n depositWalletAddress,\n CHAIN_ID_POLYGON,\n POLYGON_USDCE_ADDRESS,\n );\n lastBalance = BigInt(raw);\n } catch (error) {\n log('USDC.e sweep: failed to read deposit wallet balance', { error });\n return undefined;\n }\n\n log('USDC.e sweep: deposit wallet balance', {\n depositWalletAddress,\n balance: lastBalance.toString(),\n attempt,\n waitForBalanceAbove: waitForBalanceAbove?.toString(),\n });\n\n const hasIncreased =\n waitForBalanceAbove === undefined || lastBalance > waitForBalanceAbove;\n\n if (hasIncreased) {\n return lastBalance;\n }\n }\n\n return lastBalance;\n}\n\nasync function getDepositWalletAddress(\n messenger: TransactionPayControllerMessenger,\n eoa: Hex,\n): Promise<Hex> {\n const depositWalletAddress = await messenger.call(\n 'TransactionPayController:polymarketGetDepositWalletAddress',\n { eoa },\n );\n log('Polymarket callback: getDepositWalletAddress', {\n eoa,\n depositWalletAddress,\n });\n return depositWalletAddress;\n}\n\nasync function submitDepositWalletBatch(\n messenger: TransactionPayControllerMessenger,\n params: {\n eoa: Hex;\n depositWallet: Hex;\n calls: { target: Hex; data: Hex; value: string }[];\n },\n): Promise<{ sourceHash: Hex }> {\n log('Polymarket callback: submitDepositWalletBatch', {\n eoa: params.eoa,\n depositWallet: params.depositWallet,\n callCount: params.calls.length,\n });\n const result = await messenger.call(\n 'TransactionPayController:polymarketSubmitDepositWalletBatch',\n params,\n );\n log('Polymarket callback: submitDepositWalletBatch returned', {\n sourceHash: result.sourceHash,\n });\n return result;\n}\n\nfunction extractRelayDepositAddress(relayQuote: RelayQuote): Hex {\n const depositStep = relayQuote.steps.find((step) => step.id === 'deposit');\n\n if (depositStep?.kind !== 'transaction') {\n throw new Error(\n 'Polymarket deposit wallet withdraw: Relay quote has no deposit step',\n );\n }\n\n const transactionStep = depositStep as RelayTransactionStep;\n const depositCallData = transactionStep.items[0]?.data?.data;\n\n if (!depositCallData) {\n throw new Error(\n 'Polymarket deposit wallet withdraw: Relay quote deposit step is missing calldata',\n );\n }\n\n return extractErc20TransferRecipient(depositCallData);\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
import type { QuoteRequest, TransactionPayControllerMessenger, TransactionPayQuote } from "../../../types.cjs";
|
|
3
|
+
import type { RelayQuote, RelayQuoteRequest, RelayStatus } from "../types.cjs";
|
|
4
|
+
export declare function applyPolymarketDepositWalletOverrides(body: RelayQuoteRequest, request: QuoteRequest, messenger: TransactionPayControllerMessenger): Promise<void>;
|
|
5
|
+
export declare function submitPolymarketWithdraw(quote: TransactionPayQuote<RelayQuote>, from: Hex, messenger: TransactionPayControllerMessenger): Promise<{
|
|
6
|
+
sourceHash: Hex;
|
|
7
|
+
preSubmitUsdceBalance: bigint;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function sweepPolymarketDepositWallet(from: Hex, messenger: TransactionPayControllerMessenger, options: {
|
|
10
|
+
relayStatus: RelayStatus | 'timeout';
|
|
11
|
+
preSubmitUsdceBalance: bigint;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=withdraw.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.d.cts","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAS3C,OAAO,KAAK,EACV,YAAY,EACZ,iCAAiC,EACjC,mBAAmB,EACpB,2BAAuB;AAExB,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EAEZ,qBAAiB;AAiBlB,wBAAsB,qCAAqC,CACzD,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,iCAAiC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACtC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,iCAAiC,GAC3C,OAAO,CAAC;IAAE,UAAU,EAAE,GAAG,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC7D;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,iCAAiC,EAC5C,OAAO,EAAE;IACP,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GACA,OAAO,CAAC,IAAI,CAAC,CAyDf"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
import type { QuoteRequest, TransactionPayControllerMessenger, TransactionPayQuote } from "../../../types.mjs";
|
|
3
|
+
import type { RelayQuote, RelayQuoteRequest, RelayStatus } from "../types.mjs";
|
|
4
|
+
export declare function applyPolymarketDepositWalletOverrides(body: RelayQuoteRequest, request: QuoteRequest, messenger: TransactionPayControllerMessenger): Promise<void>;
|
|
5
|
+
export declare function submitPolymarketWithdraw(quote: TransactionPayQuote<RelayQuote>, from: Hex, messenger: TransactionPayControllerMessenger): Promise<{
|
|
6
|
+
sourceHash: Hex;
|
|
7
|
+
preSubmitUsdceBalance: bigint;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function sweepPolymarketDepositWallet(from: Hex, messenger: TransactionPayControllerMessenger, options: {
|
|
10
|
+
relayStatus: RelayStatus | 'timeout';
|
|
11
|
+
preSubmitUsdceBalance: bigint;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=withdraw.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.d.mts","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAS3C,OAAO,KAAK,EACV,YAAY,EACZ,iCAAiC,EACjC,mBAAmB,EACpB,2BAAuB;AAExB,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EAEZ,qBAAiB;AAiBlB,wBAAsB,qCAAqC,CACzD,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,iCAAiC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACtC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,iCAAiC,GAC3C,OAAO,CAAC;IAAE,UAAU,EAAE,GAAG,CAAC;IAAC,qBAAqB,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC7D;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,iCAAiC,EAC5C,OAAO,EAAE;IACP,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GACA,OAAO,CAAC,IAAI,CAAC,CAyDf"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { createModuleLogger } from "@metamask/utils";
|
|
2
|
+
import { CHAIN_ID_POLYGON, POLYGON_PUSD_ADDRESS, POLYGON_USDCE_ADDRESS } from "../../../constants.mjs";
|
|
3
|
+
import { projectLogger } from "../../../logger.mjs";
|
|
4
|
+
import { getLiveTokenBalance } from "../../../utils/token.mjs";
|
|
5
|
+
import { encodeApprove, encodeUnwrap, encodeWrap, extractErc20TransferRecipient } from "./calldata.mjs";
|
|
6
|
+
import { POLYMARKET_COLLATERAL_OFFRAMP_POLYGON, POLYMARKET_COLLATERAL_ONRAMP_POLYGON, SWEEP_BALANCE_RETRY_ATTEMPTS, SWEEP_BALANCE_RETRY_DELAY_MS, SWEEP_RELAYER_SETTLE_DELAY_MS } from "./constants.mjs";
|
|
7
|
+
const log = createModuleLogger(projectLogger, 'polymarket-withdraw');
|
|
8
|
+
export async function applyPolymarketDepositWalletOverrides(body, request, messenger) {
|
|
9
|
+
const depositWalletAddress = await getDepositWalletAddress(messenger, request.from);
|
|
10
|
+
body.originCurrency = POLYGON_USDCE_ADDRESS;
|
|
11
|
+
body.user = depositWalletAddress;
|
|
12
|
+
body.refundTo = depositWalletAddress;
|
|
13
|
+
body.useDepositAddress = true;
|
|
14
|
+
body.strict = true;
|
|
15
|
+
}
|
|
16
|
+
export async function submitPolymarketWithdraw(quote, from, messenger) {
|
|
17
|
+
const depositWalletAddress = await getDepositWalletAddress(messenger, from);
|
|
18
|
+
const relayDepositAddress = extractRelayDepositAddress(quote.original);
|
|
19
|
+
const amount = BigInt(quote.sourceAmount.raw);
|
|
20
|
+
const preSubmitUsdceBalance = await readUsdceBalanceOrZero(messenger, depositWalletAddress);
|
|
21
|
+
log('Submitting unwrap batch to Relay deposit address', {
|
|
22
|
+
depositWalletAddress,
|
|
23
|
+
relayDepositAddress,
|
|
24
|
+
amount: amount.toString(),
|
|
25
|
+
preSubmitUsdceBalance: preSubmitUsdceBalance.toString(),
|
|
26
|
+
});
|
|
27
|
+
const result = await submitDepositWalletBatch(messenger, {
|
|
28
|
+
eoa: from,
|
|
29
|
+
depositWallet: depositWalletAddress,
|
|
30
|
+
calls: [
|
|
31
|
+
{
|
|
32
|
+
target: POLYGON_PUSD_ADDRESS,
|
|
33
|
+
value: '0',
|
|
34
|
+
data: encodeApprove(POLYMARKET_COLLATERAL_OFFRAMP_POLYGON, amount),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
target: POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,
|
|
38
|
+
value: '0',
|
|
39
|
+
data: encodeUnwrap({
|
|
40
|
+
asset: POLYGON_USDCE_ADDRESS,
|
|
41
|
+
recipient: relayDepositAddress,
|
|
42
|
+
amount,
|
|
43
|
+
}),
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
return { ...result, preSubmitUsdceBalance };
|
|
48
|
+
}
|
|
49
|
+
export async function sweepPolymarketDepositWallet(from, messenger, options) {
|
|
50
|
+
const isRefund = options.relayStatus === 'refund' || options.relayStatus === 'refunded';
|
|
51
|
+
const waitForBalanceAbove = isRefund
|
|
52
|
+
? options.preSubmitUsdceBalance
|
|
53
|
+
: undefined;
|
|
54
|
+
const depositWalletAddress = await getDepositWalletAddress(messenger, from);
|
|
55
|
+
const usdceBalance = await readDepositWalletUsdceBalance(messenger, depositWalletAddress, waitForBalanceAbove);
|
|
56
|
+
if (usdceBalance === undefined) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (usdceBalance === 0n) {
|
|
60
|
+
log('USDC.e sweep: nothing to wrap');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (waitForBalanceAbove !== undefined && usdceBalance > waitForBalanceAbove) {
|
|
64
|
+
log('USDC.e sweep: waiting for relayer RPC to catch up to new balance');
|
|
65
|
+
await new Promise((resolve) => setTimeout(resolve, SWEEP_RELAYER_SETTLE_DELAY_MS));
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
await submitDepositWalletBatch(messenger, {
|
|
69
|
+
eoa: from,
|
|
70
|
+
depositWallet: depositWalletAddress,
|
|
71
|
+
calls: [
|
|
72
|
+
{
|
|
73
|
+
target: POLYGON_USDCE_ADDRESS,
|
|
74
|
+
value: '0',
|
|
75
|
+
data: encodeApprove(POLYMARKET_COLLATERAL_ONRAMP_POLYGON, usdceBalance),
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
target: POLYMARKET_COLLATERAL_ONRAMP_POLYGON,
|
|
79
|
+
value: '0',
|
|
80
|
+
data: encodeWrap({
|
|
81
|
+
asset: POLYGON_USDCE_ADDRESS,
|
|
82
|
+
recipient: depositWalletAddress,
|
|
83
|
+
amount: usdceBalance,
|
|
84
|
+
}),
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
log('USDC.e sweep: batch submission failed', { error });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function readUsdceBalanceOrZero(messenger, depositWalletAddress) {
|
|
94
|
+
try {
|
|
95
|
+
const raw = await getLiveTokenBalance(messenger, depositWalletAddress, CHAIN_ID_POLYGON, POLYGON_USDCE_ADDRESS);
|
|
96
|
+
return BigInt(raw);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
log('USDC.e balance read failed, defaulting to zero', { error });
|
|
100
|
+
return 0n;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function readDepositWalletUsdceBalance(messenger, depositWalletAddress, waitForBalanceAbove) {
|
|
104
|
+
const shouldRetry = waitForBalanceAbove !== undefined;
|
|
105
|
+
const maxAttempts = shouldRetry ? SWEEP_BALANCE_RETRY_ATTEMPTS : 1;
|
|
106
|
+
let lastBalance = 0n;
|
|
107
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
108
|
+
if (attempt > 1) {
|
|
109
|
+
await new Promise((resolve) => setTimeout(resolve, SWEEP_BALANCE_RETRY_DELAY_MS));
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const raw = await getLiveTokenBalance(messenger, depositWalletAddress, CHAIN_ID_POLYGON, POLYGON_USDCE_ADDRESS);
|
|
113
|
+
lastBalance = BigInt(raw);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
log('USDC.e sweep: failed to read deposit wallet balance', { error });
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
log('USDC.e sweep: deposit wallet balance', {
|
|
120
|
+
depositWalletAddress,
|
|
121
|
+
balance: lastBalance.toString(),
|
|
122
|
+
attempt,
|
|
123
|
+
waitForBalanceAbove: waitForBalanceAbove?.toString(),
|
|
124
|
+
});
|
|
125
|
+
const hasIncreased = waitForBalanceAbove === undefined || lastBalance > waitForBalanceAbove;
|
|
126
|
+
if (hasIncreased) {
|
|
127
|
+
return lastBalance;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return lastBalance;
|
|
131
|
+
}
|
|
132
|
+
async function getDepositWalletAddress(messenger, eoa) {
|
|
133
|
+
const depositWalletAddress = await messenger.call('TransactionPayController:polymarketGetDepositWalletAddress', { eoa });
|
|
134
|
+
log('Polymarket callback: getDepositWalletAddress', {
|
|
135
|
+
eoa,
|
|
136
|
+
depositWalletAddress,
|
|
137
|
+
});
|
|
138
|
+
return depositWalletAddress;
|
|
139
|
+
}
|
|
140
|
+
async function submitDepositWalletBatch(messenger, params) {
|
|
141
|
+
log('Polymarket callback: submitDepositWalletBatch', {
|
|
142
|
+
eoa: params.eoa,
|
|
143
|
+
depositWallet: params.depositWallet,
|
|
144
|
+
callCount: params.calls.length,
|
|
145
|
+
});
|
|
146
|
+
const result = await messenger.call('TransactionPayController:polymarketSubmitDepositWalletBatch', params);
|
|
147
|
+
log('Polymarket callback: submitDepositWalletBatch returned', {
|
|
148
|
+
sourceHash: result.sourceHash,
|
|
149
|
+
});
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
function extractRelayDepositAddress(relayQuote) {
|
|
153
|
+
const depositStep = relayQuote.steps.find((step) => step.id === 'deposit');
|
|
154
|
+
if (depositStep?.kind !== 'transaction') {
|
|
155
|
+
throw new Error('Polymarket deposit wallet withdraw: Relay quote has no deposit step');
|
|
156
|
+
}
|
|
157
|
+
const transactionStep = depositStep;
|
|
158
|
+
const depositCallData = transactionStep.items[0]?.data?.data;
|
|
159
|
+
if (!depositCallData) {
|
|
160
|
+
throw new Error('Polymarket deposit wallet withdraw: Relay quote deposit step is missing calldata');
|
|
161
|
+
}
|
|
162
|
+
return extractErc20TransferRecipient(depositCallData);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=withdraw.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.mjs","sourceRoot":"","sources":["../../../../src/strategy/relay/polymarket/withdraw.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport {\n CHAIN_ID_POLYGON,\n POLYGON_PUSD_ADDRESS,\n POLYGON_USDCE_ADDRESS,\n} from '../../../constants';\nimport { projectLogger } from '../../../logger';\nimport type {\n QuoteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../../types';\nimport { getLiveTokenBalance } from '../../../utils/token';\nimport type {\n RelayQuote,\n RelayQuoteRequest,\n RelayStatus,\n RelayTransactionStep,\n} from '../types';\nimport {\n encodeApprove,\n encodeUnwrap,\n encodeWrap,\n extractErc20TransferRecipient,\n} from './calldata';\nimport {\n POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,\n POLYMARKET_COLLATERAL_ONRAMP_POLYGON,\n SWEEP_BALANCE_RETRY_ATTEMPTS,\n SWEEP_BALANCE_RETRY_DELAY_MS,\n SWEEP_RELAYER_SETTLE_DELAY_MS,\n} from './constants';\n\nconst log = createModuleLogger(projectLogger, 'polymarket-withdraw');\n\nexport async function applyPolymarketDepositWalletOverrides(\n body: RelayQuoteRequest,\n request: QuoteRequest,\n messenger: TransactionPayControllerMessenger,\n): Promise<void> {\n const depositWalletAddress = await getDepositWalletAddress(\n messenger,\n request.from,\n );\n\n body.originCurrency = POLYGON_USDCE_ADDRESS;\n body.user = depositWalletAddress;\n body.refundTo = depositWalletAddress;\n body.useDepositAddress = true;\n body.strict = true;\n}\n\nexport async function submitPolymarketWithdraw(\n quote: TransactionPayQuote<RelayQuote>,\n from: Hex,\n messenger: TransactionPayControllerMessenger,\n): Promise<{ sourceHash: Hex; preSubmitUsdceBalance: bigint }> {\n const depositWalletAddress = await getDepositWalletAddress(messenger, from);\n const relayDepositAddress = extractRelayDepositAddress(quote.original);\n const amount = BigInt(quote.sourceAmount.raw);\n\n const preSubmitUsdceBalance = await readUsdceBalanceOrZero(\n messenger,\n depositWalletAddress,\n );\n\n log('Submitting unwrap batch to Relay deposit address', {\n depositWalletAddress,\n relayDepositAddress,\n amount: amount.toString(),\n preSubmitUsdceBalance: preSubmitUsdceBalance.toString(),\n });\n\n const result = await submitDepositWalletBatch(messenger, {\n eoa: from,\n depositWallet: depositWalletAddress,\n calls: [\n {\n target: POLYGON_PUSD_ADDRESS,\n value: '0',\n data: encodeApprove(POLYMARKET_COLLATERAL_OFFRAMP_POLYGON, amount),\n },\n {\n target: POLYMARKET_COLLATERAL_OFFRAMP_POLYGON,\n value: '0',\n data: encodeUnwrap({\n asset: POLYGON_USDCE_ADDRESS,\n recipient: relayDepositAddress,\n amount,\n }),\n },\n ],\n });\n\n return { ...result, preSubmitUsdceBalance };\n}\n\nexport async function sweepPolymarketDepositWallet(\n from: Hex,\n messenger: TransactionPayControllerMessenger,\n options: {\n relayStatus: RelayStatus | 'timeout';\n preSubmitUsdceBalance: bigint;\n },\n): Promise<void> {\n const isRefund =\n options.relayStatus === 'refund' || options.relayStatus === 'refunded';\n const waitForBalanceAbove = isRefund\n ? options.preSubmitUsdceBalance\n : undefined;\n\n const depositWalletAddress = await getDepositWalletAddress(messenger, from);\n const usdceBalance = await readDepositWalletUsdceBalance(\n messenger,\n depositWalletAddress,\n waitForBalanceAbove,\n );\n\n if (usdceBalance === undefined) {\n return;\n }\n\n if (usdceBalance === 0n) {\n log('USDC.e sweep: nothing to wrap');\n return;\n }\n\n if (waitForBalanceAbove !== undefined && usdceBalance > waitForBalanceAbove) {\n log('USDC.e sweep: waiting for relayer RPC to catch up to new balance');\n await new Promise((resolve) =>\n setTimeout(resolve, SWEEP_RELAYER_SETTLE_DELAY_MS),\n );\n }\n\n try {\n await submitDepositWalletBatch(messenger, {\n eoa: from,\n depositWallet: depositWalletAddress,\n calls: [\n {\n target: POLYGON_USDCE_ADDRESS,\n value: '0',\n data: encodeApprove(\n POLYMARKET_COLLATERAL_ONRAMP_POLYGON,\n usdceBalance,\n ),\n },\n {\n target: POLYMARKET_COLLATERAL_ONRAMP_POLYGON,\n value: '0',\n data: encodeWrap({\n asset: POLYGON_USDCE_ADDRESS,\n recipient: depositWalletAddress,\n amount: usdceBalance,\n }),\n },\n ],\n });\n } catch (error) {\n log('USDC.e sweep: batch submission failed', { error });\n }\n}\n\nasync function readUsdceBalanceOrZero(\n messenger: TransactionPayControllerMessenger,\n depositWalletAddress: Hex,\n): Promise<bigint> {\n try {\n const raw = await getLiveTokenBalance(\n messenger,\n depositWalletAddress,\n CHAIN_ID_POLYGON,\n POLYGON_USDCE_ADDRESS,\n );\n return BigInt(raw);\n } catch (error) {\n log('USDC.e balance read failed, defaulting to zero', { error });\n return 0n;\n }\n}\n\nasync function readDepositWalletUsdceBalance(\n messenger: TransactionPayControllerMessenger,\n depositWalletAddress: Hex,\n waitForBalanceAbove: bigint | undefined,\n): Promise<bigint | undefined> {\n const shouldRetry = waitForBalanceAbove !== undefined;\n const maxAttempts = shouldRetry ? SWEEP_BALANCE_RETRY_ATTEMPTS : 1;\n let lastBalance = 0n;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n if (attempt > 1) {\n await new Promise((resolve) =>\n setTimeout(resolve, SWEEP_BALANCE_RETRY_DELAY_MS),\n );\n }\n\n try {\n const raw = await getLiveTokenBalance(\n messenger,\n depositWalletAddress,\n CHAIN_ID_POLYGON,\n POLYGON_USDCE_ADDRESS,\n );\n lastBalance = BigInt(raw);\n } catch (error) {\n log('USDC.e sweep: failed to read deposit wallet balance', { error });\n return undefined;\n }\n\n log('USDC.e sweep: deposit wallet balance', {\n depositWalletAddress,\n balance: lastBalance.toString(),\n attempt,\n waitForBalanceAbove: waitForBalanceAbove?.toString(),\n });\n\n const hasIncreased =\n waitForBalanceAbove === undefined || lastBalance > waitForBalanceAbove;\n\n if (hasIncreased) {\n return lastBalance;\n }\n }\n\n return lastBalance;\n}\n\nasync function getDepositWalletAddress(\n messenger: TransactionPayControllerMessenger,\n eoa: Hex,\n): Promise<Hex> {\n const depositWalletAddress = await messenger.call(\n 'TransactionPayController:polymarketGetDepositWalletAddress',\n { eoa },\n );\n log('Polymarket callback: getDepositWalletAddress', {\n eoa,\n depositWalletAddress,\n });\n return depositWalletAddress;\n}\n\nasync function submitDepositWalletBatch(\n messenger: TransactionPayControllerMessenger,\n params: {\n eoa: Hex;\n depositWallet: Hex;\n calls: { target: Hex; data: Hex; value: string }[];\n },\n): Promise<{ sourceHash: Hex }> {\n log('Polymarket callback: submitDepositWalletBatch', {\n eoa: params.eoa,\n depositWallet: params.depositWallet,\n callCount: params.calls.length,\n });\n const result = await messenger.call(\n 'TransactionPayController:polymarketSubmitDepositWalletBatch',\n params,\n );\n log('Polymarket callback: submitDepositWalletBatch returned', {\n sourceHash: result.sourceHash,\n });\n return result;\n}\n\nfunction extractRelayDepositAddress(relayQuote: RelayQuote): Hex {\n const depositStep = relayQuote.steps.find((step) => step.id === 'deposit');\n\n if (depositStep?.kind !== 'transaction') {\n throw new Error(\n 'Polymarket deposit wallet withdraw: Relay quote has no deposit step',\n );\n }\n\n const transactionStep = depositStep as RelayTransactionStep;\n const depositCallData = transactionStep.items[0]?.data?.data;\n\n if (!depositCallData) {\n throw new Error(\n 'Polymarket deposit wallet withdraw: Relay quote deposit step is missing calldata',\n );\n }\n\n return extractErc20TransferRecipient(depositCallData);\n}\n"]}
|
|
@@ -18,6 +18,7 @@ const quote_gas_1 = require("../../utils/quote-gas.cjs");
|
|
|
18
18
|
const token_1 = require("../../utils/token.cjs");
|
|
19
19
|
const transaction_1 = require("../../utils/transaction.cjs");
|
|
20
20
|
const constants_2 = require("./constants.cjs");
|
|
21
|
+
const withdraw_1 = require("./polymarket/withdraw.cjs");
|
|
21
22
|
const relay_api_1 = require("./relay-api.cjs");
|
|
22
23
|
const relay_max_gas_station_1 = require("./relay-max-gas-station.cjs");
|
|
23
24
|
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'relay-strategy');
|
|
@@ -137,9 +138,14 @@ async function getSingleQuote(request, fullRequest) {
|
|
|
137
138
|
tradeType: useExactInput ? 'EXACT_INPUT' : 'EXPECTED_OUTPUT',
|
|
138
139
|
user: from,
|
|
139
140
|
};
|
|
141
|
+
if (request.isPolymarketDepositWallet) {
|
|
142
|
+
await (0, withdraw_1.applyPolymarketDepositWalletOverrides)(body, request, messenger);
|
|
143
|
+
}
|
|
140
144
|
// Skip transaction processing for post-quote flows - the original transaction
|
|
141
|
-
// will be included in the batch separately, not as part of the quote
|
|
142
|
-
|
|
145
|
+
// will be included in the batch separately, not as part of the quote.
|
|
146
|
+
// Skip for Polymarket deposit wallet flows - the source is already a
|
|
147
|
+
// bridged token transfer, not a contract call to embed.
|
|
148
|
+
if (!request.isPostQuote && !request.isPolymarketDepositWallet) {
|
|
143
149
|
await processTransactions(transaction, request, body, messenger);
|
|
144
150
|
}
|
|
145
151
|
else if (request.refundTo) {
|