DogeOS → Solana · such testnet wow

We forked DogeOS onto Solana so anyone can deploy dog coins with the same tokenomics as DOGE.

DogeOS is Dogecoin's application layer: an EVM-compatible zkVM, DOGE as gas, Ethereum for data availability, proofs that settle back to Dogecoin. We took that stack and re-homed execution and settlement on Solana. The coins you launch are real SPL tokens. The factory applies Dogecoin's emission parameters — 8 decimals, no hard cap, a 10,000-unit tail per 60-second epoch — instead of a fixed 1B vanity mint.

upstream DogeOS · settlement Solana · MIT

~/src/dogcoinbash — 96×24
upstream
DogeOS (zkEVM app layer)
settlement
Solana SPL
tokenomics
DOGE emission curve
decimals
8 (koinu)
tail subsidy
10,000 / epoch
hard cap
none
what we actually changed

DogeOS for builders, Solana for the mint

DogeOS exists because Dogecoin L1 is a payments chain: ~30 TPS, ~1-minute blocks, no general-purpose contracts. Their docs describe an application-layer rollup — zkEVM execution, ~300 TPS, ~3-second blocks, DOGE as the gas token — with calldata posted to Ethereum DA and proofs that Dogecoin verifies. Chikyū testnet is already open to builders. Millions of DOGE holders are waiting for more to do with DOGE.

We keep that product intent. We do not keep the settlement path. There is no Ethereum DA plane here, no L1GasPriceOracle, no Scrypt AuxPoW, and no leftover CTxOut / OP_SPLMINT story. A launched coin is an SPL mint the wallets already know: Phantom, Solflare, Backpack.

What the factory encodes is Dogecoin economics, not a DogeOS token. DogeOS docs do not publish a native token or a staking schedule. DOGE on DogeOS is gas. The emission curve we copy is Dogecoin L1's: uncapped, inflationary tail.

programs/factory/src/emission.rsDOGE tail, encoded for SPL
/// Dogecoin has no hard max supply. After the random-reward era,
/// subsidy settled at 10_000 DOGE per ~1-minute block — forever.
/// DogeOS does not redefine that. We port the schedule onto an SPL mint.
#[account]
pub struct EmissionParams {
    pub decimals: u8,             // 8, matching DOGE / koinu
    pub genesis_supply: u64,      // initial allocation, base units
    pub epoch_secs: i64,          // 60 — Dogecoin's block time
    pub subsidy_per_epoch: u64,   // 10_000 * 10^decimals
    pub hard_cap: Option<u64>,    // None: uncapped tail
}

pub fn next_subsidy(p: &EmissionParams, minted: u64) -> u64 {
    match p.hard_cap {
        Some(cap) if minted.saturating_add(p.subsidy_per_epoch) > cap => 0,
        _ => p.subsidy_per_epoch,
    }
}
mechanics

Four properties, none of them optional

The fork is not a wrapper around a vanity ticker. It is four rules that have to hold at the same time or the coin is just another SPL mint with a dog on it.

DogeOS app-layer intent
DogeOS is a security-focused scaling layer for Dogecoin: EVM bytecode, DOGE gas, zk proofs, Ethereum DA, Dogecoin finality. We keep the builder path — deploy a dog-economy app without waiting on L1 block time — and drop the parts that only make sense when Dogecoin is the verifier.
Solana settlement
Execution and accounts live on Solana. A launch is createAccount + InitializeMint2 + ATA + MintTo, optionally SetAuthority(MintTokens → none). The mint public key is the coin. Wallets already display it.
DOGE emission, not a 1B cap
Defaults are 8 decimals, a genesis allocation, and a 10,000-unit subsidy every 60-second epoch with no hard cap (~5.256B new units per year, the Dogecoin tail). Keeping mint authority lets that crank continue. Revoking it freezes supply — an explicit opt-out of the tail.
Fees follow DogeOS, paid in SOL
DogeOS charges executionFee + dataAndFinalityFee in DOGE. We keep the split: execution is Solana compute, settlement is signature + rent. There is no Ethereum blob market and no Dogecoin proof update in the fee.
sdks/factory/src/launch.tsone atomic SPL transaction
const mint = Keypair.generate();
const params = EmissionParams.doge(); // 8 dp, 10k / 60s, no cap

const tx = new Transaction().add(
  SystemProgram.createAccount({ /* mint account + rent */ }),
  createInitializeMint2Instruction(mint.publicKey, params.decimals, owner, owner),
  createAssociatedTokenAccountInstruction(owner, ata, owner, mint.publicKey),
  createMintToInstruction(mint.publicKey, ata, owner, params.genesisSupply),
  // Optional: freeze the tail. DOGE itself never did this.
  revokeMint
    ? createSetAuthorityInstruction(mint.publicKey, owner, AuthorityType.MintTokens, null)
    : undefined,
);

tx.partialSign(mint);
await wallet.signTransaction(tx);
the token

Launch a dog coin. It is already an SPL mint.

The form on this site builds a real Solana transaction: create the mint, initialise it with DOGE-like parameters, open your associated token account, mint the genesis supply, optionally revoke mint authority. Phantom, Solflare, and Backpack sign it. Devnet is the default because the signature is real.

We do not invent Dogecoin Core opcodes to pretend the UTXO set is involved. The old CTxOut / OP_SPLMINT path is gone. Settlement is Solana; tokenomics are DOGE.

end to end

Porting DogeOS, then launching a dog coin

terminal session — factorycaptured 2026-09-30
$ git remote -v
origin    git@github.com:dogcoin/dogcoin.git
upstream  https://github.com/DogeOS69

$ cargo test -p factory -- emission::doge_tail
test emission::uncapped_subsidy ... ok
test emission::no_scrypt_no_pow ... ok

$ dogcoin factory launch \
    --name dogcoin --symbol DOG --decimals 8 \
    --genesis 10000000000 --epoch 60 --subsidy 10000
{
  "mint": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
  "ata":  "FRi3…k2pQ",
  "params": { "decimals": 8, "hard_cap": null, "subsidy_per_epoch": "10000" },
  "sig":  "5u4d…n91c",
  "cluster": "devnet"
}

$ dogcoin factory params 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU
{ "curve": "doge-tail", "annual_issuance": "5256000000", "authority": "live" }