From e3658a901de08c48484f2aed0c90476204107c73 Mon Sep 17 00:00:00 2001 From: Loris Leiva Date: Tue, 9 Jun 2026 11:15:01 +0100 Subject: [PATCH] Rename feature gate program to drop the solana prefix --- .../{solanaFeatureGate.ts => featureGate.ts} | 30 +++++------- clients/js/src/generated/errors/index.ts | 2 +- .../instructions/revokePendingActivation.ts | 11 ++--- .../{solanaFeatureGate.ts => featureGate.ts} | 48 +++++++++---------- clients/js/src/generated/programs/index.ts | 2 +- clients/js/test/_setup.ts | 13 ++--- clients/js/test/example.test.ts | 2 +- ...solana_feature_gate.rs => feature_gate.rs} | 6 +-- clients/rust/src/generated/errors/mod.rs | 4 +- .../instructions/revoke_pending_activation.rs | 4 +- clients/rust/src/generated/programs.rs | 4 +- clients/rust/src/lib.rs | 2 +- codama.mjs | 2 +- 13 files changed, 57 insertions(+), 73 deletions(-) rename clients/js/src/generated/errors/{solanaFeatureGate.ts => featureGate.ts} (54%) rename clients/js/src/generated/programs/{solanaFeatureGate.ts => featureGate.ts} (64%) rename clients/rust/src/generated/errors/{solana_feature_gate.rs => feature_gate.rs} (76%) diff --git a/clients/js/src/generated/errors/solanaFeatureGate.ts b/clients/js/src/generated/errors/featureGate.ts similarity index 54% rename from clients/js/src/generated/errors/solanaFeatureGate.ts rename to clients/js/src/generated/errors/featureGate.ts index 40a13aa..83deae9 100644 --- a/clients/js/src/generated/errors/solanaFeatureGate.ts +++ b/clients/js/src/generated/errors/featureGate.ts @@ -12,38 +12,30 @@ import { type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM, type SolanaError, } from '@solana/kit'; -import { SOLANA_FEATURE_GATE_PROGRAM_ADDRESS } from '../programs'; +import { FEATURE_GATE_PROGRAM_ADDRESS } from '../programs'; /** FeatureAlreadyActivated: Feature already activated */ -export const SOLANA_FEATURE_GATE_ERROR__FEATURE_ALREADY_ACTIVATED = 0x0; // 0 +export const FEATURE_GATE_ERROR__FEATURE_ALREADY_ACTIVATED = 0x0; // 0 -export type SolanaFeatureGateError = - typeof SOLANA_FEATURE_GATE_ERROR__FEATURE_ALREADY_ACTIVATED; +export type FeatureGateError = + typeof FEATURE_GATE_ERROR__FEATURE_ALREADY_ACTIVATED; -let solanaFeatureGateErrorMessages: - | Record - | undefined; +let featureGateErrorMessages: Record | undefined; if (process.env['NODE_ENV'] !== 'production') { - solanaFeatureGateErrorMessages = { - [SOLANA_FEATURE_GATE_ERROR__FEATURE_ALREADY_ACTIVATED]: `Feature already activated`, + featureGateErrorMessages = { + [FEATURE_GATE_ERROR__FEATURE_ALREADY_ACTIVATED]: `Feature already activated`, }; } -export function getSolanaFeatureGateErrorMessage( - code: SolanaFeatureGateError -): string { +export function getFeatureGateErrorMessage(code: FeatureGateError): string { if (process.env['NODE_ENV'] !== 'production') { - return ( - solanaFeatureGateErrorMessages as Record - )[code]; + return (featureGateErrorMessages as Record)[code]; } return 'Error message not available in production bundles.'; } -export function isSolanaFeatureGateError< - TProgramErrorCode extends SolanaFeatureGateError, ->( +export function isFeatureGateError( error: unknown, transactionMessage: { instructions: Record; @@ -54,7 +46,7 @@ export function isSolanaFeatureGateError< return isProgramError( error, transactionMessage, - SOLANA_FEATURE_GATE_PROGRAM_ADDRESS, + FEATURE_GATE_PROGRAM_ADDRESS, code ); } diff --git a/clients/js/src/generated/errors/index.ts b/clients/js/src/generated/errors/index.ts index 2becd55..3f7ea85 100644 --- a/clients/js/src/generated/errors/index.ts +++ b/clients/js/src/generated/errors/index.ts @@ -6,4 +6,4 @@ * @see https://github.com/codama-idl/codama */ -export * from './solanaFeatureGate'; +export * from './featureGate'; diff --git a/clients/js/src/generated/instructions/revokePendingActivation.ts b/clients/js/src/generated/instructions/revokePendingActivation.ts index 4dfbc5a..e30b32c 100644 --- a/clients/js/src/generated/instructions/revokePendingActivation.ts +++ b/clients/js/src/generated/instructions/revokePendingActivation.ts @@ -34,7 +34,7 @@ import { getAccountMetaFactory, type ResolvedInstructionAccount, } from '@solana/kit/program-client-core'; -import { SOLANA_FEATURE_GATE_PROGRAM_ADDRESS } from '../programs'; +import { FEATURE_GATE_PROGRAM_ADDRESS } from '../programs'; export const REVOKE_PENDING_ACTIVATION_DISCRIMINATOR = 0; @@ -43,7 +43,7 @@ export function getRevokePendingActivationDiscriminatorBytes(): ReadonlyUint8Arr } export type RevokePendingActivationInstruction< - TProgram extends string = typeof SOLANA_FEATURE_GATE_PROGRAM_ADDRESS, + TProgram extends string = typeof FEATURE_GATE_PROGRAM_ADDRESS, TAccountFeature extends string | AccountMeta = string, TAccountIncinerator extends string | AccountMeta = string, TAccountSystemProgram extends string | AccountMeta = @@ -112,7 +112,7 @@ export function getRevokePendingActivationInstruction< TAccountFeature extends string, TAccountIncinerator extends string, TAccountSystemProgram extends string, - TProgramAddress extends Address = typeof SOLANA_FEATURE_GATE_PROGRAM_ADDRESS, + TProgramAddress extends Address = typeof FEATURE_GATE_PROGRAM_ADDRESS, >( input: RevokePendingActivationInput< TAccountFeature, @@ -127,8 +127,7 @@ export function getRevokePendingActivationInstruction< TAccountSystemProgram > { // Program address. - const programAddress = - config?.programAddress ?? SOLANA_FEATURE_GATE_PROGRAM_ADDRESS; + const programAddress = config?.programAddress ?? FEATURE_GATE_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { @@ -165,7 +164,7 @@ export function getRevokePendingActivationInstruction< } export type ParsedRevokePendingActivationInstruction< - TProgram extends string = typeof SOLANA_FEATURE_GATE_PROGRAM_ADDRESS, + TProgram extends string = typeof FEATURE_GATE_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; diff --git a/clients/js/src/generated/programs/solanaFeatureGate.ts b/clients/js/src/generated/programs/featureGate.ts similarity index 64% rename from clients/js/src/generated/programs/solanaFeatureGate.ts rename to clients/js/src/generated/programs/featureGate.ts index 3b8b539..e301b59 100644 --- a/clients/js/src/generated/programs/solanaFeatureGate.ts +++ b/clients/js/src/generated/programs/featureGate.ts @@ -32,41 +32,41 @@ import { type RevokePendingActivationInput, } from '../instructions'; -export const SOLANA_FEATURE_GATE_PROGRAM_ADDRESS = +export const FEATURE_GATE_PROGRAM_ADDRESS = 'Feature111111111111111111111111111111111111' as Address<'Feature111111111111111111111111111111111111'>; -export enum SolanaFeatureGateInstruction { +export enum FeatureGateInstruction { RevokePendingActivation, } -export function identifySolanaFeatureGateInstruction( +export function identifyFeatureGateInstruction( instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array -): SolanaFeatureGateInstruction { +): FeatureGateInstruction { const data = 'data' in instruction ? instruction.data : instruction; if (containsBytes(data, getU8Encoder().encode(0), 0)) { - return SolanaFeatureGateInstruction.RevokePendingActivation; + return FeatureGateInstruction.RevokePendingActivation; } throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, - { instructionData: data, programName: 'solanaFeatureGate' } + { instructionData: data, programName: 'featureGate' } ); } -export type ParsedSolanaFeatureGateInstruction< +export type ParsedFeatureGateInstruction< TProgram extends string = 'Feature111111111111111111111111111111111111', > = { - instructionType: SolanaFeatureGateInstruction.RevokePendingActivation; + instructionType: FeatureGateInstruction.RevokePendingActivation; } & ParsedRevokePendingActivationInstruction; -export function parseSolanaFeatureGateInstruction( +export function parseFeatureGateInstruction( instruction: Instruction & InstructionWithData -): ParsedSolanaFeatureGateInstruction { - const instructionType = identifySolanaFeatureGateInstruction(instruction); +): ParsedFeatureGateInstruction { + const instructionType = identifyFeatureGateInstruction(instruction); switch (instructionType) { - case SolanaFeatureGateInstruction.RevokePendingActivation: { + case FeatureGateInstruction.RevokePendingActivation: { assertIsInstructionWithAccounts(instruction); return { - instructionType: SolanaFeatureGateInstruction.RevokePendingActivation, + instructionType: FeatureGateInstruction.RevokePendingActivation, ...parseRevokePendingActivationInstruction(instruction), }; } @@ -75,34 +75,30 @@ export function parseSolanaFeatureGateInstruction( SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { instructionType: instructionType as string, - programName: 'solanaFeatureGate', + programName: 'featureGate', } ); } } -export type SolanaFeatureGatePlugin = { - instructions: SolanaFeatureGatePluginInstructions; -}; +export type FeatureGatePlugin = { instructions: FeatureGatePluginInstructions }; -export type SolanaFeatureGatePluginInstructions = { +export type FeatureGatePluginInstructions = { revokePendingActivation: ( input: RevokePendingActivationInput ) => ReturnType & SelfPlanAndSendFunctions; }; -export type SolanaFeatureGatePluginRequirements = - ClientWithTransactionPlanning & ClientWithTransactionSending; +export type FeatureGatePluginRequirements = ClientWithTransactionPlanning & + ClientWithTransactionSending; -export function solanaFeatureGateProgram() { - return ( +export function featureGateProgram() { + return ( client: T - ): Omit & { - solanaFeatureGate: SolanaFeatureGatePlugin; - } => { + ): Omit & { featureGate: FeatureGatePlugin } => { return extendClient(client, { - solanaFeatureGate: { + featureGate: { instructions: { revokePendingActivation: (input) => addSelfPlanAndSendFunctions( diff --git a/clients/js/src/generated/programs/index.ts b/clients/js/src/generated/programs/index.ts index 2becd55..3f7ea85 100644 --- a/clients/js/src/generated/programs/index.ts +++ b/clients/js/src/generated/programs/index.ts @@ -6,4 +6,4 @@ * @see https://github.com/codama-idl/codama */ -export * from './solanaFeatureGate'; +export * from './featureGate'; diff --git a/clients/js/test/_setup.ts b/clients/js/test/_setup.ts index f1298e5..6730645 100644 --- a/clients/js/test/_setup.ts +++ b/clients/js/test/_setup.ts @@ -4,12 +4,9 @@ import { createClient, lamports } from '@solana/kit'; import { litesvm } from '@solana/kit-plugin-litesvm'; import { airdropSigner, generatedSigner } from '@solana/kit-plugin-signer'; -import { - SOLANA_FEATURE_GATE_PROGRAM_ADDRESS, - solanaFeatureGateProgram, -} from '../src'; +import { FEATURE_GATE_PROGRAM_ADDRESS, featureGateProgram } from '../src'; -const SOLANA_FEATURE_GATE_BINARY_PATH = path.resolve( +const FEATURE_GATE_BINARY_PATH = path.resolve( __dirname, '..', '..', @@ -29,10 +26,10 @@ export const createTestClient = () => { // compiled `.so` file. This must run after the `litesvm()` plugin so // that `client.svm` is available. client.svm.addProgramFromFile( - SOLANA_FEATURE_GATE_PROGRAM_ADDRESS, - SOLANA_FEATURE_GATE_BINARY_PATH + FEATURE_GATE_PROGRAM_ADDRESS, + FEATURE_GATE_BINARY_PATH ); return client; }) - .use(solanaFeatureGateProgram()); + .use(featureGateProgram()); }; diff --git a/clients/js/test/example.test.ts b/clients/js/test/example.test.ts index 78e4d97..b570522 100644 --- a/clients/js/test/example.test.ts +++ b/clients/js/test/example.test.ts @@ -7,7 +7,7 @@ it('sets up a LiteSVM client with the feature-gate program', async () => { const client = await createTestClient(); // Then the client exposes the feature-gate program plugin. - expect(client.solanaFeatureGate).toBeDefined(); + expect(client.featureGate).toBeDefined(); // And the payer was funded via LiteSVM. const { value: balance } = await client.rpc diff --git a/clients/rust/src/generated/errors/solana_feature_gate.rs b/clients/rust/src/generated/errors/feature_gate.rs similarity index 76% rename from clients/rust/src/generated/errors/solana_feature_gate.rs rename to clients/rust/src/generated/errors/feature_gate.rs index 46163e2..0a00718 100644 --- a/clients/rust/src/generated/errors/solana_feature_gate.rs +++ b/clients/rust/src/generated/errors/feature_gate.rs @@ -7,14 +7,14 @@ use {num_derive::FromPrimitive, thiserror::Error}; #[derive(Clone, Debug, Eq, Error, FromPrimitive, PartialEq)] -pub enum SolanaFeatureGateError { +pub enum FeatureGateError { /// 0 - Feature already activated #[error("Feature already activated")] FeatureAlreadyActivated = 0x0, } -impl From for solana_program_error::ProgramError { - fn from(e: SolanaFeatureGateError) -> Self { +impl From for solana_program_error::ProgramError { + fn from(e: FeatureGateError) -> Self { solana_program_error::ProgramError::Custom(e as u32) } } diff --git a/clients/rust/src/generated/errors/mod.rs b/clients/rust/src/generated/errors/mod.rs index 28ec129..1512d47 100644 --- a/clients/rust/src/generated/errors/mod.rs +++ b/clients/rust/src/generated/errors/mod.rs @@ -4,6 +4,6 @@ //! //! -pub(crate) mod solana_feature_gate; +pub(crate) mod feature_gate; -pub use self::solana_feature_gate::SolanaFeatureGateError; +pub use self::feature_gate::FeatureGateError; diff --git a/clients/rust/src/generated/instructions/revoke_pending_activation.rs b/clients/rust/src/generated/instructions/revoke_pending_activation.rs index 3bf987d..eacd1a4 100644 --- a/clients/rust/src/generated/instructions/revoke_pending_activation.rs +++ b/clients/rust/src/generated/instructions/revoke_pending_activation.rs @@ -45,7 +45,7 @@ impl RevokePendingActivation { .unwrap(); solana_instruction::Instruction { - program_id: crate::SOLANA_FEATURE_GATE_ID, + program_id: crate::FEATURE_GATE_ID, accounts, data, } @@ -223,7 +223,7 @@ impl<'a, 'b> RevokePendingActivationCpi<'a, 'b> { .unwrap(); let instruction = solana_instruction::Instruction { - program_id: crate::SOLANA_FEATURE_GATE_ID, + program_id: crate::FEATURE_GATE_ID, accounts, data, }; diff --git a/clients/rust/src/generated/programs.rs b/clients/rust/src/generated/programs.rs index 5879d39..f58d55d 100644 --- a/clients/rust/src/generated/programs.rs +++ b/clients/rust/src/generated/programs.rs @@ -6,5 +6,5 @@ use solana_address::{address, Address}; -/// `solana_feature_gate` program ID. -pub const SOLANA_FEATURE_GATE_ID: Address = address!("Feature111111111111111111111111111111111111"); +/// `feature_gate` program ID. +pub const FEATURE_GATE_ID: Address = address!("Feature111111111111111111111111111111111111"); diff --git a/clients/rust/src/lib.rs b/clients/rust/src/lib.rs index d9f4b85..c6e8fa8 100644 --- a/clients/rust/src/lib.rs +++ b/clients/rust/src/lib.rs @@ -1,4 +1,4 @@ #[allow(deprecated)] // needed until Codama stops implementing deprecated traits mod generated; -pub use generated::{programs::SOLANA_FEATURE_GATE_ID as ID, *}; +pub use generated::{programs::FEATURE_GATE_ID as ID, *}; diff --git a/codama.mjs b/codama.mjs index c8d35dc..ad0bec0 100644 --- a/codama.mjs +++ b/codama.mjs @@ -10,7 +10,7 @@ export default { before: [ { from: 'codama#updateProgramsVisitor', - args: [{ solanaFeatureGateProgram: { name: 'solanaFeatureGate' } }], + args: [{ solanaFeatureGateProgram: { name: 'featureGate' } }], }, ], scripts: {