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
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.
/// 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,
}
}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.
createAccount + InitializeMint2 + ATA + MintTo, optionally SetAuthority(MintTokens → none). The mint public key is the coin. Wallets already display it.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.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);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.
Porting DogeOS, then launching a dog coin
$ 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" }