Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Эта запись охватывает предстоящее обновление программы CLMM. Она была проверена на ветке chore/upgrade-anchor репозитория raydium-clmm (head a72f9e1) перед развёртыванием. Перед использованием нового инструмента или изменённого поведения CreateAmmConfig подтвердите развёрнутую программу.
CLMM получает то же обновление фреймворка, которое CPMM и LaunchLab выпустили 2026-09-09. Anchor переходит с 0.32.1 на =1.0.2, а цепочка инструментов сборки переходит с Agave 2.3.0 на 3.1.10. Вместе с этим идут два изменения на стороне администратора: новый инструмент CollectExcessLamports и фиксированные владельцы комиссии в CreateAmmConfig. Каждый инструмент, который вызывают трейдер, LP, пользователь лимитных ордеров или создатель пула, сохраняет свой список учётных записей, аргументы и математику.

TL;DR для интеграторов

  • Ни один пользовательский инструмент не изменился. CreatePool, CreateCustomizablePool, CreatePermissionedPool, все пути OpenPosition* / IncreaseLiquidity* / DecreaseLiquidity*, ClosePosition, Swap / SwapV2 / SwapRouterBaseIn, пять инструментов лимитных ордеров и инструменты вознаграждения идентичны на проводе. Ни один макет учётной записи не изменился.
  • Добавлен один инструмент: CollectExcessLamports. Он только для администратора и не принимает аргументов. Он обрабатывает один пул за вызов: собственный PoolState пула всегда обрабатывается, и PDA пула подписывает свои хранилища, которые вы передаёте в remaining_accounts. Любая другая учётная запись, принадлежащая CLMM, в remaining_accounts также обрабатывается. См. products/clmm/instructions.
  • Добавлен один код ошибки: 6052 LamportsCalculateError. Коды 6000–6051 не изменились.
  • CreateAmmConfig больше не копирует подписанта в owner / fund_owner. Новые конфигурации получают жёстко закодированные ключи protocol_fee_owner и fund_fee_owner. На мейннете это те же два ключа, которые уже хранятся на всех 21 существующих конфигурациях. Существующие учётные записи AmmConfig не затронуты, поэтому продолжайте читать поля из учётной записи.
  • Обновите свой IDL. Он добавляет один инструмент и один вариант ошибки, всего 39 инструментов и 53 ошибки.
  • Теперь вы можете поместить CPMM и CLMM в один крейт. Оба репозитория закрепляют anchor-lang / anchor-spl =1.0.2 на своих ветках chore/upgrade-anchor, поэтому одна программа может делать CPI в обе. См. sdk-api/rust-cpi.
  • Пакет TypeScript-клиента переименован. Набор тестов переходит с @coral-xyz/anchor 0.32.1 на @anchor-lang/core 1.0.2.

CollectExcessLamports

Шаг 1 SIMD-0437 активировался на мейннете 3 сентября 2026 года. Каждая учётная запись CLMM, созданная до шага, теперь переполнена, и только программа CLMM может перемещать лампорты из учётной записи, которой она владеет. Это охватывает хранилища пула, хранилища вознаграждения, PoolState, AmmConfig, ObservationState, TickArrayBitmapExtension и остальное. Инструмент принимает четыре фиксированные учётные записи, затем любое количество исходных учётных записей в remaining_accounts: Пул является органом подписания, а не глобальным PDA программы. CPMM подписывает с одним глобальным органом vault_and_lp_mint_auth_seed. Хранилища токенов CLMM принадлежат своему PoolState, поэтому один вызов может подписать только для пула, переданного в слот 2. Каждая исходная учётная запись программы токенов должна иметь этот пул в качестве своего органа: token_vault_0, token_vault_1 или одно из хранилищ вознаграждения пула. Учётная запись токена из другого пула или учётная запись токена пользователя не пройдёт проверку владельца программы токенов и отменит весь инструмент. Программа не пропускает её. Минты NFT позиций также не подлежат обработке, потому что их орган выпуска отозван при открытии позиции. Обрабатывайте пул за пулом. Инструмент делает два прохода, и этот порядок фиксирован:
  1. Сначала CPI программы токенов. Для каждого источника, принадлежащего SPL Token или Token-2022, учётная запись, не являющаяся нативной, получает WithdrawExcessLamports (дискриминант 38). Нативное хранилище wSOL получает раунд SyncNative → UnwrapLamports (дискриминант 45), который заканчивается проверкой того, что обёрнутый баланс равен его значению до синхронизации. Если это не так, вызов завершится с ошибкой LamportsCalculateError. Хранилище на стороне SOL сохраняет полную ликвидность, и ни один котировка свопа не изменяется при обработке.
  2. Прямые дебеты во вторую очередь. Проход 2 дебетует pool_state первым, затем каждый источник, принадлежащий программе CLMM, вплоть до rent.minimum_balance(data_len).
Источники, принадлежащие любой другой программе, молча пропускаются. Этот порядок двух проходов — это тот, который CPMM принял 2026-09-19. CLMM имеет его с первого выпуска. Если PDA дебетуется перед CPI, среда выполнения прерывается с UnbalancedInstruction, поэтому вызывающие могут передавать источники в любом порядке.
Проход, принадлежащий программе, не проверяет, какому пулу или пользователю принадлежит учётная запись. Любая учётная запись, принадлежащая программе CLMM, имеет право, включая некоторые, чья рента была оплачена пользователем: PersonalPositionState, LimitOrderState и TickArrayState. Только избыток выше минимума, освобождённого от ренты, перемещается. Учётная запись сохраняет свои данные и остаётся освобождённой от ренты. Когда позиция или ордер позже закрывается, программа возвращает любой баланс, который учётная запись держит в этот момент. После обработки этот баланс является текущим минимумом ренты.
Адреса кошельков указаны в reference/program-addresses.

