mint.club-cli 1.2.4 → 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -74,7 +74,7 @@ ${c6(M)}`;super($.shortMessage,{cause:$,docsPath:Q,metaMessages:[...$.metaMessag
|
|
|
74
74
|
\uD83D\uDCCA Price Range: ${S} → ${C} reserve per token`);let L=MD(q,M),N=L[L.length-1].cost;console.log(`
|
|
75
75
|
\uD83D\uDCB0 Accumulated reserve required to mint:`);let z=L.map((x)=>`${x.milestone}%`.padStart(12)).join(""),R=L.map((x)=>o4(x.cost).padStart(12)).join("");if(console.log(` ${z}`),console.log(` ${R}`),console.log(`
|
|
76
76
|
\uD83C\uDFE6 Max TVL (fully minted): ${o4(N)} reserve`),!W.yes){if(!await I3(`
|
|
77
|
-
⚡ Proceed with token creation? (y/N) `)){console.log("❌ Cancelled.");return}}let B={name:$,symbol:J},I={mintRoyalty:U,burnRoyalty:w,reserveToken:Q,maxSupply:F$(X),stepRanges:q,stepPrices:M},{result:F}=await G.simulateContract({account:D,address:V,abi:w$,functionName:"createToken",args:[B,I],value:O});console.log(` Expected address: ${F}`),console.log("\uD83D\uDCE4 Sending...");let k=await K.writeContract({address:V,abi:w$,functionName:"createToken",args:[B,I],value:O});console.log(` TX: ${X0(k)}`);let E=await G.waitForTransactionReceipt({hash:k});if(E.status==="success")console.log(`✅ Token created at ${F} (block ${E.blockNumber})`);else throw Error("Transaction failed")}var H9=[{type:"function",name:"zapMint",stateMutability:"payable",inputs:[{name:"token",type:"address"},{name:"inputToken",type:"address"},{name:"inputAmount",type:"uint256"},{name:"minTokensOut",type:"uint256"},{name:"commands",type:"bytes"},{name:"inputs",type:"bytes[]"},{name:"deadline",type:"uint256"},{name:"receiver",type:"address"}],outputs:[{name:"tokensReceived",type:"uint256"},{name:"reserveUsed",type:"uint256"}]},{type:"function",name:"zapBurn",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"tokensToBurn",type:"uint256"},{name:"outputToken",type:"address"},{name:"minOutputAmount",type:"uint256"},{name:"commands",type:"bytes"},{name:"inputs",type:"bytes[]"},{name:"deadline",type:"uint256"},{name:"receiver",type:"address"}],outputs:[{name:"outputAmount",type:"uint256"},{name:"reserveReceived",type:"uint256"}]}];function QQ($,J){if($.length!==J.length+1)throw Error("tokens.length must equal fees.length + 1");let Q=$[0];for(let X=0;X<J.length;X++){let Y=`0x${J[X].toString(16).padStart(6,"0")}`;Q=c7(["bytes","bytes","bytes"],[Q,Y,$[X+1]])}return Q}function eY($,J,Q,X){return j$(HJ("address, uint256, uint256, bytes, bool"),[$,J,Q,X,!1])}var $5="0x00";function J5($){let J=$.split(",").map((Y)=>Y.trim()),Q=[],X=[];for(let Y=0;Y<J.length;Y++)if(Y%2===0){if(!J[Y].startsWith("0x")||J[Y].length!==42)throw Error(`Invalid token address at position ${Y}: ${J[Y]}`);Q.push(J[Y])}else{let Z=parseInt(J[Y]);if(isNaN(Z)||Z<=0)throw Error(`Invalid fee: ${J[Y]}`);X.push(Z)}if(Q.length!==X.length+1)throw Error("Path format: token0,fee,token1,fee,token2,...");return{tokens:Q,fees:X}}var E3=[{type:"function",name:"quoteExactInput",stateMutability:"nonpayable",inputs:[{name:"path",type:"bytes"},{name:"amountIn",type:"uint256"}],outputs:[{name:"amountOut",type:"uint256"},{name:"sqrtPriceX96AfterList",type:"uint160[]"},{name:"initializedTicksCrossedList",type:"uint32[]"},{name:"gasEstimate",type:"uint256"}]}],wD={base:{quoterV2:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",weth:"0x4200000000000000000000000000000000000006",intermediaries:[{address:"0x4200000000000000000000000000000000000006",symbol:"WETH"},{address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",symbol:"USDC"},{address:"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6Ca",symbol:"USDbC"}]},mainnet:{quoterV2:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",intermediaries:[{address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",symbol:"WETH"},{address:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",symbol:"USDC"},{address:"0xdAC17F958D2ee523a2206206994597C13D831ec7",symbol:"USDT"}]},arbitrum:{quoterV2:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",intermediaries:[{address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",symbol:"WETH"},{address:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",symbol:"USDC"},{address:"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",symbol:"USDT"}]},optimism:{quoterV2:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",weth:"0x4200000000000000000000000000000000000006",intermediaries:[{address:"0x4200000000000000000000000000000000000006",symbol:"WETH"},{address:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",symbol:"USDC"},{address:"0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",symbol:"USDT"}]}},i4=[100,500,3000,1e4],A3="0x0000000000000000000000000000000000000000";async function ND($,J,Q,X){try{let{result:Y}=await $.simulateContract({address:J,abi:E3,functionName:"quoteExactInput",args:[Q,X]});return Y[0]}catch{return null}}async function Q5($,J,Q,X,Y){let Z=wD[J];if(!Z)return null;let W=Q.toLowerCase()===A3?Z.weth:Q;if(W.toLowerCase()===X.toLowerCase())return null;let G=[];console.log("\uD83D\uDD0D Finding best swap route...");let K=i4.map(async(q)=>{let M=QQ([W,X],[q]),U=await ND($,Z.quoterV2,M,Y);if(U&&U>0n)G.push({path:M,tokens:[W,X],fees:[q],amountOut:U,description:`Direct (fee: ${q/1e4}%)`})}),V=Z.intermediaries.flatMap((q)=>{if(q.address.toLowerCase()===W.toLowerCase())return[];if(q.address.toLowerCase()===X.toLowerCase())return[];return i4.flatMap((M)=>i4.map(async(U)=>{let w=QQ([W,q.address,X],[M,U]),O=await ND($,Z.quoterV2,w,Y);if(O&&O>0n)G.push({path:w,tokens:[W,q.address,X],fees:[M,U],amountOut:O,description:`via ${q.symbol} (fees: ${M/1e4}% → ${U/1e4}%)`})}))});if(await Promise.all([...K,...V]),G.length===0)return null;G.sort((q,M)=>M.amountOut>q.amountOut?1:-1);let D=G[0];return console.log(` ✅ Best route: ${D.description} → ${G.length} routes checked`),D}function X5($){return $ in wD}var OD="0x0000000000000000000000000000000000000000",F3="0x4200000000000000000000000000000000000006";async function zD($,J,Q,X,Y,Z,W){let G=JQ(Z);if(!G)throw Error(`ZapV2 not available on ${Z}`);let K=p$(Z),V=A0(Z,W),D=F0(Z),q=V.account,M=F$(Q),U=X?F$(X):0n,w=J.toLowerCase()===OD.toLowerCase()||J.toUpperCase()==="ETH",O=w?OD:J,C=(await K.readContract({address:D,abi:w$,functionName:"tokenBond",args:[$]}))[4],L,N,z;if(Y){let x=J5(Y);N=x.tokens,z=x.fees,L=QQ(N,z)}else{if(!X5(Z))throw Error(`Auto routing not available on ${Z}. Provide --path manually.`);let P=await Q5(K,Z,w?F3:J,C,M);if(!P)throw Error("No swap route found. Try providing --path manually.");L=P.path,N=P.tokens,z=P.fees,console.log(` Route: ${N.map((d)=>d.slice(0,8)).join(" → ")}`),console.log(` Expected swap output: ${s(P.amountOut)} reserve`)}console.log(`⚡
|
|
77
|
+
⚡ Proceed with token creation? (y/N) `)){console.log("❌ Cancelled.");return}}let B={name:$,symbol:J},I={mintRoyalty:U,burnRoyalty:w,reserveToken:Q,maxSupply:F$(X),stepRanges:q,stepPrices:M},{result:F}=await G.simulateContract({account:D,address:V,abi:w$,functionName:"createToken",args:[B,I],value:O});console.log(` Expected address: ${F}`),console.log("\uD83D\uDCE4 Sending...");let k=await K.writeContract({address:V,abi:w$,functionName:"createToken",args:[B,I],value:O});console.log(` TX: ${X0(k)}`);let E=await G.waitForTransactionReceipt({hash:k});if(E.status==="success")console.log(`✅ Token created at ${F} (block ${E.blockNumber})`);else throw Error("Transaction failed")}var H9=[{type:"function",name:"zapMint",stateMutability:"payable",inputs:[{name:"token",type:"address"},{name:"inputToken",type:"address"},{name:"inputAmount",type:"uint256"},{name:"minTokensOut",type:"uint256"},{name:"commands",type:"bytes"},{name:"inputs",type:"bytes[]"},{name:"deadline",type:"uint256"},{name:"receiver",type:"address"}],outputs:[{name:"tokensReceived",type:"uint256"},{name:"reserveUsed",type:"uint256"}]},{type:"function",name:"zapBurn",stateMutability:"nonpayable",inputs:[{name:"token",type:"address"},{name:"tokensToBurn",type:"uint256"},{name:"outputToken",type:"address"},{name:"minOutputAmount",type:"uint256"},{name:"commands",type:"bytes"},{name:"inputs",type:"bytes[]"},{name:"deadline",type:"uint256"},{name:"receiver",type:"address"}],outputs:[{name:"outputAmount",type:"uint256"},{name:"reserveReceived",type:"uint256"}]}];function QQ($,J){if($.length!==J.length+1)throw Error("tokens.length must equal fees.length + 1");let Q=$[0];for(let X=0;X<J.length;X++){let Y=`0x${J[X].toString(16).padStart(6,"0")}`;Q=c7(["bytes","bytes","bytes"],[Q,Y,$[X+1]])}return Q}function eY($,J,Q,X){return j$(HJ("address, uint256, uint256, bytes, bool"),[$,J,Q,X,!1])}var $5="0x00";function J5($){let J=$.split(",").map((Y)=>Y.trim()),Q=[],X=[];for(let Y=0;Y<J.length;Y++)if(Y%2===0){if(!J[Y].startsWith("0x")||J[Y].length!==42)throw Error(`Invalid token address at position ${Y}: ${J[Y]}`);Q.push(J[Y])}else{let Z=parseInt(J[Y]);if(isNaN(Z)||Z<=0)throw Error(`Invalid fee: ${J[Y]}`);X.push(Z)}if(Q.length!==X.length+1)throw Error("Path format: token0,fee,token1,fee,token2,...");return{tokens:Q,fees:X}}var E3=[{type:"function",name:"quoteExactInput",stateMutability:"nonpayable",inputs:[{name:"path",type:"bytes"},{name:"amountIn",type:"uint256"}],outputs:[{name:"amountOut",type:"uint256"},{name:"sqrtPriceX96AfterList",type:"uint160[]"},{name:"initializedTicksCrossedList",type:"uint32[]"},{name:"gasEstimate",type:"uint256"}]}],wD={base:{quoterV2:"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",weth:"0x4200000000000000000000000000000000000006",intermediaries:[{address:"0x4200000000000000000000000000000000000006",symbol:"WETH"},{address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",symbol:"USDC"},{address:"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6Ca",symbol:"USDbC"}]},mainnet:{quoterV2:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",weth:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",intermediaries:[{address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",symbol:"WETH"},{address:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",symbol:"USDC"},{address:"0xdAC17F958D2ee523a2206206994597C13D831ec7",symbol:"USDT"}]},arbitrum:{quoterV2:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",weth:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",intermediaries:[{address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",symbol:"WETH"},{address:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",symbol:"USDC"},{address:"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",symbol:"USDT"}]},optimism:{quoterV2:"0x61fFE014bA17989E743c5F6cB21bF9697530B21e",weth:"0x4200000000000000000000000000000000000006",intermediaries:[{address:"0x4200000000000000000000000000000000000006",symbol:"WETH"},{address:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",symbol:"USDC"},{address:"0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",symbol:"USDT"}]}},i4=[100,500,3000,1e4],A3="0x0000000000000000000000000000000000000000";async function ND($,J,Q,X){try{let{result:Y}=await $.simulateContract({address:J,abi:E3,functionName:"quoteExactInput",args:[Q,X]});return Y[0]}catch{return null}}async function Q5($,J,Q,X,Y){let Z=wD[J];if(!Z)return null;let W=Q.toLowerCase()===A3?Z.weth:Q;if(W.toLowerCase()===X.toLowerCase())return null;let G=[];console.log("\uD83D\uDD0D Finding best swap route...");let K=i4.map(async(q)=>{let M=QQ([W,X],[q]),U=await ND($,Z.quoterV2,M,Y);if(U&&U>0n)G.push({path:M,tokens:[W,X],fees:[q],amountOut:U,description:`Direct (fee: ${q/1e4}%)`})}),V=Z.intermediaries.flatMap((q)=>{if(q.address.toLowerCase()===W.toLowerCase())return[];if(q.address.toLowerCase()===X.toLowerCase())return[];return i4.flatMap((M)=>i4.map(async(U)=>{let w=QQ([W,q.address,X],[M,U]),O=await ND($,Z.quoterV2,w,Y);if(O&&O>0n)G.push({path:w,tokens:[W,q.address,X],fees:[M,U],amountOut:O,description:`via ${q.symbol} (fees: ${M/1e4}% → ${U/1e4}%)`})}))});if(await Promise.all([...K,...V]),G.length===0)return null;G.sort((q,M)=>M.amountOut>q.amountOut?1:-1);let D=G[0];return console.log(` ✅ Best route: ${D.description} → ${G.length} routes checked`),D}function X5($){return $ in wD}var OD="0x0000000000000000000000000000000000000000",F3="0x4200000000000000000000000000000000000006";async function zD($,J,Q,X,Y,Z,W){let G=JQ(Z);if(!G)throw Error(`ZapV2 not available on ${Z}`);let K=p$(Z),V=A0(Z,W),D=F0(Z),q=V.account,M=F$(Q),U=X?F$(X):0n,w=J.toLowerCase()===OD.toLowerCase()||J.toUpperCase()==="ETH",O=w?OD:J,C=(await K.readContract({address:D,abi:w$,functionName:"tokenBond",args:[$]}))[4],L,N,z;if(Y){let x=J5(Y);N=x.tokens,z=x.fees,L=QQ(N,z)}else{if(!X5(Z))throw Error(`Auto routing not available on ${Z}. Provide --path manually.`);let P=await Q5(K,Z,w?F3:J,C,M);if(!P)throw Error("No swap route found. Try providing --path manually.");L=P.path,N=P.tokens,z=P.fees,console.log(` Route: ${N.map((d)=>d.slice(0,8)).join(" → ")}`),console.log(` Expected swap output: ${s(P.amountOut)} reserve`)}console.log(`⚡ Spending ${Q} ${w?"ETH":J.slice(0,10)} to zap-buy ${$.slice(0,10)}... on ${Z}`);let R=eY(G,M,0n,L),B=BigInt(Math.floor(Date.now()/1000)+1200),I=[$,O,M,U,$5,[R],B,q.address],{result:F}=await K.simulateContract({account:q,address:G,abi:H9,functionName:"zapMint",args:I,value:w?M:0n});console.log(` Expected: ${s(F[0])} tokens | Reserve used: ${s(F[1])}`),console.log("\uD83D\uDCE4 Sending...");let k=await V.writeContract({address:G,abi:H9,functionName:"zapMint",args:I,value:w?M:0n});console.log(` TX: ${X0(k)}`);let E=await K.waitForTransactionReceipt({hash:k});if(E.status==="success")console.log(`✅ Zap bought ${s(F[0])} tokens (block ${E.blockNumber})`);else throw Error("Transaction failed")}var CD="0x0000000000000000000000000000000000000000",T3="0x4200000000000000000000000000000000000006";async function HD($,J,Q,X,Y,Z,W){let G=JQ(Z);if(!G)throw Error(`ZapV2 not available on ${Z}`);let K=p$(Z),V=A0(Z,W),D=F0(Z),q=V.account,M=F$(J),U=X?F$(X):0n,w=Q.toLowerCase()===CD.toLowerCase()||Q.toUpperCase()==="ETH",O=w?CD:Q,C=(await K.readContract({address:D,abi:w$,functionName:"tokenBond",args:[$]}))[4],[L]=await K.readContract({address:D,abi:w$,functionName:"getRefundForTokens",args:[$,M]}),N,z,R;if(Y){let P=J5(Y);z=P.tokens,R=P.fees,N=QQ(z,R)}else{if(!X5(Z))throw Error(`Auto routing not available on ${Z}. Provide --path manually.`);let d=await Q5(K,Z,C,w?T3:Q,L);if(!d)throw Error("No swap route found. Try providing --path manually.");N=d.path,z=d.tokens,R=d.fees,console.log(` Route: ${z.map((m)=>m.slice(0,8)).join(" → ")}`),console.log(` Expected swap output: ${s(d.amountOut)}`)}console.log(`⚡ Zap selling ${J} tokens of ${$.slice(0,10)}... for ${w?"ETH":Q.slice(0,10)} on ${Z}`);let B=eY(G,L,U,N),I=BigInt(Math.floor(Date.now()/1000)+1200),F=[$,M,O,U,$5,[B],I,q.address],{result:k}=await K.simulateContract({account:q,address:G,abi:H9,functionName:"zapBurn",args:F});console.log(` Expected output: ${s(k[0])} | Reserve from burn: ${s(k[1])}`),console.log("\uD83D\uDCE4 Sending...");let E=await V.writeContract({address:G,abi:H9,functionName:"zapBurn",args:F});console.log(` TX: ${X0(E)}`);let x=await K.waitForTransactionReceipt({hash:E});if(x.status==="success")console.log(`✅ Zap sold ${J} tokens for ${s(k[0])} output (block ${x.blockNumber})`);else throw Error("Transaction failed")}import{resolve as RD}from"path";import{homedir as _3}from"os";import{existsSync as s4,mkdirSync as SD,readFileSync as r4,writeFileSync as Y5}from"fs";var t4=RD(_3(),".mintclub"),Z8=RD(t4,".env");function LD(){console.log("⚠️ WARNING: Back up your private key in a secure, encrypted location!"),console.log(" If you lose ~/.mintclub/.env or your private key, your funds are"),console.log(" gone forever — there is no way to recover them."),console.log(" If your key is leaked, anyone can drain your wallet immediately.")}async function BD($){if($.setPrivateKey){let Y=$.setPrivateKey.startsWith("0x")?$.setPrivateKey:`0x${$.setPrivateKey}`,Z=$Q(Y);if(SD(t4,{recursive:!0}),s4(Z8)){let W=r4(Z8,"utf-8");if(W.includes("PRIVATE_KEY="))Y5(Z8,W.replace(/PRIVATE_KEY=.*/g,`PRIVATE_KEY=${Y}`));else Y5(Z8,W+(W.endsWith(`
|
|
78
78
|
`)||!W?"":`
|
|
79
79
|
`)+`PRIVATE_KEY=${Y}
|
|
80
80
|
`)}else Y5(Z8,`PRIVATE_KEY=${Y}
|
|
@@ -88,5 +88,5 @@ ${c6(M)}`;super($.shortMessage,{cause:$,docsPath:Q,metaMessages:[...$.metaMessag
|
|
|
88
88
|
`),console.log(`\uD83D\uDCB0 Fund this address to start using mc buy/sell/create.
|
|
89
89
|
`),LD();return}let J=process.env.PRIVATE_KEY;if(!J){console.log(`No wallet configured.
|
|
90
90
|
`),console.log("Run `mc wallet --generate` to create one, or add PRIVATE_KEY to ~/.mintclub/.env");return}let Q=J.startsWith("0x")?J:`0x${J}`,X=$Q(Q);console.log(`\uD83D\uDC5B Wallet: ${X.address}
|
|
91
|
-
`),await P3(X.address,Y8($.chain??"base"))}var j3={base:[{symbol:"USDC",address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",decimals:6},{symbol:"WETH",address:"0x4200000000000000000000000000000000000006",decimals:18},{symbol:"HUNT",address:"0x37f0A65b0491c49F4bDdE04F0b5dF27b214FfCf5",decimals:18}],mainnet:[{symbol:"USDC",address:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",decimals:6},{symbol:"USDT",address:"0xdAC17F958D2ee523a2206206994597C13D831ec7",decimals:6},{symbol:"WETH",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",decimals:18}],arbitrum:[{symbol:"USDC",address:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",decimals:6},{symbol:"WETH",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",decimals:18}],optimism:[{symbol:"USDC",address:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",decimals:6},{symbol:"WETH",address:"0x4200000000000000000000000000000000000006",decimals:18}]};async function P3($,J){let Q=p$(J),X=await Q.getBalance({address:$});console.log(`\uD83D\uDCB0 Balances on ${J}:`),console.log(` ETH: ${i0(X,18)}`);let Y=j3[J]??[];if(Y.length===0)return;let Z=await Q.multicall({contracts:Y.map((W)=>({address:W.address,abi:v8,functionName:"balanceOf",args:[$]}))});for(let W=0;W<Y.length;W++){let G=Z[W].status==="success"?Z[W].result:0n;if(G>0n)console.log(` ${Y[W].symbol}: ${i0(G,Y[W].decimals)}`)}}var k3=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];async function ID($,J,Q,X,Y){let Z=p$(Q),W=A0(Q,X),G=W.account;if(Y.token&&Y.tokenId){let q=BigInt(Y.tokenId),M=BigInt(J);console.log(`\uD83D\uDCE6 Sending ${M} of ERC-1155 #${q} (${NJ(Y.token)}) to ${NJ($)} on ${Q}...`);let U=await W.writeContract({address:Y.token,abi:k3,functionName:"safeTransferFrom",args:[G.address,$,q,M,"0x"]});console.log(` TX: ${X0(U)}`);let w=await Z.waitForTransactionReceipt({hash:U});if(w.status==="success")console.log(`✅ Sent (block ${w.blockNumber})`);else throw Error("Transaction failed");return}if(Y.token){let[q,M]=await Promise.all([Z.readContract({address:Y.token,abi:v8,functionName:"decimals"}),Z.readContract({address:Y.token,abi:v8,functionName:"symbol"}).catch(()=>"tokens")]),U=F$(J,q);console.log(`\uD83D\uDCB8 Sending ${J} ${M} (${NJ(Y.token)}) to ${NJ($)} on ${Q}...`);let w=await W.writeContract({address:Y.token,abi:[{type:"function",name:"transfer",stateMutability:"nonpayable",inputs:[{name:"to",type:"address"},{name:"amount",type:"uint256"}],outputs:[{type:"bool"}]}],functionName:"transfer",args:[$,U]});console.log(` TX: ${X0(w)}`);let O=await Z.waitForTransactionReceipt({hash:w});if(O.status==="success")console.log(`✅ Sent (block ${O.blockNumber})`);else throw Error("Transaction failed");return}let K=C4(J);console.log(`\uD83D\uDCB8 Sending ${J} ETH to ${NJ($)} on ${Q}...`);let V=await W.sendTransaction({to:$,value:K});console.log(` TX: ${X0(V)}`);let D=await Z.waitForTransactionReceipt({hash:V});if(D.status==="success")console.log(`✅ Sent (block ${D.blockNumber})`);else throw Error("Transaction failed")}import{resolve as x3}from"path";import{homedir as f3}from"os";a4.config({path:x3(f3(),".mintclub",".env")});a4.config();function S9(){let $=process.env.PRIVATE_KEY;if(!$)console.error("❌ Set PRIVATE_KEY in ~/.mintclub/.env or export it"),process.exit(1);return $.startsWith("0x")?$:`0x${$}`}function y3($){if(!($ instanceof Error))return String($);let J=$.message,Q=J.match(/insufficient funds.*have (\d+) want (\d+)/);if(Q){let
|
|
92
|
-
`).find((
|
|
91
|
+
`),await P3(X.address,Y8($.chain??"base"))}var j3={base:[{symbol:"USDC",address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",decimals:6},{symbol:"WETH",address:"0x4200000000000000000000000000000000000006",decimals:18},{symbol:"HUNT",address:"0x37f0A65b0491c49F4bDdE04F0b5dF27b214FfCf5",decimals:18}],mainnet:[{symbol:"USDC",address:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",decimals:6},{symbol:"USDT",address:"0xdAC17F958D2ee523a2206206994597C13D831ec7",decimals:6},{symbol:"WETH",address:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",decimals:18}],arbitrum:[{symbol:"USDC",address:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",decimals:6},{symbol:"WETH",address:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",decimals:18}],optimism:[{symbol:"USDC",address:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",decimals:6},{symbol:"WETH",address:"0x4200000000000000000000000000000000000006",decimals:18}]};async function P3($,J){let Q=p$(J),X=await Q.getBalance({address:$});console.log(`\uD83D\uDCB0 Balances on ${J}:`),console.log(` ETH: ${i0(X,18)}`);let Y=j3[J]??[];if(Y.length===0)return;let Z=await Q.multicall({contracts:Y.map((W)=>({address:W.address,abi:v8,functionName:"balanceOf",args:[$]}))});for(let W=0;W<Y.length;W++){let G=Z[W].status==="success"?Z[W].result:0n;if(G>0n)console.log(` ${Y[W].symbol}: ${i0(G,Y[W].decimals)}`)}}var k3=[{type:"function",name:"safeTransferFrom",stateMutability:"nonpayable",inputs:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"id",type:"uint256"},{name:"amount",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];async function ID($,J,Q,X,Y){let Z=p$(Q),W=A0(Q,X),G=W.account;if(Y.token&&Y.tokenId){let q=BigInt(Y.tokenId),M=BigInt(J);console.log(`\uD83D\uDCE6 Sending ${M} of ERC-1155 #${q} (${NJ(Y.token)}) to ${NJ($)} on ${Q}...`);let U=await W.writeContract({address:Y.token,abi:k3,functionName:"safeTransferFrom",args:[G.address,$,q,M,"0x"]});console.log(` TX: ${X0(U)}`);let w=await Z.waitForTransactionReceipt({hash:U});if(w.status==="success")console.log(`✅ Sent (block ${w.blockNumber})`);else throw Error("Transaction failed");return}if(Y.token){let[q,M]=await Promise.all([Z.readContract({address:Y.token,abi:v8,functionName:"decimals"}),Z.readContract({address:Y.token,abi:v8,functionName:"symbol"}).catch(()=>"tokens")]),U=F$(J,q);console.log(`\uD83D\uDCB8 Sending ${J} ${M} (${NJ(Y.token)}) to ${NJ($)} on ${Q}...`);let w=await W.writeContract({address:Y.token,abi:[{type:"function",name:"transfer",stateMutability:"nonpayable",inputs:[{name:"to",type:"address"},{name:"amount",type:"uint256"}],outputs:[{type:"bool"}]}],functionName:"transfer",args:[$,U]});console.log(` TX: ${X0(w)}`);let O=await Z.waitForTransactionReceipt({hash:w});if(O.status==="success")console.log(`✅ Sent (block ${O.blockNumber})`);else throw Error("Transaction failed");return}let K=C4(J);console.log(`\uD83D\uDCB8 Sending ${J} ETH to ${NJ($)} on ${Q}...`);let V=await W.sendTransaction({to:$,value:K});console.log(` TX: ${X0(V)}`);let D=await Z.waitForTransactionReceipt({hash:V});if(D.status==="success")console.log(`✅ Sent (block ${D.blockNumber})`);else throw Error("Transaction failed")}import{resolve as x3}from"path";import{homedir as f3}from"os";a4.config({path:x3(f3(),".mintclub",".env")});a4.config();function S9(){let $=process.env.PRIVATE_KEY;if(!$)console.error("❌ Set PRIVATE_KEY in ~/.mintclub/.env or export it"),process.exit(1);return $.startsWith("0x")?$:`0x${$}`}function y3($){if(!($ instanceof Error))return String($);let J=$.message,Q=J.match(/insufficient funds.*have (\d+) want (\d+)/);if(Q){let G=(Number(Q[1])/1000000000000000000).toFixed(4),K=(Number(Q[2])/1000000000000000000).toFixed(4);return`Insufficient funds: have ${G} ETH, need ${K} ETH`}let X=J.match(/reverted with the following reason:\s*\n?\s*(.+?)(?:\n|$)/);if(X&&X[1].trim())return`Transaction reverted: ${X[1].trim()}`;let Y=J.match(/execution reverted[:\s]*(.+?)(?:\n|$)/);if(Y)return`Transaction reverted: ${Y[1].trim()}`;let Z=J.match(/Details:\s*(.+?)(?:\n|$)/);if(Z)return Z[1].trim();return J.split(`
|
|
92
|
+
`).find((G)=>G.trim().length>0)?.trim()??J}function wJ($){return async()=>{try{await $()}catch(J){console.error("❌",y3(J)),process.exit(1)}}}var W8=new OW().name("mc").description("Mint Club V2 CLI — bonding curve tokens").version("1.2.6");W8.command("info").description("Get token info").argument("<token>","Token address").option("-c, --chain <chain>","Chain","base").action(($,J)=>wJ(()=>GD($,Y8(J.chain)))());W8.command("buy").description("Buy (mint) tokens with reserve token").argument("<token>","Token address").requiredOption("-a, --amount <n>","Tokens to buy").option("-m, --max-cost <n>","Max reserve cost").option("-c, --chain <chain>","Chain","base").action(($,J)=>wJ(()=>KD($,J.amount,J.maxCost,Y8(J.chain),S9()))());W8.command("sell").description("Sell (burn) tokens for reserve token").argument("<token>","Token address").requiredOption("-a, --amount <n>","Tokens to sell").option("-m, --min-refund <n>","Min reserve refund").option("-c, --chain <chain>","Chain","base").action(($,J)=>wJ(()=>VD($,J.amount,J.minRefund,Y8(J.chain),S9()))());W8.command("create").description("Create a bonding curve token").requiredOption("-n, --name <name>","Token name").requiredOption("-s, --symbol <sym>","Token symbol").requiredOption("-r, --reserve <addr>","Reserve token address").requiredOption("-x, --max-supply <n>","Max supply").option("-t, --steps <s>",'Custom steps: "range:price,range:price,..."').option("--curve <type>","Curve preset: linear, exponential, logarithmic, flat").option("--initial-price <n>","Starting price (with --curve)").option("--final-price <n>","Final price (with --curve)").option("-c, --chain <chain>","Chain","base").option("--mint-royalty <bp>","Mint royalty (bps)","100").option("--burn-royalty <bp>","Burn royalty (bps)","100").option("-y, --yes","Skip confirmation prompt").action(($)=>wJ(()=>UD($.name,$.symbol,$.reserve,$.maxSupply,Y8($.chain),S9(),{steps:$.steps,curve:$.curve,initialPrice:$.initialPrice,finalPrice:$.finalPrice,mintRoyalty:parseInt($.mintRoyalty),burnRoyalty:parseInt($.burnRoyalty),yes:$.yes}))());W8.command("zap-buy").description("Buy tokens with any token via ZapV2 (auto-routes swap)").argument("<token>","Token address").requiredOption("-i, --input-token <addr>","Input token (ETH or address)").requiredOption("-a, --amount <n>","Amount of input token to spend (e.g. 0.01 ETH)").option("-p, --path <p>","Manual swap path: token,fee,token,... (auto-finds if omitted)").option("-m, --min-tokens <n>","Min tokens out").option("-c, --chain <chain>","Chain","base").action(($,J)=>wJ(()=>{let Q=Y8(J.chain);if(!JQ(Q))throw Error("ZapV2 is Base only");return zD($,J.inputToken,J.amount,J.minTokens,J.path,Q,S9())})());W8.command("zap-sell").description("Sell tokens for any token via ZapV2 (auto-routes swap)").argument("<token>","Token address").requiredOption("-a, --amount <n>","Tokens to sell").requiredOption("-o, --output-token <addr>","Output token (ETH or address)").option("-p, --path <p>","Manual swap path: token,fee,token,... (auto-finds if omitted)").option("-m, --min-output <n>","Min output").option("-c, --chain <chain>","Chain","base").action(($,J)=>wJ(()=>{let Q=Y8(J.chain);if(!JQ(Q))throw Error("ZapV2 is Base only");return HD($,J.amount,J.outputToken,J.minOutput,J.path,Q,S9())})());W8.command("send").description("Send ETH, ERC-20, or ERC-1155 tokens to another wallet").argument("<to>","Recipient address").requiredOption("-a, --amount <n>","Amount to send (token units for ERC-20, quantity for ERC-1155)").option("-t, --token <addr>","Token contract address (omit for native ETH)").option("--token-id <id>","ERC-1155 token ID").option("-c, --chain <chain>","Chain","base").action(($,J)=>wJ(()=>ID($,J.amount,Y8(J.chain),S9(),{token:J.token,tokenId:J.tokenId}))());W8.command("wallet").description("Show wallet address and balances, or generate/import a key").option("-g, --generate","Generate a new wallet and save to ~/.mintclub/.env").option("-s, --set-private-key <key>","Import an existing private key to ~/.mintclub/.env").option("-c, --chain <chain>","Chain for balance check","base").action(($)=>wJ(()=>BD($))());W8.command("upgrade").description("Upgrade mint.club-cli to the latest version").action(()=>{let{execSync:$}=g0("child_process");console.log("⬆️ Upgrading mint.club-cli...");try{let J=$("mc --version",{encoding:"utf-8"}).trim();$("npm install -g mint.club-cli@latest",{stdio:"pipe"});let Q=$("mc --version",{encoding:"utf-8"}).trim();if(J===Q)console.log(`✅ Already on latest (v${Q})`);else console.log(`✅ Upgraded: v${J} → v${Q}`)}catch{console.error("❌ Upgrade failed. Try: npm update -g mint.club-cli"),process.exit(1)}});W8.parse();
|