export default { version: '0.1.0', name: 'token_launchpad', instructions: [ { name: 'tokenMint', accounts: [ { name: 'sender', isMut: true, isSigner: true, }, { name: 'backendAuthority', isMut: false, isSigner: true, }, { name: 'curveAccount', isMut: true, isSigner: false, }, { name: 'mint', isMut: true, isSigner: true, }, { name: 'mintMetadata', isMut: true, isSigner: false, docs: [ 'Type validating that the account is owned by the System Program = uninitialized', 'seeds should ensure that the address is correct', ], }, { name: 'curveTokenAccount', isMut: true, isSigner: false, }, { name: 'configAccount', isMut: false, isSigner: false, }, { name: 'tokenProgram', isMut: false, isSigner: false, }, { name: 'associatedTokenProgram', isMut: false, isSigner: false, }, { name: 'mplTokenMetadata', isMut: false, isSigner: false, }, { name: 'systemProgram', isMut: false, isSigner: false, }, ], args: [ { name: 'mintParams', type: { defined: 'TokenMintParams', }, }, ], }, { name: 'buy', accounts: [ { name: 'sender', isMut: true, isSigner: true, }, { name: 'senderTokenAccount', isMut: true, isSigner: false, }, { name: 'curveAccount', isMut: true, isSigner: false, }, { name: 'curveTokenAccount', isMut: true, isSigner: false, }, { name: 'dexFee', isMut: true, isSigner: false, }, { name: 'helioFee', isMut: true, isSigner: false, }, { name: 'mint', isMut: false, isSigner: false, }, { name: 'configAccount', isMut: false, isSigner: false, }, { name: 'tokenProgram', isMut: false, isSigner: false, }, { name: 'associatedTokenProgram', isMut: false, isSigner: false, }, { name: 'systemProgram', isMut: false, isSigner: false, }, ], args: [ { name: 'data', type: { defined: 'TradeParams', }, }, ], }, { name: 'sell', accounts: [ { name: 'sender', isMut: true, isSigner: true, }, { name: 'senderTokenAccount', isMut: true, isSigner: false, }, { name: 'curveAccount', isMut: true, isSigner: false, }, { name: 'curveTokenAccount', isMut: true, isSigner: false, }, { name: 'dexFee', isMut: true, isSigner: false, }, { name: 'helioFee', isMut: true, isSigner: false, }, { name: 'mint', isMut: false, isSigner: false, }, { name: 'configAccount', isMut: false, isSigner: false, }, { name: 'tokenProgram', isMut: false, isSigner: false, }, { name: 'associatedTokenProgram', isMut: false, isSigner: false, }, { name: 'systemProgram', isMut: false, isSigner: false, }, ], args: [ { name: 'data', type: { defined: 'TradeParams', }, }, ], }, { name: 'migrateFunds', accounts: [ { name: 'backendAuthority', isMut: false, isSigner: true, docs: ['BE Authority'], }, { name: 'migrationAuthority', isMut: true, isSigner: true, docs: [ 'Migration Authority', 'Owner and Payer over Token Accounts, needs to be mutable', ], }, { name: 'curveAccount', isMut: true, isSigner: false, docs: [ 'Curve Account', 'The account is closed after this instruction', ], }, { name: 'curveTokenAccount', isMut: true, isSigner: false, docs: [ 'Curve Token Account', 'The account is closed after this instruction', ], }, { name: 'migrationAuthorityTokenAccount', isMut: true, isSigner: false, docs: ['Authority token Account', 'Init on demand'], }, { name: 'mint', isMut: true, isSigner: false, docs: [ 'InterfaceAccount: checks program ownership + deserialize into Mint', ], }, { name: 'configAccount', isMut: false, isSigner: false, }, { name: 'systemProgram', isMut: false, isSigner: false, }, { name: 'tokenProgram', isMut: false, isSigner: false, }, { name: 'associatedTokenProgram', isMut: false, isSigner: false, }, ], args: [], }, { name: 'configInit', accounts: [ { name: 'configAuthority', isMut: true, isSigner: true, }, { name: 'configAccount', isMut: true, isSigner: false, }, { name: 'systemProgram', isMut: false, isSigner: false, }, ], args: [ { name: 'data', type: { defined: 'ConfigParams', }, }, ], }, { name: 'configUpdate', accounts: [ { name: 'configAuthority', isMut: false, isSigner: true, }, { name: 'configAccount', isMut: true, isSigner: false, }, ], args: [ { name: 'data', type: { defined: 'ConfigParams', }, }, ], }, ], accounts: [ { name: 'ConfigAccount', type: { kind: 'struct', fields: [ { name: 'migrationAuthority', type: 'publicKey', }, { name: 'backendAuthority', type: 'publicKey', }, { name: 'configAuthority', type: 'publicKey', }, { name: 'helioFee', type: 'publicKey', }, { name: 'dexFee', type: 'publicKey', }, { name: 'feeBps', type: 'u16', }, { name: 'dexFeeShare', type: 'u8', }, { name: 'migrationFee', type: 'u64', }, { name: 'marketcapThreshold', type: 'u64', }, { name: 'marketcapCurrency', type: { defined: 'Currency', }, }, { name: 'minSupportedDecimalPlaces', type: 'u8', }, { name: 'maxSupportedDecimalPlaces', type: 'u8', }, { name: 'minSupportedTokenSupply', type: 'u64', }, { name: 'maxSupportedTokenSupply', type: 'u64', }, { name: 'bump', type: 'u8', }, { name: 'coefB', type: 'u32', }, ], }, }, { name: 'CurveAccount', type: { kind: 'struct', fields: [ { name: 'totalSupply', type: 'u64', }, { name: 'curveAmount', type: 'u64', }, { name: 'mint', type: 'publicKey', }, { name: 'decimals', type: 'u8', }, { name: 'collateralCurrency', type: { defined: 'Currency', }, }, { name: 'curveType', type: { defined: 'CurveType', }, }, { name: 'marketcapThreshold', type: 'u64', }, { name: 'marketcapCurrency', type: { defined: 'Currency', }, }, { name: 'migrationFee', type: 'u64', }, { name: 'coefB', type: 'u32', }, { name: 'bump', type: 'u8', }, ], }, }, ], types: [ { name: 'TokenMintParams', type: { kind: 'struct', fields: [ { name: 'name', type: 'string', }, { name: 'symbol', type: 'string', }, { name: 'uri', type: 'string', }, { name: 'decimals', type: 'u8', }, { name: 'collateralCurrency', type: 'u8', }, { name: 'amount', type: 'u64', }, { name: 'curveType', type: 'u8', }, ], }, }, { name: 'TradeParams', type: { kind: 'struct', fields: [ { name: 'amount', type: 'u64', }, { name: 'collateralAmount', type: 'u64', }, { name: 'slippageBps', type: 'u64', }, ], }, }, { name: 'ConfigParams', type: { kind: 'struct', fields: [ { name: 'migrationAuthority', type: { option: 'publicKey', }, }, { name: 'backendAuthority', type: { option: 'publicKey', }, }, { name: 'configAuthority', type: { option: 'publicKey', }, }, { name: 'helioFee', type: { option: 'publicKey', }, }, { name: 'dexFee', type: { option: 'publicKey', }, }, { name: 'feeBps', type: { option: 'u16', }, }, { name: 'dexFeeShare', type: { option: 'u8', }, }, { name: 'migrationFee', type: { option: 'u64', }, }, { name: 'marketcapThreshold', type: { option: 'u64', }, }, { name: 'marketcapCurrency', type: { option: 'u8', }, }, { name: 'minSupportedDecimalPlaces', type: { option: 'u8', }, }, { name: 'maxSupportedDecimalPlaces', type: { option: 'u8', }, }, { name: 'minSupportedTokenSupply', type: { option: 'u64', }, }, { name: 'maxSupportedTokenSupply', type: { option: 'u64', }, }, { name: 'coefB', type: { option: 'u32', }, }, ], }, }, { name: 'Currency', type: { kind: 'enum', variants: [ { name: 'Sol', }, ], }, }, { name: 'CurveType', type: { kind: 'enum', variants: [ { name: 'LinearV1', }, ], }, }, { name: 'TradeType', type: { kind: 'enum', variants: [ { name: 'Buy', }, { name: 'Sell', }, ], }, }, ], events: [ { name: 'TradeEvent', fields: [ { name: 'amount', type: 'u64', index: false, }, { name: 'collateralAmount', type: 'u64', index: false, }, { name: 'dexFee', type: 'u64', index: false, }, { name: 'helioFee', type: 'u64', index: false, }, { name: 'allocation', type: 'u64', index: false, }, { name: 'curve', type: 'publicKey', index: false, }, { name: 'costToken', type: 'publicKey', index: false, }, { name: 'sender', type: 'publicKey', index: false, }, { name: 'type', type: { defined: 'TradeType', }, index: false, }, { name: 'label', type: 'string', index: true, }, ], }, { name: 'MigrationEvent', fields: [ { name: 'tokensMigrated', type: 'u64', index: false, }, { name: 'tokensBurned', type: 'u64', index: false, }, { name: 'collateralMigrated', type: 'u64', index: false, }, { name: 'fee', type: 'u64', index: false, }, { name: 'label', type: 'string', index: true, }, ], }, ], errors: [ { code: 6000, name: 'InsufficientBalance', msg: 'Insufficient SOL to pay for the transaction.', }, { code: 6001, name: 'InvalidAmount', msg: 'The amount must be available in the curve .', }, { code: 6002, name: 'InvalidSlippage', msg: 'The slippage must be under 100 percent.', }, { code: 6003, name: 'SlippageOverflow', msg: 'The cost amount is not in the allowed slippage interval.', }, { code: 6004, name: 'ThresholdReached', msg: 'Threshold limit exceeded.', }, { code: 6005, name: 'InvalidTokenAccount', msg: 'Trade disabled, market cap threshold reached.', }, { code: 6006, name: 'InvalidCurveAccount', msg: 'Invalid curve account.', }, { code: 6007, name: 'InvalidFeeAccount', msg: 'Invalid fee account address.', }, { code: 6008, name: 'CurveLimit', msg: 'Curve limit exceeded.', }, { code: 6009, name: 'InvalidCurveType', msg: 'Invalid curve type.', }, { code: 6010, name: 'InvalidCurrency', msg: 'Invalid currency.', }, { code: 6011, name: 'Arithmetics', msg: 'Artithmetics error', }, { code: 6012, name: 'ThresholdNotHit', msg: 'Market Cap threshold not hit, cannot migrate funds yet', }, { code: 6013, name: 'InvalidAuthority', msg: 'Invalid Authority provided.', }, { code: 6014, name: 'TradeAmountTooLow', msg: 'Trade amount too low , resulting in 0 costs', }, { code: 6015, name: 'ConfigFieldMissing', msg: 'Config field needs to be present during initialization', }, { code: 6016, name: 'DifferentCurrencies', msg: 'Unsupported different currency types', }, { code: 6017, name: 'BasisPointTooHigh', msg: 'Basis points too high', }, { code: 6018, name: 'FeeShareTooHigh', msg: 'Fee share too High', }, { code: 6019, name: 'TokenDecimalsOutOfRange', msg: 'Token decimals are not within the supported range', }, { code: 6020, name: 'TokenNameTooLong', msg: 'Token Name too long, max supported length is 32 bytes', }, { code: 6021, name: 'TokenSymbolTooLong', msg: 'Token Symbol too long, max supported length is 10 bytes', }, { code: 6022, name: 'TokenURITooLong', msg: 'Token URI too long, max supported length is 200 bytes', }, { code: 6023, name: 'IncorrectDecimalPlacesBounds', msg: 'Minimum Decimal Places cannot be lower than Maximum Decimal Places', }, { code: 6024, name: 'IncorrectTokenSupplyBounds', msg: 'Minimum Token Supply cannot be lower than Maximum Token Supply', }, { code: 6025, name: 'TotalSupplyOutOfBounds', msg: 'Token Total Supply out of bounds', }, { code: 6026, name: 'FinalCollateralTooLow', msg: 'This setup will produce final collateral amount less than the migration fee', }, { code: 6027, name: 'CoefficientZero', msg: 'One of the Coefficients is equal to ZERO', }, { code: 6028, name: 'MarketCapThresholdTooLow', msg: 'Market cap Threshold under the Hard lower bound limits', }, { code: 6029, name: 'CoefBOutofBounds', msg: 'Default coef_b set out of hard limit bounds', }, { code: 6030, name: 'General', msg: 'General error', }, ], metadata: { address: 'MoonCVVNZFSYkqNXP6bxHLPL6QQJiMagDL3qcqUQTrG', }, };