<aside> 💡
目前总有utils/macros.rs,解释一下macros在anchor中的使用原因、使用方法
</aside>
我来解释一下Rust宏(macros)在Anchor项目中的作用和使用方法。
// gen_auth_seeds! 宏用于生成市场授权的seeds
#[macro_export]
macro_rules! gen_auth_seeds {
($bump: expr) => {
&[
$crate::utils::seeds::SEED_MARKET_AUTH as &[u8],
$crate::ID.as_ref(),
&[$bump],
]
};
}
使用方法示例:
let seeds = gen_auth_seeds!(bump);
let signer = Pubkey::create_program_address(seeds, program_id)?;
PDA Seeds生成
// 定义宏
#[macro_export]
macro_rules! vault_seeds {
($mint:expr) => {
&[b"vault", $mint.as_ref()]
};
}
// 使用宏
let vault = Pubkey::find_program_address(
vault_seeds!(mint_address),
program_id
);
错误处理
#[macro_export]
macro_rules! check {
($cond:expr, $err:expr) => {
if !($cond) {
return Err($err.into());
}
};
}