ETH Price: $2,010.03 (+1.29%)

Contract

0x3349705FF99e44d1A42c8ea600DE7cF5bE36E034
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Chunk To Scr...191659312024-02-06 1:29:23781 days ago1707182963IN
0x3349705F...5bE36E034
0 ETH0.0138577416.01590065
Create Script191659302024-02-06 1:29:11781 days ago1707182951IN
0x3349705F...5bE36E034
0 ETH0.001168315.41650736
Add Chunk To Scr...191657092024-02-06 0:44:23781 days ago1707180263IN
0x3349705F...5bE36E034
0 ETH0.0185734921.75157904
Create Script191657082024-02-06 0:44:11781 days ago1707180251IN
0x3349705F...5bE36E034
0 ETH0.0016206121.39853672
Add Chunk To Scr...191657072024-02-06 0:43:59781 days ago1707180239IN
0x3349705F...5bE36E034
0 ETH0.0023103722.32500508
Create Script191657062024-02-06 0:43:47781 days ago1707180227IN
0x3349705F...5bE36E034
0 ETH0.0015120219.99005163
Add Chunk To Scr...180457752023-09-02 2:10:35938 days ago1693620635IN
0x3349705F...5bE36E034
0 ETH0.0448175510.21170371
Create Script180457742023-09-02 2:10:23938 days ago1693620623IN
0x3349705F...5bE36E034
0 ETH0.0014002711.54243575
Add Chunk To Scr...180457732023-09-02 2:10:11938 days ago1693620611IN
0x3349705F...5bE36E034
0 ETH0.0321531110.44526654
Create Script180457722023-09-02 2:09:59938 days ago1693620599IN
0x3349705F...5bE36E034
0 ETH0.0012648910.4265142
Add Chunk To Scr...180457712023-09-02 2:09:47938 days ago1693620587IN
0x3349705F...5bE36E034
0 ETH0.0348574910.89387203
Create Script180457692023-09-02 2:09:23938 days ago1693620563IN
0x3349705F...5bE36E034
0 ETH0.001198359.8683026
Add Chunk To Scr...180457682023-09-02 2:09:11938 days ago1693620551IN
0x3349705F...5bE36E034
0 ETH0.044402039.85930829
Create Script180457672023-09-02 2:08:59938 days ago1693620539IN
0x3349705F...5bE36E034
0 ETH0.001192439.81950692
Add Chunk To Scr...180457482023-09-02 2:05:11938 days ago1693620311IN
0x3349705F...5bE36E034
0 ETH0.0509336510.30457236
Create Script180457472023-09-02 2:04:59938 days ago1693620299IN
0x3349705F...5bE36E034
0 ETH0.0013982711.51916081
Add Chunk To Scr...178039052023-07-30 5:56:11972 days ago1690696571IN
0x3349705F...5bE36E034
0 ETH0.0231717515.69935895
Add Chunk To Scr...178039052023-07-30 5:56:11972 days ago1690696571IN
0x3349705F...5bE36E034
0 ETH0.0853163915.69935895
Add Chunk To Scr...178039052023-07-30 5:56:11972 days ago1690696571IN
0x3349705F...5bE36E034
0 ETH0.08532615.69935895
Add Chunk To Scr...178039052023-07-30 5:56:11972 days ago1690696571IN
0x3349705F...5bE36E034
0 ETH0.0872895715.96143809
Create Script178038502023-07-30 5:45:11972 days ago1690695911IN
0x3349705F...5bE36E034
0 ETH0.0014059618.59961992
Add Chunk To Scr...178038502023-07-30 5:45:11972 days ago1690695911IN
0x3349705F...5bE36E034
0 ETH0.0216749718.59961992
Add Chunk To Scr...178038502023-07-30 5:45:11972 days ago1690695911IN
0x3349705F...5bE36E034
0 ETH0.1013663418.59961992
Add Chunk To Scr...178038492023-07-30 5:44:59972 days ago1690695899IN
0x3349705F...5bE36E034
0 ETH0.0899591716.61275415
Add Chunk To Scr...178038492023-07-30 5:44:59972 days ago1690695899IN
0x3349705F...5bE36E034
0 ETH0.089951616.61275415
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ScriptyStorage

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

