「Solana 入门」: 官方教程第二课#
- 跟着 lab 完成代码.
- 完成所有 challenge.
- Add instructions to handle invalid wallet addresses.
- Modify the script to connect to mainNet and look up some famous Solana wallets. Try toly.sol, shaq.sol or mccann.sol.
第二个 challenge 绝对不是什么难题。看起来是哪里参数改一改就能查到的东西.
但我实在是不熟悉,看文档看了不少时间,GPT 也回答得不行,不知道我少看什么东西了导致我完成不了.
这个日后更新,先往下走吧.
跟着 lab 完成代码很简单,没有什么可以卡壳的地方。不详细记录.
关于 Add instructions to handle invalid wallet addresses.
- 最直接根据 ChatGPT, 网络搜索等等。最直接的方案就是:
try {
const public_key = new PublicKey(address);
} catch (error) {
console.log('address is not vaild.');
}
当然,存疑。我刚入门,并不知道检查一个 address 到底需要检查什么.
- 第二步接着询问 ChatGPT, address 是否有效主要靠什么规则来判断的?
给了我两个方案.
-
直接调库。库会帮你做这件事的. (web3.js, solana cli)
-
由于 address 是由 base58 算过来的,算法本身带一点特征。比如长度,比如不会出现一些特定的字符.
但基本的结论就是,靠 base58 的特征来检验地址是否正确.
- 第三步简单验证。读 web3.js 和 solana cli 的代码。看他们怎么验证地址的.
-
web3.js 的
PublicKey
构造器有一个检验,就是基于长度来的。然后拿 bn 库解码看下有没有问题. -
solana cli 的构造器也只检验长度。只拿 base58 相关的库
decode
一下,没报错就行,都是直接发送的.
套得层级太深了 (吐槽一下,感觉有 java 那味了哈哈).
所以这里的结论:
-
如果想简单快速验证 address 是否有效,直接调用 web3.js 的构造器就行,会帮你检查的.
-
如果想写出来的代码能充分表明意图,而不是用这种拐弯抹角的方式实现,建议就是按算法规则,检查长度,尝试 decode 一次。通过了就是地址正确,不通过就是地址有误,返回报错.