Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- CV
- Optimization enabled
- true
- Compiler version
- v0.8.26+commit.8a97fa7a
- Optimization runs
- 200
- EVM Version
- shanghai
- Verified at
- 2026-07-01T16:58:40.141590Z
CV.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/// @title CV (Commitment Value)
/// @notice Uncapped ERC20. No fixed supply. CV is only ever created by the CVProtocol
/// mining contract. The minter is set exactly once by the deployer and then frozen,
/// so after launch there is no admin able to mint or change anything here.
contract CV {
string public constant name = "Commitment Value";
string public constant symbol = "CV";
uint8 public constant decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
address public immutable deployer;
address public minter;
bool public minterLocked;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
event MinterSet(address indexed minter);
constructor() {
deployer = msg.sender;
}
/// @notice One time wiring. Deployer points CV at the protocol, then it is locked forever.
function setMinter(address m) external {
require(msg.sender == deployer, "not deployer");
require(!minterLocked, "minter locked");
require(m != address(0), "zero minter");
minter = m;
minterLocked = true;
emit MinterSet(m);
}
/// @notice Only the protocol can create CV.
function mint(address to, uint256 amount) external {
require(msg.sender == minter, "only minter");
require(to != address(0), "to zero");
totalSupply += amount;
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function transfer(address to, uint256 value) external returns (bool) {
return _transfer(msg.sender, to, value);
}
function transferFrom(address from, address to, uint256 value) external returns (bool) {
uint256 a = allowance[from][msg.sender];
if (a != type(uint256).max) {
require(a >= value, "allowance");
allowance[from][msg.sender] = a - value;
}
return _transfer(from, to, value);
}
function approve(address spender, uint256 value) external returns (bool) {
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
function _transfer(address from, address to, uint256 value) internal returns (bool) {
require(to != address(0), "to zero");
uint256 b = balanceOf[from];
require(b >= value, "balance");
unchecked {
balanceOf[from] = b - value;
balanceOf[to] += value;
}
emit Transfer(from, to, value);
return true;
}
/// @notice Burn your own CV. Reduces total supply. Used by the protocol buy and burn.
function burn(uint256 amount) external {
uint256 b = balanceOf[msg.sender];
require(b >= amount, "balance");
unchecked {
balanceOf[msg.sender] = b - amount;
}
totalSupply -= amount;
emit Transfer(msg.sender, address(0), amount);
}
}
Compiler Settings
{"viaIR":true,"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"shanghai","compilationTarget":{"CV.sol":"CV"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"MinterSet","inputs":[{"type":"address","name":"minter","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deployer","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"minter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"minterLocked","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinter","inputs":[{"type":"address","name":"m","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]}]
Contract Creation Code
0x60a0806040523460285733608052610884908161002d823960805181818160d901526102660152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610682578063075461721461065a578063095ea7b3146105e157806318160ddd146105c557806323b872dd146104f7578063313ce567146104dc57806340c10f191461040157806342966c681461038957806370a082311461035157806395d89b41146102ec578063a9059cbb146102ba578063cc54cce314610295578063d5f3948814610251578063dd62ed3e146102015763fca3b5aa146100be575f80fd5b346101fd5760203660031901126101fd576100d7610720565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101c9576003549060ff8260a01c16610194576001600160a01b0316908115610161576001600160a81b0319168117600160a01b176003557f726b590ef91a8c76ad05bbe91a57ef84605276528f49cd47d787f558a4e755b65f80a2005b60405162461bcd60e51b815260206004820152600b60248201526a3d32b9379036b4b73a32b960a91b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c1b5a5b9d195c881b1bd8dad959609a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b3737ba103232b83637bcb2b960a11b6044820152606490fd5b5f80fd5b346101fd5760403660031901126101fd5761021a610720565b610222610736565b6001600160a01b039182165f908152600260209081526040808320949093168252928352819020549051908152f35b346101fd575f3660031901126101fd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101fd575f3660031901126101fd57602060ff60035460a01c166040519015158152f35b346101fd5760403660031901126101fd5760206102e26102d8610720565b60243590336107c5565b6040519015158152f35b346101fd575f3660031901126101fd57604051604081019080821067ffffffffffffffff83111761033d5761033991604052600281526121ab60f11b6020820152604051918291826106d9565b0390f35b634e487b7160e01b5f52604160045260245ffd5b346101fd5760203660031901126101fd576001600160a01b03610372610720565b165f526001602052602060405f2054604051908152f35b346101fd5760203660031901126101fd575f60043533825260016020528060408320546103b88282101561078f565b33845260016020520360408320556103d181835461074c565b82556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b346101fd5760403660031901126101fd5761041a610720565b60035460243591906001600160a01b031633036104a9576001600160a01b031690610446821515610759565b5f54908082018092116104955760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9384558484526001825260408420818154019055604051908152a3005b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152600b60248201526a37b7363c9036b4b73a32b960a91b6044820152606490fd5b346101fd575f3660031901126101fd57602060405160128152f35b346101fd5760603660031901126101fd57610510610720565b610518610736565b6001600160a01b0382165f81815260026020908152604080832033845290915290205460443593919060018101610557575b60206102e28686866107c5565b9290939182841061059457602094610572846102e29661074c565b5f9182526002875260408083203384528852909120559193909250829061054a565b60405162461bcd60e51b8152602060048201526009602482015268616c6c6f77616e636560b81b6044820152606490fd5b346101fd575f3660031901126101fd5760205f54604051908152f35b346101fd5760403660031901126101fd576105fa610720565b335f8181526002602090815260408083206001600160a01b03909516808452948252918290206024359081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a3602060405160018152f35b346101fd575f3660031901126101fd576003546040516001600160a01b039091168152602090f35b346101fd575f3660031901126101fd57604051604081019080821067ffffffffffffffff83111761033d5761033991604052601081526f436f6d6d69746d656e742056616c756560801b6020820152604051918291825b9190916020815282518060208301525f5b81811061070a575060409293505f838284010152601f8019910116010190565b80602080928701015160408286010152016106ea565b600435906001600160a01b03821682036101fd57565b602435906001600160a01b03821682036101fd57565b9190820391821161049557565b1561076057565b60405162461bcd60e51b8152602060048201526007602482015266746f207a65726f60c81b6044820152606490fd5b1561079657565b60405162461bcd60e51b815260206004820152600760248201526662616c616e636560c81b6044820152606490fd5b6001600160a01b0390911691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090610802851515610759565b60018060a01b031692835f52600182528060405f20546108248282101561078f565b855f52600184520360405f2055845f526001825260405f20818154019055604051908152a360019056fea2646970667358221220a595e633cac60425e5557e11a4ed71b822d0b05247f7445e3ee52f3db1c48e9e64736f6c634300081a0033
Deployed ByteCode
0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610682578063075461721461065a578063095ea7b3146105e157806318160ddd146105c557806323b872dd146104f7578063313ce567146104dc57806340c10f191461040157806342966c681461038957806370a082311461035157806395d89b41146102ec578063a9059cbb146102ba578063cc54cce314610295578063d5f3948814610251578063dd62ed3e146102015763fca3b5aa146100be575f80fd5b346101fd5760203660031901126101fd576100d7610720565b7f000000000000000000000000d6db43c18c7ef1794aefb3a868b80b7e51d657d96001600160a01b031633036101c9576003549060ff8260a01c16610194576001600160a01b0316908115610161576001600160a81b0319168117600160a01b176003557f726b590ef91a8c76ad05bbe91a57ef84605276528f49cd47d787f558a4e755b65f80a2005b60405162461bcd60e51b815260206004820152600b60248201526a3d32b9379036b4b73a32b960a91b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c1b5a5b9d195c881b1bd8dad959609a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b3737ba103232b83637bcb2b960a11b6044820152606490fd5b5f80fd5b346101fd5760403660031901126101fd5761021a610720565b610222610736565b6001600160a01b039182165f908152600260209081526040808320949093168252928352819020549051908152f35b346101fd575f3660031901126101fd576040517f000000000000000000000000d6db43c18c7ef1794aefb3a868b80b7e51d657d96001600160a01b03168152602090f35b346101fd575f3660031901126101fd57602060ff60035460a01c166040519015158152f35b346101fd5760403660031901126101fd5760206102e26102d8610720565b60243590336107c5565b6040519015158152f35b346101fd575f3660031901126101fd57604051604081019080821067ffffffffffffffff83111761033d5761033991604052600281526121ab60f11b6020820152604051918291826106d9565b0390f35b634e487b7160e01b5f52604160045260245ffd5b346101fd5760203660031901126101fd576001600160a01b03610372610720565b165f526001602052602060405f2054604051908152f35b346101fd5760203660031901126101fd575f60043533825260016020528060408320546103b88282101561078f565b33845260016020520360408320556103d181835461074c565b82556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b346101fd5760403660031901126101fd5761041a610720565b60035460243591906001600160a01b031633036104a9576001600160a01b031690610446821515610759565b5f54908082018092116104955760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9384558484526001825260408420818154019055604051908152a3005b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152600b60248201526a37b7363c9036b4b73a32b960a91b6044820152606490fd5b346101fd575f3660031901126101fd57602060405160128152f35b346101fd5760603660031901126101fd57610510610720565b610518610736565b6001600160a01b0382165f81815260026020908152604080832033845290915290205460443593919060018101610557575b60206102e28686866107c5565b9290939182841061059457602094610572846102e29661074c565b5f9182526002875260408083203384528852909120559193909250829061054a565b60405162461bcd60e51b8152602060048201526009602482015268616c6c6f77616e636560b81b6044820152606490fd5b346101fd575f3660031901126101fd5760205f54604051908152f35b346101fd5760403660031901126101fd576105fa610720565b335f8181526002602090815260408083206001600160a01b03909516808452948252918290206024359081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a3602060405160018152f35b346101fd575f3660031901126101fd576003546040516001600160a01b039091168152602090f35b346101fd575f3660031901126101fd57604051604081019080821067ffffffffffffffff83111761033d5761033991604052601081526f436f6d6d69746d656e742056616c756560801b6020820152604051918291825b9190916020815282518060208301525f5b81811061070a575060409293505f838284010152601f8019910116010190565b80602080928701015160408286010152016106ea565b600435906001600160a01b03821682036101fd57565b602435906001600160a01b03821682036101fd57565b9190820391821161049557565b1561076057565b60405162461bcd60e51b8152602060048201526007602482015266746f207a65726f60c81b6044820152606490fd5b1561079657565b60405162461bcd60e51b815260206004820152600760248201526662616c616e636560c81b6044820152606490fd5b6001600160a01b0390911691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090610802851515610759565b60018060a01b031692835f52600182528060405f20546108248282101561078f565b855f52600184520360405f2055845f526001825260405f20818154019055604051908152a360019056fea2646970667358221220a595e633cac60425e5557e11a4ed71b822d0b05247f7445e3ee52f3db1c48e9e64736f6c634300081a0033