Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions basics/create-account/steel/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[workspace]
members = ["api","program"]
resolver = "2"

[workspace.dependencies]
solana-program = "1.18.17"
steel = "2.0"
bytemuck = "1.14"
num_enum = "0.7"
13 changes: 13 additions & 0 deletions basics/create-account/steel/api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[package]
name = "create-account-steel-api"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib", "lib"]

[dependencies]
solana-program.workspace = true
steel.workspace = true
bytemuck.workspace = true
num_enum.workspace = true
48 changes: 48 additions & 0 deletions basics/create-account/steel/api/src/instruction.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use solana_program::{msg, program::invoke, system_instruction};
use steel::*;
use sysvar::rent::Rent;

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

instruction!(SteelInstruction, CreateAccount);
// CreateAccount instruction
#[repr(C, packed)]
#[derive(Clone, Copy, Debug, Pod, Zeroable)]
pub struct CreateAccount {}

impl CreateAccount {
pub fn process_instruction(accounts: &[AccountInfo]) -> ProgramResult {
let [payer, new_account, system_program] = accounts else {
return Err(ProgramError::NotEnoughAccountKeys);
};

msg!("Program invoked. Creating a system account...");
msg!(" New public key will be: {}", &new_account.key.to_string());

// get minimum lamports required for 0 data space
//
let lamports = Rent::get()?.minimum_balance(0);

// use `create_account` or `allocate_account` steel helper for creating
// pda accounts.
//
invoke(
&system_instruction::create_account(
payer.key,
new_account.key,
lamports, // send lmaports
0, // space
&system_program::ID, // owner program
),
&[payer.clone(), new_account.clone(), system_program.clone()],
)?;

msg!("Account created succesfully.");

Ok(())
}
}
8 changes: 8 additions & 0 deletions basics/create-account/steel/api/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
pub mod instruction;

use steel::*;
declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");

pub mod prelude {
pub use crate::instruction::*;
}
8 changes: 8 additions & 0 deletions basics/create-account/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 --bpf-out-dir=./program/target/so
solana program deploy ./program/target/so/program.so
21 changes: 21 additions & 0 deletions basics/create-account/steel/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"scripts": {
"test": "pnpm ts-mocha -p ./tsconfig.json -t 1000000 ./tests/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/program.so"
},
"dependencies": {
"@solana/web3.js": "^1.95.4"
},
"devDependencies": {
"@types/chai": "^4.3.1",
"@types/mocha": "^10.0.9",
"@types/node": "^22.8.5",
"chai": "^4.3.4",
"mocha": "^10.8.2",
"solana-bankrun": "^0.4.0",
"ts-mocha": "^10.0.0",
"typescript": "^5"
}
}
Loading