Token Celo Brazilian Real

Overview ERC20

Total Supply:
6,909,489.372677 cREAL

Holders:
15,267 addresses

Profile Summary

 
Contract:
0xe4d517785d091d3c54818832db6094bcc27445450xE4D517785D091D3c54818832dB6094bcc2744545

Decimals:
18
Balance
1 cREAL
0xd2e63f44565ced986ce4fcd6119558e5ccf5b7cb
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
StableTokenBRLProxy

Compiler Version
v0.5.13+commit.5b0b510c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 3 : StableTokenBRLProxy.sol
pragma solidity ^0.5.3;

import "../common/Proxy.sol";

/* solhint-disable-next-line no-empty-blocks */
contract StableTokenBRLProxy is Proxy {

}

File 2 of 3 : Proxy.sol
pragma solidity ^0.5.3;
/* solhint-disable no-inline-assembly, no-complex-fallback, avoid-low-level-calls */

import "openzeppelin-solidity/contracts/utils/Address.sol";

/**
 * @title A Proxy utilizing the Unstructured Storage pattern.
 */
contract Proxy {
    // Used to store the address of the owner.
    bytes32 private constant OWNER_POSITION = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1);
    // Used to store the address of the implementation contract.
    bytes32 private constant IMPLEMENTATION_POSITION = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1);

    event OwnerSet(address indexed owner);
    event ImplementationSet(address indexed implementation);

    constructor() public {
        _setOwner(msg.sender);
    }

    /**
     * @notice Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == _getOwner(), "sender was not owner");
        _;
    }

    /**
     * @notice Delegates calls to the implementation contract.
     */
    function() external payable {
        bytes32 implementationPosition = IMPLEMENTATION_POSITION;

        address implementationAddress;

        // Load the address of the implementation contract from an explicit storage slot.
        assembly {
            implementationAddress := sload(implementationPosition)
        }

        // Avoid checking if address is a contract or executing delegated call when
        // implementation address is 0x0
        require(implementationAddress != address(0), "No Implementation set");
        require(Address.isContract(implementationAddress), "Invalid contract address");

        assembly {
            // Extract the position of the transaction data (i.e. function ID and arguments).
            let newCallDataPosition := mload(0x40)
            mstore(0x40, add(newCallDataPosition, calldatasize))
            calldatacopy(newCallDataPosition, 0, calldatasize)

            // Call the smart contract at `implementationAddress` in the context of the proxy contract,
            // with the same msg.sender and value.
            let delegatecallSuccess := delegatecall(gas, implementationAddress, newCallDataPosition, calldatasize, 0, 0)

            // Copy the return value of the call so it can be returned.
            let returnDataSize := returndatasize
            let returnDataPosition := mload(0x40)
            mstore(0x40, add(returnDataPosition, returnDataSize))
            returndatacopy(returnDataPosition, 0, returnDataSize)

            // Revert or return depending on whether or not the call was successful.
            switch delegatecallSuccess
            case 0 {
                revert(returnDataPosition, returnDataSize)
            }
            default {
                return(returnDataPosition, returnDataSize)
            }
        }
    }

    /**
     * @notice Transfers ownership of Proxy to a new owner.
     * @param newOwner Address of the new owner account.
     */
    function _transferOwnership(address newOwner) external onlyOwner {
        _setOwner(newOwner);
    }

    /**
     * @notice Sets the address of the implementation contract and calls into it.
     * @param implementation Address of the new target contract.
     * @param callbackData The abi-encoded function call to perform in the implementation
     * contract.
     * @dev Throws if the initialization callback fails.
     * @dev If the target contract does not need initialization, use
     * setImplementation instead.
     */
    function _setAndInitializeImplementation(address implementation, bytes calldata callbackData)
        external
        payable
        onlyOwner
    {
        _setImplementation(implementation);
        bool success;
        bytes memory returnValue;
        (success, returnValue) = implementation.delegatecall(callbackData);
        require(success, "initialization callback failed");
    }

    /**
     * @notice Returns the implementation address.
     */
    function _getImplementation() external view returns (address implementation) {
        bytes32 implementationPosition = IMPLEMENTATION_POSITION;
        // Load the address of the implementation contract from an explicit storage slot.
        assembly {
            implementation := sload(implementationPosition)
        }
    }

    /**
     * @notice Sets the address of the implementation contract.
     * @param implementation Address of the new target contract.
     * @dev If the target contract needs to be initialized, call
     * setAndInitializeImplementation instead.
     */
    function _setImplementation(address implementation) public onlyOwner {
        bytes32 implementationPosition = IMPLEMENTATION_POSITION;

        require(Address.isContract(implementation), "Invalid contract address");

        // Store the address of the implementation contract in an explicit storage slot.
        assembly {
            sstore(implementationPosition, implementation)
        }

        emit ImplementationSet(implementation);
    }

    /**
     * @notice Returns the Proxy owner's address.
     */
    function _getOwner() public view returns (address owner) {
        bytes32 position = OWNER_POSITION;
        // Load the address of the contract owner from an explicit storage slot.
        assembly {
            owner := sload(position)
        }
    }

    function _setOwner(address newOwner) internal {
        require(newOwner != address(0), "owner cannot be 0");
        bytes32 position = OWNER_POSITION;
        // Store the address of the contract owner in an explicit storage slot.
        assembly {
            sstore(position, newOwner)
        }
        emit OwnerSet(newOwner);
    }
}

