mirror of
https://github.com/d0zingcat/ore.git
synced 2026-05-14 15:10:13 +00:00
account discriminator macro
This commit is contained in:
6
Cargo.lock
generated
6
Cargo.lock
generated
@@ -1286,7 +1286,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
|
||||
|
||||
[[package]]
|
||||
name = "ore-api"
|
||||
version = "2.1.6"
|
||||
version = "2.1.7"
|
||||
dependencies = [
|
||||
"array-const-fn-init",
|
||||
"bytemuck",
|
||||
@@ -1304,7 +1304,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ore-program"
|
||||
version = "2.1.6"
|
||||
version = "2.1.7"
|
||||
dependencies = [
|
||||
"drillx",
|
||||
"mpl-token-metadata",
|
||||
@@ -1318,7 +1318,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "ore-utils"
|
||||
version = "2.1.6"
|
||||
version = "2.1.7"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"solana-program",
|
||||
|
||||
@@ -3,7 +3,7 @@ resolver = "2"
|
||||
members = ["api", "program", "utils"]
|
||||
|
||||
[workspace.package]
|
||||
version = "2.1.6"
|
||||
version = "2.1.7"
|
||||
edition = "2021"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://ore.supply"
|
||||
@@ -19,8 +19,8 @@ const-crypto = "0.1.0"
|
||||
drillx = { version = "2.0.0", features = ["solana"] }
|
||||
mpl-token-metadata = "4.1.2"
|
||||
num_enum = "0.7.2"
|
||||
ore-api = { path = "api", version = "2.1.6" }
|
||||
ore-utils = { path = "utils", features = ["spl"], version = "2.1.6" }
|
||||
ore-api = { path = "api", version = "2.1.7" }
|
||||
ore-utils = { path = "utils", features = ["spl"], version = "2.1.7" }
|
||||
solana-program = "^1.18"
|
||||
spl-token = { version = "^4", features = ["no-entrypoint"] }
|
||||
spl-associated-token-account = { version = "^2.3", features = [ "no-entrypoint" ] }
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
use bytemuck::{Pod, Zeroable};
|
||||
use ore_utils::*;
|
||||
use solana_program::pubkey::Pubkey;
|
||||
|
||||
use crate::consts::BUS;
|
||||
|
||||
use super::AccountDiscriminator;
|
||||
|
||||
@@ -22,10 +25,9 @@ pub struct Bus {
|
||||
pub top_balance: u64,
|
||||
}
|
||||
|
||||
impl Discriminator for Bus {
|
||||
fn discriminator() -> u8 {
|
||||
AccountDiscriminator::Bus.into()
|
||||
}
|
||||
/// Fetch the PDA of a bus account.
|
||||
pub fn bus_pda(id: u64) -> (Pubkey, u8) {
|
||||
Pubkey::find_program_address(&[BUS, id.to_le_bytes().as_slice()], &crate::id())
|
||||
}
|
||||
|
||||
account!(Bus);
|
||||
account!(AccountDiscriminator, Bus);
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
use bytemuck::{Pod, Zeroable};
|
||||
use ore_utils::{account, Discriminator};
|
||||
use ore_utils::*;
|
||||
use solana_program::pubkey::Pubkey;
|
||||
|
||||
use crate::consts::CONFIG;
|
||||
|
||||
use super::AccountDiscriminator;
|
||||
|
||||
@@ -20,10 +23,9 @@ pub struct Config {
|
||||
pub top_balance: u64,
|
||||
}
|
||||
|
||||
impl Discriminator for Config {
|
||||
fn discriminator() -> u8 {
|
||||
AccountDiscriminator::Config.into()
|
||||
}
|
||||
/// Derive the PDA of the config account.
|
||||
pub fn config_pda() -> (Pubkey, u8) {
|
||||
Pubkey::find_program_address(&[CONFIG], &crate::id())
|
||||
}
|
||||
|
||||
account!(Config);
|
||||
account!(AccountDiscriminator, Config);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
use bytemuck::{Pod, Zeroable};
|
||||
use ore_utils::{account, Discriminator};
|
||||
use ore_utils::*;
|
||||
use solana_program::pubkey::Pubkey;
|
||||
|
||||
use crate::consts::PROOF;
|
||||
|
||||
use super::AccountDiscriminator;
|
||||
|
||||
/// Proof accounts track a miner's current hash, claimable rewards, and lifetime stats.
|
||||
@@ -37,10 +39,9 @@ pub struct Proof {
|
||||
pub total_rewards: u64,
|
||||
}
|
||||
|
||||
impl Discriminator for Proof {
|
||||
fn discriminator() -> u8 {
|
||||
AccountDiscriminator::Proof.into()
|
||||
}
|
||||
/// Derive the PDA of a proof account.
|
||||
pub fn proof_pda(authority: Pubkey) -> (Pubkey, u8) {
|
||||
Pubkey::find_program_address(&[PROOF, authority.as_ref()], &crate::id())
|
||||
}
|
||||
|
||||
account!(Proof);
|
||||
account!(AccountDiscriminator, Proof);
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
use bytemuck::{Pod, Zeroable};
|
||||
use ore_utils::{account, Discriminator};
|
||||
use ore_utils::*;
|
||||
use solana_program::pubkey::Pubkey;
|
||||
|
||||
use crate::consts::TREASURY;
|
||||
|
||||
use super::AccountDiscriminator;
|
||||
|
||||
@@ -9,10 +12,9 @@ use super::AccountDiscriminator;
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
|
||||
pub struct Treasury {}
|
||||
|
||||
impl Discriminator for Treasury {
|
||||
fn discriminator() -> u8 {
|
||||
AccountDiscriminator::Treasury.into()
|
||||
}
|
||||
/// Derive the PDA of the treasury account.
|
||||
pub fn treasury_pda() -> (Pubkey, u8) {
|
||||
Pubkey::find_program_address(&[TREASURY], &crate::id())
|
||||
}
|
||||
|
||||
account!(Treasury);
|
||||
account!(AccountDiscriminator, Treasury);
|
||||
|
||||
@@ -54,9 +54,15 @@ macro_rules! impl_instruction_from_bytes {
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! account {
|
||||
($struct_name:ident) => {
|
||||
($discriminator_name:ident, $struct_name:ident) => {
|
||||
$crate::impl_to_bytes!($struct_name);
|
||||
$crate::impl_account_from_bytes!($struct_name);
|
||||
|
||||
impl $crate::Discriminator for $struct_name {
|
||||
fn discriminator() -> u8 {
|
||||
$discriminator_name::$struct_name.into()
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user