mint.club-cli 1.4.2 → 1.5.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/README.md +21 -6
- package/dist/index.js +79 -79
- package/package.json +20 -8
- package/dist/abi/bond.d.ts +0 -244
- package/dist/abi/bond.js +0 -323
- package/dist/abi/bond.js.map +0 -1
- package/dist/abi/zap-v2.d.ts +0 -93
- package/dist/abi/zap-v2.js +0 -121
- package/dist/abi/zap-v2.js.map +0 -1
- package/dist/client.d.ts +0 -6
- package/dist/client.js +0 -38
- package/dist/client.js.map +0 -1
- package/dist/commands/buy.d.ts +0 -2
- package/dist/commands/buy.js +0 -77
- package/dist/commands/buy.js.map +0 -1
- package/dist/commands/create.d.ts +0 -2
- package/dist/commands/create.js +0 -85
- package/dist/commands/create.js.map +0 -1
- package/dist/commands/info.d.ts +0 -19
- package/dist/commands/info.js +0 -139
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/sell.d.ts +0 -2
- package/dist/commands/sell.js +0 -77
- package/dist/commands/sell.js.map +0 -1
- package/dist/commands/zap-buy.d.ts +0 -2
- package/dist/commands/zap-buy.js +0 -93
- package/dist/commands/zap-buy.js.map +0 -1
- package/dist/commands/zap-sell.d.ts +0 -2
- package/dist/commands/zap-sell.js +0 -89
- package/dist/commands/zap-sell.js.map +0 -1
- package/dist/config/chains.d.ts +0 -782
- package/dist/config/chains.js +0 -260
- package/dist/config/chains.js.map +0 -1
- package/dist/config/contracts.d.ts +0 -44
- package/dist/config/contracts.js +0 -59
- package/dist/config/contracts.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js.map +0 -1
- package/dist/utils/format.d.ts +0 -26
- package/dist/utils/format.js +0 -54
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/swap.d.ts +0 -8
- package/dist/utils/swap.js +0 -48
- package/dist/utils/swap.js.map +0 -1
package/dist/commands/sell.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { getPublicClient, getWalletClient } from '../client.js';
|
|
2
|
-
import { getBondAddress } from '../config/contracts.js';
|
|
3
|
-
import { MCV2_BOND_ABI } from '../abi/bond.js';
|
|
4
|
-
import { formatAmount, parseAmount, formatTxHash } from '../utils/format.js';
|
|
5
|
-
export async function sellCommand(tokenAddress, amount, minRefund, chain, privateKey) {
|
|
6
|
-
try {
|
|
7
|
-
console.log(`🔥 Selling ${amount} tokens of ${tokenAddress} on ${chain}...`);
|
|
8
|
-
const publicClient = getPublicClient(chain);
|
|
9
|
-
const walletClient = getWalletClient(chain, privateKey);
|
|
10
|
-
const bondAddress = getBondAddress(chain);
|
|
11
|
-
const tokensToBurn = parseAmount(amount);
|
|
12
|
-
// Get the expected refund amount
|
|
13
|
-
console.log('💰 Calculating refund amount...');
|
|
14
|
-
const [refundAmount, royalty] = await publicClient.readContract({
|
|
15
|
-
address: bondAddress,
|
|
16
|
-
abi: MCV2_BOND_ABI,
|
|
17
|
-
functionName: 'getRefundForTokens',
|
|
18
|
-
args: [tokenAddress, tokensToBurn],
|
|
19
|
-
});
|
|
20
|
-
const netRefund = refundAmount - royalty;
|
|
21
|
-
console.log(` Gross refund: ${formatAmount(refundAmount)}`);
|
|
22
|
-
console.log(` Royalty: ${formatAmount(royalty)}`);
|
|
23
|
-
console.log(` Net refund: ${formatAmount(netRefund)}`);
|
|
24
|
-
// Check min refund if provided
|
|
25
|
-
if (minRefund) {
|
|
26
|
-
const minRefundWei = parseAmount(minRefund);
|
|
27
|
-
if (netRefund < minRefundWei) {
|
|
28
|
-
throw new Error(`Refund ${formatAmount(netRefund)} is below minimum ${formatAmount(minRefundWei)}`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// Simulate the transaction first
|
|
32
|
-
console.log('🔍 Simulating transaction...');
|
|
33
|
-
await publicClient.simulateContract({
|
|
34
|
-
account: walletClient.account,
|
|
35
|
-
address: bondAddress,
|
|
36
|
-
abi: MCV2_BOND_ABI,
|
|
37
|
-
functionName: 'burn',
|
|
38
|
-
args: [
|
|
39
|
-
tokenAddress,
|
|
40
|
-
tokensToBurn,
|
|
41
|
-
minRefund ? parseAmount(minRefund) : 0n,
|
|
42
|
-
walletClient.account.address,
|
|
43
|
-
],
|
|
44
|
-
});
|
|
45
|
-
// Execute the transaction
|
|
46
|
-
console.log('📤 Sending transaction...');
|
|
47
|
-
const hash = await walletClient.writeContract({
|
|
48
|
-
address: bondAddress,
|
|
49
|
-
abi: MCV2_BOND_ABI,
|
|
50
|
-
functionName: 'burn',
|
|
51
|
-
args: [
|
|
52
|
-
tokenAddress,
|
|
53
|
-
tokensToBurn,
|
|
54
|
-
minRefund ? parseAmount(minRefund) : 0n,
|
|
55
|
-
walletClient.account.address,
|
|
56
|
-
],
|
|
57
|
-
});
|
|
58
|
-
console.log(` Transaction hash: ${formatTxHash(hash)}`);
|
|
59
|
-
// Wait for confirmation
|
|
60
|
-
console.log('⏳ Waiting for confirmation...');
|
|
61
|
-
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
62
|
-
if (receipt.status === 'success') {
|
|
63
|
-
console.log('✅ Transaction confirmed!');
|
|
64
|
-
console.log(` Sold: ${amount} tokens`);
|
|
65
|
-
console.log(` Refund: ${formatAmount(netRefund)} reserve tokens`);
|
|
66
|
-
console.log(` Block: ${receipt.blockNumber}`);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
console.log('❌ Transaction failed');
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=sell.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sell.js","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/zap-buy.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { getPublicClient, getWalletClient } from '../client.js';
|
|
2
|
-
import { getZapV2Address, isZapV2Supported } from '../config/contracts.js';
|
|
3
|
-
import { MCV2_ZAP_V2_ABI } from '../abi/zap-v2.js';
|
|
4
|
-
import { formatAmount, parseAmount, formatTxHash } from '../utils/format.js';
|
|
5
|
-
import { encodeV3SwapPath, encodeV3SwapInput, createSwapCommands, parseSwapPath } from '../utils/swap.js';
|
|
6
|
-
export async function zapBuyCommand(tokenAddress, inputToken, inputAmount, minTokens, path, chain, privateKey) {
|
|
7
|
-
try {
|
|
8
|
-
if (!isZapV2Supported(chain)) {
|
|
9
|
-
throw new Error(`ZapV2 is not supported on ${chain}. Currently only available on Base.`);
|
|
10
|
-
}
|
|
11
|
-
console.log(`⚡ Zap buying ${tokenAddress} with ${inputAmount} ${inputToken} on ${chain}...`);
|
|
12
|
-
const publicClient = getPublicClient(chain);
|
|
13
|
-
const walletClient = getWalletClient(chain, privateKey);
|
|
14
|
-
const zapV2Address = getZapV2Address(chain);
|
|
15
|
-
if (!zapV2Address) {
|
|
16
|
-
throw new Error('ZapV2 contract not available on this chain');
|
|
17
|
-
}
|
|
18
|
-
const inputAmountWei = parseAmount(inputAmount);
|
|
19
|
-
const minTokensOut = minTokens ? parseAmount(minTokens) : 0n;
|
|
20
|
-
// Parse swap path
|
|
21
|
-
const { tokens, fees } = parseSwapPath(path);
|
|
22
|
-
console.log(` Input: ${inputAmount} ${inputToken}`);
|
|
23
|
-
console.log(` Path: ${tokens.join(' -> ')} (fees: ${fees.join(', ')})`);
|
|
24
|
-
console.log(` Min tokens out: ${minTokens || '0'}`);
|
|
25
|
-
// Encode swap path and commands
|
|
26
|
-
const swapPath = encodeV3SwapPath(tokens, fees);
|
|
27
|
-
const commands = createSwapCommands();
|
|
28
|
-
const swapInput = encodeV3SwapInput(zapV2Address, // recipient (ZapV2 contract)
|
|
29
|
-
inputAmountWei, 0n, // amountOutMin for swap (we'll enforce minTokensOut at the zap level)
|
|
30
|
-
swapPath, false // payerIsUser = false (ZapV2 handles token transfers)
|
|
31
|
-
);
|
|
32
|
-
const deadline = BigInt(Math.floor(Date.now() / 1000) + 1200); // 20 minutes from now
|
|
33
|
-
// Check if input token is ETH (0x0000000000000000000000000000000000000000)
|
|
34
|
-
const isETH = inputToken.toLowerCase() === '0x0000000000000000000000000000000000000000' ||
|
|
35
|
-
inputToken.toLowerCase() === '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
36
|
-
console.log('🔍 Simulating zap transaction...');
|
|
37
|
-
const { result } = await publicClient.simulateContract({
|
|
38
|
-
account: walletClient.account,
|
|
39
|
-
address: zapV2Address,
|
|
40
|
-
abi: MCV2_ZAP_V2_ABI,
|
|
41
|
-
functionName: 'zapMint',
|
|
42
|
-
args: [
|
|
43
|
-
tokenAddress,
|
|
44
|
-
inputToken,
|
|
45
|
-
inputAmountWei,
|
|
46
|
-
minTokensOut,
|
|
47
|
-
commands,
|
|
48
|
-
[swapInput],
|
|
49
|
-
deadline,
|
|
50
|
-
walletClient.account.address,
|
|
51
|
-
],
|
|
52
|
-
value: isETH ? inputAmountWei : 0n,
|
|
53
|
-
});
|
|
54
|
-
console.log(` Expected tokens received: ${formatAmount(result[0])}`);
|
|
55
|
-
console.log(` Reserve tokens used: ${formatAmount(result[1])}`);
|
|
56
|
-
// Execute the transaction
|
|
57
|
-
console.log('📤 Sending transaction...');
|
|
58
|
-
const hash = await walletClient.writeContract({
|
|
59
|
-
address: zapV2Address,
|
|
60
|
-
abi: MCV2_ZAP_V2_ABI,
|
|
61
|
-
functionName: 'zapMint',
|
|
62
|
-
args: [
|
|
63
|
-
tokenAddress,
|
|
64
|
-
inputToken,
|
|
65
|
-
inputAmountWei,
|
|
66
|
-
minTokensOut,
|
|
67
|
-
commands,
|
|
68
|
-
[swapInput],
|
|
69
|
-
deadline,
|
|
70
|
-
walletClient.account.address,
|
|
71
|
-
],
|
|
72
|
-
value: isETH ? inputAmountWei : 0n,
|
|
73
|
-
});
|
|
74
|
-
console.log(` Transaction hash: ${formatTxHash(hash)}`);
|
|
75
|
-
// Wait for confirmation
|
|
76
|
-
console.log('⏳ Waiting for confirmation...');
|
|
77
|
-
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
78
|
-
if (receipt.status === 'success') {
|
|
79
|
-
console.log('✅ Zap transaction confirmed!');
|
|
80
|
-
console.log(` Input: ${inputAmount} ${inputToken}`);
|
|
81
|
-
console.log(` Tokens received: ${formatAmount(result[0])}`);
|
|
82
|
-
console.log(` Block: ${receipt.blockNumber}`);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
console.log('❌ Transaction failed');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=zap-buy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zap-buy.js","sourceRoot":"","sources":["../../src/commands/zap-buy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { getPublicClient, getWalletClient } from '../client.js';
|
|
2
|
-
import { getZapV2Address, isZapV2Supported } from '../config/contracts.js';
|
|
3
|
-
import { MCV2_ZAP_V2_ABI } from '../abi/zap-v2.js';
|
|
4
|
-
import { formatAmount, parseAmount, formatTxHash } from '../utils/format.js';
|
|
5
|
-
import { encodeV3SwapPath, encodeV3SwapInput, createSwapCommands, parseSwapPath } from '../utils/swap.js';
|
|
6
|
-
export async function zapSellCommand(tokenAddress, amount, outputToken, minOutput, path, chain, privateKey) {
|
|
7
|
-
try {
|
|
8
|
-
if (!isZapV2Supported(chain)) {
|
|
9
|
-
throw new Error(`ZapV2 is not supported on ${chain}. Currently only available on Base.`);
|
|
10
|
-
}
|
|
11
|
-
console.log(`⚡ Zap selling ${amount} tokens of ${tokenAddress} for ${outputToken} on ${chain}...`);
|
|
12
|
-
const publicClient = getPublicClient(chain);
|
|
13
|
-
const walletClient = getWalletClient(chain, privateKey);
|
|
14
|
-
const zapV2Address = getZapV2Address(chain);
|
|
15
|
-
if (!zapV2Address) {
|
|
16
|
-
throw new Error('ZapV2 contract not available on this chain');
|
|
17
|
-
}
|
|
18
|
-
const tokensToBurn = parseAmount(amount);
|
|
19
|
-
const minOutputAmount = minOutput ? parseAmount(minOutput) : 0n;
|
|
20
|
-
// Parse swap path (reverse direction for selling)
|
|
21
|
-
const { tokens, fees } = parseSwapPath(path);
|
|
22
|
-
console.log(` Selling: ${amount} tokens`);
|
|
23
|
-
console.log(` Path: ${tokens.join(' -> ')} (fees: ${fees.join(', ')})`);
|
|
24
|
-
console.log(` Min output: ${minOutput || '0'} ${outputToken}`);
|
|
25
|
-
// For selling, we typically want to go from reserve token to output token
|
|
26
|
-
// So the path should start with reserve token and end with output token
|
|
27
|
-
const swapPath = encodeV3SwapPath(tokens, fees);
|
|
28
|
-
const commands = createSwapCommands();
|
|
29
|
-
const swapInput = encodeV3SwapInput(walletClient.account.address, // recipient (user gets the output tokens)
|
|
30
|
-
0n, // amountIn will be determined by ZapV2 based on burn proceeds
|
|
31
|
-
minOutputAmount, swapPath, false // payerIsUser = false (ZapV2 handles token transfers)
|
|
32
|
-
);
|
|
33
|
-
const deadline = BigInt(Math.floor(Date.now() / 1000) + 1200); // 20 minutes from now
|
|
34
|
-
console.log('🔍 Simulating zap transaction...');
|
|
35
|
-
const { result } = await publicClient.simulateContract({
|
|
36
|
-
account: walletClient.account,
|
|
37
|
-
address: zapV2Address,
|
|
38
|
-
abi: MCV2_ZAP_V2_ABI,
|
|
39
|
-
functionName: 'zapBurn',
|
|
40
|
-
args: [
|
|
41
|
-
tokenAddress,
|
|
42
|
-
tokensToBurn,
|
|
43
|
-
outputToken,
|
|
44
|
-
minOutputAmount,
|
|
45
|
-
commands,
|
|
46
|
-
[swapInput],
|
|
47
|
-
deadline,
|
|
48
|
-
walletClient.account.address,
|
|
49
|
-
],
|
|
50
|
-
});
|
|
51
|
-
console.log(` Expected output amount: ${formatAmount(result[0])}`);
|
|
52
|
-
console.log(` Reserve tokens received from burn: ${formatAmount(result[1])}`);
|
|
53
|
-
// Execute the transaction
|
|
54
|
-
console.log('📤 Sending transaction...');
|
|
55
|
-
const hash = await walletClient.writeContract({
|
|
56
|
-
address: zapV2Address,
|
|
57
|
-
abi: MCV2_ZAP_V2_ABI,
|
|
58
|
-
functionName: 'zapBurn',
|
|
59
|
-
args: [
|
|
60
|
-
tokenAddress,
|
|
61
|
-
tokensToBurn,
|
|
62
|
-
outputToken,
|
|
63
|
-
minOutputAmount,
|
|
64
|
-
commands,
|
|
65
|
-
[swapInput],
|
|
66
|
-
deadline,
|
|
67
|
-
walletClient.account.address,
|
|
68
|
-
],
|
|
69
|
-
});
|
|
70
|
-
console.log(` Transaction hash: ${formatTxHash(hash)}`);
|
|
71
|
-
// Wait for confirmation
|
|
72
|
-
console.log('⏳ Waiting for confirmation...');
|
|
73
|
-
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
74
|
-
if (receipt.status === 'success') {
|
|
75
|
-
console.log('✅ Zap transaction confirmed!');
|
|
76
|
-
console.log(` Burned: ${amount} tokens`);
|
|
77
|
-
console.log(` Output received: ${formatAmount(result[0])} ${outputToken}`);
|
|
78
|
-
console.log(` Block: ${receipt.blockNumber}`);
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.log('❌ Transaction failed');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=zap-sell.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"zap-sell.js","sourceRoot":"","sources":["../../src/commands/zap-sell.ts"],"names":[],"mappings":"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"}
|