Skip to content

Commit

Permalink
add tokens/pda-mint-authority/steel (#189)
Browse files Browse the repository at this point in the history
  • Loading branch information
Perelyn-sama authored Jan 4, 2025
1 parent 52b3a69 commit 24499bb
Show file tree
Hide file tree
Showing 24 changed files with 2,774 additions and 0 deletions.
2 changes: 2 additions & 0 deletions tokens/pda-mint-authority/steel/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
target
test-ledger
27 changes: 27 additions & 0 deletions tokens/pda-mint-authority/steel/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[workspace]
resolver = "2"
members = ["api", "program"]

[workspace.package]
version = "0.1.0"
edition = "2021"
license = "Apache-2.0"
homepage = ""
documentation = ""
repository = ""
readme = "./README.md"
keywords = ["solana"]

[workspace.dependencies]
pda-mint-authority-api = { path = "./api", version = "0.1.0" }
bytemuck = "1.14"
num_enum = "0.7"
solana-program = "1.18"
steel = { version = "2.0", features = ["spl"] }
thiserror = "1.0"
mpl-token-metadata = { version = "4.1.2" }
spl-token = "^4"
const-crypto = "0.1.0"
spl-associated-token-account = { version = "^2.3", features = [
"no-entrypoint",
] }
22 changes: 22 additions & 0 deletions tokens/pda-mint-authority/steel/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Steel

**Steel** is a ...

## API
- [`Consts`](api/src/consts.rs) – Program constants.
- [`Error`](api/src/error.rs) – Custom program errors.
- [`Event`](api/src/event.rs) – Custom program events.
- [`Instruction`](api/src/instruction.rs) – Declared instructions.

## Instructions
- [`Hello`](program/src/hello.rs) – Hello ...

## State
- [`User`](api/src/state/user.rs) – User ...

## Tests

To run the test suit, use the Solana toolchain:
```
cargo test-sbf
```
15 changes: 15 additions & 0 deletions tokens/pda-mint-authority/steel/api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[package]
name = "pda-mint-authority-api"
version = "0.1.0"
edition = "2021"

[dependencies]
bytemuck.workspace = true
num_enum.workspace = true
solana-program.workspace = true
steel.workspace = true
thiserror.workspace = true
spl-token.workspace = true
mpl-token-metadata.workspace = true
const-crypto.workspace = true
spl-associated-token-account.workspace = true
5 changes: 5 additions & 0 deletions tokens/pda-mint-authority/steel/api/src/consts.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/// The seed of the mint authority account PDA.
pub const MINT_AUTHORITY: &[u8] = b"mint_authority";

/// The seed of the metadata account PDA.
pub const METADATA: &[u8] = b"metadata";
31 changes: 31 additions & 0 deletions tokens/pda-mint-authority/steel/api/src/instruction.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use steel::*;

#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, TryFromPrimitive)]
pub enum SteelInstruction {
Init = 0,
Create = 1,
Mint = 2,
}

#[repr(C)]
#[derive(Clone, Copy, Debug, Pod, Zeroable)]
pub struct Init {}

#[repr(C)]
#[derive(Clone, Copy, Debug, Pod, Zeroable)]
pub struct Create {
pub token_name: [u8; 32],
pub token_symbol: [u8; 8],
pub token_uri: [u8; 64],
}

#[repr(C)]
#[derive(Clone, Copy, Debug, Pod, Zeroable)]
pub struct Mint {
pub amount: [u8; 8],
}

instruction!(SteelInstruction, Init);
instruction!(SteelInstruction, Create);
instruction!(SteelInstruction, Mint);
16 changes: 16 additions & 0 deletions tokens/pda-mint-authority/steel/api/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
pub mod consts;
pub mod instruction;
pub mod sdk;
pub mod state;

pub mod prelude {
pub use crate::consts::*;
pub use crate::instruction::*;
pub use crate::sdk::*;
pub use crate::state::*;
}

use steel::*;

// TODO Set program id
declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");
76 changes: 76 additions & 0 deletions tokens/pda-mint-authority/steel/api/src/sdk.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
use steel::*;

use crate::prelude::*;

pub fn init(payer: Pubkey) -> Instruction {
let mint_authority_pda = mint_authority_pda();

Instruction {
program_id: crate::ID,
accounts: vec![
AccountMeta::new(mint_authority_pda.0, false),
AccountMeta::new(payer, false),
AccountMeta::new_readonly(system_program::ID, false),
],
data: Init {}.to_bytes(),
}
}

pub fn create(
payer: Pubkey,
mint: Pubkey,
token_name: [u8; 32],
token_symbol: [u8; 8],
token_uri: [u8; 64],
) -> Instruction {
let metadata_pda = Pubkey::find_program_address(
&[METADATA, mpl_token_metadata::ID.as_ref(), mint.as_ref()],
&mpl_token_metadata::ID,
);
let mint_authority_pda = mint_authority_pda();

Instruction {
program_id: crate::ID,
accounts: vec![
AccountMeta::new(mint, true),
AccountMeta::new(mint_authority_pda.0, false),
AccountMeta::new(metadata_pda.0, false),
AccountMeta::new(payer, true),
AccountMeta::new_readonly(system_program::ID, false),
AccountMeta::new_readonly(spl_token::ID, false),
AccountMeta::new_readonly(mpl_token_metadata::ID, false),
AccountMeta::new_readonly(sysvar::rent::ID, false),
],
data: Create {
token_name,
token_symbol,
token_uri,
}
.to_bytes(),
}
}
pub fn mint(
payer: Pubkey,
mint: Pubkey,
associated_token_account: Pubkey,
amount: u64,
) -> Instruction {
let mint_authority_pda = mint_authority_pda();

Instruction {
program_id: crate::ID,
accounts: vec![
AccountMeta::new(payer, true),
AccountMeta::new(mint, false),
AccountMeta::new(associated_token_account, false),
AccountMeta::new(mint_authority_pda.0, false),
AccountMeta::new_readonly(spl_token::ID, false),
AccountMeta::new_readonly(spl_associated_token_account::ID, false),
AccountMeta::new_readonly(system_program::ID, false),
],
data: Mint {
amount: amount.to_le_bytes(),
}
.to_bytes(),
}
}
11 changes: 11 additions & 0 deletions tokens/pda-mint-authority/steel/api/src/state/mint_authority.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use steel::*;

use super::SteelAccount;

#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable)]
pub struct MintAuthorityPda {
pub bump: u8,
}

account!(SteelAccount, MintAuthorityPda);
18 changes: 18 additions & 0 deletions tokens/pda-mint-authority/steel/api/src/state/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
mod mint_authority;

pub use mint_authority::*;

use steel::*;

use crate::consts::*;

#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
pub enum SteelAccount {
MintAuthorityPda = 0,
}

/// Fetch PDA of the mint authority account.
pub fn mint_authority_pda() -> (Pubkey, u8) {
Pubkey::find_program_address(&[MINT_AUTHORITY], &crate::id())
}
8 changes: 8 additions & 0 deletions tokens/pda-mint-authority/steel/cicd.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/bash

# This script is for quick building & deploying of the program.
# It also serves as a reference for the commands used for building & deploying Solana programs.
# Run this bad boy with "bash cicd.sh" or "./cicd.sh"

cargo build-sbf --manifest-path=./program/Cargo.toml
solana program deploy ./program/target/deploy/program.so
28 changes: 28 additions & 0 deletions tokens/pda-mint-authority/steel/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"scripts": {
"test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/tests.ts",
"build-and-test": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./tests/fixtures && pnpm test",
"build": "cargo build-sbf --manifest-path=./program/Cargo.toml --sbf-out-dir=./program/target/so",
"deploy": "solana program deploy ./program/target/so/pda_mint_authority_program.so",
"postinstall": "zx prepare.mjs"
},
"dependencies": {
"@metaplex-foundation/mpl-token-metadata": "^2.5.2",
"@solana/spl-token": "^0.3.7",
"@solana/web3.js": "^1.73.0",
"borsh": "^0.7.0",
"buffer": "^6.0.3",
"fs": "^0.0.1-security"
},
"devDependencies": {
"@types/bn.js": "^5.1.0",
"@types/chai": "^4.3.1",
"@types/mocha": "^9.1.1",
"chai": "^4.3.4",
"mocha": "^9.0.3",
"ts-mocha": "^10.0.0",
"typescript": "^4.3.5",
"solana-bankrun": "^0.4.0",
"zx": "^8.1.4"
}
}
Loading

0 comments on commit 24499bb

Please sign in to comment.