#solana #finance #blockchain

macro canonical-account-prefixes

A lib to make canonical constants in Solana and Anchor

1 unstable release

0.1.0 Aug 24, 2024

#238 in #finance

MIT license

9KB
99 lines

Canonical account prefixes

Logo

Crates.io Docs.rs

Generates a const prefix for a given account name. This is useful for generating a prefix for a given account xname that can be used in a Solana Program.

Installation

Add the following to your Cargo.toml:

[dependencies]
canonical_account_prefixes = "0.1.0"

If you're using anchor, you can enable the anchor feature:

[dependencies]
canonical_account_prefixes = { version = "0.1.0", features = ["anchor"] }

Usage

The prefix! macro

use canonical_account_prefixes::prefix;

prefix!(OTHER)

This generates the following const:

#[const] // If feature=anchor is enabled
pub const OTHER: [u8; 5] = [111, 116, 104, 101, 114];

Which is the equivalent of writing:

#[const] // If feature=anchor is enabled
pub const OTHER: [u8; 5] = *b"other";

That way you don't have to specify the string length.

The prefix_account attribute macro

use canonical_account_prefixes::prefix_account;

#[prefix_account]
pub struct Other {
    pub data: [u8; 32],
}

Which is the equivalent of writing:

pub struct Other {
    pub data: [u8; 32],
}
#[const] // If feature=anchor is enabled
pub const OTHER: [u8; 5] = *b"other";

For account names in UpperCamelCase, the macro will do the following:

#[prefix_account]
pub struct UpperCamelCase {
    pub data: [u8; 32],
}

Will generate:

pub struct UpperCamelCase {
    pub data: [u8; 32],
}
#[const] // If feature=anchor is enabled
pub const UPPER_CAMEL_CASE: [u8; 16] = *b"upper_camel_case";

License

You can use this code under the MIT license. See LICENSE for more details.

Dependencies

~250–700KB
~17K SLoC