ETH Price: $3,333.71 (-1.29%)

Token

Eva Turtle (TRTL)
 

Overview

Max Total Supply

5,000 TRTL

Holders

1,612

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 TRTL
0x5d073600fe323e3d22df5a8f727344899b1f988b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

EVAVERSE Turtle Troop is a collection of 5,000 1/1 unique ERC-721 set of beautifully animated 3D companion avatars for the EVAVERSE video game. Each avatar is created from up to 85 possible unique traits, creating 15,000 total unique variations possible. Certain Turtle Troops ...

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EvaverseTurtle

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: EvaverseTurtle.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Proxy.sol";

contract EvaverseTurtle is Proxy {
    constructor (address logicAddress) {
        _delegateAddress = logicAddress;
    }
}

File 2 of 3: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// We can't use the default implementation of OpenZeppelin's Ownable because it uses a constructor which doesn't work with Proxy contracts

abstract contract Ownable {
    address internal _owner;

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    
    constructor () {
        _owner = msg.sender;
    }

    function SetOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _owner = newOwner;
    }
}

File 3 of 3: Proxy.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Ownable.sol";

// This is mostly lifted from: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Proxy.sol
// Honorably mentions should be: https://fravoll.github.io/solidity-patterns/proxy_delegate.html
// which guided me to: https://github.com/fravoll/solidity-patterns/tree/master/ProxyDelegate

// Good Info here: https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable

// Sample ERC721 Upgradable contract: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/tree/master/contracts/token/ERC721

abstract contract Proxy is Ownable {

    address internal _delegateAddress;
    
    function GetLogic() external view onlyOwner returns (address) {
        return _delegateAddress;
    }

    function SetLogic(address delegate) external onlyOwner {
        _delegateAddress = delegate;
    }

    fallback () external payable {
        _delegate(_delegateAddress);
    }

    receive () external payable {
        _delegate(_delegateAddress);
    }
    
    function _delegate(address implementation) internal {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            //Optional, if we wan't to get rid of the param to this function, load from member variable
            //let _target := sload(0)
            
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }
}