File 3 of 3 : Address.sol
pragma solidity ^0.5.5;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following 
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ImplementationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerSet","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"_getImplementation","outputs":[{"internalType":"address","name":"implementation","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_getOwner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"callbackData","type":"bytes"}],"name":"_setAndInitializeImplementation","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"_setImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"_transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526100133361001860201b60201c565b610148565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f776e65722063616e6e6f74206265203000000000000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a25050565b610a22806101576000396000f3fe60806040526004361061004a5760003560e01c806303386ba3146101e757806342404e0714610280578063bb913f41146102d7578063d29d44ee14610328578063f7e6af8014610379575b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050600081549050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20496d706c656d656e746174696f6e20736574000000000000000000000081525060200191505060405180910390fd5b61013f816103d0565b6101b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b60405136810160405236600082376000803683855af43d604051818101604052816000823e82600081146101e3578282f35b8282fd5b61027e600480360360408110156101fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184600183028401116401000000008311171561026e57600080fd5b909192939192939050505061041b565b005b34801561028c57600080fd5b506102956105c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e357600080fd5b50610326600480360360208110156102fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061060d565b005b34801561033457600080fd5b506103776004803603602081101561034b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107bd565b005b34801561038557600080fd5b5061038e610871565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561041257506000801b8214155b92505050919050565b610423610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6104cc8361060d565b600060608473ffffffffffffffffffffffffffffffffffffffff168484604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610539576040519150601f19603f3d011682016040523d82523d6000602084013e61053e565b606091505b508092508193505050816105ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e697469616c697a6174696f6e2063616c6c6261636b206661696c6564000081525060200191505060405180910390fd5b5050505050565b600080600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050805491505090565b610615610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050610701826103d0565b610773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b8181558173ffffffffffffffffffffffffffffffffffffffff167fab64f92ab780ecbf4f3866f57cee465ff36c89450dcce20237ca7a8d81fb7d1360405160405180910390a25050565b6107c5610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b61086e816108bd565b50565b600080600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b9050805491505090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f776e65722063616e6e6f74206265203000000000000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a2505056fea265627a7a7231582000d2c2797b0959de83a62e901816ca47f91277f63fc9f51a0fed9895fdd99d6f64736f6c634300050d0032

Deployed ByteCode Sourcemap

104:42:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1082:30:0;588:1;543:41;;;;;;;;;;;;;;;;;;;535:50;;:54;527:63;;1082:56;;1149:29;1333:22;1327:29;1302:54;;1542:1;1509:35;;:21;:35;;;;1501:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1588:41;1607:21;1588:18;:41::i;:::-;1580:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:4;1813:11;1875:12;1854:19;1850:38;1844:4;1837:52;1939:12;1936:1;1915:19;1902:50;2227:1;2224;2210:12;2189:19;2166:21;2161:3;2148:81;2337:14;2396:4;2390:11;2451:14;2431:18;2427:39;2421:4;2414:53;2518:14;2515:1;2495:18;2480:53;2639:19;2676:1;2671:81;;;;2818:14;2798:18;2791:42;2671:81;2723:14;2703:18;2696:42;3539:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3539:392:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3539:392:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3539:392:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3539:392:0;;;;;;;;;;;;:::i;:::-;;4004:329;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4004:329:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4596:451;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4596:451:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4596:451:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;3002:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3002:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3002:101:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;5119:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5119:254:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;686:610:2;746:4;1004:16;1030:19;1052:66;1030:88;;;;1219:7;1207:20;1195:32;;1258:11;1246:8;:23;;:42;;;;;1285:3;1273:15;;:8;:15;;1246:42;1238:51;;;;686:610;;;:::o;3539:392:0:-;905:11;:9;:11::i;:::-;891:25;;:10;:25;;;883:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:34;3717:14;3698:18;:34::i;:::-;3742:12;3764:24;3823:14;:27;;3851:12;;3823:41;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;3823:41:0;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3798:66:0;;;;;;;;3882:7;3874:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;951:1;;3539:392;;;:::o;4004:329::-;4057:22;4091:30;588:1;543:41;;;;;;;;;;;;;;;;;;;535:50;;:54;527:63;;4091:56;;4294:22;4288:29;4270:47;;4256:71;;:::o;4596:451::-;905:11;:9;:11::i;:::-;891:25;;:10;:25;;;883:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4675:30;588:1;543:41;;;;;;;;;;;;;;;;;;;535:50;;:54;527:63;;4675:56;;4750:34;4769:14;4750:18;:34::i;:::-;4742:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4967:14;4943:22;4936:46;5025:14;5007:33;;;;;;;;;;;;951:1;4596:451;:::o;3002:101::-;905:11;:9;:11::i;:::-;891:25;;:10;:25;;;883:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3077:19;3087:8;3077:9;:19::i;:::-;3002:101;:::o;5119:254::-;5161:13;5186:16;403:1;367:32;;;;;;;;;;;;;;;;;;;359:41;;:45;351:54;;5186:33;;5348:8;5342:15;5333:24;;5319:48;;:::o;5379:339::-;5463:1;5443:22;;:8;:22;;;;5435:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5497:16;403:1;367:32;;;;;;;;;;;;;;;;;;;359:41;;:45;351:54;;5497:33;;5660:8;5650;5643:26;5702:8;5693:18;;;;;;;;;;;;5379:339;;:::o

Swarm Source

bzzr://00d2c2797b0959de83a62e901816ca47f91277f63fc9f51a0fed9895fdd99d6f
Loading