Contract Overview
Balance: 0 Ether
Transactions: 2 txns
 Latest 2 txns

TxHash Age From To Value [TxFee]
0xc314e9c19408b7443677faa6a2d5bff2f07bd58a1e586c058180d6023e7d1cb4107 days 15 hrs ago0xdc28c4268bd7433b70dd76b2e11d7d72eb4ec6c3  IN   0x654f4a3e3b7573d6b4bb7201ab70d718961765cd0 Ether0.000172795
0x5f170be2c15907d473c7e738b187f8a88a0fed6171d9525c4b2bf87d9b50912a305 days 23 hrs ago0x49d8621f8862c423abba0dfae4916f838cd264f6  IN    Contract Creation0 Ether0.052477152


[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: DeveryRegistry
Compiler Text: v0.4.17+commit.bdeb9e52
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.17;

// ----------------------------------------------------------------------------
// Devery Contracts - The Monolithic Registry
//
// Deployed to Ropsten Testnet at 0x654f4a3e3B7573D6b4bB7201AB70d718961765CD
//
// Enjoy.
//
// (c) BokkyPooBah / Bok Consulting Pty Ltd for Devery 2017. The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {

    address public owner;
    address public newOwner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function Owned() public {
        owner = msg.sender;
    }
    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = 0x0;
    }
}


// ----------------------------------------------------------------------------
// Administrators
// ----------------------------------------------------------------------------
contract Admined is Owned {

    mapping (address => bool) public admins;

    event AdminAdded(address addr);
    event AdminRemoved(address addr);

    modifier onlyAdmin() {
        require(isAdmin(msg.sender));
        _;
    }

    function isAdmin(address addr) public constant returns (bool) {
        return (admins[addr] || owner == addr);
    }
    function addAdmin(address addr) public onlyOwner {
        require(!admins[addr] && addr != owner);
        admins[addr] = true;
        AdminAdded(addr);
    }
    function removeAdmin(address addr) public onlyOwner {
        require(admins[addr]);
        delete admins[addr];
        AdminRemoved(addr);
    }
}


