Skip to content
Merged
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
7,100 changes: 3,730 additions & 3,370 deletions program/Cargo.lock

Large diffs are not rendered by default.

21 changes: 11 additions & 10 deletions program/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[package]
name = "name-tokenizer"
version = "2.1.0"
version = "3.0.0-beta.0"
edition = "2018"
resolver = "2"
description = "A Solana program which enables the tokenization of a Solana Name Service into an NFT"
license = "MIT"
repository = "https://github.com/bonfida/name-tokenizer"
Expand All @@ -15,31 +16,31 @@ devnet = []


[dependencies]
solana-program = "2.2.1"
solana-program = "4.0.0"
num_enum = "0.5.4"
borsh = "0.10.3"
borsh = { version = "1.7.0", features = ["derive"] }
thiserror = "1.0.44"
num-traits = "0.2"
num-derive = "0.3"
enumflags2 = "0.7.1"
spl-token = { version = "7.0.0", features = ["no-entrypoint"] }
bonfida-utils = "0.7.0"
spl-associated-token-account = { version = "7.0.0", features = [
spl-token = { version = "9.0.0", features = ["no-entrypoint"] }
bonfida-utils = "0.9.2"
spl-associated-token-account = { version = "8.0.0", features = [
"no-entrypoint",
] }
spl-name-service = { version = "0.4.0", package = "spl-name-service-2", features = [
spl-name-service = { version = "0.5.0", package = "spl-name-service-2", features = [
"no-entrypoint",
] }
mpl-token-metadata = { version = "5.1.1" }
solana-security-txt = "1.1.1"
solana-system-interface = { version = "3.2.0", features = ["bincode"] }


[dev-dependencies]
hexdump = "0.1.0"
solana-sdk = "2.2.1"
solana-sdk = "4.0.1"
rand = "0.8.4"
arrayref = "0.3.6"
solana-program-test = "2.2.1"
solana-program-test = { version = "4.2.2", features = ["agave-unstable-api"] }
tokio = { version = "1.6", features = ["macros"] }


Expand Down
30 changes: 15 additions & 15 deletions program/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
FROM rust:1.87.0
FROM rust:1.95.0

ENV HOME="/root"
ENV HOME="/nonroot"
ENV PATH="${HOME}/.local/share/solana/install/active_release/bin:${PATH}"
ARG HOST_UID
ARG HOST_GID

#
RUN apt-get update -qq && apt-get upgrade -qq && apt-get install -qq \
build-essential libssl-dev libudev-dev
RUN mkdir nonroot
RUN mkdir workdir
RUN chown $HOST_UID:$HOST_GID ./nonroot
RUN chown $HOST_UID:$HOST_GID ./workdir

USER $HOST_UID:$HOST_GID

# Install Solana tools.
RUN sh -c "$(curl -sSfL https://release.anza.xyz/v2.1.21/install)"

RUN cargo install bonfida-cli --version 0.6.9 --locked

RUN bonfida autoproject dummy
# Install Solana tools.
RUN sh -c "$(curl -sSfL https://release.anza.xyz/v4.2.2/install)"

WORKDIR /dummy/program
WORKDIR /nonroot

RUN cargo new temp --edition 2021 --lib
WORKDIR /nonroot/temp
RUN printf "\n[lib]\ncrate-type=[\"cdylib\"]\n" >> Cargo.toml
RUN cargo build-sbf

WORKDIR /

RUN rm -r dummy

WORKDIR /workdir
21 changes: 16 additions & 5 deletions program/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,29 @@
set -e
docker build -t name_tokenizer .


mkdir -p target/deploy
solana program dump metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s target/deploy/mpl_token_metadata.so
solana program dump namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX target/deploy/spl_name_service.so


if [[ ${1} == "build-only" ]]; then
echo "Only building..."
docker run -it --net=host --mount type=bind,source=$(pwd),target=/workdir name_tokenizer:latest /bin/bash -c "cargo build-sbf"
docker run -it \
--net=host \
--mount "type=bind,source=$(pwd),target=/workdir" \
name_tokenizer:latest \
/bin/bash -c "cargo build-sbf"
elif [[ ${1} == "test" ]]; then
echo "Running tests..."
docker run -it --net=host --mount type=bind,source=$(pwd),target=/workdir name_tokenizer:latest /bin/bash -c "cargo test-sbf --features devnet"
docker run -it \
--net=host \
--mount "type=bind,source=$(pwd),target=/workdir" \
name_tokenizer:latest \
/bin/bash -c "cargo test-sbf --features devnet"
else
echo "Running tests + building..."
docker run -it --net=host --mount type=bind,source=$(pwd),target=/workdir name_tokenizer:latest /bin/bash -c "cargo test-sbf --features devnet && cargo build-sbf"
docker run -it \
--net=host \
--mount "type=bind,source=$(pwd),target=/workdir" \
name_tokenizer:latest \
/bin/bash -c "cargo test-sbf --features devnet && cargo build-sbf"
fi
2 changes: 1 addition & 1 deletion program/rust-toolchain.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[toolchain]
profile = "default"
channel = "1.87.0"
channel = "1.95.0"
11 changes: 4 additions & 7 deletions program/src/cpi.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use solana_program::{
account_info::AccountInfo, entrypoint::ProgramResult, msg, program::invoke_signed,
program_error::ProgramError, program_pack::Pack, pubkey::Pubkey, rent::Rent,
system_instruction, system_instruction::create_account, sysvar::Sysvar,
program_error::ProgramError, program_pack::Pack, pubkey::Pubkey, rent::Rent, sysvar::Sysvar,
};
use solana_system_interface::instruction::{create_account, transfer};

#[allow(missing_docs)]
pub struct Cpi {}
Expand All @@ -19,11 +19,8 @@ impl Cpi {
) -> ProgramResult {
let account_lamports = account_to_create.lamports();
if account_lamports != 0 && account_to_create.data_is_empty() {
let defund_created_account = system_instruction::transfer(
account_to_create.key,
fee_payer.key,
account_lamports,
);
let defund_created_account =
transfer(account_to_create.key, fee_payer.key, account_lamports);
invoke_signed(
&defund_created_account,
&[
Expand Down
30 changes: 12 additions & 18 deletions program/src/entrypoint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use crate::{error::OfferError, processor::Processor};
use {
num_traits::FromPrimitive,
solana_program::{
account_info::AccountInfo, decode_error::DecodeError, entrypoint::ProgramResult, msg,
program_error::PrintProgramError, pubkey::Pubkey,
account_info::AccountInfo, entrypoint::ProgramResult, msg, program_error::ProgramError,
pubkey::Pubkey,
},
};

Expand All @@ -21,23 +21,17 @@ pub fn process_instruction(
) -> ProgramResult {
msg!("Entrypoint");
if let Err(error) = Processor::process_instruction(program_id, accounts, instruction_data) {
// catch the error so we can print it
error.print::<OfferError>();
match &error {
ProgramError::Custom(error_id) => {
if let Some(error) = OfferError::from_u32(*error_id) {
msg!("Error: {}", error);
} else {
msg!("Error: {}", error);
}
}
error => msg!("Error: {}", error),
}
return Err(error);
}
Ok(())
}

impl PrintProgramError for OfferError {
fn print<E>(&self)
where
E: 'static + std::error::Error + DecodeError<E> + PrintProgramError + FromPrimitive,
{
match self {
OfferError::AlreadyInitialized => msg!("Error: This account is already initialized"),
OfferError::DataTypeMismatch => msg!("Error: Data type mismatch"),
OfferError::WrongOwner => msg!("Error: Wrong account owner"),
OfferError::Uninitialized => msg!("Error: Account is uninitialized"),
}
}
}
12 changes: 1 addition & 11 deletions program/src/error.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
use {
num_derive::FromPrimitive,
solana_program::{decode_error::DecodeError, program_error::ProgramError},
thiserror::Error,
};
use {num_derive::FromPrimitive, solana_program::program_error::ProgramError, thiserror::Error};

#[derive(Clone, Debug, Error, FromPrimitive)]
pub enum OfferError {
Expand All @@ -21,9 +17,3 @@ impl From<OfferError> for ProgramError {
ProgramError::Custom(e as u32)
}
}

impl<T> DecodeError<T> for OfferError {
fn type_of() -> &'static str {
"OfferError"
}
}
2 changes: 2 additions & 0 deletions program/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ pub mod entrypoint;
pub mod error;
/// Program instructions and their CPI-compatible bindings
pub mod instruction;
/// Solana 4-compatible subset of the Metaplex Token Metadata interface.
pub mod mpl_token_metadata;
/// Describes the different data structures that the program uses to encode state
pub mod state;

Expand Down
Loading