当前钱包运行环境检测
检测Bybit Wallet是否已安装并正常运行
首先,我们需要检测Bybit Wallet是否已安装并正常运行。
if (typeof window.bybitWallet !== 'undefined') {
console.log('bybitWallet is installed!');
}
检测当前版本是否已经支持Bitcoin链
if (typeof window.bybitWallet.bitcoin !== 'undefined') {
console.log('Bitcoin chain is supported!');
}
Provider API
什么是 Injected provider API?
Injected provider API 是一种标准的 JavaScript API,用于与 Bybit Wallet 进行交互。它允许 DApp 与 Bybit Wallet 进行交互,以便于用户进行授权、签名、发送交易等操作。
连接账户 - Connect
window.bybitWallet.solana.connect()
功能
连接钱包
参数
无
返回值
Promise<{
address: string,
publicKey: string
}>
示例
const result = await window.bybitWallet.bitcoin.connect()
// example
{
address: 'bc1pwqye6x35g2n6xpwalywhpsvsu39k3l6086cvdgqazlw9mz2meansz9knaq',
publicKey: '4a627f388196639041ce226c0229560127ef9a5a39d4885123cd82dc82d8b497'
}
请求连接 - requestAccounts
window.bybitWallet.bitcoin.requestAccounts()
描述
请求连接当前账户,如果用户没有授权过,会弹出连接弹窗,用户同意后,才会返回账户
参数
无
返回值
Promise<string[]>
示例
try {
let accounts = await window.bybitWallet.bitcoin.requestAccounts();
console.log('connect success', accounts);
} catch (e) {
console.log('connect failed');
}
// example
['tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'];
获取账号 - getAccounts
window.bybitWallet.bitcoin.getAccounts()
描述
获取当前账户地址,该方法不会触发连接弹窗,如果Dapp没有连接钱包,返回空数组。
参数
无
返回值
Promise<string[]>
示例
try {
let accounts = await window.bybitWallet.bitcoin.getAccounts();
console.log('success', accounts);
} catch (e) {
console.log(e);
}
// example
['tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'];
获取网络 - getNetwork
window.bybitWallet.bitcoin.getNetwork()
描述
获取当前网络,返回字符串,livenet或者testnet,目前Bybit Wallet只支持这livenet,所以永远会返回livenet
参数
无
返回值
Promise<string> // 网络
示例
try {
let res = await window.bybitWallet.bitcoin.getNetwork();
console.log(res);
} catch (e) {
console.log(e);
}
// example
livenet;
获取公钥 - getPublicKey
window.bybitWallet.bitcoin.getPublicKey()
描述
获取当前账户的公钥
参数
无
返回值
Promise<string> // 公钥
示例
try {
let publicKey = await window.bybitWallet.bitcoin.getPublicKey();
console.log('success', publicKey);
} catch (e) {
console.log(e);
}
// example
['tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'];
获取余额 - getBalance
window.bybitWallet.bitcoin.getBalance()
描述
获取当前账户的余额
参数
无
返回值
Promise<{
confirmed: number; // 已确认的sat数量
unconfirmed: number; // 未经确认的聪的数量
total: number; // total amount of sat
}>
示例
try {
let res = await window.bybitWallet.bitcoin.getBalance();
console.log(res);
} catch (e) {
console.log(e);
}
// example
{
"confirmed":0,
"unconfirmed":100000,
"total":100000
}
获取账户的铭文列表 - getInscriptions
window.bybitWallet.bitcoin.getInscriptions([cursor, size])
描述
获取当前账户的铭文列表
参数
cursor?: number; // 偏移量, start from 0, default 0
size?: number; // 每页的数量, default 20
返回值
Promise<{
total: number; // 总数
list: Array<{
inscriptionId: string; // 铭文ID
inscriptionNumber: string; // 铭文编号
address: string; // 铭文地址
outputValue: string; // 铭文的输出值
contentLength: string; // 铭文的内容长度
contentType: string; // 铭文的内容类型
timestamp: string; // 铭文的区块时间
offset: number; // 铭文的偏移量
output: string; // 当前铭文所在 UTXO 的标识
genesisTransaction: string; // 创世交易的交易 ID
location: string; // 当前位置的 txid 和 vout
}>
}>
示例
try {
let res = await window.bybitWallet.bitcoin.getInscriptions(0, 20);
console.log(res)
} catch (e) {
console.log(e);
}
// example
{
"total":10,
"list":[{
inscriptionId: '6037b17df2f48cf87f6b6e6ff89af416f6f21dd3d3bc9f1832fb1ff560037531i0',
inscriptionNumber: 55878989,
address: 'bc1q8h8s4zd9y0lkrx334aqnj4ykqs220ss735a3gh',
outputValue: 546,
contentLength: 53,
contentType: 'text/plain',
timestamp: 1705406294,
location: '6037b17df2f48cf87f6b6e6ff89af416f6f21dd3d3bc9f1832fb1ff560037531:0:0',
output: '6037b17df2f48cf87f6b6e6ff89af416f6f21dd3d3bc9f1832fb1ff560037531:0',
offset: 0,
genesisTransaction: '02c9eae52923fdb21fe16ee9eb873c7d66fe412a61b75147451d8a47d089def4'}
]
}
发送比特币 - sendBitcoin
window.bybitWallet.bitcoin.sendBitcoin(toAddress, satoshis, options)
描述
发送比特币, 该方法会弹出发送弹窗,用户确认后,会发送交易
参数
toAddress: string; // 发送地址
satoshis: number; // 发送的sat数量
options?: {
feeRate: number; // network fee rate
}
返回值
Promise<string> // 交易hash
示例
try {
let txid = await window.bybitWallet.bitcoin.sendBitcoin(
'tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz',
1000
);
console.log(txid);
} catch (e) {
console.log(e);
}
发送铭文 - sendInscription
window.bybitWallet.bitcoin.sendInscription(address, inscriptionId, option)
描述
发送铭文,该方法会弹出发送弹窗,用户确认后,会发送交易
参数
address: string; // 接收者地址
inscriptionId: string; // 铭文 ID
option?: {
feeRate: number; // 自定义费率
}
返回值
Promise<string> // 交易hash
示例
try {
let txid = await window.bybitWallet.bitcoin.sendInscription(
'tb1q8h8s4zd9y0lkrx334aqnj4ykqs220ss7mjxzny',
'e9b86a063d78cc8a1ed17d291703bcc95bcd521e087ab0c7f1621c9c607def1ai0',
{ feeRate: 15 }
);
console.log(
'send Inscription 204 to tb1q8h8s4zd9y0lkrx334aqnj4ykqs220ss7mjxzny',
{ txid }
);
} catch (e) {
console.log(e);
}
铭刻可转移的 BRC-20 - inscribeTransfer
window.bybitWallet.bitcoin.inscribeTransfer(ticker, amount)
描述
铭刻可转移的 BRC-20,该方法会弹出发送弹窗,用户确认后,会发送交易
参数
ticker: string; // BRC-20 token的标识
amount: number; // 铭刻的数量
返回值
Promise<string> // 交易hash
签名消息 - signMessage
window.bybitWallet.bitcoin.signMessage(msg[, type])
描述
签名消息
参数
msg: string; // 消息
type?: 'hex' | 'utf8'; // "ecdsa" | "bip322-simple". default is "ecdsa"
返回值
Promise<string> // 签名
示例
const msg = 'need sign string';
const result = await window.bybitWallet.bitcoin.signMessage(msg, 'ecdsa')
// example
INg2ZeG8b6GsiYLiWeQQpvmfFHqCt3zC6ocdlN9ZRQLhSFZdGhgYWF8ipar1wqJtYufxzSYiZm5kdlAcnxgZWQU=
广播交易 - pushTx
window.bybitWallet.bitcoin.pushTx(rawTx)
描述
广播交易
参数
rawTx: string; // 交易的原始数据
返回值
Promise<string> // 交易hash
示例
try {
let txid = await window.bybitWallet.bitcoin.pushTx('0200000000010135bd7d...');
console.log(txid);
} catch (e) {
console.log(e);
}
签名Psbt - signPsbt
window.bybitWallet.bitcoin.signPsbt(psbtHex[, options])
描述
签名Psbt,该方法会弹出签名弹窗,用户确认后,会签名交易
参数
psbtHex: string; // 要签名的 psbt 的十六进制字符串
options?: {
autoFinalized: boolean;
toSignInputs: Array<{
index: number; // 要签名的输入
address: string; // (至少指定地址或公钥) 用于签名的相应私钥
publicKey: string; // (至少指定地址或公钥) 用于签名的相应私钥
sighashTypes: number[]; // sighashTypes
disableTweakSigner: boolean; // (可选) 签名和解锁 Taproot 地址时, 默认使用 tweakSigner 来生成签名,启用此选项允许使用原始私钥进行签名
}>
}
返回值
Promise<string> // 签名后的 psbt 的十六进制字符串
示例
try {
let res = await window.bybitWallet.bitcoin.signPsbt('70736274ff01007d....', {
autoFinalized: false,
toSignInputs: [
{
index: 0,
address: 'tb1q8h8....mjxzny',
},
{
index: 1,
publicKey: 'tb1q8h8....mjxzny',
sighashTypes: [1],
},
{
index: 2,
publicKey: '02062...8779693f',
},
],
});
console.log(res);
} catch (e) {
console.log(e);
}
window.bybitWallet.bitcoin.signPsbt('xxxxxxxx', {
toSignInputs: [{ index: 0, publicKey: 'xxxxxx', disableTweakSigner: true }],
autoFinalized: false,
});
广播PSBT交易 - pushPsbt
window.bybitWallet.bitcoin.pushPsbt(psbtHex)
描述
广播PSBT交易
参数
psbtHex: string; // 要推送的 psbt 的十六进制字符串
返回值
Promise<string> // 交易hash
示例
try {
let res = await window.bybitWallet.bitcoin.pushPsbt('70736274ff01007d....');
console.log(res);
} catch (e) {
console.log(e);
}
事件
accountsChanged
描述
每当用户暴露的账户地址发生变化时,就会发出该消息
示例
window.bybitWallet.bitcoin.on('accountsChanged', (accounts) => {
console.log(accounts)[
// example
'tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'
];
});