@whetstone-research/doppler-sdk 1.0.11 → 1.0.12

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.
@@ -1,7 +1,7 @@
1
- import { transferAdminArgsCodec, swapExactInArgsCodec, sortPositionsByShares, sortPoolsByReserves, setSentinelArgsCodec, setRouteArgsCodec, setFeesArgsCodec, removeLiquidityArgsCodec, ratioToNumber, quoteToNumeraireArgsCodec, q64ToNumber, q64Mul, q64Div, positionDataCodec, poolExists, poolDataCodec, oracleStateDataCodec, oracleConsultArgsCodec, observationCodec, numberToQ64, minBigInt, maxBigInt, isqrt, isOracleStale, initializePoolArgsCodec, initializeOracleArgsCodec, initializeConfigArgsCodec, getTvl, getSwapQuoteExactOut, getSwapQuote, getSpotPrice1, getSpotPrice0, getRemoveLiquidityQuote, getPositionValue, getPositionAddressFromParams, getPoolByMints, getPoolAddressFromMints, getPendingFees, getOracleSpotPrices, getOracleForPool, getOracleDeviation, getOracleBufferStats, getOracleAge, getOracleAddressFromPool, getK, getAddLiquidityQuote, filterPoolsByMint, filterActivePositions, fetchUserPositions, fetchPositionsBatch, fetchPositionByParams, fetchPosition, fetchPoolsBatch, fetchPoolPositions, fetchPool, fetchOraclesBatch, fetchOracle, fetchAllPools, encodeTransferAdminArgs, encodeSwapExactInArgs, encodeSetSentinelArgs, encodeSetRouteArgs, encodeSetFeesArgs, encodeRemoveLiquidityArgs, encodeQuoteToNumeraireArgs, encodeOracleConsultArgs, encodeInstructionData, encodeInitializePoolArgs, encodeInitializeOracleArgs, encodeInitializeConfigArgs, encodeCreatePositionArgs, encodeCollectProtocolFeesArgs, encodeCollectFeesArgs, encodeAddLiquidityArgs, decodePosition, decodePool, decodeOracleState, decodeAmmConfig, createPositionArgsCodec, consultTwap, computePrice1Q64, computePrice0Q64, comparePoolAndOraclePrices, collectProtocolFeesArgsCodec, collectFeesArgsCodec, ceilDiv, calculateTwapNumber, calculateTwap, calculateAccruedFees, ammConfigDataCodec, addLiquidityArgsCodec } from '../chunk-MPM2L56F.js';
2
- import { sortMints, getSwapAddresses, getProtocolPositionAddress, getPositionAddress, getPoolVault1Address, getPoolVault0Address, getPoolInitAddresses, getPoolAuthorityAddress, getPoolAddress, getOracleAddress, getLiquidityAddresses, getConfigAddress, CPMM_PROGRAM_ID, areMintsOrdered, TOKEN_METADATA_PROGRAM_ID, SF_BEFORE_SWAP, SF_BEFORE_REMOVE_LIQ, SF_BEFORE_ADD_LIQ, SF_AFTER_SWAP, SF_AFTER_REMOVE_LIQ, SF_AFTER_ADD_LIQ, SENTINEL_NO_CHANGE, SEED_PROTOCOL_POSITION, SEED_POSITION, SEED_POOL, SEED_ORACLE, SEED_CONFIG, SEED_AUTHORITY, Q64_ONE, MAX_SENTINEL_ALLOWLIST, MAX_ORACLE_OBSERVATIONS, INSTRUCTION_DISCRIMINATORS, BPS_DENOM, ACCOUNT_VERSION, ACCOUNT_DISCRIMINATORS, TOKEN_PROGRAM_ADDRESS, SYSTEM_PROGRAM_ADDRESS } from '../chunk-QGJA5CFL.js';
1
+ import { transferAdminArgsCodec, swapExactInArgsCodec, sortPositionsByShares, sortPoolsByReserves, setSentinelArgsCodec, setRouteArgsCodec, setFeesArgsCodec, removeLiquidityArgsCodec, ratioToNumber, quoteToNumeraireArgsCodec, q64ToNumber, q64Mul, q64Div, positionDataCodec, poolExists, poolDataCodec, oracleStateDataCodec, oracleConsultArgsCodec, observationCodec, numberToQ64, minBigInt, maxBigInt, isqrt, isOracleStale, initializePoolArgsCodec, initializeOracleArgsCodec, initializeConfigArgsCodec, getTvl, getSwapQuoteExactOut, getSwapQuote, getSpotPrice1, getSpotPrice0, getRemoveLiquidityQuote, getPositionValue, getPositionAddressFromParams, getPoolByMints, getPoolAddressFromMints, getPendingFees, getOracleSpotPrices, getOracleForPool, getOracleDeviation, getOracleBufferStats, getOracleAge, getOracleAddressFromPool, getK, getAddLiquidityQuote, filterPoolsByMint, filterActivePositions, fetchUserPositions, fetchPositionsBatch, fetchPositionByParams, fetchPosition, fetchPoolsBatch, fetchPoolPositions, fetchPool, fetchOraclesBatch, fetchOracle, fetchAllPools, encodeTransferAdminArgs, encodeSwapExactInArgs, encodeSetSentinelArgs, encodeSetRouteArgs, encodeSetFeesArgs, encodeRemoveLiquidityArgs, encodeQuoteToNumeraireArgs, encodeOracleConsultArgs, encodeInstructionData, encodeInitializePoolArgs, encodeInitializeOracleArgs, encodeInitializeConfigArgs, encodeCreatePositionArgs, encodeCollectProtocolFeesArgs, encodeCollectFeesArgs, encodeAddLiquidityArgs, decodePosition, decodePool, decodeOracleState, decodeAmmConfig, createPositionArgsCodec, consultTwap, computePrice1Q64, computePrice0Q64, comparePoolAndOraclePrices, collectProtocolFeesArgsCodec, collectFeesArgsCodec, ceilDiv, calculateTwapNumber, calculateTwap, calculateAccruedFees, ammConfigDataCodec, addLiquidityArgsCodec } from '../chunk-ZQEEGBXT.js';
2
+ import { sortMints, getSwapAddresses, getProtocolPositionAddress, getPositionAddress, getPoolVault1Address, getPoolVault0Address, getPoolInitAddresses, getPoolAuthorityAddress, getPoolAddress, getOracleAddress, getLiquidityAddresses, getConfigAddress, CPMM_PROGRAM_ID, areMintsOrdered, TOKEN_METADATA_PROGRAM_ID, SF_REQUIRE_ORACLE, SF_FORWARD_READONLY_SIGNERS, SF_BEFORE_SWAP, SF_BEFORE_REMOVE_LIQ, SF_BEFORE_ADD_LIQ, SF_AFTER_SWAP, SF_AFTER_REMOVE_LIQ, SF_AFTER_ADD_LIQ, SENTINEL_NO_CHANGE, SEED_PROTOCOL_POSITION, SEED_POSITION, SEED_POOL, SEED_ORACLE, SEED_CONFIG, SEED_AUTHORITY, Q64_ONE, MAX_SENTINEL_ALLOWLIST, MAX_ORACLE_OBSERVATIONS, INSTRUCTION_DISCRIMINATORS, BPS_DENOM, ACCOUNT_VERSION, ACCOUNT_DISCRIMINATORS, TOKEN_PROGRAM_ADDRESS, SYSTEM_PROGRAM_ADDRESS } from '../chunk-2NFQKIOB.js';
3
3
  import { __export } from '../chunk-PZ5AY32C.js';
