initialize_settings
Create a new Settings account for Range verification
Creates a new Settings account that stores verification configuration. The caller becomes the admin of the account.
Signature
Section titled “Signature”pub fn initialize_settings( ctx: Context<InitializeSettings>, range_signer: Pubkey, window_size: u64,) -> Result<()>Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
range_signer | Pubkey | Public key of the trusted backend signer |
window_size | u64 | Time window (seconds) for timestamp validation |
Accounts
Section titled “Accounts”| Account | Type | Description |
|---|---|---|
admin | Signer | The admin who will own this Settings account |
settings | Account<Settings> | PDA to be initialized (derived from admin) |
system_program | Program<System> | System program for account creation |
PDA Derivation
Section titled “PDA Derivation”const [settingsPda] = PublicKey.findProgramAddressSync( [Buffer.from("settings"), admin.toBuffer()], RANGE_PROGRAM_ID);TypeScript
Section titled “TypeScript”import { buildInitializeSettingsInstruction } from './codama-ts-range-custom';
const instruction = await buildInitializeSettingsInstruction({ admin: walletPublicKey, rangeSigner: backendSignerPublicKey, windowSize: 60n, // 60 seconds});
// Sign and send transactionconst transaction = new Transaction().add(instruction);await sendTransaction(transaction);Anchor
Section titled “Anchor”await program.methods .initializeSettings(rangeSigner, new BN(60)) .accounts({ admin: wallet.publicKey, settings: settingsPda, systemProgram: SystemProgram.programId, }) .rpc();Behavior
Section titled “Behavior”- Derives Settings PDA from
["settings", admin.key()] - Creates the Settings account with initial values
- Sets caller as admin
- Stores provided
range_signerandwindow_size
Errors
Section titled “Errors”| Error | Cause |
|---|---|
| Account already exists | Settings already initialized for this admin |
| Insufficient funds | Admin doesn’t have enough SOL for rent |
Example
Section titled “Example”import { Connection, Keypair, Transaction } from '@solana/web3.js';import { buildInitializeSettingsInstruction } from './codama-ts-range-custom';
async function initializeSettings() { const connection = new Connection('https://api.devnet.solana.com');
// Admin keypair (you) const admin = Keypair.generate();
// Backend signer keypair (keep this secure on your backend) const rangeSigner = Keypair.generate();
const instruction = await buildInitializeSettingsInstruction({ admin: admin.publicKey, rangeSigner: rangeSigner.publicKey, windowSize: 60n, // 60 second validity window });
const transaction = new Transaction().add(instruction); transaction.feePayer = admin.publicKey; transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
transaction.sign(admin); const signature = await connection.sendRawTransaction(transaction.serialize());
console.log('Settings initialized:', signature); console.log('Save your range_signer private key securely!');
return { admin, rangeSigner };}See Also
Section titled “See Also”- Settings Account - Understanding the Settings structure
- update_settings - Modifying settings
- transfer_admin - Transferring ownership