///////////////////////////////////////////////////////////
// ░██████╗░█████╗░██████╗░██╗██████╗░████████╗██╗░░░██╗ //
// ██╔════╝██╔══██╗██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗░██╔╝ //
// ╚█████╗░██║░░╚═╝██████╔╝██║██████╔╝░░░██║░░░░╚████╔╝░ //
// ░╚═══██╗██║░░██╗██╔══██╗██║██╔═══╝░░░░██║░░░░░╚██╔╝░░ //
// ██████╔╝╚█████╔╝██║░░██║██║██║░░░░░░░░██║░░░░░░██║░░░ //
// ╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░░░╚═╝░░░ //
///////////////////////////////////////////////////////////
//░░░░░░░░░░░░░░░░░░░░    STORAGE    ░░░░░░░░░░░░░░░░░░░░//
///////////////////////////////////////////////////////////

/**
  @title A generic data storage contract.
  @author @xtremetom
  @author @0xthedude

  Special thanks to @cxkoda, @frolic and @dhof
*/

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IContentStore} from "./dependencies/ethfs/IContentStore.sol";
import {AddressChunks} from "./utils/AddressChunks.sol";

import {IScriptyStorage} from "./interfaces/IScriptyStorage.sol";
import {IContractScript} from "./interfaces/IContractScript.sol";

