我正在嘗試驗證我從用戶那里獲得的輸入文本是有效的 Solana 地址。
根據 web3.js 檔案,方法 .isOnCurve() 這樣做:
https://solana-labs.github.io/solana-web3.js/classes/PublicKey.html#isOnCurve
我已經設法使它與這段代碼一起作業:
import {PublicKey} from '@solana/web3.js'
function validateSolAddress(address:string){
try {
let pubkey = new PublicKey(address)
let isSolana = PublicKey.isOnCurve(pubkey.toBuffer())
return isSolana
} catch (error) {
return false
}
}
function modalSubmit(modal: any){
const firstResponse = modal.getTextInputValue(walletQuestFields.modal.componentsList[0].id)
let isSolAddress = validateSolAddress(firstResponse)
if (isSolAddress) {
console.log('The address is valid')
}else{
console.log('The address is NOT valid')
}
}
但是當我傳遞 let pubkey = new PublicKey(address)一個與 solana 地址不相似的字串時,它會引發例外Error: Invalid public key input (PublikKey 需要 a PublicKeyInitData: number | string | Buffer | Uint8Array | number[] | PublicKeyData)
這就是為什么我不得不把它放到一個 try-catch 塊中。
還有其他(更好的)方法可以實作這一目標嗎?看起來很丑...
uj5u.com熱心網友回復:
要驗證 Solana 公鑰可能是錢包地址,您應該像現在一樣使用isOnCurve()和PublicKey建構式。
拋出的錯誤是有道理的。如果地址不是公鑰,則它不應該被實體化。
也許@solana/web3.js 可能會有另一個原生功能,可以在將來為您驗證錢包地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/429991.html
上一篇:打字稿多型別映射
