半夜睡不著覺,來寫寫 SOLANA,網路上寫乙太坊(ETH)的教學很多,相較於寫 solidity,solana有提供 js 的 npm package,讓許多 web app 的開發者更容易進入開發區塊鏈應用的世界。此篇單純簡單筆記一下測試 SOLANA 開發應用的程式。
題外話是,solana原先號稱是乙太殺手,可以更快並且更多的處理程序,不過近來一個STEPN (move to earn app) 讓乙太殺手直接變成窮人版乙太,甚至前一陣子還出現100%丟失的狀況,(對就像是你去銀行說我要轉帳,然後那筆錢消失在宇宙的那種消失) 所以以CP值來說開發者去學習solidity開發乙太相關的程式會比較有價值一些。
準備項目 pre-requisite
- 安裝 node js
- 創建一個project folder,並且做 npm init
- 安裝 solana-web3.js (https://solana-labs.github.io/solana-web3.js/)
錢包地址 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,空投差不多就這樣,當然每個函式都還有各種細節建議大家自己看一下官方文件,後續怎麼進行交易以及合約撰寫的筆記再來繼續學習分享。小韭菜一枚,有錯誤歡迎指正。