ETH Price: $2,620.42 (+7.41%)
 

Overview

Max Total Supply

200 BRTRV

Holders

3

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
CrowdfundProxy

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion
File 1 of 4 : CrowdfundProxy.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

import {CrowdfundStorage} from "./CrowdfundStorage.sol";
import {ERC20Storage} from "../../../external/ERC20Storage.sol";
import {IERC20Events} from "../../../external/interface/IERC20.sol";

interface ICrowdfundFactory {
    function mediaAddress() external returns (address);

    function logic() external returns (address);

    // ERC20 data.
    function parameters()
        external
        returns (
            address payable fundingRecipient,
            uint256 fundingCap,
            uint256 operatorPercent,
            uint256 feePercentage
        );
}

/**
 * @title CrowdfundProxy
 * @author MirrorXYZ
 */
contract CrowdfundProxy is CrowdfundStorage, ERC20Storage, IERC20Events {
    event Upgraded(address indexed implementation);

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT =
        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    constructor(
        address treasuryConfig_,
        address payable operator_,
        string memory name_,
        string memory symbol_
    ) ERC20Storage(name_, symbol_) {
        address logic = ICrowdfundFactory(msg.sender).logic();

        assembly {
            sstore(_IMPLEMENTATION_SLOT, logic)
        }

        emit Upgraded(logic);

        // Crowdfund-specific data.
        (
            fundingRecipient,
            fundingCap,
            operatorPercent,
            feePercentage
        ) = ICrowdfundFactory(msg.sender).parameters();

        operator = operator_;
        treasuryConfig = treasuryConfig_;
        // Initialize mutable storage.
        status = Status.FUNDING;
    }

    /// @notice Get current logic
    function logic() external view returns (address logic_) {
        assembly {
            logic_ := sload(_IMPLEMENTATION_SLOT)
        }
    }

    fallback() external payable {
        assembly {
            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize())
            let result := delegatecall(
                gas(),
                sload(_IMPLEMENTATION_SLOT),
                ptr,
                calldatasize(),
                0,
                0
            )
            let size := returndatasize()
            returndatacopy(ptr, 0, size)

            switch result
            case 0 {
                revert(ptr, size)
            }
            default {
                return(ptr, size)
            }
        }
    }

    receive() external payable {}
}

File 2 of 4 : CrowdfundStorage.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

/**
 * @title CrowdfundStorage
 * @author MirrorXYZ
 */
contract CrowdfundStorage {
    /**
     * @notice The two states that this contract can exist in.
     * "FUNDING" allows contributors to add funds.
     */
    enum Status {
        FUNDING,
        TRADING
    }

    // ============ Constants ============

    /// @notice The factor by which ETH contributions will multiply into crowdfund tokens.
    uint16 internal constant TOKEN_SCALE = 1000;

    // ============ Reentrancy ============

    /// @notice Reentrancy constants.
    uint256 internal constant REENTRANCY_NOT_ENTERED = 1;
    uint256 internal constant REENTRANCY_ENTERED = 2;

    /// @notice Current reentrancy status -- used by the modifier.
    uint256 internal reentrancy_status;

    /// @notice The operator has a special role to change contract status.
    address payable public operator;

    /// @notice Receives the funds when calling withdraw. Operator can configure.
    address payable public fundingRecipient;

    /// @notice Treasury configuration.
    address public treasuryConfig;

    /// @notice We add a hard cap to prevent raising more funds than deemed reasonable.
    uint256 public fundingCap;

    /// @notice Fee percentage that the crowdfund pays to the treasury.
    uint256 public feePercentage;

    /// @notice The operator takes some equity in the tokens, represented by this percent.
    uint256 public operatorPercent;

    // ============ Mutable Storage ============

    /// @notice Represents the current state of the campaign.
    Status public status;
}

File 3 of 4 : ERC20Storage.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

/**
 * @title ERC20Storage
 * @author MirrorXYZ
 */