4
- import { getAddressCodec, getProgramDerivedAddress, fixEncoderSize, getBytesEncoder, transformEncoder, getStructEncoder, getU64Encoder, getU128Encoder, getBooleanEncoder, getStructDecoder, fixDecoderSize, getU64Decoder, getU128Decoder, getBooleanDecoder, getBytesDecoder, combineCodec, getAddressEncoder, SolanaError, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, getU16Encoder, getU8Encoder, getArrayEncoder, getAddressDecoder, getU16Decoder, getU8Decoder, getArrayDecoder, getU32Encoder, getU32Decoder, getOptionEncoder, getOptionDecoder, createNoopSigner, AccountRole, address, addEncoderSizePrefix, getUtf8Encoder, addDecoderSizePrefix, getUtf8Decoder, getStructCodec, getU64Codec, mergeBytes, isProgramError, decodeAccount, assertAccountExists, fetchEncodedAccount, assertAccountsExist, fetchEncodedAccounts, containsBytes, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, assertIsInstructionWithAccounts } from '@solana/kit';
4
+ import { getAddressCodec, getProgramDerivedAddress, fixEncoderSize, getBytesEncoder, transformEncoder, getStructEncoder, getU64Encoder, getU128Encoder, getBooleanEncoder, getStructDecoder, fixDecoderSize, getU64Decoder, getU128Decoder, getBooleanDecoder, getBytesDecoder, combineCodec, getAddressEncoder, SolanaError, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, getU16Encoder, getU8Encoder, getArrayEncoder, getAddressDecoder, getU16Decoder, getU8Decoder, getArrayDecoder, getU32Encoder, getU32Decoder, getOptionEncoder, getOptionDecoder, createNoopSigner, address, addEncoderSizePrefix, getUtf8Encoder, addDecoderSizePrefix, getUtf8Decoder, AccountRole, getStructCodec, getU64Codec, mergeBytes, isProgramError, decodeAccount, assertAccountExists, fetchEncodedAccount, assertAccountsExist, fetchEncodedAccounts, containsBytes, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, assertIsInstructionWithAccounts } from '@solana/kit';
5
5
  import { getAddressFromResolvedInstructionAccount, getAccountMetaFactory, getNonNullResolvedInstructionInput, addSelfPlanAndSendFunctions, addSelfFetchFunctions } from '@solana/program-client-core';
