ETH Price: $2,009.48 (+2.75%)
 

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
Set Guardian192450002024-02-17 3:45:47744 days ago1708141547IN
0x88b99A3e...80976Bc07
0 ETH0.0010130722
Set Address192449912024-02-17 3:43:59744 days ago1708141439IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address192449572024-02-17 3:37:11744 days ago1708141031IN
0x88b99A3e...80976Bc07
0 ETH0.0006521222
Confirm Guardian192449512024-02-17 3:35:47744 days ago1708140947IN
0x88b99A3e...80976Bc07
0 ETH0.0004787817.19759884
Set Guardian191580372024-02-04 22:53:59757 days ago1707087239IN
0x88b99A3e...80976Bc07
0 ETH0.0010130722
Set Address191580352024-02-04 22:53:35757 days ago1707087215IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580332024-02-04 22:53:11757 days ago1707087191IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580312024-02-04 22:52:47757 days ago1707087167IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580292024-02-04 22:52:23757 days ago1707087143IN
0x88b99A3e...80976Bc07
0 ETH0.0010280622
Set Address191580272024-02-04 22:51:59757 days ago1707087119IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580252024-02-04 22:51:35757 days ago1707087095IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580232024-02-04 22:51:11757 days ago1707087071IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580172024-02-04 22:49:59757 days ago1707086999IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580152024-02-04 22:49:35757 days ago1707086975IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580122024-02-04 22:48:59757 days ago1707086939IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580112024-02-04 22:48:47757 days ago1707086927IN
0x88b99A3e...80976Bc07
0 ETH0.00102722
Set Address191580102024-02-04 22:48:35757 days ago1707086915IN
0x88b99A3e...80976Bc07
0 ETH0.0010272622
Set Address191580092024-02-04 22:48:23757 days ago1707086903IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222
Set Address191580082024-02-04 22:48:11757 days ago1707086891IN
0x88b99A3e...80976Bc07
0 ETH0.0010283222

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:
FrensStorage

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
pragma solidity 0.8.20;

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

/// @title The primary persistent storage for Frens Staking Pools
/// @author modified 04-Dec-2022 by 0xWildhare originally by David Rugendyke (h/t David and Rocket Pool!)
/// @dev this code is modified from the Rocket Pool RocketStorage contract all "Rocket" replaced with "Frens" - everything not used by frens has beed removed.

import "./interfaces/IFrensStorage.sol";

contract FrensStorage is IFrensStorage{

    // Events
    event GuardianChanged(address oldGuardian, address newGuardian);

     // Storage maps
    
    mapping(bytes32 => uint256)    private uintStorage;
    mapping(bytes32 => address)    private addressStorage;
    mapping(bytes32 => bool)       private booleanStorage;
    
    
    // Guardian address
    address guardian;
    address newGuardian;

    /**
    * @dev Throws if called by any account other than a guardian account (temporary account allowed access to settings before DAO is fully enabled)
    */
    modifier onlyGuardian() {
        require(msg.sender == guardian, "Account is not a guardian");
        _;
    }


    /// @dev Construct FrensStorage
    constructor() {
        // Set the guardian upon deployment
        guardian = msg.sender;
    }

    // Get guardian address
    function getGuardian() external override view returns (address) {
        return guardian;
    }

    // Transfers guardianship to a new address
    function setGuardian(address _newAddress) external override onlyGuardian{
        // Store new address awaiting confirmation
        newGuardian = _newAddress;
    }

    // Confirms change of guardian
    function confirmGuardian() external override {
        // Check tx came from new guardian address
        require(msg.sender == newGuardian, "Confirmation must come from new guardian address");
        // Store old guardian for event
        address oldGuardian = guardian;
        // Update guardian and clear storage
        guardian = newGuardian;
        delete newGuardian;
        // Emit event
        emit GuardianChanged(oldGuardian, guardian);
    }

        // Confirms burning guardianship
    function burnKeys() external override onlyGuardian{
        // Check that new guardian has been set to zero address (are you sure?)
        require(address(0) == newGuardian, "must set guardian to 0x00 first");
        // Store old guardian for event
        address oldGuardian = guardian;
        // delete guardian 
        delete guardian;
        // Emit event
        emit GuardianChanged(oldGuardian, guardian);
    }


    /// @param _key The key for the record
    function getAddress(bytes32 _key) override external view returns (address r) {
        return addressStorage[_key];
    }

    /// @param _key The key for the record
    function getUint(bytes32 _key) override external view returns (uint256 r) {
        return uintStorage[_key];
    }

    /// @param _key The key for the record
    function getBool(bytes32 _key) override external view returns (bool r) {
        return booleanStorage[_key];
    }


    /// @param _key The key for the record
    function setAddress(bytes32 _key, address _value) onlyGuardian override external {
        addressStorage[_key] = _value;
    }
/*
    /// @param _key The key for the record
    function setAddress(string memory _key, address _value) external {
        bytes32 key = keccak256(abi.encodePacked(_key, msg.sender));
        addressStorage[key] = _value;
    }
*/
    /// @param _key The key for the record
    function setUint(bytes32 _key, uint _value) onlyGuardian override external {
        uintStorage[_key] = _value;
    }

   
    /// @param _key The key for the record
    function setBool(bytes32 _key, bool _value) onlyGuardian override external {
        booleanStorage[_key] = _value;
    }



    /// @param _key The key for the record
    function deleteAddress(bytes32 _key) onlyGuardian override external {
        delete addressStorage[_key];
    }

    /// @param _key The key for the record - added for Frens ~ 0xWildhare
    function deleteUint(bytes32 _key) onlyGuardian override external {
        delete uintStorage[_key];
    }

    /// @param _key The key for the record
    function deleteBool(bytes32 _key) onlyGuardian override external {
        delete booleanStorage[_key];
    }

   

    /// @param _key The key for the record
    /// @param _amount An amount to add to the record's value  - 0xWildhare removed safeMath
    function addUint(bytes32 _key, uint256 _amount) onlyGuardian override external {
        uintStorage[_key] += _amount;
    }

    /// @param _key The key for the record
    /// @param _amount An amount to subtract from the record's value - 0xWildhare removed safeMath
    function subUint(bytes32 _key, uint256 _amount) onlyGuardian override external {
        uintStorage[_key] -= _amount;
    }

}

