Conversation
| - `migration.type = "uniswapV3"` is explicitly unsupported (returns `501 MIGRATION_NOT_IMPLEMENTED`) | ||
| - `governance: false` (or omitted) for no governance | ||
| - `governance: true` (or `{ enabled: true }`) for default token-holder governance (OpenZeppelin Governor) | ||
| - EVM requests continue to use the existing EVM schema. |
| - `pairing?: { numeraireAddress? }` | ||
| - `pricing?: { numerairePriceUsd? }` | ||
| - `governance?: false` | ||
| - `migration?: { type: "noOp" }` |
There was a problem hiding this comment.
This correctly documents the current API but there is some configuration left out of it that is supported by the initializer.
For example, the way it hardcodes baseForDistribution and baseForLiquidity to 0
| - `governance?: false` | ||
| - `migration?: { type: "noOp" }` | ||
| - `auction:` | ||
| - `type: "multicurve"`: |
| - exit/migration behavior: | ||
| - migrate immediately when `maxProceeds` is reached | ||
| - otherwise migrate at auction maturity only if `minProceeds` is reached | ||
| - `type: "xyk"` |
There was a problem hiding this comment.
need more clearly defined types, to add to glossary
|
|
||
| #### Solana request constraints | ||
|
|
||
| - Solana support is create-only in this iteration. |
There was a problem hiding this comment.
standards guidance: always speak as truth, not a stage of iteration
| - if a prior create attempt crashed/restarted after tx submit and left the key `in_progress`, retries fail closed with `409 IDEMPOTENCY_KEY_IN_DOUBT` | ||
| - when `IDEMPOTENCY_REQUIRE_KEY=true` (always true in shared mode), create requests without header return `422 IDEMPOTENCY_KEY_REQUIRED` | ||
| - EVM crash-window retries can return `409 IDEMPOTENCY_KEY_IN_DOUBT` | ||
| - Solana ambiguous confirmation retries can return `409 SOLANA_LAUNCH_IN_DOUBT` |
There was a problem hiding this comment.
in doubt is confusing
| - `SOLANA_KEYPAIR` | ||
| - JSON array of 64 secret-key bytes | ||
| - `SOLANA_CONFIRM_TIMEOUT_MS` | ||
| - `SOLANA_DEVNET_USE_ALT` |
| - `UNAUTHORIZED` | ||
|
|
||
| ### Launch creation and policy | ||
| ### EVM launch creation and policy |
There was a problem hiding this comment.
should just call it launch then per network, don't need to top level differentiate between evm and svm
| mainnetBetaWsUrl?: string; | ||
| keypairBytes?: Uint8Array; | ||
| confirmTimeoutMs: number; | ||
| useAlt: boolean; |
There was a problem hiding this comment.
can likely remove alt?
There was a problem hiding this comment.
We should always use the deployed Address Lookup Table (ALT) with our launch transactions.
This is to stay under the transaction size limit by optimizing the number of accounts provided.
Sabnock01
left a comment
There was a problem hiding this comment.
The Solana API here is not fully compatible with the current initializer program.
The main incompatibility is that launch creation is built on a stale initializer SDK. The current program now requires base_token_program, quote_token_program, and instructions_sysvar for initialize_launch, but the SDK/API path here still models the older single-tokenProgram account list and omits instructions_sysvar. This same staleness appears in the checked-in SDK IDL/codegen, and the pattern also shows up on adjacent initializer instructions like curve_swap_exact_in, initialize_config, and migrate_launch, so this looks broader than one helper.
Separately, the API is much narrower than the current initializer capabilities: it does not expose supply partitioning, sentinel config, migrator config/init hook, arbitrary quote mint, token-program selection, or a permissionless launch flow.
One additional mismatch: the API accepts u64 totalSupply, but its off-chain curve math drops into JS Number, so full-u64 support is not numerically exact even though the program accepts u64.
| if ( | ||
| record && | ||
| typeof record === 'object' && | ||
| 'payloadHash' in record && | ||
| typeof record.payloadHash === 'string' && | ||
| 'createdAtMs' in record && | ||
| typeof record.createdAtMs === 'number' | ||
| ) { | ||
| if ('state' in record && record.state === 'in_doubt' && 'error' in record) { | ||
| this.records.set(key, record); | ||
| continue; | ||
| } | ||
|
|
||
| if ('response' in record) { | ||
| this.records.set(key, { | ||
| state: 'completed', | ||
| payloadHash: record.payloadHash, | ||
| response: record.response as CreateAnyLaunchResponse, | ||
| createdAtMs: record.createdAtMs, | ||
| }); | ||
| } | ||
| } |
There was a problem hiding this comment.
i would recommend cleaning this up with zod
| if ( | ||
| parsed.state === 'in_doubt' && | ||
| typeof parsed.error === 'object' && | ||
| parsed.error !== null && | ||
| typeof (parsed.error as { code?: unknown }).code === 'string' && | ||
| typeof (parsed.error as { message?: unknown }).message === 'string' | ||
| ) { |
Adds Solana Devnet support for creating assets on Doppler's Solana AMM