abstract contract ProxyTarget is Ownable {
    address internal _delegateAddress;
    
    function GetLogicContract() external view onlyOwner returns (address) {
        return _delegateAddress;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"logicAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"GetLogic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegate","type":"address"}],"name":"SetLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"SetOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506040516103ca3803806103ca83398101604081905261002f91610062565b60008054336001600160a01b031991821617909155600180549091166001600160a01b0392909216919091179055610090565b600060208284031215610073578081fd5b81516001600160a01b0381168114610089578182fd5b9392505050565b61032b8061009f6000396000f3fe6080604052600436106100435760003560e01c8063167d3e9c146100745780638da5cb5b146100945780639204395f146100ca578063d8d7a176146100ea5761005f565b3661005f5760015461005d906001600160a01b03166100ff565b005b60015461005d906001600160a01b03166100ff565b34801561008057600080fd5b5061005d61008f366004610292565b610123565b3480156100a057600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b3480156100d657600080fd5b5061005d6100e5366004610292565b6101ec565b3480156100f657600080fd5b506100ae610247565b3660008037600080366000845af43d6000803e80801561011e573d6000f35b3d6000fd5b336101366000546001600160a01b031690565b6001600160a01b0316146101655760405162461bcd60e51b815260040161015c906102c0565b60405180910390fd5b6001600160a01b0381166101ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015c565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b336101ff6000546001600160a01b031690565b6001600160a01b0316146102255760405162461bcd60e51b815260040161015c906102c0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60003361025c6000546001600160a01b031690565b6001600160a01b0316146102825760405162461bcd60e51b815260040161015c906102c0565b506001546001600160a01b031690565b6000602082840312156102a3578081fd5b81356001600160a01b03811681146102b9578182fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea26469706673582212200018dd7f623f9c982d0a2b56ea7037f0f0b8f2f754b1c2bb74b41950b704ef4064736f6c6343000804003300000000000000000000000012dcda83db87bc01a9272a51fa60838576bf992c

Deployed Bytecode

0x6080604052600436106100435760003560e01c8063167d3e9c146100745780638da5cb5b146100945780639204395f146100ca578063d8d7a176146100ea5761005f565b3661005f5760015461005d906001600160a01b03166100ff565b005b60015461005d906001600160a01b03166100ff565b34801561008057600080fd5b5061005d61008f366004610292565b610123565b3480156100a057600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b3480156100d657600080fd5b5061005d6100e5366004610292565b6101ec565b3480156100f657600080fd5b506100ae610247565b3660008037600080366000845af43d6000803e80801561011e573d6000f35b3d6000fd5b336101366000546001600160a01b031690565b6001600160a01b0316146101655760405162461bcd60e51b815260040161015c906102c0565b60405180910390fd5b6001600160a01b0381166101ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161015c565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b336101ff6000546001600160a01b031690565b6001600160a01b0316146102255760405162461bcd60e51b815260040161015c906102c0565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60003361025c6000546001600160a01b031690565b6001600160a01b0316146102825760405162461bcd60e51b815260040161015c906102c0565b506001546001600160a01b031690565b6000602082840312156102a3578081fd5b81356001600160a01b03811681146102b9578182fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea26469706673582212200018dd7f623f9c982d0a2b56ea7037f0f0b8f2f754b1c2bb74b41950b704ef4064736f6c63430008040033

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

00000000000000000000000012dcda83db87bc01a9272a51fa60838576bf992c

-----Decoded View---------------
Arg [0] : logicAddress (address): 0x12dcdA83DB87Bc01A9272a51fA60838576bF992c

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000012dcda83db87bc01a9272a51fa60838576bf992c


Deployed Bytecode Sourcemap

87:128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1088:16:2;;1078:27;;-1:-1:-1;;;;;1088:16:2;1078:9;:27::i;:::-;87:128:0;;1006:16:2;;996:27;;-1:-1:-1;;;;;1006:16:2;996:9;:27::i;547:175:1:-;;;;;;;;;;-1:-1:-1;547:175:1;;;;;:::i;:::-;;:::i;269:79::-;;;;;;;;;;-1:-1:-1;307:7:1;334:6;-1:-1:-1;;;;;334:6:1;269:79;;;-1:-1:-1;;;;;489:32:3;;;471:51;;459:2;444:18;269:79:1;;;;;;;847:101:2;;;;;;;;;;-1:-1:-1;847:101:2;;;;;:::i;:::-;;:::i;735:104::-;;;;;;;;;;;;;:::i;1125:1065::-;1675:14;1672:1;1669;1656:34;1893:1;1890;1874:14;1871:1;1855:14;1848:5;1835:60;1972:16;1969:1;1966;1951:38;2012:6;2081:38;;;;2153:16;2150:1;2143:27;2081:38;2100:16;2097:1;2090:27;547:175:1;407:10;396:7;307;334:6;-1:-1:-1;;;;;334:6:1;;269:79;396:7;-1:-1:-1;;;;;396:21:1;;388:66;;;;-1:-1:-1;;;388:66:1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;621:22:1;::::1;613:73;;;::::0;-1:-1:-1;;;613:73:1;;735:2:3;613:73:1::1;::::0;::::1;717:21:3::0;774:2;754:18;;;747:30;813:34;793:18;;;786:62;-1:-1:-1;;;864:18:3;;;857:36;910:19;;613:73:1::1;707:228:3::0;613:73:1::1;697:6;:17:::0;;-1:-1:-1;;;;;;697:17:1::1;-1:-1:-1::0;;;;;697:17:1;;;::::1;::::0;;;::::1;::::0;;547:175::o;847:101:2:-;407:10:1;396:7;307;334:6;-1:-1:-1;;;;;334:6:1;;269:79;396:7;-1:-1:-1;;;;;396:21:1;;388:66;;;;-1:-1:-1;;;388:66:1;;;;;;;:::i;:::-;913:16:2::1;:27:::0;;-1:-1:-1;;;;;;913:27:2::1;-1:-1:-1::0;;;;;913:27:2;;;::::1;::::0;;;::::1;::::0;;847:101::o;735:104::-;788:7;407:10:1;396:7;307;334:6;-1:-1:-1;;;;;334:6:1;;269:79;396:7;-1:-1:-1;;;;;396:21:1;;388:66;;;;-1:-1:-1;;;388:66:1;;;;;;;:::i;:::-;-1:-1:-1;815:16:2::1;::::0;-1:-1:-1;;;;;815:16:2::1;735:104:::0;:::o;14:306:3:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;178:23;;-1:-1:-1;;;;;230:31:3;;220:42;;210:2;;281:6;273;266:22;210:2;309:5;84:236;-1:-1:-1;;;84:236:3:o;940:356::-;1142:2;1124:21;;;1161:18;;;1154:30;1220:34;1215:2;1200:18;;1193:62;1287:2;1272:18;;1114:182::o

Swarm Source

ipfs://0018dd7f623f9c982d0a2b56ea7037f0f0b8f2f754b1c2bb74b41950b704ef40
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.