6
6
  import { keccak_256 } from '@noble/hashes/sha3.js';
7
7
 
@@ -50,6 +50,8 @@ __export(cpmm_exports, {
50
50
  SF_BEFORE_ADD_LIQ: () => SF_BEFORE_ADD_LIQ,
51
51
  SF_BEFORE_REMOVE_LIQ: () => SF_BEFORE_REMOVE_LIQ,
52
52
  SF_BEFORE_SWAP: () => SF_BEFORE_SWAP,
53
+ SF_FORWARD_READONLY_SIGNERS: () => SF_FORWARD_READONLY_SIGNERS,
54
+ SF_REQUIRE_ORACLE: () => SF_REQUIRE_ORACLE,
53
55
  SKIM_DISCRIMINATOR: () => SKIM_DISCRIMINATOR,
54
56
  SWAP_EXACT_IN_DISCRIMINATOR: () => SWAP_EXACT_IN_DISCRIMINATOR,
55
57
  TOKEN_METADATA_PROGRAM_ID: () => TOKEN_METADATA_PROGRAM_ID,
@@ -3486,6 +3488,22 @@ function parseUpdateConfigInstruction(instruction) {
3486
3488
  data: getUpdateConfigInstructionDataDecoder().decode(instruction.data)
3487
3489
  };
3488
3490
  }
3491
+ function isTransactionSigner(value) {
3492
+ return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
3493
+ }
3494
+ function toRemainingAccountMeta(account) {
3495
+ if (typeof account === "string") {
3496
+ return { address: account, role: AccountRole.READONLY };
3497
+ }
3498
+ if (isTransactionSigner(account)) {
3499
+ return {
3500
+ address: account.address,
3501
+ role: AccountRole.READONLY_SIGNER,
3502
+ signer: account
3503
+ };
3504
+ }
3505
+ return account;
3506
+ }
3489
3507
  function createSwapInstruction(params) {
3490
3508
  const {
3491
3509
  config,
@@ -3509,6 +3527,7 @@ function createSwapInstruction(params) {
3509
3527
  tokenProgram,
3510
3528
  programId = CPMM_PROGRAM_ADDRESS
3511
3529
  } = params;
3530
+ const trader = typeof user === "string" ? createNoopSigner(user) : user;
3512
3531
  const [vaultIn, vaultOut] = direction === 0 ? [vault0, vault1] : [vault1, vault0];
3513
3532
  const [userIn, userOut] = direction === 0 ? [userToken0, userToken1] : [userToken1, userToken0];
3514
3533
  const instruction = getSwapExactInInstruction(
@@ -3522,7 +3541,7 @@ function createSwapInstruction(params) {
3522
3541
  token1Mint,
3523
3542
  userIn,
3524
3543
  userOut,
3525
- trader: createNoopSigner(user),
3544
+ trader,
3526
3545
  token0Program: token0Program ?? tokenProgram ?? TOKEN_PROGRAM_ADDRESS,
3527
3546
  token1Program: token1Program ?? tokenProgram ?? TOKEN_PROGRAM_ADDRESS,
3528
3547
  oracle,
@@ -3537,10 +3556,7 @@ function createSwapInstruction(params) {
3537
3556
  ...instruction,
3538
3557
  accounts: [
3539
3558
  ...instruction.accounts ?? [],
3540
- ...remainingAccounts.map((address3) => ({
3541
- address: address3,
3542
- role: AccountRole.READONLY
3543
- }))
3559
+ ...remainingAccounts.map(toRemainingAccountMeta)
3544
3560
  ]
3545
3561
  };
3546
3562
  }
@@ -3600,7 +3616,11 @@ __export(initializer_exports, {
3600
3616
  SEED_LAUNCH: () => SEED_LAUNCH,
3601
3617
  SEED_LAUNCH_AUTHORITY: () => SEED_LAUNCH_AUTHORITY,
3602
3618
  SENTINEL_NO_CHANGE: () => SENTINEL_NO_CHANGE2,
3619
+ SF_AFTER_CREATE: () => SF_AFTER_CREATE,
3620
+ SF_AFTER_MIGRATE: () => SF_AFTER_MIGRATE,
3603
3621
  SF_AFTER_SWAP: () => SF_AFTER_SWAP2,
3622
+ SF_BEFORE_CREATE: () => SF_BEFORE_CREATE,
3623
+ SF_BEFORE_MIGRATE: () => SF_BEFORE_MIGRATE,
3604
3624
  SF_BEFORE_SWAP: () => SF_BEFORE_SWAP2,
3605
3625
  computeRemainingAccountsHash: () => computeRemainingAccountsHash,
3606
3626
  createCurveSwapExactInInstruction: () => createCurveSwapExactInInstruction,
@@ -3702,6 +3722,10 @@ var CURVE_KIND_XYK = 0;
3702
3722
  var CURVE_PARAMS_FORMAT_XYK_V0 = 0;
3703
3723
  var SF_BEFORE_SWAP2 = 1 << 0;
3704
3724
  var SF_AFTER_SWAP2 = 1 << 1;
3725
+ var SF_BEFORE_CREATE = 1 << 2;
3726
+ var SF_AFTER_CREATE = 1 << 3;
3727
+ var SF_BEFORE_MIGRATE = 1 << 4;
3728
+ var SF_AFTER_MIGRATE = 1 << 5;
3705
3729
  var SENTINEL_NO_CHANGE2 = 65535;
3706
3730
  var INITIALIZER_INSTRUCTION_DISCRIMINATORS = {
3707
3731
  // SHA256("global:initialize_config")[0:8]
@@ -3892,6 +3916,7 @@ function getInitializeLaunchArgsEncoder() {
3892
3916
  "sentinelCalldata",
3893
3917
  addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())
3894
3918
  ],
3919
+ ["sentinelCreateRemainingAccountsLen", getU32Encoder()],
3895
3920
  ["migratorProgram", getAddressEncoder()],
3896
3921
  [
3897
3922
  "migratorInitCalldata",
@@ -3901,6 +3926,10 @@ function getInitializeLaunchArgsEncoder() {
3901
3926
  "migratorMigrateCalldata",
3902
3927
  addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())
3903
3928
  ],
3929
+ [
3930
+ "sentinelCreateRemainingAccountsHash",
3931
+ fixEncoderSize(getBytesEncoder(), 32)
3932
+ ],
3904
3933
  ["sentinelRemainingAccountsHash", fixEncoderSize(getBytesEncoder(), 32)],
3905
3934
  [
3906
3935
  "migratorInitRemainingAccountsHash",
@@ -3933,6 +3962,7 @@ function getInitializeLaunchArgsDecoder() {
3933
3962
  "sentinelCalldata",
3934
3963
  addDecoderSizePrefix(getBytesDecoder(), getU32Decoder())
3935
3964
  ],
3965
+ ["sentinelCreateRemainingAccountsLen", getU32Decoder()],
3936
3966
  ["migratorProgram", getAddressDecoder()],
3937
3967
  [
3938
3968
  "migratorInitCalldata",
@@ -3942,6 +3972,10 @@ function getInitializeLaunchArgsDecoder() {
3942
3972
  "migratorMigrateCalldata",
3943
3973
  addDecoderSizePrefix(getBytesDecoder(), getU32Decoder())
3944
3974
  ],
3975
+ [
3976
+ "sentinelCreateRemainingAccountsHash",
3977
+ fixDecoderSize(getBytesDecoder(), 32)
3978
+ ],
3945
3979
  ["sentinelRemainingAccountsHash", fixDecoderSize(getBytesDecoder(), 32)],
3946
3980
  [
3947
3981
  "migratorInitRemainingAccountsHash",
@@ -4131,6 +4165,7 @@ function getInitializeLaunchInstructionDataEncoder() {
4131
4165
  "sentinelCalldata",
4132
4166
  addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())
4133
4167
  ],
4168
+ ["sentinelCreateRemainingAccountsLen", getU32Encoder()],
4134
4169
  ["migratorProgram", getAddressEncoder()],
4135
4170
  [
4136
4171
  "migratorInitCalldata",
@@ -4140,6 +4175,10 @@ function getInitializeLaunchInstructionDataEncoder() {
4140
4175
  "migratorMigrateCalldata",
4141
4176
  addEncoderSizePrefix(getBytesEncoder(), getU32Encoder())
4142
4177
  ],
4178
+ [
4179
+ "sentinelCreateRemainingAccountsHash",
4180
+ fixEncoderSize(getBytesEncoder(), 32)
4181
+ ],
4143
4182
  ["sentinelRemainingAccountsHash", fixEncoderSize(getBytesEncoder(), 32)],
4144
4183
  [
4145
4184
  "migratorInitRemainingAccountsHash",
@@ -4271,11 +4310,11 @@ function launchIdFromU64(launchId) {
4271
4310
  out.set(encodeU64LE(launchId), 0);
4272
4311
  return out;
4273
4312
  }
4274
- function isTransactionSigner(value) {
4313
+ function isTransactionSigner2(value) {
4275
4314
  return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
4276
4315
  }
4277
4316
  function createSignerAccountMeta(value, role) {
4278
- if (isTransactionSigner(value)) {
4317
+ if (isTransactionSigner2(value)) {
4279
4318
  return { address: value.address, role, signer: value };
4280
4319
  }
4281
4320
  return { address: value, role };
@@ -4298,11 +4337,11 @@ function createInitializeConfigInstruction(accounts, args, programId = INITIALIZ
4298
4337
  );
4299
4338
  return { programAddress: programId, accounts: keys, data };
4300
4339
  }
4301
- function isTransactionSigner2(value) {
4340
+ function isTransactionSigner3(value) {
4302
4341
  return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
4303
4342
  }
4304
4343
  function createSignerAccountMeta2(value, role) {
4305
- if (isTransactionSigner2(value)) {
4344
+ if (isTransactionSigner3(value)) {
4306
4345
  return { address: value.address, role, signer: value };
4307
4346
  }
4308
4347
  return { address: value, role };
@@ -4318,11 +4357,11 @@ function createSetMigratorAllowlistInstruction(accounts, allowlist, programId =
4318
4357
  );
4319
4358
  return { programAddress: programId, accounts: keys, data };
4320
4359
  }
4321
- function isTransactionSigner3(value) {
4360
+ function isTransactionSigner4(value) {
4322
4361
  return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
4323
4362
  }
4324
4363
  function createSignerAccountMeta3(value, role) {
4325
- if (isTransactionSigner3(value)) {
4364
+ if (isTransactionSigner4(value)) {
4326
4365
  return { address: value.address, role, signer: value };
4327
4366
  }
4328
4367
  return { address: value, role };
@@ -4338,6 +4377,27 @@ function createSetSentinelAllowlistInstruction(accounts, allowlist, programId =
4338
4377
  );
4339
4378
  return { programAddress: programId, accounts: keys, data };
4340
4379
  }
4380
+ function computeRemainingAccountsHash(addresses) {
4381
+ const addressEncoder = getAddressEncoder();
4382
+ const buf = new Uint8Array(4 + addresses.length * 32);
4383
+ new DataView(buf.buffer).setUint32(0, addresses.length, true);
4384
+ for (let i = 0; i < addresses.length; i++) {
4385
+ buf.set(addressEncoder.encode(addresses[i]), 4 + i * 32);
4386
+ }
4387
+ return keccak_256(buf);
4388
+ }
4389
+ function phaseLabel(phase) {
4390
+ switch (phase) {
4391
+ case PHASE_TRADING:
4392
+ return "TRADING";
4393
+ case PHASE_MIGRATED:
4394
+ return "MIGRATED";
4395
+ case PHASE_ABORTED:
4396
+ return "ABORTED";
4397
+ default:
4398
+ return String(phase);
4399
+ }
4400
+ }
4341
4401
  var CPMM_MIGRATOR_PROGRAM_ID = address(
4342
4402
  "7WMUTNC41eMCo6eGH5Sy2xbgE3AycvLbFPo95AU9CSUd"
4343
4403
  );
@@ -6310,11 +6370,11 @@ async function getPredictionEntryByMintAddress(market, mint, programId = PREDICT
6310
6370
  }
6311
6371
 
6312
6372
  // src/solana/initializer/instructions/initializeLaunch.ts
6313
- function isTransactionSigner4(value) {
6373
+ function isTransactionSigner5(value) {
6314
6374
  return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
6315
6375
  }
6316
6376
  function createAccountMeta(value, role) {
6317
- if (isTransactionSigner4(value)) {
6377
+ if (isTransactionSigner5(value)) {
6318
6378
  return { address: value.address, role, signer: value };
6319
6379
  }
6320
6380
  return { address: value, role };
@@ -6339,7 +6399,8 @@ var ALT_INDEX = {
6339
6399
  [TOKEN_METADATA_PROGRAM_ID]: 4,
6340
6400
  [CPMM_MIGRATOR_PROGRAM_ID]: 5,
6341
6401
  So11111111111111111111111111111111111111112: 6,
6342
- [PREDICTION_MIGRATOR_PROGRAM_ADDRESS]: 8
6402
+ [PREDICTION_MIGRATOR_PROGRAM_ADDRESS]: 8,
6403
+ A9DojSvj32PMTTGctEcWZu9GSKuQVEhPkBXxDxmYu34o: 10
6343
6404
  };
6344
6405
  function validateInitializeLaunchCurveParams(args) {
6345
6406
  if (args.curveKind !== CURVE_KIND_XYK) {
@@ -6363,6 +6424,7 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6363
6424
  quoteVault,
6364
6425
  payer,
6365
6426
  authority,
6427
+ sentinelProgram,
6366
6428
  migratorProgram,
6367
6429
  baseTokenProgram = TOKEN_PROGRAM_ADDRESS,
6368
6430
  quoteTokenProgram = TOKEN_PROGRAM_ADDRESS,
@@ -6370,6 +6432,7 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6370
6432
  rent,
6371
6433
  metadataAccount,
6372
6434
  metadataProgram = TOKEN_METADATA_PROGRAM_ID,
6435
+ sentinelCreateRemainingAccounts = [],
6373
6436
  addressLookupTable: alt
6374
6437
  } = accounts;
6375
6438
  const withMetadata = Boolean(
@@ -6380,6 +6443,10 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6380
6443
  "metadataName is set but metadataAccount was not provided. Derive it with await initializer.getTokenMetadataAddress(baseMintAddress)."
6381
6444
  );
6382
6445
  }
6446
+ const createHooksEnabled = (args.sentinelFlags & (SF_BEFORE_CREATE | SF_AFTER_CREATE)) !== 0;
6447
+ const sentinelCreateRemainingAccountAddresses = sentinelCreateRemainingAccounts.map(
6448
+ (account) => isTransactionSigner5(account) ? account.address : account
6449
+ );
6383
6450
  const altIndexMap = alt ? ALT_INDEX : {};
6384
6451
  function staticOrLookup(addr, role) {
6385
6452
  if (alt && altIndexMap[addr] !== void 0) {
@@ -6402,12 +6469,15 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6402
6469
  createAccountMeta(quoteVault, AccountRole.WRITABLE_SIGNER),
6403
6470
  createAccountMeta(payer, AccountRole.WRITABLE_SIGNER)
6404
6471
  ];
6405
- if (authority) {
6406
- keys.push(createAccountMeta(authority, AccountRole.READONLY_SIGNER));
6407
- }
6408
- if (migratorProgram) {
6409
- keys.push(staticOrLookup(migratorProgram, AccountRole.READONLY));
6410
- }
6472
+ keys.push(
6473
+ authority ? createAccountMeta(authority, AccountRole.READONLY_SIGNER) : staticOrLookup(programId, AccountRole.READONLY)
6474
+ );
6475
+ keys.push(
6476
+ sentinelProgram ? staticOrLookup(sentinelProgram, AccountRole.READONLY) : staticOrLookup(programId, AccountRole.READONLY)
6477
+ );
6478
+ keys.push(
6479
+ migratorProgram ? staticOrLookup(migratorProgram, AccountRole.READONLY) : staticOrLookup(programId, AccountRole.READONLY)
6480
+ );
6411
6481
  keys.push(staticOrLookup(baseTokenProgram, AccountRole.READONLY));
6412
6482
  keys.push(staticOrLookup(quoteTokenProgram, AccountRole.READONLY));
6413
6483
  keys.push(staticOrLookup(systemProgram, AccountRole.READONLY));
@@ -6416,18 +6486,29 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6416
6486
  keys.push({ address: metadataAccount, role: AccountRole.WRITABLE });
6417
6487
  keys.push(staticOrLookup(metadataProgram, AccountRole.READONLY));
6418
6488
  } else {
6419
- keys.push({ address: programId, role: AccountRole.READONLY });
6420
- keys.push({ address: programId, role: AccountRole.READONLY });
6489
+ keys.push(staticOrLookup(programId, AccountRole.READONLY));
6490
+ keys.push(staticOrLookup(programId, AccountRole.READONLY));
6421
6491
  }
6422
6492
  const encoderArgs = {
6423
6493
  ...args,
6424
6494
  allowBuy: args.allowBuy ? 1 : 0,
6425
6495
  allowSell: args.allowSell ? 1 : 0,
6426
- migratorProgram: migratorProgram ?? SYSTEM_PROGRAM_ADDRESS
6496
+ sentinelProgram: args.sentinelProgram ?? sentinelProgram ?? SYSTEM_PROGRAM_ADDRESS,
6497
+ sentinelCreateRemainingAccountsLen: args.sentinelCreateRemainingAccountsLen ?? sentinelCreateRemainingAccounts.length,
6498
+ migratorProgram: migratorProgram ?? SYSTEM_PROGRAM_ADDRESS,
6499
+ sentinelCreateRemainingAccountsHash: args.sentinelCreateRemainingAccountsHash ?? (createHooksEnabled ? computeRemainingAccountsHash(sentinelCreateRemainingAccountAddresses) : new Uint8Array(32))
6427
6500
  };
6428
6501
  const data = new Uint8Array(
6429
6502
  getInitializeLaunchInstructionDataEncoder().encode(encoderArgs)
6430
6503
  );
6504
+ keys.push(
6505
+ ...sentinelCreateRemainingAccounts.map(
6506
+ (account) => createAccountMeta(
6507
+ account,
6508
+ isTransactionSigner5(account) ? AccountRole.READONLY_SIGNER : AccountRole.READONLY
6509
+ )
6510
+ )
6511
+ );
6431
6512
  if (migratorProgram === CPMM_MIGRATOR_PROGRAM_ID) {
6432
6513
  if (!accounts.cpmmConfig) {
6433
6514
  throw new Error(
@@ -6441,7 +6522,7 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6441
6522
  if (migratorProgram === PREDICTION_MIGRATOR_PROGRAM_ADDRESS) {
6442
6523
  const oracleState = args.namespace;
6443
6524
  const entryId = args.launchId;
6444
- const baseMintAddress = isTransactionSigner4(baseMint) ? baseMint.address : baseMint;
6525
+ const baseMintAddress = isTransactionSigner5(baseMint) ? baseMint.address : baseMint;
6445
6526
  const [market] = await getPredictionMarketAddress(oracleState, quoteMint);
6446
6527
  const [potVault] = await getPredictionPotVaultAddress(market);
6447
6528
  const [marketAuthority] = await getPredictionMarketAuthorityAddress(market);
@@ -6459,11 +6540,11 @@ async function createInitializeLaunchInstruction(accounts, args, programId = INI
6459
6540
  }
6460
6541
  return { programAddress: programId, accounts: keys, data };
6461
6542
  }
6462
- function isTransactionSigner5(value) {
6543
+ function isTransactionSigner6(value) {
6463
6544
  return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
6464
6545
  }
6465
6546
  function createAccountMeta2(value, role) {
6466
- if (isTransactionSigner5(value)) {
6547
+ if (isTransactionSigner6(value)) {
6467
6548
  return { address: value.address, role, signer: value };
6468
6549
  }
6469
6550
  return { address: value, role };
@@ -6507,11 +6588,11 @@ function createCurveSwapExactInInstruction(accounts, args, programId = INITIALIZ
6507
6588
  );
6508
6589
  return { programAddress: programId, accounts: keys, data };
6509
6590
  }
6510
- function isTransactionSigner6(value) {
6591
+ function isTransactionSigner7(value) {
6511
6592
  return typeof value === "object" && value !== null && "address" in value && "signTransactions" in value;
6512
6593
  }
6513
6594
  function createSignerAccountMeta4(value, role) {
6514
- if (isTransactionSigner6(value)) {
6595
+ if (isTransactionSigner7(value)) {
6515
6596
  return { address: value.address, role, signer: value };
6516
6597
  }
6517
6598
  return { address: value, role };
@@ -6593,27 +6674,6 @@ function createPreviewMigrationInstruction(accounts, programId = INITIALIZER_PRO
6593
6674
  function decodePreviewMigrationResult(data) {
6594
6675
  return previewMigrationResultCodec.decode(data);
6595
6676
  }
6596
- function computeRemainingAccountsHash(addresses) {
6597
- const addressEncoder = getAddressEncoder();
6598
- const buf = new Uint8Array(4 + addresses.length * 32);
6599
- new DataView(buf.buffer).setUint32(0, addresses.length, true);
6600
- for (let i = 0; i < addresses.length; i++) {
6601
- buf.set(addressEncoder.encode(addresses[i]), 4 + i * 32);
6602
- }
6603
- return keccak_256(buf);
6604
- }
6605
- function phaseLabel(phase) {
6606
- switch (phase) {
6607
- case PHASE_TRADING:
6608
- return "TRADING";
6609
- case PHASE_MIGRATED:
6610
- return "MIGRATED";
6611
- case PHASE_ABORTED:
6612
- return "ABORTED";
6613
- default:
6614
- return String(phase);
6615
- }
6616
- }
6617
6677
  var addressCodec5 = getAddressCodec();
6618
6678
  function bytesToBase64(bytes) {
6619
6679
  let binary = "";