"Solana 入門": 官方教程第二課#
- 跟著 lab 完成程式碼。
- 完成所有挑戰。
- 添加處理無效錢包地址的指示。
- 修改腳本以連接到 mainNet 並查找一些著名的 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 相關的庫進行解碼,如果沒有報錯,就是正確的地址,否則就是地址有誤,返回錯誤。
套得層級太深了(吐槽一下,感覺有 Java 那味了哈哈)。
所以這裡的結論是:
-
如果想要簡單快速驗證地址是否有效,直接調用 web3.js 的建構器就可以,它會幫你檢查的。
-
如果想要寫出能充分表明意圖的程式碼,而不是用這種拐彎抹角的方式實現,建議按照算法規則,檢查長度,嘗試解碼一次。通過了就是正確的地址,未通過就是地址有誤,返回錯誤。