ETH Price: $2,138.86 (-9.27%)

Token

LockstakeMkr (lsMKR)
 

Overview

Max Total Supply

169,190.267653311896029334 lsMKR

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 lsMKR

Value
$0.00
0x98ecac063060fa4b495c2f56c5305d955ba91bf3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LockstakeMkr

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : LockstakeMkr.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

/// LockstakeMkr.sol -- LockstakeMkr token

// Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico
// Copyright (C) 2023 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity ^0.8.21;

contract LockstakeMkr {
    mapping (address => uint256) public wards;

    // --- ERC20 Data ---
    string  public constant name     = "LockstakeMkr";
    string  public constant symbol   = "lsMKR";
    string  public constant version  = "1";
    uint8   public constant decimals = 18;
    uint256 public totalSupply;

    mapping (address => uint256)                      public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    // --- Events ---
    event Rely(address indexed usr);
    event Deny(address indexed usr);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);

    modifier auth {
        require(wards[msg.sender] == 1, "LockstakeMkr/not-authorized");
        _;
    }

    constructor() {
        wards[msg.sender] = 1;
        emit Rely(msg.sender);
    }

    // --- Administration ---
    function rely(address usr) external auth {
        wards[usr] = 1;
        emit Rely(usr);
    }

    function deny(address usr) external auth {
        wards[usr] = 0;
        emit Deny(usr);
    }

    // --- ERC20 Mutations ---
    function transfer(address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "LockstakeMkr/invalid-address");
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "LockstakeMkr/insufficient-balance");

        unchecked {
            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value; // note: we don't need an overflow check here b/c sum of all balances == totalSupply
        }

        emit Transfer(msg.sender, to, value);

        return true;
    }

    function transferFrom(address from, address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "LockstakeMkr/invalid-address");
        uint256 balance = balanceOf[from];
        require(balance >= value, "LockstakeMkr/insufficient-balance");

        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "LockstakeMkr/insufficient-allowance");

                unchecked {
                    allowance[from][msg.sender] = allowed - value;
                }
            }
        }

        unchecked {
            balanceOf[from] = balance - value;
            balanceOf[to] += value; // note: we don't need an overflow check here b/c sum of all balances == totalSupply
        }

        emit Transfer(from, to, value);

        return true;
    }

    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;

        emit Approval(msg.sender, spender, value);

        return true;
    }

    // --- Mint/Burn ---
    function mint(address to, uint256 value) external auth {
        require(to != address(0) && to != address(this), "LockstakeMkr/invalid-address");
        unchecked {
            balanceOf[to] = balanceOf[to] + value; // note: we don't need an overflow check here b/c balanceOf[to] <= totalSupply and there is an overflow check below
        }
        totalSupply = totalSupply + value;

        emit Transfer(address(0), to, value);
    }

    function burn(address from, uint256 value) external {
        uint256 balance = balanceOf[from];
        require(balance >= value, "LockstakeMkr/insufficient-balance");

        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "LockstakeMkr/insufficient-allowance");

                unchecked {
                    allowance[from][msg.sender] = allowed - value;
                }
            }
        }

        unchecked {
            balanceOf[from] = balance - value; // note: we don't need overflow checks b/c require(balance >= value) and balance <= totalSupply
            totalSupply     = totalSupply - value;
        }

        emit Transfer(from, address(0), value);
    }
}

