Solana
当在 Bitget Wallet App 中运行 DApp 或在安装了 Chrome 扩展的 Chrome 浏览器中时,您可以访问全局对象 window.bitkeep.solana
来进行后续的 API 调用。
注入对象属性和方法
connect
- () => object: 连接到钱包getAccount
- () => string: 获取账户信息disconnect
- () => void: 断开连接signMessage
- (message) => object: 签名消息getTransactionVersion
- (transaction) => string: 获取交易版本signTransaction
- (transaction) => object: 签名交易signAllTransactions
- (transactions) => object: 签名多个交易
连接到Bitget钱包
Provider
const provider = window.bitkeep.solana;
连接

Preview
用法
try {
await provider.connect()
const publicKey = await provider.getAccount()
const address = provider.publicKey.toString() // 一旦Web应用程序连接到Bitkeep,
} catch {
alert('连接错误')
}
试一试
Loading live editor...
连接状态
provider.connected
const publicKey = await provider.getAccount()
provider.publicKey.toString() // 一旦Web应用程序连接到Bitkeep
签名消息
Chrome
App

Preview

Preview
用法
//字符串
provider.signMessage('020006106e655af38ff7324bbf1d4e16b06084763269b9')
// uint8Array
const message = `您可以使用uint8array来验证`
const encodedMessage = new TextEncoder().encode(message)
const signedMessage = await provider.signMessage(encodedMessage)
const nacl = require('tweetnacl')
const { PublicKey } = require('@solana/web3.js')
// nacl.sign.detached.verify(encodedMessage, signedMessage, publicKey)
nacl.sign.detached.verify(
encodedMessage,
signedMessage,
new PublicKey(address).toBytes()
)
试一试
Loading live editor...
事件监听器
provider.on('connect', () => console.log('已连接!'))
交易
版本化交易
Chrome
App

Preview

Preview
Solana 在 2022 年 10 月 10 日引入了带有 v0 交易的版本化交易 。
v0
的目标是增加交易的最大容量,从而增加可以容纳在单个原子交易中的账户数量。使用 LUTs,开发者现在可以构建包含最多 256 个账户的交易,而没有 LUTs 的传统交易只能包含最多 35 个账户。
包含地址查找表(LUTS) 的交易
1. 构建版本化交易
版本化交易的构建方式与传统交易非常相似,唯一的区别是开发者应该使用 VersionedTransaction
类而不是 Transaction
类。
以下示例演示了如何构建一个简单的转账指令。发送转账指令后,使用转账指令构建 MessageV0
格式的交易消息,最后创建一个新的 VersionedTransaction
来解析 v0 兼容的消息。
import {
TransactionMessage,
VersionedTransaction,
SystemProgram,
} from '@solana/web3.js'
// 创建指令数组
const instructions = [
SystemProgram.transfer({
fromPubkey: publicKey,
toPubkey: publicKey,
lamports: 10,
}),
]
// 创建v0兼容消息
const messageV0 = new TransactionMessage({
payerKey: publicKey,
recentBlockhash: blockhash,
instructions,
}).compileToV0Message()
// 创建版本化交易
const transactionV0 = new VersionedTransaction(messageV0)
2. 签名版本化交易
版本化交易可以直接使用 signTransaction
方法签名。此方法调用将返回已签名交易的Promise 。这与传统交易的签名方法相同。
const provider = getProvider()
const network = '<NETWORK_URL>'
const connection = new Connection(network)
const signedTransaction = await provider.signTransaction(transactionV0)
传统交易
1. 构建传统交易
const pubKey = new PublicKey(publicKey.pubkey)
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: publicKey,
toPubkey: publicKey,
lamports: 100,
})
)
transaction.feePayer = pubKey
const anyTransaction: any = transaction
anyTransaction.recentBlockhash = (
await connection.getLatestBlockhash()
).blockhash
return transaction
2. 签名传统交易
const provider = getProvider()
const network = '<NETWORK_URL>'
const connection = new Connection(network)
const signedTransaction = await provider.signTransaction(transaction)
Last updated on