Cosmos EVM is an open-source implementation for teams who want to build their own chain, rollup, or EVM-compatible application using the best Layer 1 stack in blockchain, including full Ethereum composability. Build custom modules for your SDK and get fast finality, complete decentralization, and built-in interoperability between EVM and Cosmos.
Onboard EVM builders and partners
Tap into Solidity developers and close deals with EVM protocols to expand your potential user base and partnership opportunities.
Best-in-class developer tooling
Improve the builder experience with trusted tooling like Foundry, Hardhat, Tenderly, and more.
Expanded wallet access for users
Compatibility with Metamask, Rabby, and Phantom makes it easy for millions of users to onboard to your chain.

Built-In Interoperability
Out-of-the-box interoperability over Cosmos’ IBC Eureka connects your chain or app to Ethereum, +120 Cosmos chains, and soon chains like Base and other L2s.
True Decentralization
Decentralize parts of your stack that would require centralized solutions on Ethereum/L2, like keeper networks, oracles, and automations.
Complete Customization
Use ready-to-go EVM modules or create custom ones, set any token for gas, and configurable to the consensus layer.

Cosmos EVM lets you pursue ambitious Cosmos-native features, like custom consensus, app-layer optimizations, and advanced precompiles, while tapping into Ethereum’s massive liquidity and user community.
Get the best of Cosmos’s technical advantages and Ethereum’s reach.
Superior Performance
Choose your preferred balance of speed and decentralization to best suit your business needs. .
Fully Open Source
What you see is what you get: no hidden code or proprietary components.
Zero Vendor Costs
No licensing fees, subscription costs, or revenue sharing requirements.


function bridgeTokens(
string memory receiver,
uint256 amount,
string memory denom,
string memory memo
) external {
// Standard IBC transfer port
string memory sourcePort = "transfer";
// Channel connecting our chain to another chain
string memory sourceChannel = "channel-0";
// Set timeout height (relative to current block)
Height memory timeoutHeight = Height({
revisionNumber: 0,
revisionHeight: 1000
});
// Bridge tokens to other chain via IBC
uint64 sequence = IBC_TRANSFER.transfer(
sourcePort,
sourceChannel,
denom,
amount,
msg.sender,
receiver,
timeoutHeight,
timeoutTimestamp,
memo
);
emit TransferInitiated(msg.sender, receiver, amount, denom, sequence);
}