Settings
{
  "remappings": [
    "dss-interfaces/=lib/token-tests/lib/dss-test/lib/dss-interfaces/src/",
    "dss-test/=lib/token-tests/lib/dss-test/src/",
    "forge-std/=lib/token-tests/lib/dss-test/lib/forge-std/src/",
    "token-tests/=lib/token-tests/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b503360008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a2610aa2806100596000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806365fae35e116100975780639dc29fac116100665780639dc29fac14610241578063a9059cbb14610254578063bf353dbb14610267578063dd62ed3e1461028757600080fd5b806365fae35e146101d757806370a08231146101ea57806395d89b411461020a5780639c52a7f11461022e57600080fd5b806323b872dd116100d357806323b872dd14610175578063313ce5671461018857806340c10f19146101a257806354fd4d50146101b757600080fd5b806306fdde03146100fa578063095ea7b31461013b57806318160ddd1461015e575b600080fd5b6101256040518060400160405280600c81526020016b2637b1b5b9ba30b5b2a6b5b960a11b81525081565b6040516101329190610814565b60405180910390f35b61014e61014936600461087e565b6102b2565b6040519015158152602001610132565b61016760015481565b604051908152602001610132565b61014e6101833660046108a8565b61031f565b610190601281565b60405160ff9091168152602001610132565b6101b56101b036600461087e565b610489565b005b610125604051806040016040528060018152602001603160f81b81525081565b6101b56101e53660046108e4565b610557565b6101676101f83660046108e4565b60026020526000908152604090205481565b610125604051806040016040528060058152602001643639a6a5a960d91b81525081565b6101b561023c3660046108e4565b6105cb565b6101b561024f36600461087e565b61063e565b61014e61026236600461087e565b61074d565b6101676102753660046108e4565b60006020819052908152604090205481565b610167610295366004610906565b600360209081526000928352604080842090915290825290205481565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061030d9086815260200190565b60405180910390a35060015b92915050565b60006001600160a01b0383161580159061034257506001600160a01b0383163014155b6103675760405162461bcd60e51b815260040161035e90610939565b60405180910390fd5b6001600160a01b038416600090815260026020526040902054828110156103a05760405162461bcd60e51b815260040161035e90610970565b6001600160a01b0385163314610428576001600160a01b0385166000908152600360209081526040808320338452909152902054600019811461042657838110156103fd5760405162461bcd60e51b815260040161035e906109b1565b6001600160a01b0386166000908152600360209081526040808320338452909152902084820390555b505b6001600160a01b038086166000818152600260205260408082208786039055928716808252908390208054870190559151600080516020610a4d833981519152906104769087815260200190565b60405180910390a3506001949350505050565b336000908152602081905260409020546001146104b85760405162461bcd60e51b815260040161035e906109f4565b6001600160a01b038216158015906104d957506001600160a01b0382163014155b6104f55760405162461bcd60e51b815260040161035e90610939565b6001600160a01b0382166000908152600260205260409020805482019055600154610521908290610a2b565b6001556040518181526001600160a01b03831690600090600080516020610a4d8339815191529060200160405180910390a35050565b336000908152602081905260409020546001146105865760405162461bcd60e51b815260040161035e906109f4565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b336000908152602081905260409020546001146105fa5760405162461bcd60e51b815260040161035e906109f4565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b038216600090815260026020526040902054818110156106775760405162461bcd60e51b815260040161035e90610970565b6001600160a01b03831633146106ff576001600160a01b038316600090815260036020908152604080832033845290915290205460001981146106fd57828110156106d45760405162461bcd60e51b815260040161035e906109b1565b6001600160a01b0384166000908152600360209081526040808320338452909152902083820390555b505b6001600160a01b0383166000818152600260209081526040808320868603905560018054879003905551858152919291600080516020610a4d833981519152910160405180910390a3505050565b60006001600160a01b0383161580159061077057506001600160a01b0383163014155b61078c5760405162461bcd60e51b815260040161035e90610939565b33600090815260026020526040902054828110156107bc5760405162461bcd60e51b815260040161035e90610970565b33600081815260026020908152604080832087860390556001600160a01b0388168084529281902080548801905551868152919291600080516020610a4d833981519152910160405180910390a35060019392505050565b600060208083528351808285015260005b8181101561084157858101830151858201604001528201610825565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461087957600080fd5b919050565b6000806040838503121561089157600080fd5b61089a83610862565b946020939093013593505050565b6000806000606084860312156108bd57600080fd5b6108c684610862565b92506108d460208501610862565b9150604084013590509250925092565b6000602082840312156108f657600080fd5b6108ff82610862565b9392505050565b6000806040838503121561091957600080fd5b61092283610862565b915061093060208401610862565b90509250929050565b6020808252601c908201527f4c6f636b7374616b654d6b722f696e76616c69642d6164647265737300000000604082015260600190565b60208082526021908201527f4c6f636b7374616b654d6b722f696e73756666696369656e742d62616c616e636040820152606560f81b606082015260800190565b60208082526023908201527f4c6f636b7374616b654d6b722f696e73756666696369656e742d616c6c6f77616040820152626e636560e81b606082015260800190565b6020808252601b908201527f4c6f636b7374616b654d6b722f6e6f742d617574686f72697a65640000000000604082015260600190565b8082018082111561031957634e487b7160e01b600052601160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207985787676cd700741f3f08c1bf99875d2f49886047d0d681d0851d8aa066d4064736f6c63430008150033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806365fae35e116100975780639dc29fac116100665780639dc29fac14610241578063a9059cbb14610254578063bf353dbb14610267578063dd62ed3e1461028757600080fd5b806365fae35e146101d757806370a08231146101ea57806395d89b411461020a5780639c52a7f11461022e57600080fd5b806323b872dd116100d357806323b872dd14610175578063313ce5671461018857806340c10f19146101a257806354fd4d50146101b757600080fd5b806306fdde03146100fa578063095ea7b31461013b57806318160ddd1461015e575b600080fd5b6101256040518060400160405280600c81526020016b2637b1b5b9ba30b5b2a6b5b960a11b81525081565b6040516101329190610814565b60405180910390f35b61014e61014936600461087e565b6102b2565b6040519015158152602001610132565b61016760015481565b604051908152602001610132565b61014e6101833660046108a8565b61031f565b610190601281565b60405160ff9091168152602001610132565b6101b56101b036600461087e565b610489565b005b610125604051806040016040528060018152602001603160f81b81525081565b6101b56101e53660046108e4565b610557565b6101676101f83660046108e4565b60026020526000908152604090205481565b610125604051806040016040528060058152602001643639a6a5a960d91b81525081565b6101b561023c3660046108e4565b6105cb565b6101b561024f36600461087e565b61063e565b61014e61026236600461087e565b61074d565b6101676102753660046108e4565b60006020819052908152604090205481565b610167610295366004610906565b600360209081526000928352604080842090915290825290205481565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061030d9086815260200190565b60405180910390a35060015b92915050565b60006001600160a01b0383161580159061034257506001600160a01b0383163014155b6103675760405162461bcd60e51b815260040161035e90610939565b60405180910390fd5b6001600160a01b038416600090815260026020526040902054828110156103a05760405162461bcd60e51b815260040161035e90610970565b6001600160a01b0385163314610428576001600160a01b0385166000908152600360209081526040808320338452909152902054600019811461042657838110156103fd5760405162461bcd60e51b815260040161035e906109b1565b6001600160a01b0386166000908152600360209081526040808320338452909152902084820390555b505b6001600160a01b038086166000818152600260205260408082208786039055928716808252908390208054870190559151600080516020610a4d833981519152906104769087815260200190565b60405180910390a3506001949350505050565b336000908152602081905260409020546001146104b85760405162461bcd60e51b815260040161035e906109f4565b6001600160a01b038216158015906104d957506001600160a01b0382163014155b6104f55760405162461bcd60e51b815260040161035e90610939565b6001600160a01b0382166000908152600260205260409020805482019055600154610521908290610a2b565b6001556040518181526001600160a01b03831690600090600080516020610a4d8339815191529060200160405180910390a35050565b336000908152602081905260409020546001146105865760405162461bcd60e51b815260040161035e906109f4565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b336000908152602081905260409020546001146105fa5760405162461bcd60e51b815260040161035e906109f4565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b038216600090815260026020526040902054818110156106775760405162461bcd60e51b815260040161035e90610970565b6001600160a01b03831633146106ff576001600160a01b038316600090815260036020908152604080832033845290915290205460001981146106fd57828110156106d45760405162461bcd60e51b815260040161035e906109b1565b6001600160a01b0384166000908152600360209081526040808320338452909152902083820390555b505b6001600160a01b0383166000818152600260209081526040808320868603905560018054879003905551858152919291600080516020610a4d833981519152910160405180910390a3505050565b60006001600160a01b0383161580159061077057506001600160a01b0383163014155b61078c5760405162461bcd60e51b815260040161035e90610939565b33600090815260026020526040902054828110156107bc5760405162461bcd60e51b815260040161035e90610970565b33600081815260026020908152604080832087860390556001600160a01b0388168084529281902080548801905551868152919291600080516020610a4d833981519152910160405180910390a35060019392505050565b600060208083528351808285015260005b8181101561084157858101830151858201604001528201610825565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461087957600080fd5b919050565b6000806040838503121561089157600080fd5b61089a83610862565b946020939093013593505050565b6000806000606084860312156108bd57600080fd5b6108c684610862565b92506108d460208501610862565b9150604084013590509250925092565b6000602082840312156108f657600080fd5b6108ff82610862565b9392505050565b6000806040838503121561091957600080fd5b61092283610862565b915061093060208401610862565b90509250929050565b6020808252601c908201527f4c6f636b7374616b654d6b722f696e76616c69642d6164647265737300000000604082015260600190565b60208082526021908201527f4c6f636b7374616b654d6b722f696e73756666696369656e742d62616c616e636040820152606560f81b606082015260800190565b60208082526023908201527f4c6f636b7374616b654d6b722f696e73756666696369656e742d616c6c6f77616040820152626e636560e81b606082015260800190565b6020808252601b908201527f4c6f636b7374616b654d6b722f6e6f742d617574686f72697a65640000000000604082015260600190565b8082018082111561031957634e487b7160e01b600052601160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207985787676cd700741f3f08c1bf99875d2f49886047d0d681d0851d8aa066d4064736f6c63430008150033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.