contract DeveryRegistry is Admined {

    struct App {
        address appAccount;
        string appName;
        address feeAccount;
        bool active;
    }
    struct Brand {
        address brandAccount;
        address appAccount;
        string brandName;
        bool active;
    }
    struct Product {
        address productAccount;
        address brandAccount;
        string description;
        string details;
        uint year;
        string origin;
        bool active;
    }

    mapping(address => App) public apps;
    mapping(address => Brand) public brands;
    mapping(address => Product) public products;
    mapping(address => mapping(address => bool)) permissions;
    mapping(bytes32 => address) markings;
    address[] public appAccounts;
    address[] public brandAccounts;
    address[] public productAccounts;

    event AppAdded(address indexed appAccount, string appName, address feeAccount, bool active);
    event AppUpdated(address indexed appAccount, string appName, address feeAccount, bool active);
    event BrandAdded(address indexed brandAccount, address indexed appAccount, string brandName, bool active);
    event BrandUpdated(address indexed brandAccount, address indexed appAccount, string brandName, bool active);
    event ProductAdded(address indexed productAccount, address indexed brandAccount, address indexed appAccount, string description, bool active);
    event ProductUpdated(address indexed productAccount, address indexed brandAccount, address indexed appAccount, string description, bool active);
    event Permissioned(address indexed marker, address indexed brandAccount, bool permission);
    event Marked(address indexed marker, address indexed productAccount, bytes32 itemHash);


    // ------------------------------------------------------------------------
    // Account can add itself as an App account
    // ------------------------------------------------------------------------
    function addApp(string appName, address feeAccount) public {
        App storage e = apps[msg.sender];
        require(e.appAccount == address(0));
        apps[msg.sender] = App({
            appAccount: msg.sender,
            appName: appName,
            feeAccount: feeAccount,
            active: true
        });
        appAccounts.push(msg.sender);
        AppAdded(msg.sender, appName, feeAccount, true);
    }
    function updateApp(string appName, address feeAccount, bool active) public {
        App storage e = apps[msg.sender];
        require(msg.sender == e.appAccount);
        e.appName = appName;
        e.feeAccount = feeAccount;
        e.active = active;
        AppUpdated(msg.sender, appName, feeAccount, active);
    }
    function getApp(address appAccount) public constant returns (App app) {
        app = apps[appAccount];
    }
    function getAppData(address appAccount) public constant returns (address feeAccount, bool active) {
        App storage e = apps[appAccount];
        feeAccount = e.feeAccount;
        active = e.active;
    }
    function appAccountsLength() public constant returns (uint) {
        return appAccounts.length;
    }

    // ------------------------------------------------------------------------
    // App account can add Brand account
    // ------------------------------------------------------------------------
    function addBrand(address brandAccount, string brandName) public {
        App storage app = apps[msg.sender];
        require(app.appAccount != address(0));
        Brand storage brand = brands[brandAccount];
        require(brand.brandAccount == address(0));
        brands[brandAccount] = Brand({
            brandAccount: brandAccount,
            appAccount: msg.sender,
            brandName: brandName,
            active: true
        });
        brandAccounts.push(brandAccount);
        BrandAdded(brandAccount, msg.sender, brandName, true);
    }
    function updateBrand(address brandAccount, string brandName, bool active) public {
        Brand storage brand = brands[brandAccount];
        require(brand.appAccount == msg.sender);
        brand.brandName = brandName;
        brand.active = active;
        BrandUpdated(brandAccount, msg.sender, brandName, active);
    }
    function getBrand(address brandAccount) public constant returns (Brand brand) {
        brand = brands[brandAccount];
    }
    function getBrandData(address brandAccount) public constant returns (address appAccount, address appFeeAccount, bool active) {
        Brand storage brand = brands[brandAccount];
        require(brand.appAccount != address(0));
        App storage app = apps[brand.appAccount];
        require(app.appAccount != address(0));
        appAccount = app.appAccount;
        appFeeAccount = app.feeAccount;
        active = app.active && brand.active;
    }
    function brandAccountsLength() public constant returns (uint) {
        return brandAccounts.length;
    }

    // ------------------------------------------------------------------------
    // Brand account can add Product account
    // ------------------------------------------------------------------------
    function addProduct(address productAccount, string description, string details, uint year, string origin) public {
        Brand storage brand = brands[msg.sender];
        require(brand.brandAccount != address(0));
        App storage app = apps[brand.appAccount];
        require(app.appAccount != address(0));
        Product storage product = products[productAccount];
        require(product.productAccount == address(0));
        products[productAccount] = Product({
            productAccount: productAccount,
            brandAccount: msg.sender,
            description: description,
            details: details,
            year: year,
            origin: origin,
            active: true
        });
        productAccounts.push(productAccount);
        ProductAdded(productAccount, msg.sender, app.appAccount, description, true);
    }
    function updateProduct(address productAccount, string description, string details, uint year, string origin, bool active) public {
        Product storage product = products[productAccount];
        require(product.brandAccount == msg.sender);
        Brand storage brand = brands[msg.sender];
        require(brand.brandAccount == msg.sender);
        App storage app = apps[brand.appAccount];
        product.description = description;
        product.details = details;
        product.year = year;
        product.origin = origin;
        product.active = active;
        ProductUpdated(productAccount, product.brandAccount, app.appAccount, description, active);
    }
    function getProduct(address productAccount) public constant returns (Product product) {
        product = products[productAccount];
    }
    function getProductData(address productAccount) public constant returns (address brandAccount, address appAccount, address appFeeAccount, bool active) {
        Product storage product = products[productAccount];
        require(product.brandAccount != address(0));
        Brand storage brand = brands[brandAccount];
        require(brand.appAccount != address(0));
        App storage app = apps[brand.appAccount];
        require(app.appAccount != address(0));
        brandAccount = product.brandAccount;
        appAccount = app.appAccount;
        appFeeAccount = app.feeAccount;
        active = app.active && brand.active && brand.active;
    }
    function productAccountsLength() public constant returns (uint) {
        return productAccounts.length;
    }

    // ------------------------------------------------------------------------
    // Brand account can permission accounts as markers
    // ------------------------------------------------------------------------
    function permissionMarker(address marker, bool permission) public {
        Brand storage brand = brands[msg.sender];
        require(brand.brandAccount != address(0));
        permissions[marker][msg.sender] = permission;
        Permissioned(marker, msg.sender, permission);
    }

    // ------------------------------------------------------------------------
    // Compute item hash from the public key
    // ------------------------------------------------------------------------
    function addressHash(address item) public pure returns (bytes32 hash) {
        hash = keccak256(item);
    }

    // ------------------------------------------------------------------------
    // Markers can add [productAccount, sha3(itemPublicKey)]
    // ------------------------------------------------------------------------
    function mark(address productAccount, bytes32 itemHash) public {
        Product storage product = products[productAccount];
        require(product.brandAccount != address(0));
        Brand storage brand = brands[product.brandAccount];
        require(brand.brandAccount != address(0));
        bool permissioned = permissions[msg.sender][brand.brandAccount];
        require(permissioned);
        markings[itemHash] = productAccount;
        Marked(msg.sender, productAccount, itemHash);
    }

    // ------------------------------------------------------------------------
    // Check itemPublicKey has been registered
    // ------------------------------------------------------------------------
    function check(address item) public constant returns (address productAccount, address brandAccount, address appAccount) {
        bytes32 hash = keccak256(item);
        productAccount = markings[hash];
        // require(productAccount != address(0));
        Product storage product = products[productAccount];
        // require(product.brandAccount != address(0));
        Brand storage brand = brands[product.brandAccount];
        // require(brand.brandAccount != address(0));
        brandAccount = product.brandAccount;
        appAccount = brand.appAccount;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"item","type":"address"}],"name":"addressHash","outputs":[{"name":"hash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"brandAccounts","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"productAccount","type":"address"},{"name":"description","type":"string"},{"name":"details","type":"string"},{"name":"year","type":"uint256"},{"name":"origin","type":"string"},{"name":"active","type":"bool"}],"name":"updateProduct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"productAccountsLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"marker","type":"address"},{"name":"permission","type":"bool"}],"name":"permissionMarker","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"apps","outputs":[{"name":"appAccount","type":"address"},{"name":"appName","type":"string"},{"name":"feeAccount","type":"address"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"isAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"productAccounts","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"brandAccount","type":"address"}],"name":"getBrandData","outputs":[{"name":"appAccount","type":"address"},{"name":"appFeeAccount","type":"address"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"brandAccount","type":"address"}],"name":"getBrand","outputs":[{"components":[{"name":"brandAccount","type":"address"},{"name":"appAccount","type":"address"},{"name":"brandName","type":"string"},{"name":"active","type":"bool"}],"name":"brand","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"appAccountsLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"brandAccount","type":"address"},{"name":"brandName","type":"string"},{"name":"active","type":"bool"}],"name":"updateBrand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"appAccounts","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"brands","outputs":[{"name":"brandAccount","type":"address"},{"name":"appAccount","type":"address"},{"name":"brandName","type":"string"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"appAccount","type":"address"}],"name":"getAppData","outputs":[{"name":"feeAccount","type":"address"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"appName","type":"string"},{"name":"feeAccount","type":"address"}],"name":"addApp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"brandAccount","type":"address"},{"name":"brandName","type":"string"}],"name":"addBrand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"products","outputs":[{"name":"productAccount","type":"address"},{"name":"brandAccount","type":"address"},{"name":"description","type":"string"},{"name":"details","type":"string"},{"name":"year","type":"uint256"},{"name":"origin","type":"string"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"appName","type":"string"},{"name":"feeAccount","type":"address"},{"name":"active","type":"bool"}],"name":"updateApp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"productAccount","type":"address"},{"name":"itemHash","type":"bytes32"}],"name":"mark","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"item","type":"address"}],"name":"check","outputs":[{"name":"productAccount","type":"address"},{"name":"brandAccount","type":"address"},{"name":"appAccount","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"productAccount","type":"address"}],"name":"getProductData","outputs":[{"name":"brandAccount","type":"address"},{"name":"appAccount","type":"address"},{"name":"appFeeAccount","type":"address"},{"name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"productAccount","type":"address"}],"name":"getProduct","outputs":[{"components":[{"name":"productAccount","type":"address"},{"name":"brandAccount","type":"address"},{"name":"description","type":"string"},{"name":"details","type":"string"},{"name":"year","type":"uint256"},{"name":"origin","type":"string"},{"name":"active","type":"bool"}],"name":"product","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"appAccount","type":"address"}],"name":"getApp","outputs":[{"components":[{"name":"appAccount","type":"address"},{"name":"appName","type":"string"},{"name":"feeAccount","type":"address"},{"name":"active","type":"bool"}],"name":"app","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"brandAccountsLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"productAccount","type":"address"},{"name":"description","type":"string"},{"name":"details","type":"string"},{"name":"year","type":"uint256"},{"name":"origin","type":"string"}],"name":"addProduct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"appAccount","type":"address"},{"indexed":false,"name":"appName","type":"string"},{"indexed":false,"name":"feeAccount","type":"address"},{"indexed":false,"name":"active","type":"bool"}],"name":"AppAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"appAccount","type":"address"},{"indexed":false,"name":"appName","type":"string"},{"indexed":false,"name":"feeAccount","type":"address"},{"indexed":false,"name":"active","type":"bool"}],"name":"AppUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"brandAccount","type":"address"},{"indexed":true,"name":"appAccount","type":"address"},{"indexed":false,"name":"brandName","type":"string"},{"indexed":false,"name":"active","type":"bool"}],"name":"BrandAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"brandAccount","type":"address"},{"indexed":true,"name":"appAccount","type":"address"},{"indexed":false,"name":"brandName","type":"string"},{"indexed":false,"name":"active","type":"bool"}],"name":"BrandUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"productAccount","type":"address"},{"indexed":true,"name":"brandAccount","type":"address"},{"indexed":true,"name":"appAccount","type":"address"},{"indexed":false,"name":"description","type":"string"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProductAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"productAccount","type":"address"},{"indexed":true,"name":"brandAccount","type":"address"},{"indexed":true,"name":"appAccount","type":"address"},{"indexed":false,"name":"description","type":"string"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProductUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"marker","type":"address"},{"indexed":true,"name":"brandAccount","type":"address"},{"indexed":false,"name":"permission","type":"bool"}],"name":"Permissioned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"marker","type":"address"},{"indexed":true,"name":"productAccount","type":"address"},{"indexed":false,"name":"itemHash","type":"bytes32"}],"name":"Marked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405260008054600160a060020a033316600160a060020a031990911617905561238d806100306000396000f3006060604052361561019d5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662adc38281146101a257806301c69452146101d35780630425c4bf14610205578063098ed807146102f75780630a40fb8c1461030a5780631309ec431461032e5780631785f53c146103f757806324d7806c146104165780632a286eda1461044957806333ca47731461045f578063361893f7146104b0578063429b62e5146104cf578063437fa667146104ee578063512570d6146105015780635b68e09b146105645780635b7fd9b51461057a57806360a72c2914610606578063644bc3d61461064957806370480275146106a557806373311631146106c4578063793a8e711461072357806379ba5097146108ec5780637f101fb9146108ff5780638da5cb5b14610962578063b94cc52f14610975578063c23697a814610997578063cccd2ea8146109e7578063d4ee1d9014610a3c578063d9aba9ce14610a4f578063dc3acebe14610a6e578063e507e7a414610a8d578063f2fde38b14610aa0578063f768402a14610abf575b600080fd5b34156101ad57600080fd5b6101c1600160a060020a0360043516610bab565b60405190815260200160405180910390f35b34156101de57600080fd5b6101e9600435610be0565b604051600160a060020a03909116815260200160405180910390f35b341561021057600080fd5b6102f560048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505050913515159150610c089050565b005b341561030257600080fd5b6101c1610da0565b341561031557600080fd5b6102f5600160a060020a03600435166024351515610da7565b341561033957600080fd5b61034d600160a060020a0360043516610e41565b604051600160a060020a0380861682528316604082015281151560608201526080602082018181528554600260001961010060018416150201909116049183018290529060a0830190869080156103e55780601f106103ba576101008083540402835291602001916103e5565b820191906000526020600020905b8154815290600101906020018083116103c857829003601f168201915b50509550505050505060405180910390f35b341561040257600080fd5b6102f5600160a060020a0360043516610e76565b341561042157600080fd5b610435600160a060020a0360043516610f1a565b604051901515815260200160405180910390f35b341561045457600080fd5b6101e9600435610f54565b341561046a57600080fd5b61047e600160a060020a0360043516610f62565b604051600160a060020a0393841681529190921660208201529015156040808301919091526060909101905180910390f35b34156104bb57600080fd5b6101c1600160a060020a0360043516611001565b34156104da57600080fd5b610435600160a060020a0360043516611110565b34156104f957600080fd5b6101c1611125565b341561050c57600080fd5b6102f560048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050505091351515915061112b9050565b341561056f57600080fd5b6101e9600435611237565b341561058557600080fd5b610599600160a060020a0360043516611245565b604051600160a060020a0380861682528416602082015281151560608201526080604082018181528454600260001961010060018416150201909116049183018290529060a0830190859080156103e55780601f106103ba576101008083540402835291602001916103e5565b341561061157600080fd5b610625600160a060020a036004351661127a565b604051600160a060020a039092168252151560208201526040908101905180910390f35b341561065457600080fd5b6102f560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a031692506112a9915050565b34156106b057600080fd5b6102f5600160a060020a0360043516611495565b34156106cf57600080fd5b6102f560048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061155795505050505050565b341561072e57600080fd5b610742600160a060020a0360043516611709565b604051600160a060020a038881168252871660208201526080810184905281151560c082015260e06040820181815287546002600182161561010090810260001901909216049284018390529091606084019160a0850191908501908a9080156107ed5780601f106107c2576101008083540402835291602001916107ed565b820191906000526020600020905b8154815290600101906020018083116107d057829003601f168201915b50508481038352885460026000196101006001841615020190911604808252602090910190899080156108615780601f1061083657610100808354040283529160200191610861565b820191906000526020600020905b81548152906001019060200180831161084457829003601f168201915b50508481038252865460026000196101006001841615020190911604808252602090910190879080156108d55780601f106108aa576101008083540402835291602001916108d5565b820191906000526020600020905b8154815290600101906020018083116108b857829003601f168201915b50509a505050505050505050505060405180910390f35b34156108f757600080fd5b6102f561174f565b341561090a57600080fd5b6102f560046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050600160a060020a038535169460200135151593506117d092505050565b341561096d57600080fd5b6101e961190d565b341561098057600080fd5b6102f5600160a060020a036004351660243561191c565b34156109a257600080fd5b6109b6600160a060020a0360043516611a1e565b604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390f35b34156109f257600080fd5b610a06600160a060020a0360043516611aa6565b604051600160a060020a039485168152928416602084015292166040808301919091529115156060820152608001905180910390f35b3415610a4757600080fd5b6101e9611b93565b3415610a5a57600080fd5b6101c1600160a060020a0360043516611ba2565b3415610a7957600080fd5b6101c1600160a060020a0360043516611dff565b3415610a9857600080fd5b6101c1611f2b565b3415610aab57600080fd5b6102f5600160a060020a0360043516611f31565b3415610aca57600080fd5b6102f560048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611f6e95505050505050565b600081604051600160a060020a03919091166c0100000000000000000000000002815260140160405180910390209050919050565b6009805482908110610bee57fe5b600091825260209091200154600160a060020a0316905081565b600160a060020a038681166000908152600560205260408120600181015490928291338216911614610c3957600080fd5b600160a060020a033381166000818152600460205260409020805490945090911614610c6457600080fd5b506001810154600160a060020a0316600090815260036020526040902060028301888051610c969291602001906121ef565b5060038301878051610cac9291602001906121ef565b506004830186905560058301858051610cc99291602001906121ef565b5060068301805460ff191685151517905580546001840154600160a060020a0391821691908116908b167faf8f7fdfa11bd035e0cd7a1a852667f37f6ce16f1ccc3103b747e992731047608b88604051811515602082015260408082528190810184818151815260200191508051906020019080838360005b83811015610d5a578082015183820152602001610d42565b50505050905090810190601f168015610d875780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050505050565b600a545b90565b600160a060020a03338116600090815260046020526040902080549091161515610dd057600080fd5b600160a060020a038381166000818152600660209081526040808320339095168084529490915290819020805460ff19168615151790557f8555cde94a099da074d0de799c9e9d1b6ec375a699f6e646bd11761e4210b3ec90859051901515815260200160405180910390a3505050565b600360205260009081526040902080546002820154600160a060020a03918216926001019181169060a060020a900460ff1684565b60005433600160a060020a03908116911614610e9157600080fd5b600160a060020a03811660009081526002602052604090205460ff161515610eb857600080fd5b600160a060020a03811660009081526002602052604090819020805460ff191690557fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90829051600160a060020a03909116815260200160405180910390a150565b600160a060020a03811660009081526002602052604081205460ff1680610f4e5750600054600160a060020a038381169116145b92915050565b600a805482908110610bee57fe5b600160a060020a0380821660009081526004602052604081206001810154919283928392918391161515610f9557600080fd5b506001810154600160a060020a03908116600090815260036020526040902080549091161515610fc457600080fd5b80546002820154600160a060020a039182169650908116945060a060020a900460ff168015610ff75750600382015460ff165b9496939550505050565b61100961226d565b600160a060020a03821660009081526004602052604090819020906080905190810160409081528254600160a060020a03908116835260018085015490911660208085019190915260028086018054959695858801959194600019908216156101000201169190910491601f8301819004810201905190810160405280929190818152602001828054600181600116156101000203166002900480156110f05780601f106110c5576101008083540402835291602001916110f0565b820191906000526020600020905b8154815290600101906020018083116110d357829003601f168201915b50505091835250506003919091015460ff16151560209091015292915050565b60026020526000908152604090205460ff1681565b60085490565b600160a060020a0383811660009081526004602052604090206001810154909133811691161461115a57600080fd5b6002810183805161116f9291602001906121ef565b5060038101805460ff191683151517905533600160a060020a039081169085167f74e5739790e0c39675f65b0937070123c564bc6c21050a2f60a905f3b43793b98585604051811515602082015260408082528190810184818151815260200191508051906020019080838360005b838110156111f65780820151838201526020016111de565b50505050905090810190601f1680156112235780820380516001836020036101000a031916815260200191505b50935050505060405180910390a350505050565b6008805482908110610bee57fe5b6004602052600090815260409020805460018201546003830154600160a060020a039283169392909116916002019060ff1684565b600160a060020a039081166000908152600360205260409020600201549081169160a060020a90910460ff1690565b600160a060020a0333811660009081526003602052604090208054909116156112d157600080fd5b60806040519081016040908152600160a060020a0333811680845260208085018890529186168385015260016060850152600090815260039091522081518154600160a060020a031916600160a060020a03919091161781556020820151816001019080516113449291602001906121ef565b506040820151600282018054600160a060020a031916600160a060020a039290921691909117905560608201516002909101805491151560a060020a0274ff0000000000000000000000000000000000000000199092169190911790555060088054600181016113b4838261229b565b5060009182526020909120018054600160a060020a03191633600160a060020a03169081179091557fda5e5cdd07b1bdc3b4e35d6ced60e39174d7b90ab7a5bedee7fe23cf2c71719384846001604051600160a060020a0383166020820152811515604082015260608082528190810185818151815260200191508051906020019080838360005b8381101561145457808201518382015260200161143c565b50505050905090810190601f1680156114815780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050565b60005433600160a060020a039081169116146114b057600080fd5b600160a060020a03811660009081526002602052604090205460ff161580156114e75750600054600160a060020a03828116911614155b15156114f257600080fd5b600160a060020a03811660009081526002602052604090819020805460ff191660011790557f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990829051600160a060020a03909116815260200160405180910390a150565b600160a060020a0333811660009081526003602052604081208054909216151561158057600080fd5b50600160a060020a0380841660009081526004602052604090208054909116156115a957600080fd5b60806040519081016040908152600160a060020a0380871680845233909116602080850191909152828401879052600160608501526000918252600490522081518154600160a060020a031916600160a060020a03919091161781556020820151600182018054600160a060020a031916600160a060020a03929092169190911790556040820151816002019080516116469291602001906121ef565b506060820151600391909101805460ff1916911515919091179055506009805460018101611674838261229b565b5060009182526020909120018054600160a060020a031916600160a060020a0386811691821790925533909116907f45266d7ee1033749188bfdc0ce2763dfd805881ed25fb436b147b2f69562b32385600160405181151560208201526040808252819081018481815181526020019150805190602001908083836000838110156111f65780820151838201526020016111de565b60056020819052600091825260409091208054600182015460048301546006840154600160a060020a039384169593909216936002810193600382019391019060ff1687565b60015433600160a060020a0390811691161461176a57600080fd5b600154600054600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b600160a060020a0333811660008181526003602052604090208054909216146117f857600080fd5b6001810184805161180d9291602001906121ef565b50600281018054600160a060020a031916600160a060020a038581169190911774ff0000000000000000000000000000000000000000191660a060020a851515021790915533167f45b2f5fa00bd5061ef1b40c09fd8b22ea6ac7c66ac9251c1c762a9cd2a149c2f858585604051600160a060020a0383166020820152811515604082015260608082528190810185818151815260200191508051906020019080838360005b838110156118cb5780820151838201526020016118b3565b50505050905090810190601f1680156118f85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050565b600054600160a060020a031681565b600160a060020a03808316600090815260056020526040812060018101549092829116151561194a57600080fd5b6001830154600160a060020a039081166000908152600460205260409020805490935016151561197957600080fd5b50600160a060020a03338116600090815260066020908152604080832085549094168352929052205460ff168015156119b157600080fd5b600084815260076020526040908190208054600160a060020a031916600160a060020a038881169182179092559133909116907fda3ea00edac5692433cff8bd26ec0689f71f696531b675591f48786f99ecd5f99087905190815260200160405180910390a35050505050565b60008060008060008086604051600160a060020a03919091166c01000000000000000000000000028152601401604051908190039020600090815260076020908152604080832054600160a060020a0390811680855260058452828520600190810154831680875260049095529290942090910154929a919950919091169650945050505050565b600160a060020a03808216600090815260056020526040812060018101549192839283928392909183918291161515611ade57600080fd5b600160a060020a0380881660009081526004602052604090206001810154909350161515611b0b57600080fd5b506001810154600160a060020a03908116600090815260036020526040902080549091161515611b3a57600080fd5b600183015481546002830154600160a060020a0392831699509082169750908116955060a060020a900460ff168015611b775750600382015460ff165b8015611b875750600382015460ff165b93505050509193509193565b600154600160a060020a031681565b611baa6122c4565b600160a060020a038216600090815260056020526040908190209060e0905190810160409081528254600160a060020a03908116835260018085015490911660208085019190915260028086018054959695858801959194600019908216156101000201169190910491601f830181900481020190519081016040528092919081815260200182805460018160011615610100020316600290048015611c915780601f10611c6657610100808354040283529160200191611c91565b820191906000526020600020905b815481529060010190602001808311611c7457829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d335780601f10611d0857610100808354040283529160200191611d33565b820191906000526020600020905b815481529060010190602001808311611d1657829003601f168201915b5050505050815260200160048201548152602001600582018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ddf5780601f10611db457610100808354040283529160200191611ddf565b820191906000526020600020905b815481529060010190602001808311611dc257829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b611e07612306565b600160a060020a03821660009081526003602052604090819020906080905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ef55780601f10611eca57610100808354040283529160200191611ef5565b820191906000526020600020905b815481529060010190602001808311611ed857829003601f168201915b505050918352505060029190910154600160a060020a038116602083015260a060020a900460ff16151560409091015292915050565b60095490565b60005433600160a060020a03908116911614611f4c57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a033381166000908152600460205260408120805490928291161515611f9957600080fd5b6001830154600160a060020a0390811660009081526003602052604090208054909350161515611fc857600080fd5b50600160a060020a038088166000908152600560205260409020805490911615611ff157600080fd5b60e06040519081016040908152600160a060020a03808b16808452339091166020808501919091528284018b9052606084018a90526080840189905260a08401889052600160c08501526000918252600590522081518154600160a060020a031916600160a060020a03919091161781556020820151600182018054600160a060020a031916600160a060020a03929092169190911790556040820151816002019080516120a39291602001906121ef565b506060820151816003019080516120be9291602001906121ef565b506080820151816004015560a0820151816005019080516120e39291602001906121ef565b5060c0820151600691909101805460ff191691151591909117905550600a805460018101612111838261229b565b5060009182526020909120018054600160a060020a031916600160a060020a038a811691821790925583548216913316907fef5a80afc42df06ef4f342a1f95d294cf39231087c8eabb802e94c70806590f98a6001604051811515602082015260408082528190810184818151815260200191508051906020019080838360005b838110156121aa578082015183820152602001612192565b50505050905090810190601f1680156121d75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a45050505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061223057805160ff191683800117855561225d565b8280016001018555821561225d579182015b8281111561225d578251825591602001919060010190612242565b50612269929150612335565b5090565b6080604051908101604090815260008083526020830152810161228e61234f565b8152600060209091015290565b8154818355818115116122bf576000838152602090206122bf918101908301612335565b505050565b60e060405190810160409081526000808352602083015281016122e561234f565b81526020016122f261234f565b81526020016000815260200161228e61234f565b6080604051908101604052600081526020810161232161234f565b815260006020820181905260409091015290565b610da491905b80821115612269576000815560010161233b565b602060405190810160405260008152905600a165627a7a72305820403174f65253bfdbf6e0bdc2dd0defad92f55585a79773f76baad0bbcfd2697b0029

   Swarm Source:
bzzr://403174f65253bfdbf6e0bdc2dd0defad92f55585a79773f76baad0bbcfd2697b

 

View All
Block Age transaction Difficulty Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward