Skip to main content
在 Widget Light 中,主机应用拥有所有钱包连接。运行在 iframe 内的 widget 从不直接接触浏览器扩展或私钥。取而代之的是,生态系统处理器将来自 iframe 的 RPC 请求桥接到你的钱包 provider。

钱包桥接的工作原理

当 iframe 内的 widget 需要执行钱包操作(发送交易、签名消息、切换链)时,它会通过 postMessage 发送一条 RPC_REQUEST 消息。主机端的处理器使用你的钱包 provider 处理该请求,并将结果作为 RPC_RESPONSE 发送回来。
钱包状态变化(账户切换、链更改、连接/断开连接)也会通过 EVENT 消息自动从主机推送到 iframe。

IframeEcosystemHandler 接口

每个生态系统处理器都实现 IframeEcosystemHandler 接口:

生态系统处理器

EVM — useEthereumIframeHandler()

EVM 处理器会自动从你的 wagmi 上下文中读取钱包状态。无需任何参数。
支持的 RPC 方法: 任何无法识别的方法都会被转发到公共客户端(例如 eth_getBalanceeth_call)。 发出的钱包事件: accountsChangedchainChangedconnect

Solana — useSolanaIframeHandler(params)

Solana 处理器与具体库无关。你需要显式传入钱包状态,因此它可以与任何提供 wallet-standard Wallet 实例的 Solana 钱包库配合使用。
参数: 支持的 RPC 方法: 发出的钱包事件: accountsChangedconnectdisconnect

Bitcoin — useBitcoinIframeHandler()

Bitcoin 处理器会自动从 @bigmi/react 上下文中读取钱包状态。无需任何参数。
支持的 RPC 方法: 发出的钱包事件: accountsChangedconnectdisconnect

Sui — useSuiIframeHandler()

Sui 处理器会自动从 @mysten/dapp-kit-react 钩子中读取钱包状态。无需任何参数。
支持的 RPC 方法: 发出的钱包事件: accountsChangedconnectdisconnect

Tron — useTronIframeHandler(params)

Tron 处理器与具体库无关。你需要显式传入钱包状态,因此它可以与任何提供兼容适配器的 Tron 钱包库配合使用。
参数: 支持的 RPC 方法: 发出的钱包事件: accountsChangedconnectdisconnect

子路径导入

每个生态系统处理器都通过子路径导入暴露,以支持 tree-shaking。如果你只使用 EVM,则 Solana、Bitcoin、Sui 和 Tron 处理器(及其对等依赖)永远不会包含在你的 bundle 中:

组合多个处理器

将你的所有处理器作为数组传入。widget 会将每个 RPC 请求路由到与该请求 chainType 匹配的处理器:

外部钱包管理

如果你的应用有自己的钱包连接 UI(连接按钮、弹窗等),请使用 onConnect prop 来拦截来自 widget 的钱包连接请求。当提供了 onConnect 时,widget 会向主机发送 CONNECT_WALLET_REQUEST,而不是打开其内置的钱包菜单。
ConnectWalletArgs 类型包含:
当提供了 onConnect 时,主机会在发送到 iframe 的配置中自动设置 walletConfig.useExternalWalletManagement: true。你无需手动设置它。