ETH Price: $2,029.68 (-1.16%)

Transaction Decoder

Block:
22862927 at Jul-06-2025 09:45:11 PM +UTC
Transaction Fee:
0.000033522407807784 ETH $0.07
Gas Used:
33,892 Gas / 0.989095002 Gwei

Emitted Events:

341 DIAOracleV2.OracleUpdate( key=IMF/USD, value=868128986163, timestamp=1751838299 )

Account State Difference:

  Address   Before After State Difference Code
0xBEE10964...955e5FaE3
0.975389768370419034 Eth
Nonce: 11296
0.97535624596261125 Eth
Nonce: 11297
0.000033522407807784
(BuilderNet)
40.96898546355018805 Eth40.968988595639409382 Eth0.000003132089221332
0xE1A3d58d...4B4Ac1552

Execution Trace

DIAOracleV2.setValue( key=IMF/USD, value=868128986163, timestamp=1751838299 )
// compiled using solidity 0.8.19

pragma solidity 0.8.19;

contract DIAOracleV2 {
    mapping (string => uint256) public values;
    address oracleUpdater;
    
    event OracleUpdate(string key, uint128 value, uint128 timestamp);
    event UpdaterAddressChange(address newUpdater);
    
    constructor() {
        oracleUpdater = msg.sender;
    }
    
    function setValue(string memory key, uint128 value, uint128 timestamp) public {
        require(msg.sender == oracleUpdater);
        uint256 cValue = (((uint256)(value)) << 128) + timestamp;
        values[key] = cValue;
        emit OracleUpdate(key, value, timestamp);
    }

    function setMultipleValues(string[] memory keys, uint256[] memory compressedValues) public {
        require(msg.sender == oracleUpdater);
        require(keys.length == compressedValues.length);
        
        for (uint128 i = 0; i < keys.length; i++) {
            string memory currentKey = keys[i];
            uint256 currentCvalue = compressedValues[i];
            uint128 value = (uint128)(currentCvalue >> 128);
            uint128 timestamp = (uint128)(currentCvalue % 2**128);

            values[currentKey] = currentCvalue;
            emit OracleUpdate(currentKey, value, timestamp);
        }
    }
    
    function getValue(string memory key) external view returns (uint128, uint128) {
        uint256 cValue = values[key];
        uint128 timestamp = (uint128)(cValue % 2**128);
        uint128 value = (uint128)(cValue >> 128);
        return (value, timestamp);
    }
    
    function updateOracleUpdaterAddress(address newOracleUpdaterAddress) public {
        require(msg.sender == oracleUpdater);
        oracleUpdater = newOracleUpdaterAddress;
        emit UpdaterAddressChange(newOracleUpdaterAddress);
    }
}