pragma solidity 0.8.20;


// SPDX-License-Identifier: GPL-3.0-only
//modified from IRocketStorage on 03/12/2022 by 0xWildhare

interface IFrensStorage {

   
    // Guardian
    function getGuardian() external view returns(address);
    function setGuardian(address _newAddress) external;
    function confirmGuardian() external;
    function burnKeys() external;

    // Getters
    function getAddress(bytes32 _key) external view returns (address);
    function getUint(bytes32 _key) external view returns (uint);
    function getBool(bytes32 _key) external view returns (bool);   

    // Setters
    function setAddress(bytes32 _key, address _value) external;
    function setUint(bytes32 _key, uint _value) external;
    function setBool(bytes32 _key, bool _value) external;    

    // Deleters
    function deleteAddress(bytes32 _key) external;
    function deleteUint(bytes32 _key) external;
    function deleteBool(bytes32 _key) external;    

    // Arithmetic 
    function addUint(bytes32 _key, uint256 _amount) external;
    function subUint(bytes32 _key, uint256 _amount) external;
    
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGuardian","type":"address"},{"indexed":false,"internalType":"address","name":"newGuardian","type":"address"}],"name":"GuardianChanged","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addUint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"confirmGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"deleteAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"deleteBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"deleteUint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"r","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getBool","outputs":[{"internalType":"bool","name":"r","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getUint","outputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"address","name":"_value","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setGuardian","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setUint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"subUint","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080806040523461002857600380546001600160a01b03191633179055610620908161002d8239f35b5f80fdfe60406080815260049081361015610014575f80fd5b5f91823560e01c80630e14a376146105425780631e0ea61e1461046b57806321f8a721146104395780632c62ff2d146103fd57806367a6a9171461033d5780637ae1cfca146103115780638a0dac4a146102c8578063a75b87d21461029f578063abfdcced1461024c578063adb353dc1461020c578063bd02d0f5146101e6578063ca446dd91461018c578063e2a4853a1461015557838163e2b202bf1461011b575063ebb9d8c9146100c5575f80fd5b34610117576100d336610584565b92906100ea60018060a01b0360035416331461059e565b845283602052832090815492830392831161010457505580f35b634e487b7160e01b845260119052602483fd5b8280fd5b808484346101515760203660031901126101515761014460018060a01b0360035416331461059e565b3582528160205281205580f35b5050fd5b5050346101885761016536610584565b919061017c60018060a01b0360035416331461059e565b83528260205282205580f35b5080fd5b5090346101175780600319360112610117576024356001600160a01b0381811693918490036101e2576101c49060035416331461059e565b3583526001602052822080546001600160a01b031916909117905580f35b8480fd5b503461011757602036600319011261011757602092829135815280845220549051908152f35b50346101175761021b36610584565b929061023260018060a01b0360035416331461059e565b845283602052832090815492830180931161010457505580f35b5090346101175780600319360112610117576024359182151580930361029b5761028160018060a01b0360035416331461059e565b358352600260205282209060ff8019835416911617905580f35b8380fd5b50503461018857816003193601126101885760035490516001600160a01b039091168152602090f35b8382346101885760203660031901126101885780356001600160a01b038181169182900361029b576102ff9060035416331461059e565b81546001600160a01b03191617905580f35b5034610117576020366003190112610117578160209360ff923581526002855220541690519015158152f35b50919034610188578160031936011261018857600354926001600160a01b03808516919061036c33841461059e565b8154166103ba57507fa14fc14d8620a708a896fd11392a235647d99385500a295f0d7da2a258b2e96792936bffffffffffffffffffffffff60a01b166003558151908152836020820152a180f35b606490602084519162461bcd60e51b8352820152601f60248201527f6d7573742073657420677561726469616e20746f2030783030206669727374006044820152fd5b50346101175760203660031901126101175761042460018060a01b0360035416331461059e565b35825260026020528120805460ff1916905580f35b50346101175760203660031901126101175735825260016020908152918190205490516001600160a01b039091168152f35b5091903461018857816003193601126101885782546001600160a01b0380821690338290036104e6577fa14fc14d8620a708a896fd11392a235647d99385500a295f0d7da2a258b2e9679495600354936bffffffffffffffffffffffff60a01b9084828716176003551690558351921682526020820152a180f35b835162461bcd60e51b8152602081880152603060248201527f436f6e6669726d6174696f6e206d75737420636f6d652066726f6d206e65772060448201526f677561726469616e206164647265737360801b6064820152608490fd5b50346101175760203660031901126101175761056960018060a01b0360035416331461059e565b3582526001602052812080546001600160a01b031916905580f35b604090600319011261059a576004359060243590565b5f80fd5b156105a557565b60405162461bcd60e51b815260206004820152601960248201527f4163636f756e74206973206e6f74206120677561726469616e000000000000006044820152606490fdfea2646970667358221220e272679208f01687a2dd00daf3273c1236d6dd25fc9ed4d1aac46bcb6612f7c764736f6c63430008140033

Deployed Bytecode

0x60406080815260049081361015610014575f80fd5b5f91823560e01c80630e14a376146105425780631e0ea61e1461046b57806321f8a721146104395780632c62ff2d146103fd57806367a6a9171461033d5780637ae1cfca146103115780638a0dac4a146102c8578063a75b87d21461029f578063abfdcced1461024c578063adb353dc1461020c578063bd02d0f5146101e6578063ca446dd91461018c578063e2a4853a1461015557838163e2b202bf1461011b575063ebb9d8c9146100c5575f80fd5b34610117576100d336610584565b92906100ea60018060a01b0360035416331461059e565b845283602052832090815492830392831161010457505580f35b634e487b7160e01b845260119052602483fd5b8280fd5b808484346101515760203660031901126101515761014460018060a01b0360035416331461059e565b3582528160205281205580f35b5050fd5b5050346101885761016536610584565b919061017c60018060a01b0360035416331461059e565b83528260205282205580f35b5080fd5b5090346101175780600319360112610117576024356001600160a01b0381811693918490036101e2576101c49060035416331461059e565b3583526001602052822080546001600160a01b031916909117905580f35b8480fd5b503461011757602036600319011261011757602092829135815280845220549051908152f35b50346101175761021b36610584565b929061023260018060a01b0360035416331461059e565b845283602052832090815492830180931161010457505580f35b5090346101175780600319360112610117576024359182151580930361029b5761028160018060a01b0360035416331461059e565b358352600260205282209060ff8019835416911617905580f35b8380fd5b50503461018857816003193601126101885760035490516001600160a01b039091168152602090f35b8382346101885760203660031901126101885780356001600160a01b038181169182900361029b576102ff9060035416331461059e565b81546001600160a01b03191617905580f35b5034610117576020366003190112610117578160209360ff923581526002855220541690519015158152f35b50919034610188578160031936011261018857600354926001600160a01b03808516919061036c33841461059e565b8154166103ba57507fa14fc14d8620a708a896fd11392a235647d99385500a295f0d7da2a258b2e96792936bffffffffffffffffffffffff60a01b166003558151908152836020820152a180f35b606490602084519162461bcd60e51b8352820152601f60248201527f6d7573742073657420677561726469616e20746f2030783030206669727374006044820152fd5b50346101175760203660031901126101175761042460018060a01b0360035416331461059e565b35825260026020528120805460ff1916905580f35b50346101175760203660031901126101175735825260016020908152918190205490516001600160a01b039091168152f35b5091903461018857816003193601126101885782546001600160a01b0380821690338290036104e6577fa14fc14d8620a708a896fd11392a235647d99385500a295f0d7da2a258b2e9679495600354936bffffffffffffffffffffffff60a01b9084828716176003551690558351921682526020820152a180f35b835162461bcd60e51b8152602081880152603060248201527f436f6e6669726d6174696f6e206d75737420636f6d652066726f6d206e65772060448201526f677561726469616e206164647265737360801b6064820152608490fd5b50346101175760203660031901126101175761056960018060a01b0360035416331461059e565b3582526001602052812080546001600160a01b031916905580f35b604090600319011261059a576004359060243590565b5f80fd5b156105a557565b60405162461bcd60e51b815260206004820152601960248201527f4163636f756e74206973206e6f74206120677561726469616e000000000000006044820152606490fdfea2646970667358221220e272679208f01687a2dd00daf3273c1236d6dd25fc9ed4d1aac46bcb6612f7c764736f6c63430008140033

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.