contract ERC20Storage {
    /// @notice EIP-20 token name for this token
    string public name;

    /// @notice EIP-20 token symbol for this token
    string public symbol;

    /// @notice EIP-20 total number of tokens in circulation
    uint256 public totalSupply;

    /// @notice Initialize total supply to zero.
    constructor(string memory name_, string memory symbol_) {
        name = name_;
        symbol = symbol_;
        totalSupply = 0;
    }
}

File 4 of 4 : IERC20.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;

interface IERC20 {
    /// @notice EIP-20 token name for this token
    function name() external returns (string calldata);

    /// @notice EIP-20 token symbol for this token
    function symbol() external returns (string calldata);

    /// @notice EIP-20 token decimals for this token
    function decimals() external returns (uint8);

    /// @notice EIP-20 total number of tokens in circulation
    function totalSupply() external returns (uint256);

    /// @notice EIP-20 official record of token balances for each account
    function balanceOf(address account) external returns (uint256);

    /// @notice EIP-20 allowance amounts on behalf of others
    function allowance(address owner, address spender)
        external
        returns (uint256);

    /// @notice EIP-20 approves _spender_ to transfer up to _value_ multiple times
    function approve(address spender, uint256 value) external returns (bool);

    /// @notice EIP-20 transfer _value_ to _to_ from _msg.sender_
    function transfer(address to, uint256 value) external returns (bool);

    /// @notice EIP-20 transfer _value_ to _to_ from _from_
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

interface IERC20Events {
    /// @notice EIP-20 Mint event
    event Mint(address indexed to, uint256 amount);

    /// @notice EIP-20 approval event
    event Approval(
        address indexed from,
        address indexed spender,
        uint256 value
    );

