@vetro-protocol/gateway 1.2.0 → 1.3.1
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/_esm/actions/index.js +49 -20
- package/_esm/actions/index.js.map +7 -1
- package/_esm/chunk-ZE4YZMXK.js +1326 -0
- package/_esm/chunk-ZE4YZMXK.js.map +7 -0
- package/_esm/index.js +57 -30
- package/_esm/index.js.map +7 -1
- package/_types/abi/gatewayAbi.d.ts +34 -0
- package/_types/abi/gatewayAbi.d.ts.map +1 -1
- package/_types/actions/index.d.ts +18 -17
- package/_types/actions/index.d.ts.map +1 -1
- package/_types/actions/public/getGateway.d.ts.map +1 -1
- package/_types/actions/public/getMaxMint.d.ts +5 -0
- package/_types/actions/public/getMaxMint.d.ts.map +1 -0
- package/_types/actions/public/getMaxWithdraw.d.ts.map +1 -1
- package/_types/actions/public/getMintFee.d.ts.map +1 -1
- package/_types/actions/public/getPeggedToken.d.ts.map +1 -1
- package/_types/actions/public/getRedeemFee.d.ts.map +1 -1
- package/_types/actions/public/getRedeemRequest.d.ts.map +1 -1
- package/_types/actions/public/getTreasury.d.ts.map +1 -1
- package/_types/actions/public/getWithdrawalDelay.d.ts.map +1 -1
- package/_types/actions/public/getWithdrawalDelayEnabled.d.ts.map +1 -1
- package/_types/actions/public/index.d.ts +14 -13
- package/_types/actions/public/index.d.ts.map +1 -1
- package/_types/actions/public/isInstantRedeemWhitelisted.d.ts.map +1 -1
- package/_types/actions/public/previewDeposit.d.ts.map +1 -1
- package/_types/actions/public/previewRedeem.d.ts.map +1 -1
- package/_types/actions/public/previewWithdraw.d.ts.map +1 -1
- package/_types/actions/wallet/cancelRedeemRequest.d.ts +1 -1
- package/_types/actions/wallet/deposit.d.ts +1 -1
- package/_types/actions/wallet/redeem.d.ts +1 -1
- package/_types/actions/wallet/requestRedeem.d.ts +1 -1
- package/_types/gatewayAddresses.d.ts.map +1 -1
- package/_types/index.d.ts +13 -12
- package/_types/index.d.ts.map +1 -1
- package/package.json +7 -5
- package/src/abi/gatewayAbi.ts +28 -0
- package/src/actions/index.ts +18 -17
- package/src/actions/public/getGateway.ts +2 -2
- package/src/actions/public/getMaxMint.ts +33 -0
- package/src/actions/public/getMaxWithdraw.ts +2 -2
- package/src/actions/public/getMintFee.ts +2 -2
- package/src/actions/public/getPeggedToken.ts +2 -2
- package/src/actions/public/getRedeemFee.ts +2 -2
- package/src/actions/public/getRedeemRequest.ts +2 -2
- package/src/actions/public/getTreasury.ts +2 -2
- package/src/actions/public/getWithdrawalDelay.ts +2 -2
- package/src/actions/public/getWithdrawalDelayEnabled.ts +2 -2
- package/src/actions/public/index.ts +14 -13
- package/src/actions/public/isInstantRedeemWhitelisted.ts +2 -2
- package/src/actions/public/previewDeposit.ts +2 -2
- package/src/actions/public/previewRedeem.ts +2 -2
- package/src/actions/public/previewWithdraw.ts +2 -2
- package/src/actions/wallet/cancelRedeemRequest.ts +2 -2
- package/src/actions/wallet/deposit.ts +2 -2
- package/src/actions/wallet/redeem.ts +6 -6
- package/src/actions/wallet/requestRedeem.ts +3 -3
- package/src/gatewayAddresses.ts +6 -17
- package/src/index.ts +11 -8
- package/_esm/abi/gatewayAbi.js +0 -195
- package/_esm/abi/gatewayAbi.js.map +0 -1
- package/_esm/abi/peggedTokenAbi.js +0 -10
- package/_esm/abi/peggedTokenAbi.js.map +0 -1
- package/_esm/actions/public/getGateway.js +0 -30
- package/_esm/actions/public/getGateway.js.map +0 -1
- package/_esm/actions/public/getMaxWithdraw.js +0 -28
- package/_esm/actions/public/getMaxWithdraw.js.map +0 -1
- package/_esm/actions/public/getMintFee.js +0 -28
- package/_esm/actions/public/getMintFee.js.map +0 -1
- package/_esm/actions/public/getPeggedToken.js +0 -23
- package/_esm/actions/public/getPeggedToken.js.map +0 -1
- package/_esm/actions/public/getRedeemFee.js +0 -28
- package/_esm/actions/public/getRedeemFee.js.map +0 -1
- package/_esm/actions/public/getRedeemRequest.js +0 -28
- package/_esm/actions/public/getRedeemRequest.js.map +0 -1
- package/_esm/actions/public/getTreasury.js +0 -23
- package/_esm/actions/public/getTreasury.js.map +0 -1
- package/_esm/actions/public/getWithdrawalDelay.js +0 -23
- package/_esm/actions/public/getWithdrawalDelay.js.map +0 -1
- package/_esm/actions/public/getWithdrawalDelayEnabled.js +0 -23
- package/_esm/actions/public/getWithdrawalDelayEnabled.js.map +0 -1
- package/_esm/actions/public/index.js +0 -14
- package/_esm/actions/public/index.js.map +0 -1
- package/_esm/actions/public/isInstantRedeemWhitelisted.js +0 -28
- package/_esm/actions/public/isInstantRedeemWhitelisted.js.map +0 -1
- package/_esm/actions/public/previewDeposit.js +0 -35
- package/_esm/actions/public/previewDeposit.js.map +0 -1
- package/_esm/actions/public/previewRedeem.js +0 -35
- package/_esm/actions/public/previewRedeem.js.map +0 -1
- package/_esm/actions/public/previewWithdraw.js +0 -35
- package/_esm/actions/public/previewWithdraw.js.map +0 -1
- package/_esm/actions/wallet/cancelRedeemRequest.js +0 -89
- package/_esm/actions/wallet/cancelRedeemRequest.js.map +0 -1
- package/_esm/actions/wallet/deposit.js +0 -193
- package/_esm/actions/wallet/deposit.js.map +0 -1
- package/_esm/actions/wallet/redeem.js +0 -226
- package/_esm/actions/wallet/redeem.js.map +0 -1
- package/_esm/actions/wallet/requestRedeem.js +0 -153
- package/_esm/actions/wallet/requestRedeem.js.map +0 -1
- package/_esm/gatewayAddresses.js +0 -18
- package/_esm/gatewayAddresses.js.map +0 -1
- package/_esm/types.js +0 -2
- package/_esm/types.js.map +0 -1
- package/_esm/utils/isAddressValid.js +0 -3
- package/_esm/utils/isAddressValid.js.map +0 -1
- package/_types/utils/isAddressValid.d.ts +0 -3
- package/_types/utils/isAddressValid.d.ts.map +0 -1
- package/src/utils/isAddressValid.ts +0 -4
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { readContract } from "viem/actions";
|
|
2
|
-
import { gatewayAbi } from "../../abi/gatewayAbi.js";
|
|
3
|
-
import { isAddressValid } from "../../utils/isAddressValid.js";
|
|
4
|
-
export async function previewWithdraw(client, parameters) {
|
|
5
|
-
// Validate client
|
|
6
|
-
if (!client) {
|
|
7
|
-
throw new Error("Client is not defined");
|
|
8
|
-
}
|
|
9
|
-
// Validate parameters exist
|
|
10
|
-
if (!parameters) {
|
|
11
|
-
throw new Error("Parameters are required");
|
|
12
|
-
}
|
|
13
|
-
// Validate gateway address
|
|
14
|
-
if (!isAddressValid(parameters.address)) {
|
|
15
|
-
throw new Error("Gateway is invalid");
|
|
16
|
-
}
|
|
17
|
-
// Validate tokenOut address
|
|
18
|
-
if (!isAddressValid(parameters.tokenOut)) {
|
|
19
|
-
throw new Error("Token is invalid");
|
|
20
|
-
}
|
|
21
|
-
// Validate amountOut
|
|
22
|
-
if (typeof parameters.amountOut !== "bigint") {
|
|
23
|
-
throw new Error("Amount must be a bigint");
|
|
24
|
-
}
|
|
25
|
-
if (parameters.amountOut <= 0n) {
|
|
26
|
-
throw new Error("Amount must be greater than 0");
|
|
27
|
-
}
|
|
28
|
-
return readContract(client, {
|
|
29
|
-
abi: gatewayAbi,
|
|
30
|
-
address: parameters.address,
|
|
31
|
-
args: [parameters.tokenOut, parameters.amountOut],
|
|
32
|
-
functionName: "previewWithdraw",
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=previewWithdraw.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"previewWithdraw.js","sourceRoot":"","sources":["../../../src/actions/public/previewWithdraw.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,UAIC;IAED,kBAAkB;IAClB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,qBAAqB;IACrB,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,UAAU,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC,MAAM,EAAE;QAC1B,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC;QACjD,YAAY,EAAE,iBAAiB;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { toPromiseEvent } from "to-promise-event";
|
|
2
|
-
import { encodeFunctionData, isAddress, isAddressEqual, zeroAddress, } from "viem";
|
|
3
|
-
import { waitForTransactionReceipt, writeContract } from "viem/actions";
|
|
4
|
-
import { gatewayAbi } from "../../abi/gatewayAbi.js";
|
|
5
|
-
const canCancelRedeemRequest = function ({ client, gatewayAddress, }) {
|
|
6
|
-
if (!client) {
|
|
7
|
-
return {
|
|
8
|
-
canCancelRedeemRequest: false,
|
|
9
|
-
reason: "Client is not defined",
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
if (!client.chain) {
|
|
13
|
-
return {
|
|
14
|
-
canCancelRedeemRequest: false,
|
|
15
|
-
reason: "Chain is not defined on wallet client",
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
if (!client.account) {
|
|
19
|
-
return {
|
|
20
|
-
canCancelRedeemRequest: false,
|
|
21
|
-
reason: "Client must have an account",
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// Validate gateway address
|
|
25
|
-
if (!gatewayAddress || !isAddress(gatewayAddress)) {
|
|
26
|
-
return {
|
|
27
|
-
canCancelRedeemRequest: false,
|
|
28
|
-
reason: "Invalid gateway address",
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
if (isAddressEqual(gatewayAddress, zeroAddress)) {
|
|
32
|
-
return {
|
|
33
|
-
canCancelRedeemRequest: false,
|
|
34
|
-
reason: "Gateway address cannot be zero address",
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return { canCancelRedeemRequest: true };
|
|
38
|
-
};
|
|
39
|
-
const runCancelRedeemRequest = (walletClient, { gatewayAddress }) => async function (emitter) {
|
|
40
|
-
try {
|
|
41
|
-
const { canCancelRedeemRequest: canCancelRedeemRequestFlag, reason } = canCancelRedeemRequest({
|
|
42
|
-
client: walletClient,
|
|
43
|
-
gatewayAddress,
|
|
44
|
-
});
|
|
45
|
-
if (!canCancelRedeemRequestFlag) {
|
|
46
|
-
emitter.emit("cancel-redeem-request-failed-validation", reason);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
emitter.emit("pre-cancel-redeem-request");
|
|
50
|
-
const cancelHash = await writeContract(walletClient, {
|
|
51
|
-
abi: gatewayAbi,
|
|
52
|
-
account: walletClient.account,
|
|
53
|
-
address: gatewayAddress,
|
|
54
|
-
chain: walletClient.chain,
|
|
55
|
-
functionName: "cancelRedeemRequest",
|
|
56
|
-
}).catch(function (error) {
|
|
57
|
-
emitter.emit("user-signing-cancel-redeem-request-error", error);
|
|
58
|
-
});
|
|
59
|
-
if (!cancelHash) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
emitter.emit("user-signed-cancel-redeem-request", cancelHash);
|
|
63
|
-
const cancelReceipt = await waitForTransactionReceipt(walletClient, {
|
|
64
|
-
hash: cancelHash,
|
|
65
|
-
}).catch(function (error) {
|
|
66
|
-
emitter.emit("cancel-redeem-request-failed", error);
|
|
67
|
-
});
|
|
68
|
-
if (!cancelReceipt) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const cancelEventMap = {
|
|
72
|
-
reverted: "cancel-redeem-request-transaction-reverted",
|
|
73
|
-
success: "cancel-redeem-request-transaction-succeeded",
|
|
74
|
-
};
|
|
75
|
-
emitter.emit(cancelEventMap[cancelReceipt.status], cancelReceipt);
|
|
76
|
-
}
|
|
77
|
-
catch (error) {
|
|
78
|
-
emitter.emit("unexpected-error", error);
|
|
79
|
-
}
|
|
80
|
-
finally {
|
|
81
|
-
emitter.emit("cancel-redeem-request-settled");
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
export const cancelRedeemRequest = (...args) => toPromiseEvent(runCancelRedeemRequest(...args));
|
|
85
|
-
export const encodeCancelRedeemRequest = () => encodeFunctionData({
|
|
86
|
-
abi: gatewayAbi,
|
|
87
|
-
functionName: "cancelRedeemRequest",
|
|
88
|
-
});
|
|
89
|
-
//# sourceMappingURL=cancelRedeemRequest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cancelRedeemRequest.js","sourceRoot":"","sources":["../../../src/actions/wallet/cancelRedeemRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { toPromiseEvent } from "to-promise-event";
|
|
2
|
-
import { encodeFunctionData, isAddress, isAddressEqual, zeroAddress, } from "viem";
|
|
3
|
-
import { waitForTransactionReceipt, writeContract } from "viem/actions";
|
|
4
|
-
import { allowance, approve } from "viem-erc20/actions";
|
|
5
|
-
import { gatewayAbi } from "../../abi/gatewayAbi.js";
|
|
6
|
-
const canDeposit = function ({ amountIn, approveAmount, client, gatewayAddress, minPeggedTokenOut, receiver, tokenIn, }) {
|
|
7
|
-
// Validate client
|
|
8
|
-
if (!client) {
|
|
9
|
-
return {
|
|
10
|
-
canDeposit: false,
|
|
11
|
-
reason: "Client is not defined",
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
if (!client.chain) {
|
|
15
|
-
return {
|
|
16
|
-
canDeposit: false,
|
|
17
|
-
reason: "Chain is not defined on wallet client",
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
// Validate client has required properties
|
|
21
|
-
if (!client.account) {
|
|
22
|
-
return {
|
|
23
|
-
canDeposit: false,
|
|
24
|
-
reason: "Client must have an account",
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// Validate gateway address
|
|
28
|
-
if (!gatewayAddress || !isAddress(gatewayAddress)) {
|
|
29
|
-
return {
|
|
30
|
-
canDeposit: false,
|
|
31
|
-
reason: "Invalid gateway address",
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
if (isAddressEqual(gatewayAddress, zeroAddress)) {
|
|
35
|
-
return {
|
|
36
|
-
canDeposit: false,
|
|
37
|
-
reason: "Gateway address cannot be zero address",
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
// Validate tokenIn address
|
|
41
|
-
if (!tokenIn || !isAddress(tokenIn)) {
|
|
42
|
-
return {
|
|
43
|
-
canDeposit: false,
|
|
44
|
-
reason: "Invalid token address",
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
if (isAddressEqual(tokenIn, zeroAddress)) {
|
|
48
|
-
return {
|
|
49
|
-
canDeposit: false,
|
|
50
|
-
reason: "Token address cannot be zero address",
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
// Validate receiver address
|
|
54
|
-
if (!receiver || !isAddress(receiver)) {
|
|
55
|
-
return {
|
|
56
|
-
canDeposit: false,
|
|
57
|
-
reason: "Invalid receiver address",
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
if (isAddressEqual(receiver, zeroAddress)) {
|
|
61
|
-
return {
|
|
62
|
-
canDeposit: false,
|
|
63
|
-
reason: "Receiver address cannot be zero address",
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
// Validate amountIn
|
|
67
|
-
if (typeof amountIn !== "bigint") {
|
|
68
|
-
return {
|
|
69
|
-
canDeposit: false,
|
|
70
|
-
reason: "Amount must be a bigint",
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
if (amountIn <= 0n) {
|
|
74
|
-
return {
|
|
75
|
-
canDeposit: false,
|
|
76
|
-
reason: "Amount must be greater than 0",
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
// Validate minPeggedTokenOut
|
|
80
|
-
if (typeof minPeggedTokenOut !== "bigint") {
|
|
81
|
-
return {
|
|
82
|
-
canDeposit: false,
|
|
83
|
-
reason: "Minimum output must be a bigint",
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
if (minPeggedTokenOut < 0n) {
|
|
87
|
-
return {
|
|
88
|
-
canDeposit: false,
|
|
89
|
-
reason: "Minimum output cannot be negative",
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
// Validate approveAmount
|
|
93
|
-
if (approveAmount < amountIn) {
|
|
94
|
-
return {
|
|
95
|
-
canDeposit: false,
|
|
96
|
-
reason: "Approve amount must be greater than or equal to amount",
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
return { canDeposit: true };
|
|
100
|
-
};
|
|
101
|
-
const runDeposit = (walletClient, { amountIn, approveAmount = amountIn, gatewayAddress, minPeggedTokenOut, receiver, tokenIn, }) => async function (emitter) {
|
|
102
|
-
try {
|
|
103
|
-
const { canDeposit: canDepositFlag, reason } = canDeposit({
|
|
104
|
-
amountIn,
|
|
105
|
-
approveAmount,
|
|
106
|
-
client: walletClient,
|
|
107
|
-
gatewayAddress,
|
|
108
|
-
minPeggedTokenOut,
|
|
109
|
-
receiver,
|
|
110
|
-
tokenIn,
|
|
111
|
-
});
|
|
112
|
-
if (!canDepositFlag) {
|
|
113
|
-
emitter.emit("deposit-failed-validation", reason);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
// Check current allowance
|
|
117
|
-
const currentAllowance = await allowance(walletClient, {
|
|
118
|
-
address: tokenIn,
|
|
119
|
-
// account is already validated
|
|
120
|
-
owner: walletClient.account.address,
|
|
121
|
-
spender: gatewayAddress,
|
|
122
|
-
});
|
|
123
|
-
// If allowance is insufficient, approve first
|
|
124
|
-
if (currentAllowance < amountIn) {
|
|
125
|
-
emitter.emit("pre-approve");
|
|
126
|
-
const approvalHash = await approve(walletClient, {
|
|
127
|
-
address: tokenIn,
|
|
128
|
-
amount: approveAmount,
|
|
129
|
-
spender: gatewayAddress,
|
|
130
|
-
}).catch(function (error) {
|
|
131
|
-
emitter.emit("user-signing-approval-error", error);
|
|
132
|
-
});
|
|
133
|
-
if (!approvalHash) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
emitter.emit("user-signed-approval", approvalHash);
|
|
137
|
-
const approvalReceipt = await waitForTransactionReceipt(walletClient, {
|
|
138
|
-
hash: approvalHash,
|
|
139
|
-
}).catch(function (error) {
|
|
140
|
-
emitter.emit("deposit-failed", error);
|
|
141
|
-
});
|
|
142
|
-
if (!approvalReceipt) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (approvalReceipt.status === "reverted") {
|
|
146
|
-
emitter.emit("approve-transaction-reverted", approvalReceipt);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
emitter.emit("approve-transaction-succeeded", approvalReceipt);
|
|
150
|
-
}
|
|
151
|
-
emitter.emit("pre-deposit");
|
|
152
|
-
const depositHash = await writeContract(walletClient, {
|
|
153
|
-
abi: gatewayAbi,
|
|
154
|
-
account: walletClient.account,
|
|
155
|
-
address: gatewayAddress,
|
|
156
|
-
args: [tokenIn, amountIn, minPeggedTokenOut, receiver],
|
|
157
|
-
chain: walletClient.chain,
|
|
158
|
-
functionName: "deposit",
|
|
159
|
-
}).catch(function (error) {
|
|
160
|
-
emitter.emit("user-signing-deposit-error", error);
|
|
161
|
-
});
|
|
162
|
-
if (!depositHash) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
emitter.emit("user-signed-deposit", depositHash);
|
|
166
|
-
const depositReceipt = await waitForTransactionReceipt(walletClient, {
|
|
167
|
-
hash: depositHash,
|
|
168
|
-
}).catch(function (error) {
|
|
169
|
-
emitter.emit("deposit-failed", error);
|
|
170
|
-
});
|
|
171
|
-
if (!depositReceipt) {
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
const depositEventMap = {
|
|
175
|
-
reverted: "deposit-transaction-reverted",
|
|
176
|
-
success: "deposit-transaction-succeeded",
|
|
177
|
-
};
|
|
178
|
-
emitter.emit(depositEventMap[depositReceipt.status], depositReceipt);
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
emitter.emit("unexpected-error", error);
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
emitter.emit("deposit-settled");
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
export const deposit = (...args) => toPromiseEvent(runDeposit(...args));
|
|
188
|
-
export const encodeDeposit = ({ amountIn, minPeggedTokenOut, receiver, tokenIn, }) => encodeFunctionData({
|
|
189
|
-
abi: gatewayAbi,
|
|
190
|
-
args: [tokenIn, amountIn, minPeggedTokenOut, receiver],
|
|
191
|
-
functionName: "deposit",
|
|
192
|
-
});
|
|
193
|
-
//# sourceMappingURL=deposit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../../src/actions/wallet/deposit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { toPromiseEvent } from "to-promise-event";
|
|
2
|
-
import { encodeFunctionData, isAddress, isAddressEqual, zeroAddress, } from "viem";
|
|
3
|
-
import { waitForTransactionReceipt, writeContract } from "viem/actions";
|
|
4
|
-
import { allowance, approve } from "viem-erc20/actions";
|
|
5
|
-
import { gatewayAbi } from "../../abi/gatewayAbi.js";
|
|
6
|
-
import { getMaxWithdraw } from "../public/getMaxWithdraw.js";
|
|
7
|
-
import { getPeggedToken } from "../public/getPeggedToken.js";
|
|
8
|
-
import { getWithdrawalDelayEnabled } from "../public/getWithdrawalDelayEnabled.js";
|
|
9
|
-
import { isInstantRedeemWhitelisted } from "../public/isInstantRedeemWhitelisted.js";
|
|
10
|
-
const canRedeem = async function ({ approveAmount, client, gatewayAddress, minAmountOut, peggedTokenIn, receiver, tokenOut, }) {
|
|
11
|
-
// Validate client
|
|
12
|
-
if (!client) {
|
|
13
|
-
return {
|
|
14
|
-
canRedeem: false,
|
|
15
|
-
reason: "Client is not defined",
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
if (!client.chain) {
|
|
19
|
-
return {
|
|
20
|
-
canRedeem: false,
|
|
21
|
-
reason: "Chain is not defined on wallet client",
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// Validate client has required properties
|
|
25
|
-
if (!client.account) {
|
|
26
|
-
return {
|
|
27
|
-
canRedeem: false,
|
|
28
|
-
reason: "Client must have an account",
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
// Validate gateway address
|
|
32
|
-
if (!gatewayAddress || !isAddress(gatewayAddress)) {
|
|
33
|
-
return {
|
|
34
|
-
canRedeem: false,
|
|
35
|
-
reason: "Invalid gateway address",
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
if (isAddressEqual(gatewayAddress, zeroAddress)) {
|
|
39
|
-
return {
|
|
40
|
-
canRedeem: false,
|
|
41
|
-
reason: "Gateway address cannot be zero address",
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
// Validate tokenOut address
|
|
45
|
-
if (!tokenOut || !isAddress(tokenOut)) {
|
|
46
|
-
return {
|
|
47
|
-
canRedeem: false,
|
|
48
|
-
reason: "Invalid token address",
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
if (isAddressEqual(tokenOut, zeroAddress)) {
|
|
52
|
-
return {
|
|
53
|
-
canRedeem: false,
|
|
54
|
-
reason: "Token address cannot be zero address",
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
// Validate receiver address
|
|
58
|
-
if (!receiver || !isAddress(receiver)) {
|
|
59
|
-
return {
|
|
60
|
-
canRedeem: false,
|
|
61
|
-
reason: "Invalid receiver address",
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
if (isAddressEqual(receiver, zeroAddress)) {
|
|
65
|
-
return {
|
|
66
|
-
canRedeem: false,
|
|
67
|
-
reason: "Receiver address cannot be zero address",
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
// Validate peggedTokenIn
|
|
71
|
-
if (typeof peggedTokenIn !== "bigint") {
|
|
72
|
-
return {
|
|
73
|
-
canRedeem: false,
|
|
74
|
-
reason: "Amount must be a bigint",
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
if (peggedTokenIn <= 0n) {
|
|
78
|
-
return {
|
|
79
|
-
canRedeem: false,
|
|
80
|
-
reason: "Amount must be greater than 0",
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
// Validate minAmountOut
|
|
84
|
-
if (typeof minAmountOut !== "bigint") {
|
|
85
|
-
return {
|
|
86
|
-
canRedeem: false,
|
|
87
|
-
reason: "Minimum output must be a bigint",
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
if (minAmountOut < 0n) {
|
|
91
|
-
return {
|
|
92
|
-
canRedeem: false,
|
|
93
|
-
reason: "Minimum output cannot be negative",
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
// Validate approveAmount
|
|
97
|
-
if (approveAmount < peggedTokenIn) {
|
|
98
|
-
return {
|
|
99
|
-
canRedeem: false,
|
|
100
|
-
reason: "Approve amount must be greater than or equal to amount",
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
// Check treasury has enough balance for the requested token
|
|
104
|
-
const maxWithdrawable = await getMaxWithdraw(client, {
|
|
105
|
-
address: gatewayAddress,
|
|
106
|
-
tokenOut,
|
|
107
|
-
});
|
|
108
|
-
if (minAmountOut > maxWithdrawable) {
|
|
109
|
-
return {
|
|
110
|
-
canRedeem: false,
|
|
111
|
-
reason: "Not enough balance in treasury",
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return { canRedeem: true };
|
|
115
|
-
};
|
|
116
|
-
const runRedeem = (walletClient, { approveAmount, gatewayAddress, minAmountOut, peggedTokenIn, receiver, tokenOut, }) => async function (emitter) {
|
|
117
|
-
const resolvedApproveAmount = approveAmount ?? peggedTokenIn;
|
|
118
|
-
try {
|
|
119
|
-
const { canRedeem: canRedeemFlag, reason } = await canRedeem({
|
|
120
|
-
approveAmount: resolvedApproveAmount,
|
|
121
|
-
client: walletClient,
|
|
122
|
-
gatewayAddress,
|
|
123
|
-
minAmountOut,
|
|
124
|
-
peggedTokenIn,
|
|
125
|
-
receiver,
|
|
126
|
-
tokenOut,
|
|
127
|
-
});
|
|
128
|
-
if (!canRedeemFlag) {
|
|
129
|
-
emitter.emit("redeem-failed-validation", reason);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
// Check if user is whitelisted for instant redeem
|
|
133
|
-
const [isWhitelisted, delayEnabled] = await Promise.all([
|
|
134
|
-
isInstantRedeemWhitelisted(walletClient, {
|
|
135
|
-
account: walletClient.account.address,
|
|
136
|
-
address: gatewayAddress,
|
|
137
|
-
}),
|
|
138
|
-
getWithdrawalDelayEnabled(walletClient, {
|
|
139
|
-
address: gatewayAddress,
|
|
140
|
-
}),
|
|
141
|
-
]);
|
|
142
|
-
// Approval is needed when the user is whitelisted (instant redeem burns pegged tokens)
|
|
143
|
-
// or when delay is disabled (redeem completes immediately)
|
|
144
|
-
if (isWhitelisted || !delayEnabled) {
|
|
145
|
-
// Get the pegged token address
|
|
146
|
-
const peggedTokenAddress = await getPeggedToken(walletClient, {
|
|
147
|
-
address: gatewayAddress,
|
|
148
|
-
});
|
|
149
|
-
// Check current allowance for pegged token
|
|
150
|
-
const currentAllowance = await allowance(walletClient, {
|
|
151
|
-
address: peggedTokenAddress,
|
|
152
|
-
owner: walletClient.account.address,
|
|
153
|
-
spender: gatewayAddress,
|
|
154
|
-
});
|
|
155
|
-
// If allowance is insufficient, approve first
|
|
156
|
-
if (currentAllowance < peggedTokenIn) {
|
|
157
|
-
emitter.emit("pre-approve");
|
|
158
|
-
const approvalHash = await approve(walletClient, {
|
|
159
|
-
address: peggedTokenAddress,
|
|
160
|
-
amount: resolvedApproveAmount,
|
|
161
|
-
spender: gatewayAddress,
|
|
162
|
-
}).catch(function (error) {
|
|
163
|
-
emitter.emit("user-signing-approval-error", error);
|
|
164
|
-
});
|
|
165
|
-
if (!approvalHash) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
emitter.emit("user-signed-approval", approvalHash);
|
|
169
|
-
const approvalReceipt = await waitForTransactionReceipt(walletClient, {
|
|
170
|
-
hash: approvalHash,
|
|
171
|
-
}).catch(function (error) {
|
|
172
|
-
emitter.emit("redeem-failed", error);
|
|
173
|
-
});
|
|
174
|
-
if (!approvalReceipt) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
if (approvalReceipt.status === "reverted") {
|
|
178
|
-
emitter.emit("approve-transaction-reverted", approvalReceipt);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
emitter.emit("approve-transaction-succeeded", approvalReceipt);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
emitter.emit("pre-redeem");
|
|
185
|
-
const redeemHash = await writeContract(walletClient, {
|
|
186
|
-
abi: gatewayAbi,
|
|
187
|
-
account: walletClient.account,
|
|
188
|
-
address: gatewayAddress,
|
|
189
|
-
args: [tokenOut, peggedTokenIn, minAmountOut, receiver],
|
|
190
|
-
chain: walletClient.chain,
|
|
191
|
-
functionName: "redeem",
|
|
192
|
-
}).catch(function (error) {
|
|
193
|
-
emitter.emit("user-signing-redeem-error", error);
|
|
194
|
-
});
|
|
195
|
-
if (!redeemHash) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
emitter.emit("user-signed-redeem", redeemHash);
|
|
199
|
-
const redeemReceipt = await waitForTransactionReceipt(walletClient, {
|
|
200
|
-
hash: redeemHash,
|
|
201
|
-
}).catch(function (error) {
|
|
202
|
-
emitter.emit("redeem-failed", error);
|
|
203
|
-
});
|
|
204
|
-
if (!redeemReceipt) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
const redeemEventMap = {
|
|
208
|
-
reverted: "redeem-transaction-reverted",
|
|
209
|
-
success: "redeem-transaction-succeeded",
|
|
210
|
-
};
|
|
211
|
-
emitter.emit(redeemEventMap[redeemReceipt.status], redeemReceipt);
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
emitter.emit("unexpected-error", error);
|
|
215
|
-
}
|
|
216
|
-
finally {
|
|
217
|
-
emitter.emit("redeem-settled");
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
export const redeem = (...args) => toPromiseEvent(runRedeem(...args));
|
|
221
|
-
export const encodeRedeem = ({ minAmountOut, peggedTokenIn, receiver, tokenOut, }) => encodeFunctionData({
|
|
222
|
-
abi: gatewayAbi,
|
|
223
|
-
args: [tokenOut, peggedTokenIn, minAmountOut, receiver],
|
|
224
|
-
functionName: "redeem",
|
|
225
|
-
});
|
|
226
|
-
//# sourceMappingURL=redeem.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redeem.js","sourceRoot":"","sources":["../../../src/actions/wallet/redeem.ts"],"names":[],"mappings":"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"}
|