10 个不稳定版本 (3 个重大更新)
0.6.2 | 2022 年 8 月 13 日 |
---|---|
0.6.1 | 2022 年 8 月 12 日 |
0.5.4 | 2022 年 8 月 12 日 |
0.5.0 | 2022 年 7 月 14 日 |
0.3.0 | 2022 年 5 月 25 日 |
#9 in #poseidon
每月 27 次下载
70KB
1.5K SLoC
波塞冬 - 波塞尼亚海之神 😂
poseidon-client
是一个简单的 Solana 客户端库,旨在快速编译和缓存友好。
目前,并非所有 RPC 方法都已实现。如果您正在寻找功能丰富的 Solana RPC 库,请查看 Solana Anchor 库或官方 Solana SDK 和 Solana-client。
当前功能支持包括
-
getLatestBlockhash
-
createAccountWithSeed
-
Message
-
Instruction
-
Transaction
-
getMinimumBalanceForRentExemption
-
sendTransaction
使用方法
首先,生成一个 Ed25519 公钥和私钥对或导入一个。使用 ed25519_dalek
包生成或导入 ed25519_dalek::Keypair
添加依赖
文件:/Cargo.toml
[dependencies]
rand = "0.7"
ed25519-dalek = "*" # add latest version
poseidon-client = "*" # add latest version
或简单使用 cargo-edit
包
$ cargo add rand --vers 0.7
$ cargo add ed25519-dalek
$ cargo add poseidon
生成一个新的密钥对
use rand::rngs::OsRng;
use ed25519_dalek::Keypair;
let mut csprng = OsRng{};
let keypair: Keypair = Keypair::generate(&mut csprng);
或从字节导入 ed25519_dalek::Keypair
,如果您已经有了其中一个
use ed25519_dalek::Keypair;
// Example of the 64 bytes of both the secret key (32bytes) and
// public key (32bytes) respectively
let bytes = [0u8; 64];
let keypair: Keypair = Keypair::from_bytes(&bytes)?;
注意
:请注意,保护密钥对的私钥超出了本包的范围。请小心!!!
创建用于序列化和反序列化程序存储 PDA 账户的数据结构
use borsh::{BorshDeserialize, BorshSerialize};
#[derive(Debug, BorshSerialize, BorshDeserialize)]
pub struct PoseidonTestStore {
username: String,
}
获取支付 2 年存储成本的最低租金
use poseidon_client::GetMinimumBalanceForRentExemption;
let two_year_rent =
GetMinimumBalanceForRentExemption::process::<PoseidonTestStore>().await?;
创建程序派生账户
use poseidon_client::{SYSTEM_PROGRAM_ID, PoseidonTestStore, PdaBuilder};
// Decide on the seed to create the PDA account for the program
let seed = "EXAMPLE_HELLO";
// Instantiate the PDA account builder
let mut pda = PdaBuilder::new();
let pda_public_key = pda
.add_from(keypair.public.to_bytes())
.add_base(keypair.public.to_bytes())
.add_lamports(two_year_rent.result)
.add_seed(seed)
.add_space(core::mem::size_of::<PoseidonTestStore>() as u64)
.add_owner(SYSTEM_PROGRAM_ID)
.derive_public_key()?;
// Call `build()` to create the `SystemInstruction::CreateAccountWithSeed`
let pda_instruction = pda.build()?;
构建消息
use poseidon_client::MessageBuilder;
let mut message_builder = MessageBuilder::new();
message_builder
.add_instruction(pda_instruction)
.add_payer(public_key_bytes)
.build();
let mut message = Message::new();
message.build(message_builder)?;
获取最新区块哈希
use poseidon_client::GetLatestBlockhash;
let blockhash = GetLatestBlockhash::as_bytes(Commitment::Finalized).await?;
创建事务
use ed25519_dalek::Signer;
use poseidon_client::Transaction;
// First update the `recent_blockhash` field of the `Message` with
// a recent blockhash so that transactions will not fail.
// A Solana `recent_blockhash` only lasts for about `2 minutes` in order to
//prevent replay attacks
message.add_recent_blockhash(blockhash);
// Use the keypair to sign a message
let signature = keypair.sign(&message.to_bytes()?);
// Instantiate a new transaction with the `Message`
let mut transaction = Transaction::new(message);
// Add the signature of the message
transaction.add_signature(signature.to_bytes());
向 Solana RPC 节点发送事务
use poseidon_client::{RpcClient, TxSendOutcome};
let mut rpc = RpcClient::new();
let send_tx_response = rpc.prepare_transaction(&transaction)?.send().await?;
let send_tx_outcome = TxSendOutcome::parse_tx(send_tx_response);
使用其哈希值获取事务
use poseidon_client::GetTransaction;
let base58_signature = "44stjcK4f7RC7KNCorh9gzhQagpYoT9Tq775UFtYbn5gepRocHEeXrtG2JmzgTYKCx83pfBhWHiwLa6sC7f8Ruft";
let tx_resp = GetTransaction::process(sign).await?;
许可协议
本库采用 MIT
或 Apache-2.0
许可协议,所有贡献都采用相同的许可证。
行为准则
在做出贡献时,请遵守 Rust 行为准则
依赖项
~18–30MB
~545K SLoC