分類
Blockchain Javascript

airdrop on solana in 5mins

半夜睡不著覺,來寫寫 SOLANA,網路上寫乙太坊(ETH)的教學很多,相較於寫 solidity,solana有提供 js 的 npm package,讓許多 web app 的開發者更容易進入開發區塊鏈應用的世界。此篇單純簡單筆記一下測試 SOLANA 開發應用的程式。

題外話是,solana原先號稱是乙太殺手,可以更快並且更多的處理程序,不過近來一個STEPN (move to earn app) 讓乙太殺手直接變成窮人版乙太,甚至前一陣子還出現100%丟失的狀況,(對就像是你去銀行說我要轉帳,然後那筆錢消失在宇宙的那種消失) 所以以CP值來說開發者去學習solidity開發乙太相關的程式會比較有價值一些。

準備項目 pre-requisite

錢包地址 wallet

在區塊鏈上,一個錢包地址就是一組 key pair,包含了一個 public key 以及一個 secret key,在 solana 的應用上你可以這樣寫:

const {
    Keypair
} = require("@solana/web3.js");

const solWallet = new Keypair();

const publicKey = solWallet._keypair.publicKey;
const secretKey = solWallet._keypair.secretKey;

console.log("public key", publicKey);
console.log("secret key", secretKey);

如此一來會看到 public key and secret key

➜  sol-dev node index.js
public key Uint8Array(32) [
  191, 158,  51,  73,  42,  88, 120,  88,
   99, 184,  34, 223, 222,  14, 112, 209,
  202,  20,  93, 169, 109, 230,  12,  68,
  223, 113, 136, 194, 178,   0,  74,  37
]
secret key Uint8Array(64) [
  186, 147, 146,   4, 133, 110, 147, 149, 252, 241,  58,
   82, 171,  26,  74, 226, 119,  39, 143,  42,  43, 252,
  208, 101, 106, 171, 159, 100, 115, 235, 217,  11, 191,
  158,  51,  73,  42,  88, 120,  88,  99, 184,  34, 223,
  222,  14, 112, 209, 202,  20,  93, 169, 109, 230,  12,
   68, 223, 113, 136, 194, 178,   0,  74,  37
]

原則上那個 public key 就是每個用戶對外的錢包地址,所以透過 PublicKey 以及 toString 可以去得到一般在錢包或交易所看到的那個地址:

const publicKey = new PublicKey(solWallet._keypair.publicKey);
console.log("public key", publicKey.toString());
➜  sol-dev node index.js
public key EtBo5umndEzKr6X5NxsYLGYFEBpuTyeiVzEpk12HJAVb

查詢餘額 check balance

原則上有了public key我們即可在鏈上透過 getBalance 查詢該錢包地址的餘額,實作如下:(devnet為solana的測試網路,可以透過 clusterApiUrl 來選擇主鏈或是測試鏈)

const getWalletBalance = async () => {
    try {
        const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
        const walletBalance = await connection.getBalance(publicKey);
        console.log("wallet balance:", walletBalance);
        return walletBalance;
    } catch(err) {
        console.log("error:", err);
    }
};

const main = async () => {
    await getWalletBalance();
};

main();

// console
wallet balance: 0

空投 air drop

空投就是針對錢包地址直接做token的投放,以空投SOL來實作的話,可以透過 requestAirdrop 來寫入該地址以及數量,等待 confirmTransaction 完成後,在查詢餘額確認是否空投成功。

const airDropSolana = async () => {
    try {
        const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
        const airdropSignature = await connection.requestAirdrop(publicKey, 1*LAMPORTS_PER_SOL);
        await connection.confirmTransaction(airdropSignature);
    } catch(err) {
        console.log("err", err);
    }
};

const main = async () => {
    await getWalletBalance();
    await airDropSolana();
    await getWalletBalance();
};

main();


// console
wallet balance: 0
wallet balance: 1000000000

如此一來你就免費獲得一顆SOL,不過是在測試網上,所以價值 $0,空投差不多就這樣,當然每個函式都還有各種細節建議大家自己看一下官方文件,後續怎麼進行交易以及合約撰寫的筆記再來繼續學習分享。小韭菜一枚,有錯誤歡迎指正。