Skip to content

Commit

Permalink
add tokens/spl-token-minter/steel (#179)
Browse files Browse the repository at this point in the history
  • Loading branch information
Perelyn-sama authored Jan 2, 2025
1 parent 4fdbdea commit ba4160f
Show file tree
Hide file tree
Showing 21 changed files with 2,566 additions and 0 deletions.
2 changes: 2 additions & 0 deletions tokens/spl-token-minter/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/spl-token-minter/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]
spl-token-minter-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"
spl-token = "^4"
mpl-token-metadata = { version = "4.1.2" }
const-crypto = "0.1.0"
spl-associated-token-account = { version = "^2.3", features = [
"no-entrypoint",
] }
22 changes: 22 additions & 0 deletions tokens/spl-token-minter/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/spl-token-minter/steel/api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[package]
name = "spl-token-minter-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
2 changes: 2 additions & 0 deletions tokens/spl-token-minter/steel/api/src/consts.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/// The seed of the metadata account PDA.
pub const METADATA: &[u8] = b"metadata";
26 changes: 26 additions & 0 deletions tokens/spl-token-minter/steel/api/src/instruction.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
use std::str;
use steel::*;

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

#[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 quantity: [u8; 8],
}

instruction!(SteelInstruction, Mint);
instruction!(SteelInstruction, Create);
16 changes: 16 additions & 0 deletions tokens/spl-token-minter/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 utils;

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

use steel::*;

// TODO Set program id
declare_id!("8V26fyhrQobKbvkRCV3KvT6jZQLzviovdARfGrw8kUdG");
59 changes: 59 additions & 0 deletions tokens/spl-token-minter/steel/api/src/sdk.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
use steel::*;

use crate::prelude::*;

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,
);

Instruction {
program_id: crate::ID,
accounts: vec![
AccountMeta::new(payer, true),
AccountMeta::new(mint, true),
AccountMeta::new(metadata_pda.0, false),
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(
mint_authority: Pubkey,
recipient: Pubkey,
mint: Pubkey,
associated_token_account: Pubkey,
quantity: u64,
) -> Instruction {
Instruction {
program_id: crate::ID,
accounts: vec![
AccountMeta::new(mint_authority, true),
AccountMeta::new(recipient, false),
AccountMeta::new(mint, false),
AccountMeta::new(associated_token_account, 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 {
quantity: quantity.to_le_bytes(),
}
.to_bytes(),
}
}
6 changes: 6 additions & 0 deletions tokens/spl-token-minter/steel/api/src/utils.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pub fn str_to_bytes<const N: usize>(str: &str) -> [u8; N] {
let mut str_bytes = [0u8; N];
let copy_len = str.len().min(N);
str_bytes[..copy_len].copy_from_slice(&str.as_bytes()[..copy_len]);
str_bytes
}
8 changes: 8 additions & 0 deletions tokens/spl-token-minter/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/spl-token-minter/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/bankrun.test.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/spl_token_minter_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 ba4160f

Please sign in to comment.