Skip to content

Commit

Permalink
chore: add example (#4)
Browse files Browse the repository at this point in the history
* chore: add example

* chore: fix lint
  • Loading branch information
hirokisan authored Oct 29, 2024
1 parent 8b95555 commit 8f8f012
Show file tree
Hide file tree
Showing 10 changed files with 198 additions and 1 deletion.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,3 @@ target
.DS_Store
test-ledger/
.anchor
target
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[workspace]
members = ["programs/*", "tests"]
exclude = ["examples"]
resolver = "2"

[profile.release]
Expand Down
2 changes: 2 additions & 0 deletions examples/solprofile/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
idls/solprofile.json
Cargo.lock
21 changes: 21 additions & 0 deletions examples/solprofile/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[package]
name = "solprofile-example"
version = "0.1.0"
edition = "2021"

[[bin]]
name = "create"
path = "src/create.rs"

[[bin]]
name = "get"
path = "src/get.rs"

[[bin]]
name = "update"
path = "src/update.rs"

[dependencies]
anchor-lang = "0.30.1"
anchor-client = "0.30.1"
shellexpand = "3.1.0"
37 changes: 37 additions & 0 deletions examples/solprofile/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Examples

## Run on localnet

### Setup

#### Deploy Program

See [Run on localnet](https://github.com/hirokisan/solprofile?tab=readme-ov-file#run-on-localnet).

#### Copy IDL

Copy `../../target/idl/solprofile.json` to `idls/solprofile.json`.

### Create a profile

```console
$ cargo run --quiet --bin create
```

### Get a profile

```console
$ cargo run --quiet --bin get
```

Tips.

```console
$ anchor account solprofile.Profile {ADDRESS} --idl=idls/solprofile.json
```

### Update a profile

```console
$ cargo run --quiet --bin update
```
Empty file.
46 changes: 46 additions & 0 deletions examples/solprofile/src/create.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
use anchor_lang::prelude::*;

use anchor_client::{
solana_sdk::{
signature::{read_keypair_file, Signer},
system_program,
},
Client, Cluster,
};

use crate::util::{get_default_signer_keypair_path, get_profile_account};
use std::rc::Rc;

declare_program!(solprofile);

use solprofile::client::{accounts, args};

mod util;

fn main() {
let program_id = solprofile::ID;
let system_program_key = system_program::id();

let signer_keypair_path = get_default_signer_keypair_path();
let signer = read_keypair_file(&signer_keypair_path).unwrap();
let signer_key = Signer::pubkey(&signer);

let client = Client::new(Cluster::Localnet, Rc::new(&signer));
let program = client.program(program_id).unwrap();

let (profile_key, _) = get_profile_account(&signer_key, &program_id);

let tx = program
.request()
.accounts(accounts::Create {
profile: profile_key,
owner: signer_key,
system_program: system_program_key,
})
.args(args::Create)
.signer(&signer)
.send()
.unwrap();

println!("tx: {}", tx);
}
30 changes: 30 additions & 0 deletions examples/solprofile/src/get.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
use anchor_lang::prelude::*;

use anchor_client::{
solana_sdk::signature::{read_keypair_file, Signer},
Client, Cluster,
};

use crate::util::{get_default_signer_keypair_path, get_profile_account};
use std::rc::Rc;

declare_program!(solprofile);

mod util;

fn main() {
let program_id = solprofile::ID;

let signer_keypair_path = get_default_signer_keypair_path();
let signer = read_keypair_file(signer_keypair_path).unwrap();
let signer_key = Signer::pubkey(&signer);

let client = Client::new(Cluster::Localnet, Rc::new(&signer));
let program = client.program(program_id).unwrap();

let (profile_key, _) = get_profile_account(&signer_key, &program_id);

let data: solprofile::accounts::Profile = program.account(profile_key).unwrap();

println!("data: {data:#?}");
}
51 changes: 51 additions & 0 deletions examples/solprofile/src/update.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
use anchor_lang::prelude::*;

use anchor_client::{
solana_sdk::{
signature::{read_keypair_file, Signer},
system_program,
},
Client, Cluster,
};

use crate::util::{get_default_signer_keypair_path, get_profile_account};
use std::rc::Rc;

declare_program!(solprofile);

use solprofile::client::{accounts, args};
use solprofile::types;

mod util;

fn main() {
let program_id = solprofile::ID;
let system_program_key = system_program::id();

let signer_keypair_path = get_default_signer_keypair_path();
let signer = read_keypair_file(signer_keypair_path).unwrap();
let signer_key = Signer::pubkey(&signer);

let client = Client::new(Cluster::Localnet, Rc::new(&signer));
let program = client.program(program_id).unwrap();

let (profile_key, _) = get_profile_account(&signer_key, &program_id);

let tx = program
.request()
.accounts(accounts::Update {
profile: profile_key,
owner: signer_key,
system_program: system_program_key,
})
.args(args::Update {
args: types::UpdateArgs {
name: Some("updated_name".to_string()),
},
})
.signer(&signer)
.send()
.unwrap();

println!("tx: {}", tx);
}
10 changes: 10 additions & 0 deletions examples/solprofile/src/util.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
use anchor_lang::prelude::*;

pub fn get_default_signer_keypair_path() -> String {
shellexpand::tilde("~/.config/solana/id.json").to_string()
}

pub fn get_profile_account(owner: &Pubkey, program_id: &Pubkey) -> (Pubkey, u8) {
pub const PROFILE_SEED: &[u8] = b"profile";
Pubkey::find_program_address(&[PROFILE_SEED, owner.to_bytes().as_ref()], program_id)
}

0 comments on commit 8f8f012

Please sign in to comment.