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/processing-instructions/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.1"
bytemuck = "1.4"
num_enum = "0.7"
13 changes: 13 additions & 0 deletions basics/processing-instructions/steel/api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[package]
name = "processing-instructions-steel-api"
version = "0.1.0"
edition = "2021"

[dependencies]
solana-program = "1.18.17"
steel = "2.1"
bytemuck = "1.4"
num_enum = "0.7"

[lib]
crate-type = ["cdylib", "lib"]
39 changes: 39 additions & 0 deletions basics/processing-instructions/steel/api/src/instruction.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
use solana_program::msg;
use std::ffi::CStr;
use steel::*;

#[repr(u8)]
#[derive(Clone, Copy, Debug, Zeroable, TryFromPrimitive, IntoPrimitive)]
pub enum ParkInstruction {
Park = 0,
}

instruction!(ParkInstruction, Park);
#[repr(C, packed)]
#[derive(Clone, Copy, Debug, Pod, Zeroable)]
pub struct Park {
pub name: [u8; 32],
pub height: u32,
}

impl Park {
pub fn process_instruction_data(instruction_data: &[u8]) -> ProgramResult {
// Steel uses bytemuck under the hood to process instruction data
// bytemuck::try_from_bytes::<Park>(instruction_data)
//
let instruction_data_object = Park::try_from_bytes(instruction_data)?;

msg!(
"Welcome to the park, {:?}!",
CStr::from_bytes_until_nul(&instruction_data_object.name).unwrap()
);

if instruction_data_object.height > 5 {
msg!("You are tall enough to ride this ride. Congratulations.");
} else {
msg!("You are NOT tall enough to ride this ride. Sorry mate.");
};

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

use steel::*;

declare_id!("z7msBPQHDJjTvdQRoEcKyENgXDhSRYeHieN1ZMTqo35");

pub mod prelude {
pub use crate::instruction::*;
}
8 changes: 8 additions & 0 deletions basics/processing-instructions/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
23 changes: 23 additions & 0 deletions basics/processing-instructions/steel/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"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/bn.js": "^5.1.0",
"@types/chai": "^4.3.1",
"@types/mocha": "^10.0.9",
"@types/node": "^22.8.6",
"borsh": "0.7.0",
"chai": "^4.3.4",
"mocha": "^10.8.2",
"solana-bankrun": "^0.4.0",
"ts-mocha": "^10.0.0",
"typescript": "^5.6.3"
}
}
Loading
Loading