Docs / Wallet provider / Sending DOGE & DRC-20 Coins

window.dogesoft

Sending DOGE & DRC-20 Coins

Send DOGE and DRC-20 Coins directly from the injected provider, with the user approving every send.

Live

Every method below opens the wallet's own confirmation UI — your page never sees a private key, and the user always gets a chance to review amount, recipient and fee before anything broadcasts.

ℹ️

One surface, two hosts. sendDoge(), sendDrc20() and sendInscription() work in both the browser extension and the Doge Soft mobile app's browser. Each opens the wallet's own confirmation screen, so approval is always the user's.

Send DOGE

The wallet handles fee rate estimation, UTXO selection and change — you just describe the intent.

send-doge.js
const { txid } = await dogesoft.sendDoge({
  to: "D8p...recipient",
  amount: 4.2,       // DOGE, not koinu
  feeTier: "normal", // optional — "slow" | "normal" | "fast"
  feeRate: undefined  // optional — koinu per vbyte, overrides feeTier
});

Fee tiers for plain DOGE sends: slow 0.01 DOGE/kB, normal 0.1 DOGE/kB (the default) and fast 1 DOGE/kB. A feeRate is clamped to 1,000–300,000 koinu/vB (0.01–3 DOGE/kB), so a too-low rate can't leave the transaction stuck and a too-high one can't drain the wallet. The approval window shows the exact network fee and total before the user signs, and the wallet never signs a higher fee than the one approved. DRC-20 and inscription transfers always use 1 DOGE/kB. Currently honored by the Chrome extension; the mobile app still sends at 1 DOGE/kB.

Send DRC-20 Coins

sendDrc20() creates the DRC-20 transfer inscription and delivers it to the recipient (commit → reveal → move, described on the send pipeline page). Pass tick, amount (a decimal string) and to. The call resolves when the user has confirmed and the send is submitted. In the extension the result includes the move txid; the mobile app resolves { ok: true }. Don't depend on a txid here: confirm delivery with the Explorer API.

send-drc20.js
await dogesoft.sendDrc20({
  tick: "WOOF",
  amount: "1000",
  to: "D8p...recipient"
});

Sending a single one-of-a-kind inscription (a Doginal) uses a separate call, sendInscription(), keyed by inscription ID rather than tick and amount. The wallet must currently hold that inscription, and it refuses outputs that carry DRC-20 balance (use sendDrc20() for those):

send-inscription.js
await dogesoft.sendInscription({
  inscriptionId: "a1b2...i0",
  to: "D8p...recipient"
});
ℹ️

Sending DRC-20 Coins to many recipients in one batch is currently a wallet-app-only feature — it isn't exposed on window.dogesoft for third-party integrations. See the batch send section for how it works and its current status.