导读: 本教程手把手带你掌握使用JS对接TP钱包、接入Web3应用的完整流程,TP钱包作为主流移动端Web3钱包,支持通过EIP-1193标准实现DApp交互,教程将从前置准备入手,讲解如何检测客户端是否注入TP钱包实例,再引导编写代码请求用户授权连接钱包,获取账户与当前链ID,后续还会演示交易签名、链切换...
本教程手把手带你掌握使用JS对接TP钱包、接入Web3应用的完整流程,TP钱包作为主流移动端Web3钱包,支持通过EIP-1193标准实现DApp交互,教程将从前置准备入手,讲解如何检测客户端是否注入TP钱包实例,再引导编写代码请求用户授权连接钱包,获取账户与当前链ID,后续还会演示交易签名、链切换等核心功能,同时涵盖异常场景处理方案,通过本教程,开发者可快速打通连接链路,降低Web3应用开发门槛。
随着Web3.0生态的快速发展,越来越多的去中心化应用(DApp)需要对接主流钱包实现用户身份验证和资产交互,TP钱包作为国内用户基数较大的多链钱包,支持EVM、Solana等多条公链,其中EVM链的对接是开发者最常见的需求,本文将从基础原理到实战代码,带你快速通过JS完成TP钱包的链接与基础交互。
前置准备
在开始开发前,你需要确认以下环境和认知:
- 运行环境:PC端需安装TP钱包浏览器插件,移动端需使用TP钱包内置的DApp浏览器访问你的站点
- 标准兼容:TP钱包兼容EIP-1193以太坊钱包标准,可直接使用标准钱包API进行交互
- 开发环境:支持原生JS或主流前端框架(Vue/React)的开发环境
核心步骤与代码实战
检测TP钱包是否已安装
TP钱包会在浏览器环境中注入全局对象window.tokenpocket,我们可以通过该对象检测钱包是否存在:
// 检测TP钱包是否安装
function checkTPWalletInstalled() {
if (window.tokenpocket && window.tokenpocket.isTokenPocket) {
return true;
}
alert('未检测到TP钱包,请先安装TP钱包插件或使用TP内置浏览器访问');
return false;
}
请求连接TP钱包
通过EIP-1193标准的eth_requestAccounts方法,唤起TP钱包的授权连接弹窗,用户确认后即可获取钱包地址:
async function connectTPWallet() {
if (!checkTPWalletInstalled()) return;
try {
// 发起钱包连接请求
const accounts = await window.tokenpocket.request({
method: 'eth_requestAccounts'
});
const currentAddress = accounts[0];
console.log('钱包连接成功,当前地址:', currentAddress);
// 更新页面UI展示钱包地址
document.getElementById('wallet-address').innerText = `当前钱包地址:${currentAddress}`;
return currentAddress;
} catch (error) {
// 处理用户拒绝连接的情况
if (error.code === 4001) {
alert('您已拒绝钱包连接请求');
} else {
console.error('钱包连接失败:', error);
alert('钱包连接失败,请检查TP钱包是否正常运行');
}
}
}
获取当前钱包与链信息
连接成功后,可以主动获取当前钱包的链ID和活跃账户:
async function getWalletCurrentInfo() {
try {
// 获取当前链ID(十六进制格式)
const chainIdHex = await window.tokenpocket.request({ method: 'eth_chainId' });
const chainIdDecimal = parseInt(chainIdHex, 16);
// 获取当前活跃钱包地址
const accounts = await window.tokenpocket.request({ method: 'eth_accounts' });
console.log(`当前链ID:${chainIdDecimal},当前账户:${accounts[0] || '无'}`);
} catch (error) {
console.error('获取钱包信息失败:', error);
}
}
切换或添加公链
如果需要引导用户切换到指定公链(比如BSC、Polygon),可以使用标准钱包API实现自动切换,未添加过的链会自动唤起添加弹窗:
async function switchToTargetChain(chainConfig) {
const { chainIdHex, chainName, nativeCurrency, rpcUrls, blockExplorerUrls } = chainConfig;
try {
// 尝试切换链
await window.tokenpocket.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: chainIdHex }]
});
} catch (switchError) {
//转载请注明出处:TP钱包下载,如有疑问,请联系()。
本文地址:https://fzmdzx.com/sdf/2869.html
