欧易 Injected providers API 是一个 JavaScript API,欧易将其注入用户访问的网站。您的 DApp 可以使用此 API 请求用户帐户,从用户连接的区块链读取数据,帮助用户签署消息和交易。
Dapp 可以通过两种方式访问注入的对象,分别是:
window.okxwallet.starknet
window.starknet_okxwallet
这两个属性都指向同一个对象,提供两个方式是为了方便 Dapp 使用。
如果 Dapp 希望直接访问欧易 Web3 钱包注入的 Starknet 对象,可以直接使用 window.okxwallet.starknet
或者 window.starknet_okxwallet
,从而避免意外引用到其他钱包注入的 Starknet 对象。
如果 Dapp 使用了 get-starknet 这种第三方工具库,也可以完全支持。
name
- string:钱包的名称,值为 'OKX Wallet'icon
- string:钱包的图标version
- string:版本号isConnected
- boolean::当前钱包是否已连接上selectedAddress
- string:用户当前选中的钱包地址account
- Account:访问账户对象,继承自 starknet.js 的 Account ,实例上的具体属性和方法,可参考 starknet.js 的文档chainId
- string:仅支持主网,值为 SN_MAIN
provider
- Provider:访问 provider 对象,使用的是 starknet.js 的 RpcProvider ,实例上的具体属性和方法,可参考 starknet.js 的文档enable
- () => [string]:用于连接钱包,成功调用后,会唤起欧易 Web3 钱包连接钱包页面,用户可以决定是否连接当前 DApp,如果用户同意,将会返回选中地址的单项数组on
- (event, callback) => void:添加事件监听
accountsChanged
事件:当用户切换账户时会触发该事件,并返回新地址的数组;当断开连接时,会返回空数组。off
- (event, callback) => void:移除事件监听async function connect() {
if(window.okxwallet.starknet.isConnected) {
return
}
try {
const [address] = await window.okxwallet.starknet.enable()
console.log(address)
console.log(window.okxwallet.starknet.account)
console.log(window.okxwallet.starknet.selectedAddress)
console.log(window.okxwallet.starknet.isConnected)
window.okxwallet.starknet.on('accountsChanged', ([addr]) => {
if (addr) {
console.log('switched address')
} else {
console.log('disconnected')
}
})
} catch (e) {
console.error(e)
}
}
window.okxwallet.starknet.account.execute(transactions [, abi])
执行一个或多个调用。如果只有一个调用,则 transactions
就是一个对象,其包含的属性会在下面说明。如果有多个调用,则是一个对象的数组。
transactions
对象的结构如下:
contractAddress
- string:合约的地址entrypoint
- string:合约的入口点calldata
- array:调用数据signature
- array:签名abi
- 合约的 abi,可选的
result
- object
transaction_hash
- string:交易的 hashconst transaction = {
"contractAddress": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
"calldata": [
"3055261660830722006547698919883585605584552967779072711973046411977660833095",
"100000000000000",
"0"
],
"entrypoint": "transfer"
}
const result = await window.okxwallet.starknet.account.execute(transaction)
window.okxwallet.starknet.account.signMessage(data)
data
- object:要签名的对象signature
- string[]:签名的结果,包含两项let data = {
"domain": {
"name": "OKX",
"chainId": "SN_MAIN",
"version": "0.0.1"
},
"types": {
"StarkNetDomain": [
{
"name": "name",
"type": "felt"
}
],
"Message": [
{
"name": "message",
"type": "felt"
}
]
},
"primaryType": "Message",
"message": {
"message": "hello"
}
}
const [r, s] = await window.okxwallet.starknet.account.signMessage(data)
starknet.account
和 starknet.provider
上的其他属性和方法,请查看 starknet.js 文档。