    /// @notice EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 value);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 2000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"treasuryConfig_","type":"address"},{"internalType":"address payable","name":"operator_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingRecipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logic","outputs":[{"internalType":"address","name":"logic_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"enum CrowdfundStorage.Status","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"treasuryConfig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200097e3803806200097e8339810160408190526200003491620003da565b8151829082906200004d90600890602085019062000214565b5080516200006390600990602084019062000214565b506000600a8190555050506000336001600160a01b031663d7dfa0dd6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015620000ac57600080fd5b505af1158015620000c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e7919062000371565b9050807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55806001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2336001600160a01b031663890357306040518163ffffffff1660e01b8152600401608060405180830381600087803b1580156200017e57600080fd5b505af115801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000398565b600555600655600455600280546001600160a01b03199081166001600160a01b0393841617909155600180548216968316969096179095556003805490951695169490941790925550506007805460ff1916905550620004db565b82805462000222906200046f565b90600052602060002090601f01602090048101928262000246576000855562000291565b82601f106200026157805160ff191683800117855562000291565b8280016001018555821562000291579182015b828111156200029157825182559160200191906001019062000274565b506200029f929150620002a3565b5090565b5b808211156200029f5760008155600101620002a4565b600082601f830112620002cc57600080fd5b81516001600160401b0380821115620002e957620002e9620004ac565b604051601f8301601f19908116603f01168101908282118183101715620003145762000314620004ac565b816040528381526020925086838588010111156200033157600080fd5b600091505b8382101562000355578582018301518183018401529082019062000336565b83821115620003675760008385830101525b9695505050505050565b6000602082840312156200038457600080fd5b81516200039181620004c2565b9392505050565b60008060008060808587031215620003af57600080fd5b8451620003bc81620004c2565b60208601516040870151606090970151919890975090945092505050565b60008060008060808587031215620003f157600080fd5b8451620003fe81620004c2565b60208601519094506200041181620004c2565b60408601519093506001600160401b03808211156200042f57600080fd5b6200043d88838901620002ba565b935060608701519150808211156200045457600080fd5b506200046387828801620002ba565b91505092959194509250565b600181811c908216806200048457607f821691505b60208210811415620004a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620004d857600080fd5b50565b61049380620004eb6000396000f3fe6080604052600436106100c05760003560e01c80637b4044a011610074578063cfd7b0df1161004e578063cfd7b0df14610243578063d7dfa0dd14610270578063e3b2594f146102a4576100c7565b80637b4044a01461020257806395d89b4114610218578063a001ecdd1461022d576100c7565b80631bb534ba116100a55780631bb534ba1461015c578063200d2ed2146101ae578063570ca735146101d5576100c7565b806306fdde031461010d57806318160ddd14610138576100c7565b366100c757005b604051366000823760008036837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d806000843e818015610109578184f35b8184fd5b34801561011957600080fd5b506101226102ba565b60405161012f9190610396565b60405180910390f35b34801561014457600080fd5b5061014e600a5481565b60405190815260200161012f565b34801561016857600080fd5b506002546101899073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012f565b3480156101ba57600080fd5b506007546101c89060ff1681565b60405161012f9190610355565b3480156101e157600080fd5b506001546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020e57600080fd5b5061014e60065481565b34801561022457600080fd5b50610122610348565b34801561023957600080fd5b5061014e60055481565b34801561024f57600080fd5b506003546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610189565b3480156102b057600080fd5b5061014e60045481565b600880546102c790610409565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390610409565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b505050505081565b600980546102c790610409565b6020810160028310610390577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156103c3578581018301518582016040015282016103a7565b818111156103d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061041d57607f821691505b60208210811415610457577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220f6ac1fd7363a36b71a4bc262e40ec0fb4ebd0a0da64a0227886f49edfcc9523864736f6c6343000806003300000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202000000000000000000000000467aadc88d99b4e978a8d3d4f0a9017dcaecaabf000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001d427269676874204d6f6d656e74732052697475616c732056656e69636500000000000000000000000000000000000000000000000000000000000000000000054252545256000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100c05760003560e01c80637b4044a011610074578063cfd7b0df1161004e578063cfd7b0df14610243578063d7dfa0dd14610270578063e3b2594f146102a4576100c7565b80637b4044a01461020257806395d89b4114610218578063a001ecdd1461022d576100c7565b80631bb534ba116100a55780631bb534ba1461015c578063200d2ed2146101ae578063570ca735146101d5576100c7565b806306fdde031461010d57806318160ddd14610138576100c7565b366100c757005b604051366000823760008036837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d806000843e818015610109578184f35b8184fd5b34801561011957600080fd5b506101226102ba565b60405161012f9190610396565b60405180910390f35b34801561014457600080fd5b5061014e600a5481565b60405190815260200161012f565b34801561016857600080fd5b506002546101899073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012f565b3480156101ba57600080fd5b506007546101c89060ff1681565b60405161012f9190610355565b3480156101e157600080fd5b506001546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561020e57600080fd5b5061014e60065481565b34801561022457600080fd5b50610122610348565b34801561023957600080fd5b5061014e60055481565b34801561024f57600080fd5b506003546101899073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610189565b3480156102b057600080fd5b5061014e60045481565b600880546102c790610409565b80601f01602080910402602001604051908101604052809291908181526020018280546102f390610409565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b505050505081565b600980546102c790610409565b6020810160028310610390577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600060208083528351808285015260005b818110156103c3578581018301518582016040015282016103a7565b818111156103d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061041d57607f821691505b60208210811415610457577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220f6ac1fd7363a36b71a4bc262e40ec0fb4ebd0a0da64a0227886f49edfcc9523864736f6c63430008060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202000000000000000000000000467aadc88d99b4e978a8d3d4f0a9017dcaecaabf000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001d427269676874204d6f6d656e74732052697475616c732056656e69636500000000000000000000000000000000000000000000000000000000000000000000054252545256000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : treasuryConfig_ (address): 0x21A93bE569666527dAe0FDBFbe7715299dEC1202
Arg [1] : operator_ (address): 0x467aadC88d99B4E978A8d3d4f0A9017DCAECaAbF
Arg [2] : name_ (string): Bright Moments Rituals Venice
Arg [3] : symbol_ (string): BRTRV

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000021a93be569666527dae0fdbfbe7715299dec1202
Arg [1] : 000000000000000000000000467aadc88d99b4e978a8d3d4f0a9017dcaecaabf
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001d
Arg [5] : 427269676874204d6f6d656e74732052697475616c732056656e696365000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 4252545256000000000000000000000000000000000000000000000000000000


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.