OKX Injected Providers API 基于 JavaScript 模型,由 OKX 嵌入用户访问网站中。DApp 项目可以通过调用此 API 请求用户账户信息,从用户所连接的区块链中读取数据,并协助用户进行消息和交易的签署。
okxwallet.bitcoin.connect()
描述
连接钱包
参数
无
返回值
示例
const result = await okxwallet.bitcoin.connect()
// example
{
address: 'bc1pwqye6x35g2n6xpwalywhpsvsu39k3l6086cvdgqazlw9mz2meansz9knaq',
publicKey: '4a627f388196639041ce226c0229560127ef9a5a39d4885123cd82dc82d8b497'
}
okxwallet.bitcoin.requestAccounts()
描述
请求连接当前账户
参数
无
返回值
示例
try {
let accounts = await okxwallet.bitcoin.requestAccounts();
console.log('connect success', accounts);
} catch (e) {
console.log('connect failed');
}
// example
['tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'];
okxwallet.bitcoin.getAccounts()
描述
获取当前账户地址
参数
无
返回值
示例
try {
let res = await okxwallet.bitcoin.getAccounts();
console.log(res);
} catch (e) {
console.log(e);
}
// example
['tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'];
okxwallet.bitcoin.getNetwork()
描述
获取网络
参数
无
返回值
示例
try {
let res = await okxwallet.bitcoin.getNetwork();
console.log(res);
} catch (e) {
console.log(e);
}
// example
livenet;
okxwallet.bitcoin.getPublicKey()
描述
获取当前账户的公钥
参数
无
返回值
示例
try {
let res = await okxwallet.bitcoin.getPublicKey();
console.log(res)
} catch (e) {
console.log(e);
}
// example
03cbaedc26f03fd3ba02fc936f338e980c9e2172c5e23128877ed46827e935296f
okxwallet.bitcoin.getBalance()
描述
获取 BTC 余额
参数
无
返回值
示例
try {
let res = await okxwallet.bitcoin.getBalance();
console.log(res)
} catch (e) {
console.log(e);
}
// example
{
"confirmed":0,
"unconfirmed":100000,
"total":100000
}
okxwallet.bitcoin.getInscriptions()
描述
获取当前账户的铭文列表
参数
返回值
示例
try {
let res = await okxwallet.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'
}
]
}
okxwallet.bitcoin.sendBitcoin(toAddress, satoshis, options)
描述
发送比特币
参数
返回值
示例
try {
let txid = await okxwallet.bitcoin.sendBitcoin(
'tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz',
1000
);
console.log(txid);
} catch (e) {
console.log(e);
}
okxwallet.bitcoin.send({ from, to, value, satBytes })
描述
转移比特币 (支持 memo 字段)
参数
返回值
示例
const result = await window.okxwallet.bitcoin.send({
from: 'bc1p4k9ghlrynzuum080a4zk6e2my8kjzfhptr5747afzrn7xmmdtj6sgrhd0m',
to: 'bc1plklsxq4wtv44dv8nm49fj0gh0zm9zxewm6ayzahrxc8yqtennc2s9udmcd',
value: '0.000012',
});
// example
{
txhash: 'd153136cd74512b69d24c68b2d2c715c3629e607540c3f6cd3acc1140ca9bf57';
}
okxwallet.bitcoin.sendInscription(address, inscriptionId, options)
描述
发送铭文
参数
address - string:接收者地址
inscriptionId - string:铭文 ID + 协议,没有传协议则默认是 Ordinals NFT ,目前仅支持 Ordinals 及 Atomicals 协议
协议 | 描述 |
---|---|
Ordinals | Ordinals 协议 |
Atomicals | Atomicals 协议 |
options - object: (可选)
返回值
示例
// 发送 Ordinals NFT
try {
let txid = await okxwallet.bitcoin.sendInscription(
'tb1q8h8s4zd9y0lkrx334aqnj4ykqs220ss7mjxzny',
'e9b86a063d78cc8a1ed17d291703bcc95bcd521e087ab0c7f1621c9c607def1ai0',
{ feeRate: 15 }
);
console.log(
'send Ordinal NFT to tb1q8h8s4zd9y0lkrx334aqnj4ykqs220ss7mjxzny',
{ txid }
);
} catch (e) {
console.log(e);
}
// 发送 Atomicals NFT
try {
let txid = await okxwallet.bitcoin.sendInscription(
'tb1q8h8s4zd9y0lkrx334aqnj4ykqs220ss7mjxzny',
'ab12349dca49643fcc55c8e6a685ad0481047139c5b1af5af85387973fc7ceafi0-Atomicals',
{ feeRate: 15 }
);
console.log(
'send Atomicals NFT to tb1q8h8s4zd9y0lkrx334aqnj4ykqs220ss7mjxzny',
{ txid }
);
} catch (e) {
console.log(e);
}
okxwallet.bitcoin.transferNft({ from, to, data })
描述
发送铭文
transferNft
方法支持批量转移,sendInscription
方法只支持单个转移
参数
from - string:当前连接的钱包的 BTC 地址
to - string:接受 NFT 的地址
data - string | string[]:发送的 NFT tokenId + 协议,如果是数组,则是批量转移多个 NFT , 没有传协议则默认是 Ordinals NFT ,目前仅支持 Ordinals 及 Atomicals 协议
协议 | 描述 |
---|---|
Ordinals | Ordinals 协议 |
Atomicals | Atomicals 协议 |
返回值
示例
// 发送 Ordinals NFT
try {
let res = await window.okxwallet.bitcoin.transferNft({
from: 'bc1p8qfrmxdlmynr076uu28vlszxavwujwe7dus0r8y9thrnp5lgfh6qu2ctrr',
to: 'bc1p8qfrmxdlmynr076uu28vlszxavwujwe7dus0r8y9thrnp5lgfh6qu2ctrr',
data: [
'2f285ba4c457c98c35dcb008114b96cee7c957f00a6993690efb231f91ccc2d9i0-Ordinals',
'2f2532f59d6e46931bc84e496cc6b45f87966b149b85ed3199265cb845550d58i0-Ordinals',
],
});
console.log(res);
} catch (e) {
console.log(e);
}
// example
{
txhash: 'df409c3ce3c4d7d840b681fab8a3a5b8e32b1600636cc5409d84d2c06365a5fc';
}
// 发送 Atomicals NFT
try {
let res = await window.okxwallet.bitcoin.transferNft({
from: 'bc1p8qfrmxdlmynr076uu28vlszxavwujwe7dus0r8y9thrnp5lgfh6qu2ctrr',
to: 'bc1p8qfrmxdlmynr076uu28vlszxavwujwe7dus0r8y9thrnp5lgfh6qu2ctrr',
data: [
'ab12349dca49643fcc55c8e6a685ad0481047139c5b1af5af85387973fc7ceafi0-Atomicals',
],
});
console.log(res);
} catch (e) {
console.log(e);
}
// example
{
txhash: 'df409c3ce3c4d7d840b681fab8a3a5b8e32b1600636cc5409d84d2c06365a5fc';
}
okxwallet.bitcoin.signMessage(signStr[, type])
描述
签名消息
参数
返回值
示例
const signStr = 'need sign string';
const result = await window.okxwallet.bitcoin.signMessage(signStr, 'ecdsa')
// example
INg2ZeG8b6GsiYLiWeQQpvmfFHqCt3zC6ocdlN9ZRQLhSFZdGhgYWF8ipar1wqJtYufxzSYiZm5kdlAcnxgZWQU=
okxwallet.bitcoin.pushTx(rawTx)
描述
推送交易
参数
返回值
示例
try {
let txid = await okxwallet.bitcoin.pushTx('0200000000010135bd7d...');
console.log(txid);
} catch (e) {
console.log(e);
}
okxwallet.bitcoin.splitUtxo({ from, amount })
描述
拆分 UTXO,初始化钱包
拆分是因为签名算法需要
参数
返回值
{utxos: array}
: UTXO 和签名示例
try {
let { utxos } = await window.okxwallet.bitcoin.splitUtxo({
from: 'bc1pkrym02ck30phct287l0rktjjjnapavkl2qhsy78aeeeuk3qaaulqh90v6s',
});
console.log(utxos);
} catch (e) {
console.log(e);
}
// example
{
utxos: [
{
txId: '1e0f92720ef34ab75eefc5d691b551fb2f783eac61503a69cdf63eb7305d2306',
vOut: 0,
amount: 546,
rawTransaction: 'xxxx',
},
{
txId: '1e0f92720ef34ab75eefc5d691b551fb2f783eac61503a69cdf63eb7305d2306',
vOut: 1,
amount: 546,
rawTransaction: 'xxxx',
},
];
}
okxwallet.bitcoin.inscribe({ type, from, tick, tid })
描述
铭刻可转移的 BRC-20
参数
type - number:交易类型,详情见下表
类型 | 描述 |
---|---|
51 | 默认值,BRC-20 的转移铭刻 |
from - string:当前连接的钱包的 BTC 地址
tick - string:BRC-20 的代币名称 (来自于链上)
返回值
示例
try {
let txid = await okxwallet.bitcoin.inscribe({
from: 'bc1pkrym02ck30phct287l0rktjjjnapavkl2qhsy78aeeeuk3qaaulqh90v6s',
tick: 'ordi',
});
console.log(txid);
} catch (e) {
console.log(e);
}
okxwallet.bitcoin.mint({ type, from, inscriptions })
描述
支持 Ordinal 协议的通用铭刻,支持批量铭刻
参数
type - number:要发送的铭刻交易类型,详情见下表
类型 | 描述 |
---|---|
60 | BRC-20 deploy 铭刻 |
50 | BRC-20 mint 铭刻 |
51 | BRC-20 transfer 铭刻 |
62 | 图片铭刻,需要将图片转换为图片字节流的 16 进制字符串表示 |
61 | 纯文本 |
from - string:当前连接钱包的 BTC 地址
inscriptions - object[]:铭刻的数组。单个数组项是对象类型,其拥有的字段及其含义,如下表所示:
字段 | 类型 | 默认值 | 描述 |
---|---|---|---|
contentType | string | "text/plain;charset=utf-8" | 所铭刻内容的类型, MIME 类型的值,Ordinals 协议规定,详情可查看:https://docs.ordinals.com/inscriptions.html |
body | string | 无 | 所铭刻的内容 |
不同铭刻类型传入的 contentType 和 body 入参:
铭刻类型 | contentType | body |
---|---|---|
图片铭刻 | "image/png" 、"image/jpeg" 等 | 需要将图片转换为图片字节流的 16 进制字符串表示 |
BRC-20 | "text/plain;charset=utf-8" | 通过 JSON.stringify 转换为字符串即可 |
纯文本 | "text/plain;charset=utf-8" | 直接传入纯文本即可 |
返回值
示例
okxwallet.bitcoin.mint({
type: 61,
from: 'bc1p4k9ghlrynzuum080a4zk6e2my8kjzfhptr5747afzrn7xmmdtj6sgrhd0m',
inscriptions: [{
contentType: 'text/plain;charset=utf-8',
body: 'hello'
}, {
contentType: 'text/plain;charset=utf-8',
body: 'world'
}]
})
// response
{
"commitAddrs": [
"bc1p9trqtf68gfeq3f3hlktaapp0eapufh02ly8dr6swfwffflvncncqwvtuen",
"bc1p5ttl7q2mpvfhjq3wqffka4c05sv5jcfphcl5qeuj0pmsx7evfhcqhm60rk"
],
"commitTx": "453e126346bbaaef0aaaa208acd3426cd14a39f825bd76cb8d9892957e2a5bda",
"revealTxs": [
"526ff04e4ba34617ee28826412bdc8e22484890635320f880c5ec50f10d6b189",
"0f65f79456a59b3e0cd4ef00e279d0d6da57582e114eafbada95b51759a845b2"
],
"commitTxFee": 1379,
"revealTxFees": [
973,
973
],
feeRate: 80,
size: 546,
}
okxwallet.bitcoin.signPsbt(psbtHex[, options])
描述
签名 psbt,该方法将遍历所有与当前地址匹配的输入进行签名
参数
构建交易生成 psbt (string 类型),如果遇到 input 地址是 Taproot 类型,需要提供公钥。
示例:可参考下面的 txInput 和 publicKey。
const txInputs: utxoInput[] = [];
txInputs.push({
txId: "1e0f92720ef34ab75eefc5d691b551fb2f783eac61503a69cdf63eb7305d2306",
vOut: 2,
amount: 341474,
address: "tb1q8h8....mjxzny",
privateKey: "0s79......ldjejke",
publicKey: "tb1q8h8....mjxzny",
bip32Derivation: [
{
"masterFingerprint": "a22e8e32",
"pubkey": "tb1q8h8....mjxzny",
"path": "m/49'/0'/0'/0/0",
},
],
});
options
autoFinalized - boolean:签名后是否完成 psbt,默认为 true
toSignInputs - array:
返回值
示例
try {
let res = await okxwallet.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);
}
okxwallet.bitcoin.signPsbt('xxxxxxxx', {
toSignInputs: [{ index: 0, publicKey: 'xxxxxx', disableTweakSigner: true }],
autoFinalized: false,
});
okxwallet.bitcoin.signPsbts(psbtHexs[, options])
描述
签署多个 psbt,该方法将遍历所有与当前地址匹配的输入进行签名
参数
构建交易生成 psbt (string 类型),如果遇到 input 地址是 Taproot 类型,需要提供公钥。
示例:可参考下面的 txInput 和 publicKey。
const txInputs: utxoInput[] = [];
txInputs.push({
txId: "1e0f92720ef34ab75eefc5d691b551fb2f783eac61503a69cdf63eb7305d2306",
vOut: 2,
amount: 341474,
address: "tb1q8h8....mjxzny",
privateKey: "0s79......ldjejke",
publicKey: "tb1q8h8....mjxzny",
bip32Derivation: [
{
"masterFingerprint": "a22e8e32",
"pubkey": "tb1q8h8....mjxzny",
"path": "m/49'/0'/0'/0/0",
},
],
});
返回值
示例
try {
let res = await okxwallet.bitcoin.signPsbts([
'70736274ff01007d...',
'70736274ff01007d...',
]);
console.log(res);
} catch (e) {
console.log(e);
}
okxwallet.bitcoin.pushPsbt(psbtHex)
描述
广播 psbt 交易
参数
返回值
示例
try {
let res = await okxwallet.bitcoin.pushPsbt('70736274ff01007d....');
console.log(res);
} catch (e) {
console.log(e);
}
okxwallet.bitcoin.sendPsbt(txs, from)
描述
广播 psbt 交易
sendPsbt
方法支持批量上链,pushPsbt
方法只支持单个上链sendPsbt
支持传入 type
参数,使钱包内的交易历史展示更精确,而通过 pushPsbt
方法上链的交易在交易历史展示的比较简单参数
类型 | 描述 |
---|---|
52 | 发送 BRC-20 |
20 | 发送 NFT |
返回值
示例
okxwallet.bitcoin.sendPsbt([{
itemId: "xxxxx0", // 批量唯一标识,多笔交易内不重复即可
signedTx: '70736274ff01007d....', // 签名串
type: 52, // 类型 BRC-20 传递 52, NFT 传递 20
extJson: { // 拆UTXO的交易,可不传
// NFTID
inscription:"885441055c7bb5d1c54863e33f5c3a06e5a14cc4749cb61a9b3ff1dbe52a5bbbi0",
}
},{
itemId: "xxxxx1", // 批量唯一标识
signedTx: '70736274ff01007d....', // 签名串或者要上链的psbt
dependItemId: ['xxxxx0'], // 依赖的交易itemId,没有依赖的话,这个字段可以不传
type: 52, // 类型 BRC-20 传递 52, NFT 传递 20
extJson: {
// NFTID
inscription:"885441055c7bb5d1c54863e33f5c3a06e5a14cc4749cb61a9b3ff1dbe52a5bbbi0",
}
}], from)
// response
[
{"xxxxx0":"txId1"},{"xxxxx1":"txId2"} // 失败txId返回空
]
描述
欧易 Web3 钱包允许用户从单个扩展程序或移动应用程序中无缝管理多个账户。每当用户切换账户时,欧易 Web3 钱包都会发出一个 accountChanged
事件
如果用户在已连接到应用程序时更改账户,并且新账户已经将该应用程序列入白名单,那么用户将保持连接状态并且欧易 Web3 钱包将传递新账户的公钥:
用法
window.okxwallet.bitcoin.on('accountChanged', (addressInfo) => {
console.log(addressInfo);
{
"address": "bc1pwqye6x35g2n6xpwalywhpsvsu39k3l6086cvdgqazlw9mz2meansz9knaq",
"publicKey": "4a627f388196639041ce226c0229560127ef9a5a39d4885123cd82dc82d8b497",
"compressedPublicKey": "034a627f388196639041ce226c0229560127ef9a5a39d4885123cd82dc82d8b497"
}
});
描述
每当用户暴露的账户地址发生变化时,就会发出该消息
用法
window.okxwallet.bitcoin.on('accountsChanged', (accounts) => {
console.log(accounts)[
// example
'tb1qrn7tvhdf6wnh790384ahj56u0xaa0kqgautnnz'
];
});