CreateAmmConfig записывает фиксированных владельцев комиссии

До этого выпуска create_amm_config устанавливал оба поля владельца комиссии из подписанта вызова:
Теперь он записывает собственные константы программы:
CreateAmmConfig по-прежнему ограничен crate::admin::ID. До этого выпуска каждый новый уровень комиссии начинался с администратора в обоих полях и должен был быть повёрнут с помощью параметра UpdateAmmConfig 3 / 4. Теперь он начинается с операционных кошельков. На мейннете константы — это те же ключи, которые уже хранятся как owner / fund_owner на всех 21 существующих конфигурациях. Программа теперь записывает значение, которое операции раньше устанавливали вручную. Подписанты сбора не изменяются. CollectProtocolFee принимает amm_config.owner или crate::admin::ID, и CollectFundFee принимает amm_config.fund_owner или crate::admin::ID, как до, так и после этого выпуска. На девнете обе константы разрешаются в один и тот же ключ. См. reference/program-addresses.
Это не миграция. Каждый существующий AmmConfig сохраняет owner и fund_owner, которые у него уже есть. Читайте поля вместо того, чтобы жёстко кодировать либо константы, либо ключ администратора.

Изменения цепочки инструментов и зависимостей

Изменения Anchor 1.0 на сайтах вызовов CPI — это те же, которые интеграторы CPMM уже обработали. CpiContext::new принимает Pubkey программы вместо её AccountInfo, и Context имеет один параметр жизни вместо четырёх. В клиентском крейте RequestBuilder::instructions() теперь возвращает Vec<Instruction> без Result, и system_program переместился в solana-system-interface. См. sdk-api/rust-cpi. Детали системы сборки без эффекта в цепи:
  • Администратор локальной сети. Функция localnet больше не компилирует фиксированный тестовый ключ, поддерживаемый зафиксированным приспособлением. Вместо этого она читает администратора из переменной окружения CLMM_LOCALNET_ADMIN во время сборки, которую yarn test:local-admin устанавливает из вашего локального кошелька. Исключение .gitignore приспособления удалено.
  • Профиль выпуска. Дублирующийся блок [profile.release] в programs/amm/Cargo.toml был удалён. Cargo игнорирует [profile] вне корня рабочей области, поэтому блок корня уже был действующим, и panic = "abort" на уровне программы никогда не применялся.
  • Anchor.toml. seeds = false становится resolution = true плюс skip-lint = false, и устаревший URL [registry] удаляется.
  • Линты. programs/amm/Cargo.toml добавляет список разрешений [lints.rust] unexpected_cfgs для конфигов функций, которые выпускают макросы Anchor и Solana.
  • README. На этой ветке README по-прежнему говорит вам запустить rustup default 1.86.0 и avm install 0.32.1 из coral-xyz/anchor. Вместо этого следуйте Anchor.toml и solana-fundamentals/toolchain.

Что не изменилось

  • Каждый макет учётной записи. PoolState, AmmConfig, TickArrayState, TickArrayBitmapExtension, PersonalPositionState, ObservationState, LimitOrderState, DynamicFeeConfig, Permission и SupportMintAssociated сохраняют одинаковые размеры и смещения.
  • Коды ошибок 6000–6051.
  • Математика свопа, ликвидности, комиссии, динамической комиссии и лимитных ордеров. CollectExcessLamports перемещает лампорты, которые никогда не были частью резервов пула.
  • Замораживание NFT позиции из 2026-08-17, включая правило пула как органа замораживания и путь оттаивания ClosePosition.
  • spl_memo. Ограничение программы memo в DecreaseLiquidityV2 переместилось с spl_memo::id() на anchor_spl::memo::ID. Оба называют один и тот же адрес; anchor-spl просто переименовал экспорт.
  • ID программы.

Обновлённые страницы

  • products/clmm/instructions: баннер обновления; раздел CollectExcessLamports со списком учётных записей, таблицей двухпроходной отправки и областью действия для каждого пула; строки инвентаря, ограничения администратора и матрицы изменения состояния; примечание о владельце комиссии на CollectProtocolFee / CollectFundFee.
  • products/clmm/accounts: комментарии владельца AmmConfig и примечание о том, что записывает CreateAmmConfig.
  • products/clmm/code-demos: баннер версии и скелет Rust CPI перемещены на Anchor 1.0.
  • products/cpmm/code-demos: примечание “не может делиться крейтом с CLMM” удалено.
  • reference/error-codes: 6052 задокументирована.
  • reference/program-addresses: новый раздел “CLMM fee-owner wallets”; CLMM добавлен в “Excess-lamports collection wallets”.
  • sdk-api/rust-cpi, sdk-api/anchor-idl, solana-fundamentals/toolchain: закрепления Anchor 1.0 для raydium-clmm, и предупреждение о разделении крейтов снято.
  • solana-fundamentals/rent-and-reclaimable-rent: CLMM добавлен в “What the Raydium programs sweep on their own side”.
  • security/admin-and-multisig: роль сборщика избыточных лампортов CLMM.
  • protocol-overview/versions-and-migration: пункт истории обновления CLMM.