「Solana 入門」:官方教程第二課#
- 跟著 lab 完成程式碼。
- 完成所有挑戰。
- 添加處理無效錢包地址的指示。
- 修改腳本以連接到主網並查找一些著名的 Solana 錢包。嘗試 toly.sol、shaq.sol 或 mccann.sol。
第二個挑戰絕對不是什麼難題。看起來是哪裡參數改一改就能查到的東西。
但我實在是不熟悉,看文件看了不少時間,GPT 也回答得不行,不知道我少看什麼東西了導致我完成不了。
這個日後更新,先往下走吧。
跟著 lab 完成程式碼很簡單,沒有什麼可以卡壳的地方。不詳細記錄。
關於 添加處理無效錢包地址的指示:
- 最直接根據 ChatGPT、網路搜索等等。最直接的方案就是:
try {
const public_key = new PublicKey(address);
} catch (error) {
console.log('address is not valid.');
}
當然,存疑。我剛入門,並不知道檢查一個地址到底需要檢查什麼。
- 第二步接著詢問 ChatGPT,地址是否有效主要靠什麼規則來判斷的?
給了我兩個方案。
-
直接調庫。庫會幫你做這件事的(web3.js、solana cli)。
-
由於地址是由 base58 算過來的,算法本身帶一點特徵。比如長度,比如不會出現一些特定的字符。
但基本的結論就是,靠 base58 的特徵來檢驗地址是否正確。
- 第三步簡單驗證。讀 web3.js 和 solana cli 的程式碼。看他們怎麼驗證地址的。
-
web3.js 的
PublicKey
構造器有一個檢驗,就是基於長度來的。然後拿 bn 库解碼看下有沒有問題。 -
solana cli 的構造器也只檢驗長度。只拿 base58 相關的庫
decode
一下,沒報錯就行,都是直接發送的。
套得層級太深了(吐槽一下,感覺有 Java 那味了哈哈)。
所以這裡的結論:
-
如果想簡單快速驗證地址是否有效,直接調用 web3.js 的構造器就行,會幫你檢查的。
-
如果想寫出來的程式碼能充分表明意圖,而不是用這種拐彎抹角的方式實現,建議就是按算法規則,檢查長度,嘗試 decode 一次。通過了就是地址正確,不通過就是地址有誤,返回報錯。