ETH Price: $2,722.13 (+0.71%)

Token

Agent (DAG)

Overview

Max Total Supply

1,531 DAG

Holders

1,531

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Balance
1 DAG
0x839fa5c2c61389327459e49298fbaf2606e9a1c4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
AgentNFT

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : AgentNFT.sol
pragma solidity 0.8.17;

// SPDX-License-Identifier: AGPL-3.0-only

import "interface/IAgency.sol";
import "interface/IERC721Receiver.sol";

library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

contract AgentNFT {
    IAgency public immutable agency;

    /// @dev ERC165 interface ID of ERC165
    bytes4 private constant ERC165_INTERFACE_ID = 0x01ffc9a7;
    /// @dev ERC165 interface ID of ERC721
    bytes4 private constant ERC721_INTERFACE_ID = 0x80ac58cd;
    /// @dev ERC165 interface ID of ERC721Metadata
    bytes4 private constant ERC721_METADATA_INTERFACE_ID = 0x5b5e139f;

    /// @dev Get the approved address for a single NFT.
    mapping(uint => address) public getApproved;
    /// @dev Checks if an address is an approved operator. 
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint indexed tokenId);
    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint indexed tokenId);
    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    constructor(address _agency) {
        agency = IAgency(_agency);
    }

    /**
    * @dev Interface identification is specified in ERC-165.
    * @param interfaceID Id of the interface
    */
    function supportsInterface(bytes4 interfaceID) external pure returns (bool) {
        return (interfaceID == ERC165_INTERFACE_ID ||
                interfaceID == ERC721_INTERFACE_ID ||
                interfaceID == ERC721_METADATA_INTERFACE_ID);
    }

    function name() external pure returns (string memory) {
        return "Agent";
    }

    function symbol() external pure returns (string memory) {
        return "DAG";
    }

    function tokenURI(uint tokenId) external view returns (string memory) {
        (address owner, uint tier, uint birth, uint parent,) = agency.getAgent(tokenId);
        require(owner != address(0), "token not exist");
        return _tokenURI(tokenId, parent, tier, birth);
    }

    function _tokenURI(uint tokenId, uint parent, uint tier, uint birth) internal pure returns (string memory output) {
        output = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">';
        output = string(abi.encodePacked(output, "token ", _toString(tokenId), '</text><text x="10" y="40" class="base">'));
        output = string(abi.encodePacked(output, "referer ", _toString(parent), '</text><text x="10" y="60" class="base">'));
        output = string(abi.encodePacked(output, "agent_tier ", _toString(tier), '</text><text x="10" y="80" class="base">'));
        output = string(abi.encodePacked(output, "time_of_creation ", _toString(birth), '</text></svg>'));

        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Agent #', _toString(tokenId), '", "description": "Dyson Finance Agent NFT", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
        output = string(abi.encodePacked('data:application/json;base64,', json));
    }

    function _toString(uint value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint temp = value;
        uint digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function totalSupply() external view returns (uint) {
        return agency.totalSupply();
    }

    function balanceOf(address owner) external view returns (uint balance) {
        return agency.whois(owner) == 0 ? 0 : 1;
    }

    function ownerOf(uint tokenId) public view returns (address owner) {
        (owner,,,,) = agency.getAgent(tokenId);
    }

    function onMint(address user, uint tokenId) external {
        require(msg.sender == address(agency), "forbidden");
        emit Transfer(address(0), user, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint tokenId
    ) external {
        safeTransferFrom(from, to, tokenId, '');
    }

    function approve(address to, uint tokenId) external {
        address owner = ownerOf(tokenId);
        // Throws if `tokenId` is not a valid NFT
        require(owner != address(0), "token not exist");
        // Check requirements
        require(owner == msg.sender || isApprovedForAll[owner][msg.sender], "forbidden");
        getApproved[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function setApprovalForAll(address operator, bool approved) external {
        require(operator != msg.sender, "self approval");
        isApprovedForAll[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function _transferFrom(
        address from,
        address to,
        uint tokenId,
        address sender
    ) internal {
        require(from == sender || isApprovedForAll[from][sender] || getApproved[tokenId] == sender, "forbidden");

        getApproved[tokenId] = address(0);

        require(agency.transfer(from, to, tokenId), "forbidden");

        emit Transfer(from, to, tokenId);
    }

    function transferFrom(
        address from,
        address to,
        uint tokenId
    ) external {
        _transferFrom(from, to, tokenId, msg.sender);
    }

    function _isContract(address account) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function safeTransferFrom(
        address from,
        address to,
        uint tokenId,
        bytes memory data
    ) public {
        _transferFrom(from, to, tokenId, msg.sender);

        if (_isContract(to)) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, data) returns (bytes4 retval) {
                require(retval == IERC721Receiver.onERC721Received.selector, "transfer failed");
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert('ERC721: transfer to non ERC721Receiver implementer');
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        }
    }

}

File 2 of 3 : IAgency.sol
pragma solidity >=0.8.0;

// SPDX-License-Identifier: MIT

interface IAgency {
    struct Agent {
        address owner;
        uint gen;
        uint birth;
        uint parentId;
        uint[] childrenId;
    }

    event TransferOwnership(address newOwner);
    event Register(uint indexed referrer, uint referee);
    event Sign(address indexed signer, bytes32 digest);

    function REGISTER_ONCE_TYPEHASH() external view returns (bytes32);
    function REGISTER_PARENT_TYPEHASH() external view returns (bytes32);
    function MAX_NUM_CHILDREN() external view returns (uint);
    function REGISTER_DELAY() external view returns (uint);
    function TRANSFER_CD() external view returns (uint);
    function agentNFT() external view returns (address);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function whois(address agent) external view returns (uint);
    function oneTimeCodes(address once) external view returns (bool);
    function presign(address agent, bytes32 digest) external view returns (bool);
    function isController(address agent) external view returns (bool);
    function owner() external view returns (address);

    function userInfo(address agent) external view returns (address ref, uint gen);
    function transfer(address from, address to, uint id) external returns (bool);
    function totalSupply() external view returns (uint);
    function getAgent(uint id) external view returns (address, uint, uint, uint, uint[] memory);
    function transferOwnership(address owner) external;
    function addController(address _controller) external;
    function removeController(address _controller) external;
    function rescueERC20(address tokenAddress, address to, uint256 amount) external;
    function adminAdd(address newUser) external returns (uint id);
    function register(bytes memory parentSig, bytes memory onceSig, uint deadline) payable external returns (uint id);
    function sign(bytes32 digest) external;
    function getHashTypedData(bytes32 structHash) external view returns (bytes32);
    function transferCooldown(uint id) external view returns (uint);
}

File 3 of 3 : IERC721Receiver.sol
pragma solidity >=0.8.0;

// SPDX-License-Identifier: MIT

/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
    function onERC721Received(address, address, uint, bytes calldata) external returns (bytes4);
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "interface/=src/interface/",
    "util/=src/util/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_agency","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"agency","outputs":[{"internalType":"contract IAgency","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"onMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b5060405161195938038061195983398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516118a46100b5600039600081816101ee01528181610438015281816104b50152818161057f01528181610623015281816108e80152610ab101526118a46000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806342842e0e11610097578063a22cb46511610066578063a22cb46514610268578063b88d4fde1461027b578063c87b56dd1461028e578063e985e9c5146102a157600080fd5b806342842e0e146102105780636352211e1461022357806370a082311461023657806395d89b411461024957600080fd5b80630f632fd3116100d35780630f632fd3146101ad57806318160ddd146101c057806323b872dd146101d65780633b91ee26146101e957600080fd5b806301ffc9a71461010557806306fdde031461012d578063081812fc14610157578063095ea7b314610198575b600080fd5b610118610113366004610f44565b6102cf565b60405190151581526020015b60405180910390f35b6040805180820190915260058152641059d95b9d60da1b60208201525b6040516101249190610fb8565b610180610165366004610fcb565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610124565b6101ab6101a6366004610ff9565b610321565b005b6101ab6101bb366004610ff9565b61042d565b6101c86104b1565b604051908152602001610124565b6101ab6101e4366004611025565b61053a565b6101807f000000000000000000000000000000000000000000000000000000000000000081565b6101ab61021e366004611025565b61054b565b610180610231366004610fcb565b610566565b6101c8610244366004611066565b610601565b60408051808201909152600381526244414760e81b602082015261014a565b6101ab610276366004611091565b6106a8565b6101ab610289366004611111565b61075c565b61014a61029c366004610fcb565b6108de565b6101186102af3660046111d5565b600160209081526000928352604080842090915290825290205460ff1681565b60006001600160e01b031982166301ffc9a760e01b148061030057506001600160e01b031982166380ac58cd60e01b145b8061031b57506001600160e01b03198216635b5e139f60e01b145b92915050565b600061032c82610566565b90506001600160a01b03811661037b5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08195e1a5cdd608a1b60448201526064015b60405180910390fd5b6001600160a01b0381163314806103b557506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6103d15760405162461bcd60e51b815260040161037290611203565b60008281526020819052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104755760405162461bcd60e51b815260040161037290611203565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105359190611226565b905090565b610546838383336109e2565b505050565b6105468383836040518060200160405280600081525061075c565b604051632de5aaf760e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632de5aaf790602401600060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f6919081019061123f565b509295945050505050565b604051632a5ccc1f60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632a5ccc1f90602401602060405180830381865afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190611226565b1561069c57600161069f565b60005b60ff1692915050565b336001600160a01b038316036106f05760405162461bcd60e51b815260206004820152600d60248201526c1cd95b1988185c1c1c9bdd985b609a1b6044820152606401610372565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610768848484336109e2565b823b156108d857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906107a1903390889087908790600401611319565b6020604051808303816000875af19250505080156107dc575060408051601f3d908101601f191682019092526107d99181019061134c565b60015b610884573d80801561080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b50805160000361087c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610372565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146108d65760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610372565b505b50505050565b60606000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632de5aaf7876040518263ffffffff1660e01b815260040161093491815260200190565b600060405180830381865afa158015610951573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610979919081019061123f565b50929650909450925090506001600160a01b0384166109cc5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08195e1a5cdd608a1b6044820152606401610372565b6109d886828585610b81565b9695505050505050565b806001600160a01b0316846001600160a01b03161480610a2757506001600160a01b0380851660009081526001602090815260408083209385168352929052205460ff165b80610a4b57506000828152602081905260409020546001600160a01b038281169116145b610a675760405162461bcd60e51b815260040161037290611203565b6000828152602081905260409081902080546001600160a01b0319169055516317d5759960e31b81526001600160a01b0385811660048301528481166024830152604482018490527f0000000000000000000000000000000000000000000000000000000000000000169063beabacc8906064016020604051808303816000875af1158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e9190611369565b610b3a5760405162461bcd60e51b815260040161037290611203565b81836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b606060405180610120016040528060fd815260200161173260fd9139905080610ba986610cb8565b604051602001610bba929190611386565b604051602081830303815290604052905080610bd585610cb8565b604051602001610be6929190611402565b604051602081830303815290604052905080610c0184610cb8565b604051602001610c12929190611480565b604051602081830303815290604052905080610c2d83610cb8565b604051602001610c3e929190611501565b60405160208183030381529060405290506000610c8b610c5d87610cb8565b610c6684610dc1565b604051602001610c77929190611567565b604051602081830303815290604052610dc1565b905080604051602001610c9e919061162c565b604051602081830303815290604052915050949350505050565b606081600003610cdf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d095780610cf381611687565b9150610d029050600a836116b6565b9150610ce3565b60008167ffffffffffffffff811115610d2457610d246110ca565b6040519080825280601f01601f191660200182016040528015610d4e576020820181803683370190505b5090505b8415610db957610d636001836116ca565b9150610d70600a866116dd565b610d7b9060306116f1565b60f81b818381518110610d9057610d90611704565b60200101906001600160f81b031916908160001a905350610db2600a866116b6565b9450610d52565b949350505050565b80516060906000819003610de5575050604080516020810190915260008152919050565b60006003610df48360026116f1565b610dfe91906116b6565b610e0990600461171a565b90506000610e188260206116f1565b67ffffffffffffffff811115610e3057610e306110ca565b6040519080825280601f01601f191660200182016040528015610e5a576020820181803683370190505b509050600060405180606001604052806040815260200161182f604091399050600181016020830160005b86811015610ee6576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101610e85565b506003860660018114610f005760028114610f1157610f1d565b613d3d60f01b600119830152610f1d565b603d60f81b6000198301525b505050918152949350505050565b6001600160e01b031981168114610f4157600080fd5b50565b600060208284031215610f5657600080fd5b8135610f6181610f2b565b9392505050565b60005b83811015610f83578181015183820152602001610f6b565b50506000910152565b60008151808452610fa4816020860160208601610f68565b601f01601f19169290920160200192915050565b602081526000610f616020830184610f8c565b600060208284031215610fdd57600080fd5b5035919050565b6001600160a01b0381168114610f4157600080fd5b6000806040838503121561100c57600080fd5b823561101781610fe4565b946020939093013593505050565b60008060006060848603121561103a57600080fd5b833561104581610fe4565b9250602084013561105581610fe4565b929592945050506040919091013590565b60006020828403121561107857600080fd5b8135610f6181610fe4565b8015158114610f4157600080fd5b600080604083850312156110a457600080fd5b82356110af81610fe4565b915060208301356110bf81611083565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611109576111096110ca565b604052919050565b6000806000806080858703121561112757600080fd5b843561113281610fe4565b935060208581013561114381610fe4565b935060408601359250606086013567ffffffffffffffff8082111561116757600080fd5b818801915088601f83011261117b57600080fd5b81358181111561118d5761118d6110ca565b61119f601f8201601f191685016110e0565b915080825289848285010111156111b557600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156111e857600080fd5b82356111f381610fe4565b915060208301356110bf81610fe4565b6020808252600990820152683337b93134b23232b760b91b604082015260600190565b60006020828403121561123857600080fd5b5051919050565b600080600080600060a0868803121561125757600080fd5b855161126281610fe4565b8095505060208087015194506040870151935060608701519250608087015167ffffffffffffffff8082111561129757600080fd5b818901915089601f8301126112ab57600080fd5b8151818111156112bd576112bd6110ca565b8060051b91506112ce8483016110e0565b818152918301840191848101908c8411156112e857600080fd5b938501935b83851015611306578451825293850193908501906112ed565b8096505050505050509295509295909350565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906109d890830184610f8c565b60006020828403121561135e57600080fd5b8151610f6181610f2b565b60006020828403121561137b57600080fd5b8151610f6181611083565b60008351611398818460208801610f68565b6503a37b5b2b7160d51b90830190815283516113bb816006840160208801610f68565b7f3c2f746578743e3c7465787420783d2231302220793d2234302220636c61737360069290910191820152671e913130b9b2911f60c11b6026820152602e01949350505050565b60008351611414818460208801610f68565b6703932b332b932b9160c51b9083019081528351611439816008840160208801610f68565b7f3c2f746578743e3c7465787420783d2231302220793d2236302220636c61737360089290910191820152671e913130b9b2911f60c11b6028820152603001949350505050565b60008351611492818460208801610f68565b6a030b3b2b73a2fba34b2b9160ad1b90830190815283516114ba81600b840160208801610f68565b7f3c2f746578743e3c7465787420783d2231302220793d2238302220636c617373600b9290910191820152671e913130b9b2911f60c11b602b820152603301949350505050565b60008351611513818460208801610f68565b7003a34b6b2afb7b32fb1b932b0ba34b7b71607d1b9083019081528351611541816011840160208801610f68565b6c1e17ba32bc3a1f1e17b9bb339f60991b60119290910191820152601e01949350505050565b707b226e616d65223a20224167656e74202360781b81528251600090611594816011850160208801610f68565b7f222c20226465736372697074696f6e223a20224479736f6e2046696e616e63656011918401918201527f204167656e74204e4654222c2022696d616765223a2022646174613a696d6167603182015270194bdcdd99cade1b5b0ed8985cd94d8d0b607a1b60518201528351611611816062840160208801610f68565b61227d60f01b60629290910191820152606401949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161166481601d850160208701610f68565b91909101601d0192915050565b634e487b7160e01b600052601160045260246000fd5b60006001820161169957611699611671565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826116c5576116c56116a0565b500490565b8181038181111561031b5761031b611671565b6000826116ec576116ec6116a0565b500690565b8082018082111561031b5761031b611671565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761031b5761031b61167156fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212209197ff7a0698aa896f8e5b6cb4742fad9ba259645c55cb3cb02df5dc1732fa6364736f6c634300081100330000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c806342842e0e11610097578063a22cb46511610066578063a22cb46514610268578063b88d4fde1461027b578063c87b56dd1461028e578063e985e9c5146102a157600080fd5b806342842e0e146102105780636352211e1461022357806370a082311461023657806395d89b411461024957600080fd5b80630f632fd3116100d35780630f632fd3146101ad57806318160ddd146101c057806323b872dd146101d65780633b91ee26146101e957600080fd5b806301ffc9a71461010557806306fdde031461012d578063081812fc14610157578063095ea7b314610198575b600080fd5b610118610113366004610f44565b6102cf565b60405190151581526020015b60405180910390f35b6040805180820190915260058152641059d95b9d60da1b60208201525b6040516101249190610fb8565b610180610165366004610fcb565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610124565b6101ab6101a6366004610ff9565b610321565b005b6101ab6101bb366004610ff9565b61042d565b6101c86104b1565b604051908152602001610124565b6101ab6101e4366004611025565b61053a565b6101807f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a81565b6101ab61021e366004611025565b61054b565b610180610231366004610fcb565b610566565b6101c8610244366004611066565b610601565b60408051808201909152600381526244414760e81b602082015261014a565b6101ab610276366004611091565b6106a8565b6101ab610289366004611111565b61075c565b61014a61029c366004610fcb565b6108de565b6101186102af3660046111d5565b600160209081526000928352604080842090915290825290205460ff1681565b60006001600160e01b031982166301ffc9a760e01b148061030057506001600160e01b031982166380ac58cd60e01b145b8061031b57506001600160e01b03198216635b5e139f60e01b145b92915050565b600061032c82610566565b90506001600160a01b03811661037b5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08195e1a5cdd608a1b60448201526064015b60405180910390fd5b6001600160a01b0381163314806103b557506001600160a01b038116600090815260016020908152604080832033845290915290205460ff165b6103d15760405162461bcd60e51b815260040161037290611203565b60008281526020819052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336001600160a01b037f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a16146104755760405162461bcd60e51b815260040161037290611203565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60007f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105359190611226565b905090565b610546838383336109e2565b505050565b6105468383836040518060200160405280600081525061075c565b604051632de5aaf760e01b8152600481018290526000907f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a6001600160a01b031690632de5aaf790602401600060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f6919081019061123f565b509295945050505050565b604051632a5ccc1f60e01b81526001600160a01b0382811660048301526000917f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a90911690632a5ccc1f90602401602060405180830381865afa15801561066c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106909190611226565b1561069c57600161069f565b60005b60ff1692915050565b336001600160a01b038316036106f05760405162461bcd60e51b815260206004820152600d60248201526c1cd95b1988185c1c1c9bdd985b609a1b6044820152606401610372565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610768848484336109e2565b823b156108d857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906107a1903390889087908790600401611319565b6020604051808303816000875af19250505080156107dc575060408051601f3d908101601f191682019092526107d99181019061134c565b60015b610884573d80801561080a576040519150601f19603f3d011682016040523d82523d6000602084013e61080f565b606091505b50805160000361087c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610372565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146108d65760405162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b6044820152606401610372565b505b50505050565b60606000806000807f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a6001600160a01b0316632de5aaf7876040518263ffffffff1660e01b815260040161093491815260200190565b600060405180830381865afa158015610951573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610979919081019061123f565b50929650909450925090506001600160a01b0384166109cc5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08195e1a5cdd608a1b6044820152606401610372565b6109d886828585610b81565b9695505050505050565b806001600160a01b0316846001600160a01b03161480610a2757506001600160a01b0380851660009081526001602090815260408083209385168352929052205460ff165b80610a4b57506000828152602081905260409020546001600160a01b038281169116145b610a675760405162461bcd60e51b815260040161037290611203565b6000828152602081905260409081902080546001600160a01b0319169055516317d5759960e31b81526001600160a01b0385811660048301528481166024830152604482018490527f0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a169063beabacc8906064016020604051808303816000875af1158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e9190611369565b610b3a5760405162461bcd60e51b815260040161037290611203565b81836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b606060405180610120016040528060fd815260200161173260fd9139905080610ba986610cb8565b604051602001610bba929190611386565b604051602081830303815290604052905080610bd585610cb8565b604051602001610be6929190611402565b604051602081830303815290604052905080610c0184610cb8565b604051602001610c12929190611480565b604051602081830303815290604052905080610c2d83610cb8565b604051602001610c3e929190611501565b60405160208183030381529060405290506000610c8b610c5d87610cb8565b610c6684610dc1565b604051602001610c77929190611567565b604051602081830303815290604052610dc1565b905080604051602001610c9e919061162c565b604051602081830303815290604052915050949350505050565b606081600003610cdf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d095780610cf381611687565b9150610d029050600a836116b6565b9150610ce3565b60008167ffffffffffffffff811115610d2457610d246110ca565b6040519080825280601f01601f191660200182016040528015610d4e576020820181803683370190505b5090505b8415610db957610d636001836116ca565b9150610d70600a866116dd565b610d7b9060306116f1565b60f81b818381518110610d9057610d90611704565b60200101906001600160f81b031916908160001a905350610db2600a866116b6565b9450610d52565b949350505050565b80516060906000819003610de5575050604080516020810190915260008152919050565b60006003610df48360026116f1565b610dfe91906116b6565b610e0990600461171a565b90506000610e188260206116f1565b67ffffffffffffffff811115610e3057610e306110ca565b6040519080825280601f01601f191660200182016040528015610e5a576020820181803683370190505b509050600060405180606001604052806040815260200161182f604091399050600181016020830160005b86811015610ee6576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101610e85565b506003860660018114610f005760028114610f1157610f1d565b613d3d60f01b600119830152610f1d565b603d60f81b6000198301525b505050918152949350505050565b6001600160e01b031981168114610f4157600080fd5b50565b600060208284031215610f5657600080fd5b8135610f6181610f2b565b9392505050565b60005b83811015610f83578181015183820152602001610f6b565b50506000910152565b60008151808452610fa4816020860160208601610f68565b601f01601f19169290920160200192915050565b602081526000610f616020830184610f8c565b600060208284031215610fdd57600080fd5b5035919050565b6001600160a01b0381168114610f4157600080fd5b6000806040838503121561100c57600080fd5b823561101781610fe4565b946020939093013593505050565b60008060006060848603121561103a57600080fd5b833561104581610fe4565b9250602084013561105581610fe4565b929592945050506040919091013590565b60006020828403121561107857600080fd5b8135610f6181610fe4565b8015158114610f4157600080fd5b600080604083850312156110a457600080fd5b82356110af81610fe4565b915060208301356110bf81611083565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611109576111096110ca565b604052919050565b6000806000806080858703121561112757600080fd5b843561113281610fe4565b935060208581013561114381610fe4565b935060408601359250606086013567ffffffffffffffff8082111561116757600080fd5b818801915088601f83011261117b57600080fd5b81358181111561118d5761118d6110ca565b61119f601f8201601f191685016110e0565b915080825289848285010111156111b557600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156111e857600080fd5b82356111f381610fe4565b915060208301356110bf81610fe4565b6020808252600990820152683337b93134b23232b760b91b604082015260600190565b60006020828403121561123857600080fd5b5051919050565b600080600080600060a0868803121561125757600080fd5b855161126281610fe4565b8095505060208087015194506040870151935060608701519250608087015167ffffffffffffffff8082111561129757600080fd5b818901915089601f8301126112ab57600080fd5b8151818111156112bd576112bd6110ca565b8060051b91506112ce8483016110e0565b818152918301840191848101908c8411156112e857600080fd5b938501935b83851015611306578451825293850193908501906112ed565b8096505050505050509295509295909350565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906109d890830184610f8c565b60006020828403121561135e57600080fd5b8151610f6181610f2b565b60006020828403121561137b57600080fd5b8151610f6181611083565b60008351611398818460208801610f68565b6503a37b5b2b7160d51b90830190815283516113bb816006840160208801610f68565b7f3c2f746578743e3c7465787420783d2231302220793d2234302220636c61737360069290910191820152671e913130b9b2911f60c11b6026820152602e01949350505050565b60008351611414818460208801610f68565b6703932b332b932b9160c51b9083019081528351611439816008840160208801610f68565b7f3c2f746578743e3c7465787420783d2231302220793d2236302220636c61737360089290910191820152671e913130b9b2911f60c11b6028820152603001949350505050565b60008351611492818460208801610f68565b6a030b3b2b73a2fba34b2b9160ad1b90830190815283516114ba81600b840160208801610f68565b7f3c2f746578743e3c7465787420783d2231302220793d2238302220636c617373600b9290910191820152671e913130b9b2911f60c11b602b820152603301949350505050565b60008351611513818460208801610f68565b7003a34b6b2afb7b32fb1b932b0ba34b7b71607d1b9083019081528351611541816011840160208801610f68565b6c1e17ba32bc3a1f1e17b9bb339f60991b60119290910191820152601e01949350505050565b707b226e616d65223a20224167656e74202360781b81528251600090611594816011850160208801610f68565b7f222c20226465736372697074696f6e223a20224479736f6e2046696e616e63656011918401918201527f204167656e74204e4654222c2022696d616765223a2022646174613a696d6167603182015270194bdcdd99cade1b5b0ed8985cd94d8d0b607a1b60518201528351611611816062840160208801610f68565b61227d60f01b60629290910191820152606401949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161166481601d850160208701610f68565b91909101601d0192915050565b634e487b7160e01b600052601160045260246000fd5b60006001820161169957611699611671565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826116c5576116c56116a0565b500490565b8181038181111561031b5761031b611671565b6000826116ec576116ec6116a0565b500690565b8082018082111561031b5761031b611671565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761031b5761031b61167156fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212209197ff7a0698aa896f8e5b6cb4742fad9ba259645c55cb3cb02df5dc1732fa6364736f6c63430008110033

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

0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a

-----Decoded View---------------
Arg [0] : _agency (address): 0x0BC788aDF6EDE55c9B9f112A52AAa57F2d35874A

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000bc788adf6ede55c9b9f112a52aaa57f2d35874a


[ 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.