contract ScriptyStorage is Ownable, IScriptyStorage, IContractScript {
    IContentStore public immutable contentStore;
    mapping(string => Script) public scripts;

    constructor(address _contentStoreAddress) {
        contentStore = IContentStore(_contentStoreAddress);
    }

    // =============================================================
    //                           MODIFIERS
    // =============================================================

    /**
     * @notice Check if the msg.sender is the owner of the script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     */
    modifier isScriptOwner(string calldata name) {
        if (msg.sender != scripts[name].owner) revert NotScriptOwner();
        _;
    }

    /**
     * @notice Check if a script can be created by checking if it already exists
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     */
    modifier canCreate(string calldata name) {
        if (scripts[name].owner != address(0)) revert ScriptExists();
        _;
    }

    /**
     * @notice Check if a script is frozen
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     */
    modifier isFrozen(string calldata name) {
        if (scripts[name].isFrozen) revert ScriptIsFrozen(name);
        _;
    }

    // =============================================================
    //                      MANAGEMENT OPERATIONS
    // =============================================================

    /**
     * @notice Create a new script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param details - Any details the owner wishes to store about the script
     *
     * Emits an {ScriptCreated} event.
     */
    function createScript(string calldata name, bytes calldata details)
        public
        canCreate(name)
    {
        scripts[name] = Script(false, false, msg.sender, 0, details, new address[](0));
        emit ScriptCreated(name, details);
    }

    /**
     * @notice Add a code chunk to the script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param chunk - Next sequential code chunk
     *
     * Emits an {ChunkStored} event.
     */
    function addChunkToScript(string calldata name, bytes calldata chunk)
        public
        isFrozen(name)
        isScriptOwner(name)
    {
        (, address pointer) = contentStore.addContent(chunk);
        scripts[name].chunks.push(pointer);
        scripts[name].size += chunk.length;
        emit ChunkStored(name, chunk.length);
    }

    /**
     * @notice Edit the script details
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param details - Any details the owner wishes to store about the script
     *
     * Emits an {ScriptDetailsUpdated} event.
     */
    function updateDetails(string calldata name, bytes calldata details)
        public
        isFrozen(name)
        isScriptOwner(name)
    {
        scripts[name].details = details;
        emit ScriptDetailsUpdated(name, details);
    }

    /**
     * @notice Update the verification status of the script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param isVerified - The verification status
     *
     * Emits an {ScriptVerificationUpdated} event.
     */
    function updateScriptVerification(string calldata name, bool isVerified)
        public
        isFrozen(name)
        isScriptOwner(name)
    {
        scripts[name].isVerified = isVerified;
        emit ScriptVerificationUpdated(name, isVerified);
    }

    /**
     * @notice Update the frozen status of the script
     * @dev [WARNING] Once a script it frozen is can no longer be edited
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     *
     * Emits an {ScriptFrozen} event.
     */
    function freezeScript(string calldata name)
        public
        isFrozen(name)
        isScriptOwner(name)
    {
        scripts[name].isFrozen = true;
        emit ScriptFrozen(name);
    }

    // =============================================================
    //                            GETTERS
    // =============================================================

    /**
     * @notice Get the full script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param data - Arbitrary data. Not used by this contract.
     * @return script - Full script from merged chunks
     */
    function getScript(string memory name, bytes memory data)
        public
        view
        returns (bytes memory script)
    {
        return AddressChunks.mergeChunks(scripts[name].chunks);
    }

    /**
     * @notice Get script's chunk pointer list
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @return pointers - List of pointers
     */
    function getScriptChunkPointers(string memory name)
        public
        view
        returns (address[] memory pointers)
    {
        return scripts[name].chunks;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

/**
 * @title AddressChunks
 * @author @xtremetom
 * @notice Reads chunk pointers and merges their values
 */
library AddressChunks {
    function mergeChunks(address[] memory chunks)
        internal
        view
        returns (bytes memory o_code)
    {
        unchecked {
            assembly {
                let len := mload(chunks)
                let totalSize := 0x20
                let size := 0
                o_code := mload(0x40)

                // loop through all chunk addresses
                // - get address
                // - get data size
                // - get code and add to o_code
                // - update total size
                let targetChunk := 0
                for {
                    let i := 0
                } lt(i, len) {
                    i := add(i, 1)
                } {
                    targetChunk := mload(add(chunks, add(0x20, mul(i, 0x20))))
                    size := sub(extcodesize(targetChunk), 1)
                    extcodecopy(targetChunk, add(o_code, totalSize), 1, size)
                    totalSize := add(totalSize, size)
                }

                // update o_code size
                mstore(o_code, sub(totalSize, 0x20))
                // store o_code
                mstore(0x40, add(o_code, and(add(totalSize, 0x1f), not(0x1f))))
            }
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

///////////////////////////////////////////////////////////
// ░██████╗░█████╗░██████╗░██╗██████╗░████████╗██╗░░░██╗ //
// ██╔════╝██╔══██╗██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗░██╔╝ //
// ╚█████╗░██║░░╚═╝██████╔╝██║██████╔╝░░░██║░░░░╚████╔╝░ //
// ░╚═══██╗██║░░██╗██╔══██╗██║██╔═══╝░░░░██║░░░░░╚██╔╝░░ //
// ██████╔╝╚█████╔╝██║░░██║██║██║░░░░░░░░██║░░░░░░██║░░░ //
// ╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░░░╚═╝░░░ //
///////////////////////////////////////////////////////////

interface IContractScript {
    // =============================================================
    //                            GETTERS
    // =============================================================

    /**
     * @notice Get the full script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param data - Arbitrary data to be passed to storage
     * @return script - Full script from merged chunks
     */
    function getScript(string calldata name, bytes memory data)
        external
        view
        returns (bytes memory script);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IContentStore {
    event NewChecksum(bytes32 indexed checksum, uint256 contentSize);

    error ChecksumExists(bytes32 checksum);
    error ChecksumNotFound(bytes32 checksum);

    function pointers(bytes32 checksum) external view returns (address pointer);

    function checksumExists(bytes32 checksum) external view returns (bool);

    function contentLength(bytes32 checksum)
        external
        view
        returns (uint256 size);

    function addPointer(address pointer) external returns (bytes32 checksum);

    function addContent(bytes memory content)
        external
        returns (bytes32 checksum, address pointer);

    function getPointer(bytes32 checksum)
        external
        view
        returns (address pointer);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

///////////////////////////////////////////////////////////
// ░██████╗░█████╗░██████╗░██╗██████╗░████████╗██╗░░░██╗ //
// ██╔════╝██╔══██╗██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗░██╔╝ //
// ╚█████╗░██║░░╚═╝██████╔╝██║██████╔╝░░░██║░░░░╚████╔╝░ //
// ░╚═══██╗██║░░██╗██╔══██╗██║██╔═══╝░░░░██║░░░░░╚██╔╝░░ //
// ██████╔╝╚█████╔╝██║░░██║██║██║░░░░░░░░██║░░░░░░██║░░░ //
// ╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░░░╚═╝░░░ //
///////////////////////////////////////////////////////////

interface IScriptyStorage {
    // =============================================================
    //                            STRUCTS
    // =============================================================

    struct Script {
        bool isVerified;
        bool isFrozen;
        address owner;
        uint256 size;
        bytes details;
        address[] chunks;
    }

    // =============================================================
    //                            ERRORS
    // =============================================================

    /**
     * @notice Error for, The Script you are trying to create already exists
     */
    error ScriptExists();

    /**
     * @notice Error for, You dont have permissions to perform this action
     */
    error NotScriptOwner();

    /**
     * @notice Error for, The Script you are trying to edit is frozen
     */
    error ScriptIsFrozen(string name);

    // =============================================================
    //                            EVENTS
    // =============================================================

    /**
     * @notice Event for, Successful freezing of a script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     */
    event ScriptFrozen(string indexed name);

    /**
     * @notice Event for, Successful update of script verification status
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param isVerified - Verification status of the script
     */
    event ScriptVerificationUpdated(string indexed name, bool isVerified);

    /**
     * @notice Event for, Successful creation of a script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param details - Custom details of the script
     */
    event ScriptCreated(string indexed name, bytes details);

    /**
     * @notice Event for, Successful addition of script chunk
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param size - Bytes size of the chunk
     */
    event ChunkStored(string indexed name, uint256 size);

    /**
     * @notice Event for, Successful update of custom details
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param details - Custom details of the script
     */
    event ScriptDetailsUpdated(string indexed name, bytes details);

    // =============================================================
    //                      MANAGEMENT OPERATIONS
    // =============================================================

    /**
     * @notice Create a new script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param details - Any details the owner wishes to store about the script
     *
     * Emits an {ScriptCreated} event.
     */
    function createScript(string calldata name, bytes calldata details)
        external;

    /**
     * @notice Add a code chunk to the script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param chunk - Next sequential code chunk
     *
     * Emits an {ChunkStored} event.
     */
    function addChunkToScript(string calldata name, bytes calldata chunk)
        external;

    /**
     * @notice Edit the script details
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param details - Any details the owner wishes to store about the script
     *
     * Emits an {ScriptDetailsUpdated} event.
     */
    function updateDetails(string calldata name, bytes calldata details)
        external;

    /**
     * @notice Update the verification status of the script
     * @param name - Name given to the script. Eg: threejs.min.js_r148
     * @param isVerified - The verification status
     *
     * Emits an {ScriptVerificationUpdated} event.
     */
    function updateScriptVerification(string calldata name, bool isVerified)
        external;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_contentStoreAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NotScriptOwner","type":"error"},{"inputs":[],"name":"ScriptExists","type":"error"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"ScriptIsFrozen","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"}],"name":"ChunkStored","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"bytes","name":"details","type":"bytes"}],"name":"ScriptCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"bytes","name":"details","type":"bytes"}],"name":"ScriptDetailsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"name","type":"string"}],"name":"ScriptFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"bool","name":"isVerified","type":"bool"}],"name":"ScriptVerificationUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"chunk","type":"bytes"}],"name":"addChunkToScript","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contentStore","outputs":[{"internalType":"contract IContentStore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"details","type":"bytes"}],"name":"createScript","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"freezeScript","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"getScript","outputs":[{"internalType":"bytes","name":"script","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"getScriptChunkPointers","outputs":[{"internalType":"address[]","name":"pointers","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"scripts","outputs":[{"internalType":"bool","name":"isVerified","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"bytes","name":"details","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"details","type":"bytes"}],"name":"updateDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"isVerified","type":"bool"}],"name":"updateScriptVerification","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b5060405161154938038061154983398101604081905261002f91610099565b61003833610049565b6001600160a01b03166080526100c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ab57600080fd5b81516001600160a01b03811681146100c257600080fd5b9392505050565b60805161145e6100eb600039600081816101070152610356015261145e6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a7ce081611610081578063f2fde38b1161005b578063f2fde38b146101cc578063f66188a4146101df578063f9635594146101f257600080fd5b8063a7ce081614610182578063ae0f849714610195578063c3766aff146101b957600080fd5b8063715018a6116100b2578063715018a6146101565780638652d6691461015e5780638da5cb5b1461017157600080fd5b80633998d026146100d95780633a6e674c146101025780633b7aa8d914610141575b600080fd5b6100ec6100e7366004610e30565b610212565b6040516100f99190610e6d565b60405180910390f35b6101297f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100f9565b61015461014f366004610f03565b61028f565b005b6101546104ad565b61015461016c366004610f03565b6104c1565b6000546001600160a01b0316610129565b610154610190366004610f6f565b6106b2565b6101a86101a3366004610e30565b6107d4565b6040516100f9959493929190611001565b6101546101c7366004610f03565b6108ac565b6101546101da366004611059565b6109de565b6101546101ed36600461107d565b610a57565b6102056102003660046110d9565b610b81565b6040516100f99190611151565b60606001826040516102249190611164565b908152604080519182900360209081018320600301805480830285018301909352828452919083018282801561028357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610265575b50505050509050919050565b8383600182826040516102a3929190611180565b9081526040519081900360200190205460ff61010090910416156102e757818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b60405180910390fd5b8585600182826040516102fb929190611180565b908152604051602091819003919091019020546201000090046001600160a01b0316331461033c57604051632421876d60e11b815260040160405180910390fd5b60405163093e983960e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063093e98399061038d908a908a906004016111b9565b60408051808303816000875af11580156103ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cf91906111cd565b915050600189896040516103e4929190611180565b908152604051602091819003820181206003018054600180820183556000928352939091200180546001600160a01b0319166001600160a01b038516179055879190610433908c908c90611180565b9081526020016040518091039020600101600082825461045391906111fd565b9091555050604051610468908a908a90611180565b604051908190038120878252907f4c4439fb488c666dfac05b75b1eaa33ddec20e80ade108bbfbf9a346101a17fa9060200160405180910390a2505050505050505050565b6104b5610c08565b6104bf6000610c62565b565b838360006001600160a01b0316600183836040516104e0929190611180565b908152604051908190036020019020546001600160a01b0362010000909104161461051e5760405163069e29bb60e11b815260040160405180910390fd5b6040518060c00160405280600015158152602001600015158152602001336001600160a01b031681526020016000815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051928352602080840182529093019190915250516001906105af9089908990611180565b908152604080519182900360209081019092208351815493850151928501516001600160a01b0316620100000275ffffffffffffffffffffffffffffffffffffffff0000199315156101000261ff00199215159290921661ffff19909516949094171791909116919091178155606082015160018201556080820151600282019061063a90826112a7565b5060a08201518051610656916003840191602090910190610d0a565b5050604051610669915087908790611180565b60405180910390207f94cfcaa37760fc84acfc372349e79c232b2289da4d0e04dc7d82f7e16e2a9b7f85856040516106a29291906111b9565b60405180910390a2505050505050565b8181600182826040516106c6929190611180565b9081526040519081900360200190205460ff610100909104161561070157818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b838360018282604051610715929190611180565b908152604051602091819003919091019020546201000090046001600160a01b0316331461075657604051632421876d60e11b815260040160405180910390fd5b6001808787604051610769929190611180565b90815260405190819003602001812080549215156101000261ff00199093169290921790915561079c9087908790611180565b604051908190038120907fb6e1bf653aa113482f568d5b90dcb6ba2402a51193045d939a38df275395051890600090a2505050505050565b80516020818301810180516001808352938301929094019190912092905281549082015460028301805460ff808516956101008604909116946201000090046001600160a01b0316939290916108299061121e565b80601f01602080910402602001604051908101604052809291908181526020018280546108559061121e565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050505050905085565b8383600182826040516108c0929190611180565b9081526040519081900360200190205460ff61010090910416156108fb57818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b85856001828260405161090f929190611180565b908152604051602091819003919091019020546201000090046001600160a01b0316331461095057604051632421876d60e11b815260040160405180910390fd5b858560018a8a604051610964929190611180565b90815260200160405180910390206002019182610982929190611367565b508787604051610993929190611180565b60405180910390207fbec1946749fc6624d6690b2119bf4dcdebf76c9a8fb2a786397450caec0e075587876040516109cc9291906111b9565b60405180910390a25050505050505050565b6109e6610c08565b6001600160a01b038116610a4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102de565b610a5481610c62565b50565b828260018282604051610a6b929190611180565b9081526040519081900360200190205460ff6101009091041615610aa657818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b848460018282604051610aba929190611180565b908152604051602091819003919091019020546201000090046001600160a01b03163314610afb57604051632421876d60e11b815260040160405180910390fd5b8460018888604051610b0e929190611180565b908152604051908190036020018120805492151560ff1990931692909217909155610b3c9088908890611180565b6040519081900381208615158252907fd5c4aa2b5240e0e08c3bbb0802a6dfcd8bc9967b86d7e94970e324fccf1e6d2b9060200160405180910390a250505050505050565b6060610bff600184604051610b969190611164565b9081526040805191829003602090810183206003018054808302850183019093528284529190830182828015610bf557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd7575b5050505050610cb2565b90505b92915050565b6000546001600160a01b031633146104bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102de565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051604051906020600080805b84811015610cee576020810260200187015191506001823b039250826001858801843c92820192600101610cbf565b505050601f198082018452601f90910116820160405250919050565b828054828255906000526020600020908101928215610d5f579160200282015b82811115610d5f57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610d2a565b50610d6b929150610d6f565b5090565b5b80821115610d6b5760008155600101610d70565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610db557610db5610d84565b604051601f8501601f19908116603f01168101908282118183101715610ddd57610ddd610d84565b81604052809350858152868686011115610df657600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610e2157600080fd5b610bff83833560208501610d9a565b600060208284031215610e4257600080fd5b813567ffffffffffffffff811115610e5957600080fd5b610e6584828501610e10565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610eae5783516001600160a01b031683529284019291840191600101610e89565b50909695505050505050565b60008083601f840112610ecc57600080fd5b50813567ffffffffffffffff811115610ee457600080fd5b602083019150836020828501011115610efc57600080fd5b9250929050565b60008060008060408587031215610f1957600080fd5b843567ffffffffffffffff80821115610f3157600080fd5b610f3d88838901610eba565b90965094506020870135915080821115610f5657600080fd5b50610f6387828801610eba565b95989497509550505050565b60008060208385031215610f8257600080fd5b823567ffffffffffffffff811115610f9957600080fd5b610fa585828601610eba565b90969095509350505050565b60005b83811015610fcc578181015183820152602001610fb4565b50506000910152565b60008151808452610fed816020860160208601610fb1565b601f01601f19169290920160200192915050565b851515815284151560208201526001600160a01b038416604082015282606082015260a06080820152600061103960a0830184610fd5565b979650505050505050565b6001600160a01b0381168114610a5457600080fd5b60006020828403121561106b57600080fd5b813561107681611044565b9392505050565b60008060006040848603121561109257600080fd5b833567ffffffffffffffff8111156110a957600080fd5b6110b586828701610eba565b909450925050602084013580151581146110ce57600080fd5b809150509250925092565b600080604083850312156110ec57600080fd5b823567ffffffffffffffff8082111561110457600080fd5b61111086838701610e10565b9350602085013591508082111561112657600080fd5b508301601f8101851361113857600080fd5b61114785823560208401610d9a565b9150509250929050565b602081526000610bff6020830184610fd5565b60008251611176818460208701610fb1565b9190910192915050565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610e65602083018486611190565b600080604083850312156111e057600080fd5b8251915060208301516111f281611044565b809150509250929050565b80820180821115610c0257634e487b7160e01b600052601160045260246000fd5b600181811c9082168061123257607f821691505b60208210810361125257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156112a257600081815260208120601f850160051c8101602086101561127f5750805b601f850160051c820191505b8181101561129e5782815560010161128b565b5050505b505050565b815167ffffffffffffffff8111156112c1576112c1610d84565b6112d5816112cf845461121e565b84611258565b602080601f83116001811461130a57600084156112f25750858301515b600019600386901b1c1916600185901b17855561129e565b600085815260208120601f198616915b828110156113395788860151825594840194600190910190840161131a565b50858210156113575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561137f5761137f610d84565b6113938361138d835461121e565b83611258565b6000601f8411600181146113c757600085156113af5750838201355b600019600387901b1c1916600186901b178355611421565b600083815260209020601f19861690835b828110156113f857868501358255602094850194600190920191016113d8565b50868210156114155760001960f88860031b161c19848701351681555b505060018560011b0183555b505050505056fea26469706673582212203c0fb7f7077f0657d594c71ddbafd73b93eebec4084cd8c179d61ed331ebe40564736f6c63430008110033000000000000000000000000c6806fd75745bb5f5b32ada19963898155f9db91

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a7ce081611610081578063f2fde38b1161005b578063f2fde38b146101cc578063f66188a4146101df578063f9635594146101f257600080fd5b8063a7ce081614610182578063ae0f849714610195578063c3766aff146101b957600080fd5b8063715018a6116100b2578063715018a6146101565780638652d6691461015e5780638da5cb5b1461017157600080fd5b80633998d026146100d95780633a6e674c146101025780633b7aa8d914610141575b600080fd5b6100ec6100e7366004610e30565b610212565b6040516100f99190610e6d565b60405180910390f35b6101297f000000000000000000000000c6806fd75745bb5f5b32ada19963898155f9db9181565b6040516001600160a01b0390911681526020016100f9565b61015461014f366004610f03565b61028f565b005b6101546104ad565b61015461016c366004610f03565b6104c1565b6000546001600160a01b0316610129565b610154610190366004610f6f565b6106b2565b6101a86101a3366004610e30565b6107d4565b6040516100f9959493929190611001565b6101546101c7366004610f03565b6108ac565b6101546101da366004611059565b6109de565b6101546101ed36600461107d565b610a57565b6102056102003660046110d9565b610b81565b6040516100f99190611151565b60606001826040516102249190611164565b908152604080519182900360209081018320600301805480830285018301909352828452919083018282801561028357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610265575b50505050509050919050565b8383600182826040516102a3929190611180565b9081526040519081900360200190205460ff61010090910416156102e757818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b60405180910390fd5b8585600182826040516102fb929190611180565b908152604051602091819003919091019020546201000090046001600160a01b0316331461033c57604051632421876d60e11b815260040160405180910390fd5b60405163093e983960e01b81526000906001600160a01b037f000000000000000000000000c6806fd75745bb5f5b32ada19963898155f9db91169063093e98399061038d908a908a906004016111b9565b60408051808303816000875af11580156103ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cf91906111cd565b915050600189896040516103e4929190611180565b908152604051602091819003820181206003018054600180820183556000928352939091200180546001600160a01b0319166001600160a01b038516179055879190610433908c908c90611180565b9081526020016040518091039020600101600082825461045391906111fd565b9091555050604051610468908a908a90611180565b604051908190038120878252907f4c4439fb488c666dfac05b75b1eaa33ddec20e80ade108bbfbf9a346101a17fa9060200160405180910390a2505050505050505050565b6104b5610c08565b6104bf6000610c62565b565b838360006001600160a01b0316600183836040516104e0929190611180565b908152604051908190036020019020546001600160a01b0362010000909104161461051e5760405163069e29bb60e11b815260040160405180910390fd5b6040518060c00160405280600015158152602001600015158152602001336001600160a01b031681526020016000815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051928352602080840182529093019190915250516001906105af9089908990611180565b908152604080519182900360209081019092208351815493850151928501516001600160a01b0316620100000275ffffffffffffffffffffffffffffffffffffffff0000199315156101000261ff00199215159290921661ffff19909516949094171791909116919091178155606082015160018201556080820151600282019061063a90826112a7565b5060a08201518051610656916003840191602090910190610d0a565b5050604051610669915087908790611180565b60405180910390207f94cfcaa37760fc84acfc372349e79c232b2289da4d0e04dc7d82f7e16e2a9b7f85856040516106a29291906111b9565b60405180910390a2505050505050565b8181600182826040516106c6929190611180565b9081526040519081900360200190205460ff610100909104161561070157818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b838360018282604051610715929190611180565b908152604051602091819003919091019020546201000090046001600160a01b0316331461075657604051632421876d60e11b815260040160405180910390fd5b6001808787604051610769929190611180565b90815260405190819003602001812080549215156101000261ff00199093169290921790915561079c9087908790611180565b604051908190038120907fb6e1bf653aa113482f568d5b90dcb6ba2402a51193045d939a38df275395051890600090a2505050505050565b80516020818301810180516001808352938301929094019190912092905281549082015460028301805460ff808516956101008604909116946201000090046001600160a01b0316939290916108299061121e565b80601f01602080910402602001604051908101604052809291908181526020018280546108559061121e565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050505050905085565b8383600182826040516108c0929190611180565b9081526040519081900360200190205460ff61010090910416156108fb57818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b85856001828260405161090f929190611180565b908152604051602091819003919091019020546201000090046001600160a01b0316331461095057604051632421876d60e11b815260040160405180910390fd5b858560018a8a604051610964929190611180565b90815260200160405180910390206002019182610982929190611367565b508787604051610993929190611180565b60405180910390207fbec1946749fc6624d6690b2119bf4dcdebf76c9a8fb2a786397450caec0e075587876040516109cc9291906111b9565b60405180910390a25050505050505050565b6109e6610c08565b6001600160a01b038116610a4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102de565b610a5481610c62565b50565b828260018282604051610a6b929190611180565b9081526040519081900360200190205460ff6101009091041615610aa657818160405163bfeaaa2d60e01b81526004016102de9291906111b9565b848460018282604051610aba929190611180565b908152604051602091819003919091019020546201000090046001600160a01b03163314610afb57604051632421876d60e11b815260040160405180910390fd5b8460018888604051610b0e929190611180565b908152604051908190036020018120805492151560ff1990931692909217909155610b3c9088908890611180565b6040519081900381208615158252907fd5c4aa2b5240e0e08c3bbb0802a6dfcd8bc9967b86d7e94970e324fccf1e6d2b9060200160405180910390a250505050505050565b6060610bff600184604051610b969190611164565b9081526040805191829003602090810183206003018054808302850183019093528284529190830182828015610bf557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd7575b5050505050610cb2565b90505b92915050565b6000546001600160a01b031633146104bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102de565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051604051906020600080805b84811015610cee576020810260200187015191506001823b039250826001858801843c92820192600101610cbf565b505050601f198082018452601f90910116820160405250919050565b828054828255906000526020600020908101928215610d5f579160200282015b82811115610d5f57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610d2a565b50610d6b929150610d6f565b5090565b5b80821115610d6b5760008155600101610d70565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610db557610db5610d84565b604051601f8501601f19908116603f01168101908282118183101715610ddd57610ddd610d84565b81604052809350858152868686011115610df657600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610e2157600080fd5b610bff83833560208501610d9a565b600060208284031215610e4257600080fd5b813567ffffffffffffffff811115610e5957600080fd5b610e6584828501610e10565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610eae5783516001600160a01b031683529284019291840191600101610e89565b50909695505050505050565b60008083601f840112610ecc57600080fd5b50813567ffffffffffffffff811115610ee457600080fd5b602083019150836020828501011115610efc57600080fd5b9250929050565b60008060008060408587031215610f1957600080fd5b843567ffffffffffffffff80821115610f3157600080fd5b610f3d88838901610eba565b90965094506020870135915080821115610f5657600080fd5b50610f6387828801610eba565b95989497509550505050565b60008060208385031215610f8257600080fd5b823567ffffffffffffffff811115610f9957600080fd5b610fa585828601610eba565b90969095509350505050565b60005b83811015610fcc578181015183820152602001610fb4565b50506000910152565b60008151808452610fed816020860160208601610fb1565b601f01601f19169290920160200192915050565b851515815284151560208201526001600160a01b038416604082015282606082015260a06080820152600061103960a0830184610fd5565b979650505050505050565b6001600160a01b0381168114610a5457600080fd5b60006020828403121561106b57600080fd5b813561107681611044565b9392505050565b60008060006040848603121561109257600080fd5b833567ffffffffffffffff8111156110a957600080fd5b6110b586828701610eba565b909450925050602084013580151581146110ce57600080fd5b809150509250925092565b600080604083850312156110ec57600080fd5b823567ffffffffffffffff8082111561110457600080fd5b61111086838701610e10565b9350602085013591508082111561112657600080fd5b508301601f8101851361113857600080fd5b61114785823560208401610d9a565b9150509250929050565b602081526000610bff6020830184610fd5565b60008251611176818460208701610fb1565b9190910192915050565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610e65602083018486611190565b600080604083850312156111e057600080fd5b8251915060208301516111f281611044565b809150509250929050565b80820180821115610c0257634e487b7160e01b600052601160045260246000fd5b600181811c9082168061123257607f821691505b60208210810361125257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156112a257600081815260208120601f850160051c8101602086101561127f5750805b601f850160051c820191505b8181101561129e5782815560010161128b565b5050505b505050565b815167ffffffffffffffff8111156112c1576112c1610d84565b6112d5816112cf845461121e565b84611258565b602080601f83116001811461130a57600084156112f25750858301515b600019600386901b1c1916600185901b17855561129e565b600085815260208120601f198616915b828110156113395788860151825594840194600190910190840161131a565b50858210156113575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561137f5761137f610d84565b6113938361138d835461121e565b83611258565b6000601f8411600181146113c757600085156113af5750838201355b600019600387901b1c1916600186901b178355611421565b600083815260209020601f19861690835b828110156113f857868501358255602094850194600190920191016113d8565b50868210156114155760001960f88860031b161c19848701351681555b505060018560011b0183555b505050505056fea26469706673582212203c0fb7f7077f0657d594c71ddbafd73b93eebec4084cd8c179d61ed331ebe40564736f6c63430008110033

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

000000000000000000000000c6806fd75745bb5f5b32ada19963898155f9db91

-----Decoded View---------------
Arg [0] : _contentStoreAddress (address): 0xC6806fd75745bB5F5B32ADa19963898155f9DB91

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6806fd75745bb5f5b32ada19963898155f9db91


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.