-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathdlmm_config.jsonc
More file actions
186 lines (167 loc) · 11.4 KB
/
Copy pathdlmm_config.jsonc
File metadata and controls
186 lines (167 loc) · 11.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
{
/* rpcUrl is required. You can switch between mainnet, devnet and localnet or use your own RPC URL. */
"rpcUrl": "https://api.devnet.solana.com", // mainnet: https://api.mainnet-beta.solana.com | devnet: https://api.devnet.solana.com | localnet: http://localhost:8899
/* dryRun is required. If true, transactions will be simulated and not executed. If false, transactions will be executed. */
"dryRun": true, // Set to false only after you understand what will happen
/* keypairFilePath is required and will be the payer + signer for all transactions */
"keypairFilePath": "./keypair.json",
/* computeUnitPriceMicroLamports is required and can be adjusted to fit your needs */
"computeUnitPriceMicroLamports": 100000,
/* quoteMint is required for the following actions:
* 1. dlmm-create-pool
* 2. dlmm-seed-liquidity-lfg
* 3. dlmm-seed-liquidity-single-bin
* 4. dlmm-set-pool-status
* SOL: So11111111111111111111111111111111111111112 | USDC: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | any other token address
*/
"quoteMint": "So11111111111111111111111111111111111111112",
/* If you have a baseMint already created, you can specify it in the cli command via --baseMint flag. If you don't have a baseMint, you can create a new one using createBaseToken.
* Either use --baseMint flag or createBaseToken, but not both.
*/
"createBaseToken": {
"supply": 1000000000, // total amount of base token to be minted
"decimals": 6, // decimals of the base token
// "tokenMintKeypairFilePath": "./mint-keypair.json", // path to token mint keypair if you have a specific keypair for the token mint. If not provided, a new keypair will be generated.
"name": "YOUR_TOKEN_NAME", // token name
"symbol": "YOUR_TOKEN_SYMBOL", // token symbol
"authorities": {
"mint": "YOUR_MINT_AUTHORITY_ADDRESS", // token mint authority address. <PublicKey | null>
"freeze": "YOUR_FREEZE_AUTHORITY_ADDRESS", // token freeze authority address. <PublicKey | null>
"update": "YOUR_UPDATE_AUTHORITY_ADDRESS" // token update authority address. <PublicKey | null>
},
/* Optional Metaplex Token Metadata Properties
* Read more about the properties here: https://www.metaplex.com/docs/smart-contracts/token-metadata
*/
"sellerFeeBasisPoints": 0, // Royalty fee in basis points (0-10000)
"creators": null, // Array of creator objects of the token (optional)
"collection": null, // Collection info (optional)
"uses": null, // Usage restrictions (optional)
"metadata": {
// "uri": "https://gateway.irys.xyz/123456789", // if you already have a metadata URI created, you can specify it here
/* Only use the following parameters for createBaseToken if you don't have an existing metadata uri
* This will create an image uri and a new metadata uri and upload everything to Irys
*/
"image": "./data/image/test-token.jpg", // this can be a URL of the image address (e.g. https://example.com/token-image.png) or the image file path (e.g. ./data/image/test-token.jpg)
"description": "YOUR_TOKEN_DESCRIPTION", // token description
"website": "https://example.com", // project website
"twitter": "https://x.com/yourproject", // twitter URL
"telegram": "https://t.me/yourproject" // telegram URL
}
},
/* dlmmConfig is only used in the following actions:
* 1. dlmm-create-pool
*/
"dlmmConfig": {
"binStep": 25, // Price increment/decrement percentage in basis points (e.g. 25 = 0.25% price step between bins)
"feeBps": 1, // Trading fee in basis points (e.g. 100 = 1% fee per swap)
"initialPrice": 1.333, // Initial price (quote tokens per 1 base token)
"activationType": 1, // 0 - Slot | 1 - Timestamp
"activationPoint": null, // Activation time of the pool depending on activationType (Calculate in slots if activationType is 0 (slots) | Calculate in seconds if activationType is 1 (timestamp))
"priceRounding": "up", // Price calculation rounding direction for bin ID conversion
"creatorPoolOnOffControl": true, // Pool creator permission to enable/disable trading for permissionless pools
"hasAlphaVault": false // If true, the alpha vault will be created after the pool is created
// "concreteFunctionType": 0, // 0 - LimitOrder | 1 - LiquidityMining (defaults to 0, only pools created with 0 accept limit orders)
// "collectFeeMode": 0 // 0 - InputOnly | 1 - OnlyY (defaults to 0)
},
/* lfgSeedLiquidity is only used in the following actions:
* 1. dlmm-seed-liquidity-lfg
* https://ilm.jup.ag/
*/
"lfgSeedLiquidity": {
"minPrice": 0.003393, // Minimum price boundary for liquidity distribution range
"maxPrice": 0.004393, // Maximum price boundary for liquidity distribution range
"curvature": 0.6, // Distribution curvature factor (1/k) controlling liquidity concentration (0-1, lower = more concentrated)
"seedAmount": "200000", // Total amount of liquidity to seed into the pool (in token units)
"operatorKeypairFilepath": "./keypair.json", // File path to operator's private key for signing seeding transactions
"positionOwner": "YOUR_POSITION_OWNER_ADDRESS", // Public key of the position owner who controls the liquidity
"feeOwner": "YOUR_FEE_OWNER_ADDRESS", // Public key entitled to claim trading fees from this position
"lockReleasePoint": 0, // Timestamp/slot when position becomes withdrawable (0 = immediately unlocked)
"seedTokenXToPositionOwner": true // Whether to send 1 lamport of token X to position owner as ownership proof
},
/* singleBinSeedLiquidity is only used in the following actions:
* 1. dlmm-seed-liquidity-single-bin
*/
"singleBinSeedLiquidity": {
"price": 1.333, // Exact price where liquidity will be concentrated in a single bin
"priceRounding": "up", // Price calculation rounding direction for bin ID conversion. "up" = round up, "down" = round down
"seedAmount": "750000000", // Amount of token X (base token) to seed into the single bin (in token units)
"operatorKeypairFilepath": "./keypair.json", // File path to operator's private key for signing seeding transactions
"positionOwner": "YOUR_POSITION_OWNER_ADDRESS", // Public key of the position owner who controls the liquidity
"feeOwner": "YOUR_FEE_OWNER_ADDRESS", // Public key entitled to claim trading fees from this position
"lockReleasePoint": 0, // Timestamp/slot when position becomes withdrawable (0 = immediately unlocked)
"seedTokenXToPositionOwner": true // Whether to send 1 lamport of token X to position owner as ownership proof
},
/* setDlmmPoolStatus is only used in the following actions:
* 1. dlmm-set-pool-status
*/
"setDlmmPoolStatus": {
"enabled": true // true = enable trading | false = disable trading
},
/* placeLimitOrder is only used in the following actions:
* 1. dlmm-place-limit-order (requires --poolAddress flag)
* The pool must have been created with the limit order function type (concreteFunctionType: 0).
* A limit order deposits into one or more bins (max 50) and fills as the market price crosses them.
*/
"placeLimitOrder": {
"side": "bid", // "ask" = sell the base token above the active bin | "bid" = buy with the quote token below the active bin
"bins": [
{
"price": 1.2, // price (in terms of quote/base price) for this portion of the order
"amount": 100 // amount in token units: base token amount for "ask" orders, quote token amount for "bid" orders
}
]
},
/* cancelLimitOrder is only used in the following actions:
* 1. dlmm-cancel-limit-order (requires --poolAddress flag, optional --limitOrder flag)
* Cancelling withdraws unfilled deposits, filled proceeds and earned fees, then closes the order account.
*/
/* dlmmSwap is only used in the following actions:
* 1. dlmm-swap (requires --poolAddress flag)
*/
"dlmmSwap": {
"amountIn": 0.1, // amount of the INPUT token to swap, in human token units (input = X when swapForY is true, Y otherwise)
"slippageBps": 100, // slippage tolerance in bps (100 = 1%)
"swapForY": true // true = sell token X for token Y | false = buy token X with token Y
},
"cancelLimitOrder": {
"cancelAll": false // when true and no --limitOrder flag is passed, cancels every open order on the pool
},
/* alphaVault is only used in the following actions:
* 1. dlmm-create-pool
* There are 2 types of alpha vault: First Come First Serve (FCFS) and Prorata.
*/
"alphaVault": {
"poolType": "dlmm", // DLMM = dlmm | DAMM v1 = dynamic | DAMM v2 = damm2
"alphaVaultType": "fcfs", // FCFS = fcfs | Prorata = prorata
/* Only use the following parameters for alphaVaultType: fcfs
* 1. maxDepositCap
* 2. individualDepositingCap
*/
"maxDepositCap": 10000, // Maximum total amount (in quote token) that can be deposited across all users in the vault
"individualDepositingCap": 1, // Maximum amount (in quote token) that each individual user can deposit
/* Only use the following parameters for alphaVaultType: prorata
* 1. maxBuyingCap
*/
// "maxBuyingCap": 10000, // Maximum total amount (in quote token) that can be bought across all users in the vault
"depositingPoint": 1755421200, // When users can start depositing depending on pool's activationType (Calculate in slots if activationType is 0 (slots) | Calculate in seconds if activationType is 1 (timestamp)) — the shipped value is a STALE PLACEHOLDER in the past — replace it before running
"startVestingPoint": 1755507600, // When token vesting begins and users can start claiming their vested tokens depending on pool's activationType (Calculate in slots if activationType is 0 (slots) | Calculate in seconds if activationType is 1 (timestamp)) — the shipped value is a STALE PLACEHOLDER in the past — replace it before running
"endVestingPoint": 1755507600, // When token vesting ends and all tokens become fully claimable depending on pool's activationType (Calculate in slots if activationType is 0 (slots) | Calculate in seconds if activationType is 1 (timestamp)) — the shipped value is a STALE PLACEHOLDER in the past — replace it before running
"escrowFee": 0, // Fee amount (in quote token) charged when creating a stake escrow account
"whitelistMode": "permissionless" // Whitelist mode: permissionless | permissioned_with_merkle_proof | permissioned_with_authority
/* Optional Configuration: whitelistFilePath
* Only use when whitelistMode is permissioned_with_merkle_proof or permissioned_with_authority
*/
// "whitelistFilepath": "./data/whitelist_wallet.csv", // Optional path to CSV file containing whitelisted wallet addresses and their deposit caps (format: wallet,deposit_cap)
/* Optional Configuration: merkleProofBaseUrl, chunkSize, kvProofFilepath, cloudflareKvProofUpload
* Only use when whitelistMode is permissioned_with_merkle_proof
*/
// "merkleProofBaseUrl": "https://example.workers.dev/", // Base URL endpoint where merkle proofs are stored and can be retrieved for whitelisted wallet verification
// "chunkSize": 1000, // Optional batch size for processing large whitelist files or merkle tree operations to avoid memory/performance issues
// "kvProofFilepath": "./data/kv_proofs", // Optional path to key-value file storing pre-computed merkle proofs for whitelisted addresses
// "cloudflareKvProofUpload": {
// "kvNamespaceId": "YOUR_KV_NAMESPACE_ID",
// "accountId": "YOUR_ACCOUNT_ID",
// "apiKey": "YOUR_API_KEY"
// }
}
}