Интеграция кошелька с Trust Wallet
Trust Wallet — мобильный first кошелёк с встроенным DApp браузером. Интеграция отличается от MetaMask в одном важном аспекте: пользователь либо открывает ваш dApp прямо в браузере Trust Wallet, либо использует Trust Wallet через WalletConnect. Два совершенно разных пути подключения, которые нужно обрабатывать корректно.
Механизмы подключения
Встроенный браузер Trust Wallet
Когда пользователь открывает dApp в браузере внутри приложения Trust Wallet, тот инжектирует window.ethereum провайдер. Это стандартный EIP-1193 провайдер — работает как MetaMask. Идентифицировать Trust Wallet можно по window.ethereum.isTrust или window.trustwallet:
const isTrustWalletBrowser = window.ethereum?.isTrust || !!window.trustwallet
Для этого пути достаточно стандартного ethers.js или viem с window.ethereum:
import { createWalletClient, custom } from "viem"
import { mainnet } from "viem/chains"
const client = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
})
const [address] = await client.requestAddresses()
WalletConnect v2
Для пользователей десктопного браузера Trust Wallet подключается через WalletConnect. WalletConnect v2 — это WebSocket-релей с end-to-end шифрованием, подключение через QR-код или deep link.
WalletConnect v1 задеплоирован. Мигрируйте на v2. С июня 2023 года v1 серверы выключены.
Для реализации используем wagmi + @web3modal/wagmi или RainbowKit — они уже включают WalletConnect коннектор и Trust Wallet. Вручную:
import { WalletConnectConnector } from "@wagmi/connectors/walletConnect"
const connector = new WalletConnectConnector({
options: {
projectId: "YOUR_WC_PROJECT_ID", // от cloud.walletconnect.com
metadata: {
name: "My dApp",
description: "Description",
url: "https://app.example.com",
icons: ["https://app.example.com/icon.png"]
}
}
})
Рекомендуемый подход: wagmi + WalletConnect
Самый правильный путь — не писать интеграцию с нуля, а использовать wagmi с RainbowKit или ConnectKit. Trust Wallet поддерживается из коробки.
import { TrustWalletConnector } from "@wagmi/connectors/trustWallet"
import { createConfig, configureChains } from "wagmi"
import { mainnet, polygon } from "wagmi/chains"
import { alchemyProvider } from "wagmi/providers/alchemy"
const { chains, publicClient } = configureChains(
[mainnet, polygon],
[alchemyProvider({ apiKey: process.env.ALCHEMY_KEY! })]
)
const config = createConfig({
autoConnect: true,
connectors: [
new TrustWalletConnector({ chains }),
// WalletConnect как fallback
],
publicClient
})
Deep Links для мобильных пользователей
Trust Wallet поддерживает deep link схему для открытия dApp прямо в своём браузере:
https://link.trustwallet.com/open_url?coin_id=60&url=https%3A%2F%2Fapp.example.com
coin_id=60 — это Ethereum. Для других сетей: 195 (TRON), 714 (BNB Chain), 966 (Polygon).
Кнопка «Открыть в Trust Wallet» на мобильной версии сайта — UX improvement, который реально увеличивает конверсию в подключение на мобильных устройствах.
Подписание транзакций и сообщений
Trust Wallet поддерживает стандартные методы:
-
personal_sign— подпись произвольного сообщения -
eth_signTypedData_v4— EIP-712 структурированные данные -
eth_sendTransaction— отправка транзакций
Нюанс: при отображении транзакции Trust Wallet показывает decoded данные если знает ABI. Для лучшего UX — верифицируйте контракт на Etherscan, тогда пользователь видит читаемый вид транзакции, а не hex data.
Сроки
Базовая интеграция через wagmi + Trust Wallet connector + WalletConnect v2 — 1 день. Включая мобильный deep link и тестирование в реальном приложении Trust Wallet — 2 дня.







