I can provide you with a sample article that explains how to airdrop Solana keys using a randomly generated key pair for testing purposes.
Airdropping Solana Keys: A Step-by-Step Guide
As a developer, it is important to practice deploying and testing your blockchain applications. In this example, we will show how to airdrop on the Solana testnet using a randomly generated key pair for testing purposes.
Prerequisites
- Install the Solana CLI (Command Line Interface) on your computer.
- Set up a testnet account on Solana with the required credentials.
Step 1: Create a new wallet and keypair
Create a new wallet in Solana CLI:
create solana key --output json
This will create a JSON file containing your wallet’s private key and public address. We will use this private key to airdrop keys later.
Step 2: Generate random keypairs for airdrop
To generate random keypairs, we can use the solana_sdk::keypair module.
use solana_sdk::signer::{Keyid, Signer};
use solana_sdk::sysvar::Pubkey;
use solana_sdk::transaction::{TransactionId, TransactionOutput};
use solana_sdk::keypair::{Keypair, KeypairBuilder};
fn generate_airdrop_keypair() -> (keypair, keypair) {
let mut key_pair = KeypairBuilder::new().generate_keyid().unwrap();
while true {
match &*keypair.public_key.and_ref() {
Pubkey::Random => break,
_ => (),
}
}
: let wallet_id = Key::from_bytes(&key_pair.key.id).unwrap();
let wallet_out = TransactionOutput::new(
Key::from_bytes(&wallet_id).unwrap(),
SolanaId::default(),
old![],
Vec::new(),
);
(keypair, wallet_out)
}
This function generates a new random keypair and creates a transaction output with the public key of the keypair. We will use this output to airdrop keys later.
Step 3: Create an Airdrop Transaction
Create an Airdrop transaction with the “Transaction” structure.
use solana_sdk::transaction::{Transaction, TransactionBuilder};
fn create Airdrop Transaction(
public_key_pair: keypair,
airdrop_id: pubkey,
) -> Transaction {
let mut tx = TransactionBuilder::new()
.set_system_instruction_id("Airdrop")
.build();
tx.add_input_output_transaction(
TransactionOutput::new(
public_keypair.public_key.and_ref(),
SolanaId::default(),
old![],
Vec::new(),
),
);
tx.add_amount(1e18); // 1 Ether
tx.sign(&public_keypair)
}
This function creates a new transaction with the public key of the keypair, an input/output transaction to receive keys, and a single amount of 1 Ether.
Step 4: Debit Account
To debit an account on the Solana testnet, we need to use the solana_sdk::debits module. For more information on debiting accounts, see the [Solana SDK documentation](
For example:
“`Rust
use solana_sdk::debits;
fn debit_account(key_pair: key_pair, debit_amount: u64) -> result<(), &'static str> {
let mut debits = DebitBuilder::new();
debits.add_transaction(
TransactionBuilder::new()
.set_system_instruction_id(“flow”)
.build(),
);
debits.set_fee(1000); // 1 ETH
match &*keypair.key.public_key.and_ref() {
Pubkey::Random => return Ok(()),
_ => (),
}
let amount = u64::of_debited_amount(debited_amount, 1e18);
debits.add_amount(amount);
let transaction ID = keypair.public_key.as_ref().unwrap();
match debits.sign(&keypair) {
No(_) => {
// Successful transaction
print!