Fluent 会在用户浏览的网页中插入全局变量 window.conflux. 开发者可以通过这个全局变量获得钱包账户, 请求链上数据, 请求用户签名或发交易.
⚠️ Fluent 会"劫持" ConfluxPortal 插入的 window.conflux. 如果用户同时安装了 Fluent 和 ConfluxPortal, 通过 window.conflux 向钱包发送的请求都将发给 Fluent.
ℹ️ 我们以后可能会在 Fluent 中加入一个选项, 让用户来选择是否劫持发送给 ConfluxPortal 的请求.
属性
conflux.isFluent
⚠️ 这不是一个标准的属性, Fluent 以外的其它钱包也可能会设置这个属性为 true.
⚠️ 为了兼容 ConfluxPortal, Fluent 也将 conflux.isConfluxPortal 设置为了 true. (这个属性以后可能会被移除). true 表示用户安装了 Fluent 浏览器插件钱包.
方法
conflux.isConnected()
如果钱包的 Provider 成功与区块链建立了连接, 该方法会返回 true. 如果钱包的 Provider 没有与区块链建立连接, 用户必须刷新当前页面来重新建立连接. 可以查看 connect 和 disconnect 事件来了解更多相关信息.
conflux.request()
interface RequestArguments {
method: string;
params?: unknown[] | object;
}
conflux.request(args: RequestArguments): Promise<unknown>;
使用该方法向钱包或区块链提交 RPC 请求. 该方法返回一个 Promise, Promise 最终会 resolve 为 RPC 方法返回的结果. 不同 RPC 方法对应的 params 和返回的结果不同.
如果一个 RPC 方法需要参数, 大部分情况下参数都会是 Array<any> 或 Object. 空参数可以不传或者传空数组.
如果请求失败了, Promise 会 reject 为 RPC 错误.
目前, Fluent 支持 Conflux 大部分标准的 RPC 方法. 同时还提供了一些钱包独有的方法, 其它钱包可能不会提供这些独有方法. 详情请查看 Fluent RPC API 文档.
示例代码:
params: [
{
from: 'cfx:aana7ds0dvsxftyanc727snuu6husj3vmyc3f1ay93',
to: 'cfx:aana7ds0dvsxftyanc727snuu6husj3vmyc3f1ay93',
gas: '0x5208', // 21000
gasPrice: '0x7530', // 30000
value: '0x1'
},
];
conflux
.request({
method: 'cfx_sendTransaction',
params,
})
.then((result) => {
// 不同 RPC 方法返回不同的结果
// 比如该示例中的方法以十六进制字符串的形式返回已发送的交易的哈希
})
.catch((error) => {
// 如果请求失败, 这里会包含 Promise reject 的错误
});
事件
Fluent 的 window.conflux provider 实现了 Node.js EventEmitter API. 建议查看关于 Fluent Provider EventEmitter 获得更详细的信息.
connect
Fluent Provider 在与区块链成功建立连接后会发送该事件.
建议使用该事件和 conflux.isConnected() 方法来检测钱包状态以决定钱包是否连接, 钱包何时连接.
disconnect
Fluent Provider 在丢失与区块链的连接时会发送该事件. 这种情况一般是由于钱包用户的设备断网或网络状况很差.
一旦发送了该事件, Fluent Provider 不会再继续接受 RPC 请求, 直到重新与区块链建立连接后才继续接受 RPC 请求. 重新与区块链建立连接需要用户刷新浏览器当前页面.
accountsChanged
每当 cfx_accounts RPC 方法返回的结果变化时, Fluent Provider 就会发送该事件. cfx_accounts 方法始终返回一个数组, 数组可能为
- 空, 表示未获得钱包授权
- 含有一个地址, 改地址为已获得授权的(多个或一个)地址中, 钱包最近切换到的那个地址
Fluent 通过页面的 origin 来确定请求授权的一方, 也就是说同一个 origin 共享钱包的权限.
ℹ️ 我们计划以后在 cfx_accounts 返回的数组中包含所有用户同意授权的地址.
chainChanged
当用户切换钱包连接的链时, Fluent Provider 会发送该事件. 事件的参数为 16 进制字符串 chainId , 如 0x405 表示 Conflux 主网.
ℹ️ 我们计划以后允许 Dapp 同时可以给多个网络发送 RPC 请求.
message
当 Fluent Provider 需要发送信息给监听者时会发送该事件. 监听者可以通过事件内 type 的字段来判断事件的类型.
评论
0 条评论
文章评论已关闭。