Facts about the MyDoge app’s in-app browser that affect dApps. For background, see About the MyDoge In-App Browser.
Feature Support#
| Feature | MyDoge 3.1.0 | MyDoge 3.1.1 (build 652) | Planned, not yet released |
|---|---|---|---|
| Wallet on the origin the dApp opened at | Yes | Yes | Yes |
| Wallet on every origin on the listing | No | Yes | Yes |
mydoge://dapp links to listed dApps | No | Yes | Yes |
| Tapped X links that open in the same view | Yes | Yes | Yes |
X links from target="_blank" or window.open() on iOS | No | Yes | Yes |
Account sheet from openModal() and the embed’s Account | No | No | Yes |
| Silent reconnect of an approved dApp | No | No | Yes |
Account-change events (accountsChanged) | No | No | Yes |
On builds without the account sheet, openModal() and the embed’s Account button do nothing while a wallet is connected, and the SDK logs a warning.
Wallet Provider#
| Property | Value |
|---|---|
| Provider | EIP-1193 |
| Announcement | EIP-6963 |
rdns | com.mydoge.wallet |
| Injected into | Top-level pages only |
| Wallet permission | Granted to pages on the listing’s origins once the page has loaded |
| Chain families | EVM only |
| Starting network | DogeOS Chikyū Testnet (0x5fdaf3) when the listing names it or no chains; otherwise one of the listing’s chains |
The MyDoge browser extension uses a different rdns and isn’t detected as the in-app browser.
Wallet Requests#
MyDoge answers these requests itself:
| Request | Behavior |
|---|---|
eth_requestAccounts | Asks the user to connect |
eth_accounts | Returns the connected account. On MyDoge 3.1.1 (build 652) and earlier, it asks the user to connect if the dApp isn’t approved yet, so don’t call it on page load |
eth_chainId, net_version | Returns the active network |
web3_clientVersion | Returns MyDoge/<version> |
personal_sign, eth_sign | Asks the user to sign a message |
eth_signTypedData, eth_signTypedData_v3, eth_signTypedData_v4 | Asks the user to sign typed data |
personal_ecRecover | Recovers the signer of a message |
eth_sendTransaction | Asks the user to approve, then sends; returns the transaction hash |
wallet_switchEthereumChain, wallet_addEthereumChain | Asks the user to switch to a network MyDoge already supports; can’t add new networks |
wallet_requestPermissions | Asks the user to connect; returns the account addresses |
wallet_revokePermissions | Revokes the dApp’s account access |
wallet_getCapabilities | Returns the wallet’s capabilities |
Other eth_* calls, such as eth_call, eth_getBalance and eth_estimateGas, go to the active network’s RPC. Event subscriptions (eth_subscribe) aren’t supported; poll instead.
- Switching wallet or account cancels pending requests.
- You must send one request at a time. Some MyDoge versions reject a second request while one is open. The SDK queues every request it sends to MyDoge, including reads, so a read waits while an approval is open. For frequent reads, such as polling, use your own RPC connection.
Errors#
| Code | When |
|---|---|
4001 | The user rejected the request |
-32602 | A transaction or typed-data domain names a different chainId than the active network |
-32603 | A transaction failed after the user approved it (MyDoge 3.1.1 and later; MyDoge 3.1.0 returns 4001 instead) |
-1 | A generic error with the message Unknown. For a network switch, it means cancelled or not supported, and the two can’t be told apart. Failed eth_* read calls, such as a reverted eth_call, and malformed requests also return it, without the revert data; use your own RPC connection when you need revert reasons |
See the Errors reference for the SDK’s own codes.
Known Limitations#
- Typed data from social wallets. Email and social wallets reject
eth_signTypedData_v3andeth_signTypedData_v4requests with a mixed-case (checksummed)domain.verifyingContractordomain.salt, or with nested objects or integers inmessage.personal_signand transactions aren’t affected. A fix is in progress. - Popups.
window.openloads the page in the same view, with nowindow.opener. - Google sign-in. Google blocks sign-in in embedded browsers.
- Links. Links to X (
x.com,twitter.com) open in the X app or the system browser; otherhttpslinks load inside the dApp’s view. Links that leave the dApp open only from a tap, in the top-level page.location.hrefdoesn’t open them on iOS. MyDoge ignores a secondmydoge://dapplink within two seconds. App links such astwitter://andmailto:aren’t opened.
Unlisted dApps#
| Property | Value |
|---|---|
| Setting | Settings → Advanced Settings → Allow unlisted dApps |
| Default | Off |
| Turned on by links | No |
| Turning it off | Closes any open unlisted dApp and cancels its pending wallet requests |
| URLs | Public https:// only; not http://, localhost or LAN addresses |
| Wallet access | The origin that was opened only |
| Search URL entry | MyDoge 3.1.0 with its latest update, and later |
Test Link Parameters#
mydoge://dapp?mode=unofficial&url=… opens an unlisted dApp. Each value is encoded once with encodeURIComponent.
| Parameter | Required | Value | Limit |
|---|---|---|---|
mode | Yes | unofficial | |
url | Yes | Full https:// URL of the dApp | 8 KiB |
name | No | Display name | 80 characters |
subtitle | No | Tagline | 160 characters |
description | No | About text | 1,000 characters |
icon | No | Square logo URL, PNG, JPEG or WebP over https | 2 MiB file |
image | No | Hero image URL, PNG, JPEG or WebP over https | 2 MiB file |
MyDoge rejects the link when:
name,subtitleordescriptioncontains a line break or other control character;name,subtitle,description,iconandimagetogether exceed 4 KiB, or an image URL exceeds 2,048 bytes;- the whole link exceeds 32 KiB;
- a field is empty, unknown or repeated, or a space is encoded as
+.
Testers always see the intro screen, and still need Allow unlisted dApps turned on.
Without mode=unofficial, mydoge://dapp?url=… opens only listed dApps, and takes only the url parameter.