Wallet generation
Dogecoin key material
The POS Terminal's wallet setup derives compressed Dogecoin mainnet keys in browser JavaScript using secp256k1, WIF prefix 0x9e, and P2PKH address prefix 0x1e.
d = random 256-bit integer, 1 <= d < n
Q = d * G on secp256k1
compressed_pubkey = (0x02 if Qy is even else 0x03) || Qx
hash160 = RIPEMD160(SHA256(compressed_pubkey))
address = Base58Check(0x1e || hash160)
wif = Base58Check(0x9e || d || 0x01)
For serious funds, use a dedicated wallet or hardware wallet and treat this site as watch-only.
Payment URI and QR
Dogecoin request format
The local tools build a URI with the receiving address, optional amount, and memo. Wallet support varies, so test with a small amount before public checkout.
dogecoin:DExampleAddress?amount=25.00000000&message=DOGE%20sale
/qr.svg?data=dogecoin:D...address...
QR images are generated by this Django route, not an external image service.
Lookup and validation
Public blockchain data
Balance lookup uses the public address only. Transaction validation uses txids and public chain metadata to help staff decide whether the confirmation rule has been met. For production, configure a dedicated Dogecoin Blockbook-compatible indexer instead of relying on public demo APIs.
DOGE_BLOCKBOOK_BASE_URL=https://your-dogecoin-indexer.example
GET /api/v2/address/{address}?details=txs&pageSize=10
https://blockchair.com/dogecoin/transaction/{txid}
Never send WIF or private keys to a lookup service.
Market data
DOGE-USD reference data
The Statistics and Tools pages use Coinbase's unauthenticated market-data endpoints for DOGE-USD ticker, trades, and candles. This is a quote reference, not settlement.
Live website checkout
Embed review, payment, and verification in one component
Build the snippet in Tools, then paste the generated loader and <doge-checkout> element into your site. The isolated checkout creates a fresh quote, freezes it when the customer continues, watches for a new matching transaction, and validates the public chain result.
<script async src="https://commerce.dog/static/commerce/js/doge_checkout.js"></script>
<doge-checkout
merchant="Example Coffee"
address="YOUR_DOGECOIN_RECEIVING_ADDRESS"
offer="Coffee order"
usd="10.00"
memo="Web order 123"
order-id="order-123"
confirmations="1"
quote-minutes="10"
button-text="Continue with DOGE"
return-url="https://example.com/thanks">
</doge-checkout>
1 — ReviewFresh DOGE quoteShows the USD total, buffered DOGE amount, and quote timing.
2 — PayFrozen QR requestOpens a wallet or displays the exact amount while automatic detection runs.
3 — VerifyChain confirmationShows pending progress, a verified receipt, or a merchant-review state.
Attributes, events, and methods
Attributes
merchant, required public address, offer, usd, and memo define the order.
order-id is an optional host reference, not an on-chain identifier.
confirmations accepts 0–12; quote-minutes accepts 1–30.
button-text customizes the call to action; return-url adds an HTTPS-only post-payment destination.
embed-url is an advanced HTTP(S) override for a self-hosted frame.
Lifecycle events
ready, quote, stagechange, paymentdetected, verificationpending, verified, reviewrequired, expired, error, and state are dispatched as dogecheckout:<name>.
const checkout = document.querySelector("doge-checkout");
checkout.on("verified", ({ detail }) => {
console.log(detail.txid, detail.matchedDoge);
// Revalidate server-side before fulfillment.
});
Host methods
configure(config) / update(config), restart(), refresh(), getState(), on(name, handler), and destroy() are available on the element. DogeCheckout.mount(target, config) creates one from JavaScript.
Updating configuration rebuilds the frame only before payment begins. Once the quote is frozen, restart first or mount a new checkout; mid-payment updates are rejected.
Browser verification is not a fulfillment authorization.
Every event is marked advisory: true. Revalidate the txid, receiving address, exact amount, and confirmations on your server before automated fulfillment. Concurrent automated orders need unique per-order receiving addresses or a server-side invoice provider; a memo and order-id do not distinguish payments on-chain. The embed accepts only a public address — never put a WIF, private key, seed phrase, or mnemonic in page markup.
For a strict host Content Security Policy, allow https://commerce.dog in script-src, style-src, and frame-src, or allow the equivalent origin when self-hosting. The isolated frame keeps blockchain API calls same-origin, so broad API CORS access is not needed.