Contract 0xD924955C92a67d32e0C10e686a6003B22eCFba28

 

Contract Overview

Tranchess: BTC TWAP Oracle
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0d8667c181b5684fc7a25b260e99f6cfda99c78fc58d2641de9b1b61d9eec2feUpdate Twap From...113245182021-09-29 2:35:372 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0017593125
0x265cc9064152a83fcbe56cd788f762a5f36f861ba7bae3c1c34808dbe41387c7Update Twap From...113239122021-09-29 2:05:0732 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001630005
0x38f04b392f2f16a27f092cbde003cf35d4edf5dab722cac7d3362282128d6761Update Twap From...113233282021-09-29 1:35:351 hr 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001374045
0x07eed16958356addef720cd96ff5f7063d22e54d5671a4ba2e6af89fa7246c8bUpdate Twap From...113227282021-09-29 1:05:351 hr 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0015446925
0xe542db0ba262e31fa8bb26cfe06625562215a7b3cf248539371e4ef713e2f0eaUpdate Twap From...113221442021-09-29 0:35:062 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0016736175
0x60b1867b60a66a82567c95ca526f71c5f5340a4a0db0e630c3ce510fd9ddf25cUpdate Twap From...113215542021-09-29 0:05:362 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.00145872
0x0df0c157e6d0964a4eb38c0d4f75ea358b2c689a97277d8d7656bb0cde34f6aaUpdate Twap From...113210512021-09-28 23:40:122 hrs 57 mins ago0x0ac8d559e8b2f6e82faff480ecf4e3d97a1928fe IN  Tranchess: BTC TWAP Oracle0 BNB0.0020899
0x99de3b0e486b7ab542ee4e376ecc69e346b5f5d5ff263eaf2befdd9427caf7e9Update Twap From...113209592021-09-28 23:35:363 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001630875
0x8c50893f0ef5795ba2723083adf6158f74e65b813a1b75c8c2533b7cde18e2a4Update Twap From...113203652021-09-28 23:05:363 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.00158694
0x3c92a38c70609e5ec3e75482410474697e83647c1598b0d85a729d5e4a45c110Update Twap From...113198622021-09-28 22:40:123 hrs 57 mins ago0x0ac8d559e8b2f6e82faff480ecf4e3d97a1928fe IN  Tranchess: BTC TWAP Oracle0 BNB0.0019184
0xe24dbadcd548a48ff16833f7fd8f599854940bc1b7fed5fa6bafb1d4fe82eff7Update Twap From...113197702021-09-28 22:35:364 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0015022125
0x4cd5c730da58d630a2be0a86e7256ecc49f83e37183e6d774204022988d39853Update Twap From...113191722021-09-28 22:05:354 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0014589
0x8ca3681b413eafa720da76d59ba9841111f15831ae74f47f83ede1c72596d4d2Update Twap From...113185732021-09-28 21:35:345 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0015446925
0x4baf4fd5a193d161ff7e930b641f82d96258a05ee6dfe17151c41de68363a0f3Update Twap From...113179732021-09-28 21:05:345 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.00171615
0x6da47f639c5c6366a6c9ab1c7e37b8db66138c218b056a73bb2b71308f887035Update Twap From...113173732021-09-28 20:35:336 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001630275
0x9d413701d7198048158b033805f07ceb06a27f14fbb83f32f00843f3a004a60dUpdate Twap From...113168012021-09-28 20:06:046 hrs 31 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.00158739
0xf445857d6b97219b11973d4c1f4505de0c8eb9aa205f93da52a5d9addf5d83b6Update Twap From...113161972021-09-28 19:35:317 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0017157
0xf37b39661e59ac61eafb937d86b9f60f93ef2d0938893d755b8bc0910777eaa7Update Twap From...113156152021-09-28 19:05:337 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0016734375
0x917de62cf33898bb6a595f6b0039ad70a81ebcab27224e1a0a0236e3902f6433Update Twap From...113150172021-09-28 18:35:318 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0015025425
0x866f027475c216dc579bbec1acc34abfde7fa9ed22225d5579d5e0a560754222Update Twap From...113144252021-09-28 18:05:338 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001631055
0xc5283fd3d47ebd02abfe8a473d403a3068f3fc41f09931a5e0f025ce8f0a442cUpdate Twap From...113138262021-09-28 17:35:299 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.00145926
0x2086128ff33d258ecf4491efd8780c0ca2e51ce0ab900000444ba80ee283a5bfUpdate Twap From...113132302021-09-28 17:05:299 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001341855
0x023bd5cf21ece127ad21c39ac25e79eac4dab65aba9b04c637ced333a5b66892Update Twap From...113126572021-09-28 16:36:0010 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.001373595
0x98cf1e4d4a562bae7b73de5ef4b9d77a7872545fe1e274eea316c1fffc9b1538Update Twap From...113120472021-09-28 16:05:3010 hrs 32 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0015020325
0xe78c2937c6fe0fd675f0e7dfabeae3538bb07fd97261a5c974a0e9bbf28ca2d1Update Twap From...113114592021-09-28 15:35:2811 hrs 2 mins ago0xbb8c8b63da6cd37e71dc40d4350cdf1886d524a1 IN  Tranchess: BTC TWAP Oracle0 BNB0.0015449625
[ Download CSV Export 

OVERVIEW

BTC time-weighted-average-price (TWAP) oracle for Tranchess.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TwapOracle

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2021-06-20
*/

/*
 * @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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface ITwapOracle {
    function getTwap(uint256 timestamp) external view returns (uint256);
}

/// @title Time-weighted average price oracle
/// @notice This contract extends the Open Oracle standard by Compound, accepts price data
///         signed by two Reporters (a primary source and a secondary source) and computes
///         time-weighted average price (TWAP) in every 30-minute epoch.
/// @author Tranchess
contract TwapOracle is ITwapOracle, Ownable {
    uint256 private constant MESSAGE_INTERVAL = 1 minutes;
    uint256 private constant MESSAGE_BATCH_SIZE = 30; // not exceeding 32 for v's to fit in a word
    uint256 private constant EPOCH = MESSAGE_INTERVAL * MESSAGE_BATCH_SIZE;

    /// @dev Minimal number of messages in an epoch.
    uint256 private constant MIN_MESSAGE_COUNT = 15;
    uint256 private constant PUBLISHING_DELAY = 15 minutes;

    uint256 private constant SECONDARY_SOURCE_DELAY = EPOCH * 2;
    uint256 private constant OWNER_DELAY = EPOCH * 4;
    uint256 private constant PRICE_UNIT = 1e12;
    uint256 private constant PRICE_MASK = 0xffffffffffffffff;

    enum UpdateType {PRIMARY, SECONDARY, OWNER}

    event Update(uint256 timestamp, uint256 price, UpdateType updateType);

    address public immutable primarySource;
    address public immutable secondarySource;
    uint256 private immutable _startTimestamp;
    string public symbol;

    uint256 private _lastPrimaryMessageCount;
    uint256 private _lastSecondaryTimestamp;
    uint256 private _lastSecondaryMessageCount;

    /// @dev Mapping of epoch end timestamp => TWAP
    mapping(uint256 => uint256) private _prices;

    /// @param primarySource_ Address of the primary data source
    /// @param secondarySource_ Address of the secondary data source
    /// @param symbol_ Asset symbol
    constructor(
        address primarySource_,
        address secondarySource_,
        string memory symbol_
    ) public {
        primarySource = primarySource_;
        secondarySource = secondarySource_;
        symbol = symbol_;
        _startTimestamp = block.timestamp;
    }

    /// @notice Return TWAP with 18 decimal places in the epoch ending at the specified timestamp.
    ///         Zero is returned if the epoch is not initialized yet or can still be updated
    ///         with more messages from the same source.
    /// @param timestamp End Timestamp in seconds of the epoch
    /// @return TWAP (18 decimal places) in the epoch, or zero if the epoch is not initialized yet
    ///         or can still be updated with more messages from the same source.
    function getTwap(uint256 timestamp) external view override returns (uint256) {
        // Check whether the stored price can be updated in the future
        if (
            // Case 1: it can still be updated by more messages from the primary source
            timestamp > block.timestamp - PUBLISHING_DELAY ||
            // Case 2: it comes from the secondary source and can still be updated
            // by more messages from that source
            (timestamp <= block.timestamp - SECONDARY_SOURCE_DELAY &&
                timestamp > block.timestamp - SECONDARY_SOURCE_DELAY - PUBLISHING_DELAY &&
                timestamp == _lastSecondaryTimestamp)
        ) {
            return 0;
        } else {
            return _prices[timestamp];
        }
    }

    /// @notice Return minimum acceptable message count from the primary source
    ///         to update a given epoch.
    /// @param timestamp End timestamp in seconds of the epoch to update
    /// @return Minimum acceptable message count, or `MESSAGE_BATCH_SIZE + 1` if the epoch
    ///         cannot be updated now
    function minPrimaryMessageCountToUpdate(uint256 timestamp) external view returns (uint256) {
        if (_prices[timestamp] != 0) {
            if (timestamp > block.timestamp - PUBLISHING_DELAY) {
                return _lastPrimaryMessageCount + 1;
            } else {
                return MESSAGE_BATCH_SIZE + 1;
            }
        } else {
            return MIN_MESSAGE_COUNT;
        }
    }

    /// @notice Return minimum acceptable message count from the secondary source
    ///         to update a given epoch.
    /// @param timestamp End timestamp in seconds of the epoch to update
    /// @return Minimum acceptable message count, or `MESSAGE_BATCH_SIZE + 1` if the epoch
    ///         cannot be updated now
    function minSecondaryMessageCountToUpdate(uint256 timestamp) external view returns (uint256) {
        if (timestamp > block.timestamp - SECONDARY_SOURCE_DELAY || timestamp <= _startTimestamp) {
            return MESSAGE_BATCH_SIZE + 1;
        } else if (_prices[timestamp] != 0) {
            if (
                timestamp == _lastSecondaryTimestamp &&
                timestamp > block.timestamp - SECONDARY_SOURCE_DELAY - PUBLISHING_DELAY
            ) {
                return _lastSecondaryMessageCount + 1;
            } else {
                return MESSAGE_BATCH_SIZE + 1;
            }
        } else {
            return MIN_MESSAGE_COUNT;
        }
    }

    /// @notice Submit prices in a epoch that are signed by the primary source.
    /// @param timestamp End timestamp in seconds of the epoch
    /// @param priceList A list of prices (6 decimal places) in messages signed by the source,
    ///        with zero indicating a missing message
    /// @param rList A list of "r" values of signatures
    /// @param sList A list of "s" values of signatures
    /// @param packedV "v" values of signatures packed in a single word,
    ///        starting from the lowest byte
    function updateTwapFromPrimary(
        uint256 timestamp,
        uint256[MESSAGE_BATCH_SIZE] calldata priceList,
        bytes32[MESSAGE_BATCH_SIZE] calldata rList,
        bytes32[MESSAGE_BATCH_SIZE] calldata sList,
        uint256 packedV
    ) external {
        // Do not check (timestamp > _startTimestamp) for two reasons:
        // 1. the primary source is trusted;
        // 2. to save gas in most of the time.

        uint256 lastMessageCount = MIN_MESSAGE_COUNT - 1;
        if (_prices[timestamp] != 0) {
            require(
                timestamp > block.timestamp - PUBLISHING_DELAY,
                "Too late for the primary source to update an existing epoch"
            );
            lastMessageCount = _lastPrimaryMessageCount;
        }
        uint256 newMessageCount =
            _updateTwapFromSource(
                timestamp,
                lastMessageCount,
                priceList,
                rList,
                sList,
                packedV,
                primarySource,
                UpdateType.PRIMARY
            );
        if (timestamp > block.timestamp - PUBLISHING_DELAY) {
            _lastPrimaryMessageCount = newMessageCount;
        }
    }

    /// @notice Submit prices in a epoch that are signed by the secondary source.
    ///         This is allowed only after SECONDARY_SOURCE_DELAY has elapsed after the epoch.
    /// @param timestamp End timestamp in seconds of the epoch
    /// @param priceList A list of prices (6 decimal places) in messages signed by the source,
    ///        with zero indicating a missing message
    /// @param rList A list of "r" values of signatures
    /// @param sList A list of "s" values of signatures
    /// @param packedV "v" values of signatures packed in a single word,
    ///        starting from the lowest byte
    function updateTwapFromSecondary(
        uint256 timestamp,
        uint256[MESSAGE_BATCH_SIZE] calldata priceList,
        bytes32[MESSAGE_BATCH_SIZE] calldata rList,
        bytes32[MESSAGE_BATCH_SIZE] calldata sList,
        uint256 packedV
    ) external {
        require(
            timestamp <= block.timestamp - SECONDARY_SOURCE_DELAY,
            "Not ready for the secondary source"
        );
        require(
            timestamp > _startTimestamp,
            "The secondary source cannot update epoch before this contract is deployed"
        );
        uint256 lastMessageCount = MIN_MESSAGE_COUNT - 1;
        if (_prices[timestamp] != 0) {
            require(
                timestamp == _lastSecondaryTimestamp &&
                    timestamp > block.timestamp - SECONDARY_SOURCE_DELAY - PUBLISHING_DELAY,
                "Too late for the secondary source to update an existing epoch"
            );
            lastMessageCount = _lastSecondaryMessageCount;
        }
        uint256 newMessageCount =
            _updateTwapFromSource(
                timestamp,
                lastMessageCount,
                priceList,
                rList,
                sList,
                packedV,
                secondarySource,
                UpdateType.SECONDARY
            );
        if (timestamp > block.timestamp - SECONDARY_SOURCE_DELAY - PUBLISHING_DELAY) {
            _lastSecondaryTimestamp = timestamp;
            _lastSecondaryMessageCount = newMessageCount;
        }
    }

    /// @dev Verify signatures and update a epoch.
    /// @param timestamp End timestamp in seconds of the epoch
    /// @param lastMessageCount Message count in the last update to the epoch
    /// @param priceList A list of prices (6 decimal places) in messages signed by the source,
    ///        with zero indicating a missing message
    /// @param rList A list of "r" values of signatures
    /// @param sList A list of "s" values of signatures
    /// @param packedV "v" values of signatures packed in a single word,
    ///        starting from the lowest byte
    /// @param source Address of the data source that signs the messages
    /// @param updateType Type of this update, which will be included in an event
    /// @return messageCount Non-zero price count in `priceList`
    function _updateTwapFromSource(
        uint256 timestamp,
        uint256 lastMessageCount,
        uint256[MESSAGE_BATCH_SIZE] memory priceList,
        bytes32[MESSAGE_BATCH_SIZE] memory rList,
        bytes32[MESSAGE_BATCH_SIZE] memory sList,
        uint256 packedV,
        address source,
        UpdateType updateType
    ) private returns (uint256 messageCount) {
        require(timestamp % EPOCH == 0, "Unaligned timestamp");
        messageCount = 0;
        uint256 sum = 0;
        string memory _symbol = symbol; // gas saver
        uint256 t = timestamp - EPOCH;
        uint256 weight = 1;
        for (uint256 i = 0; i < MESSAGE_BATCH_SIZE; i++) {
            t += MESSAGE_INTERVAL;
            // Only prices fitting in 8 bytes (about 1.8e13 with 6 decimal places) are accepted,
            // which guarentees the following arithmetic operations never overflow.
            uint256 p = priceList[i] & PRICE_MASK;
            if (p == 0) {
                weight += 1;
                packedV >>= 8;
                continue;
            }
            // Build the original message and verify its signature. The computation is packed
            // in a single complex statement to save gas. Solidity generates unnecessary
            // initialization for each local variable, which wastes notable gas in this hot loop.
            require(
                ecrecover(
                    keccak256(
                        abi.encodePacked(
                            "\x19Ethereum Signed Message:\n32",
                            keccak256(
                                // Rebuild the message signed by the source
                                abi.encode("prices", t, _symbol, p)
                            )
                        )
                    ),
                    uint8(packedV), // the lowest byte of packedV
                    rList[i],
                    sList[i]
                ) == source,
                "Invalid signature"
            );
            sum += p * weight;
            weight = 1;
            messageCount += 1;
            packedV >>= 8;
        }
        require(messageCount > lastMessageCount, "More messages are required to update this epoch");
        if (weight > 1) {
            sum += (priceList[MESSAGE_BATCH_SIZE - weight] & PRICE_MASK) * (weight - 1);
        }
        uint256 average = (sum * PRICE_UNIT) / MESSAGE_BATCH_SIZE;
        _prices[t] = average;
        emit Update(t, average, updateType);
    }

    /// @notice Submit a TWAP with 18 decimal places by the owner.
    ///         This is allowed only when a epoch gets no update after OWNER_DELAY has elapsed.
    function updateTwapFromOwner(uint256 timestamp, uint256 price) external onlyOwner {
        require(timestamp % EPOCH == 0, "Unaligned timestamp");
        require(timestamp <= block.timestamp - OWNER_DELAY, "Not ready for owner");
        require(_prices[timestamp] == 0, "Owner cannot update an existing epoch");
        require(
            timestamp > _startTimestamp,
            "Owner cannot update epoch before this contract is deployed"
        );

        uint256 lastPrice = _prices[timestamp - EPOCH];
        require(lastPrice > 0, "Owner can only update a epoch following an updated epoch");
        require(
            price > lastPrice / 10 && price < lastPrice * 10,
            "Owner price deviates too much from the last price"
        );

        _prices[timestamp] = price;
        emit Update(timestamp, price, UpdateType.OWNER);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"primarySource_","type":"address"},{"internalType":"address","name":"secondarySource_","type":"address"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"enum TwapOracle.UpdateType","name":"updateType","type":"uint8"}],"name":"Update","type":"event"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getTwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"minPrimaryMessageCountToUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"minSecondaryMessageCountToUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primarySource","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondarySource","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updateTwapFromOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256[30]","name":"priceList","type":"uint256[30]"},{"internalType":"bytes32[30]","name":"rList","type":"bytes32[30]"},{"internalType":"bytes32[30]","name":"sList","type":"bytes32[30]"},{"internalType":"uint256","name":"packedV","type":"uint256"}],"name":"updateTwapFromPrimary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256[30]","name":"priceList","type":"uint256[30]"},{"internalType":"bytes32[30]","name":"rList","type":"bytes32[30]"},{"internalType":"bytes32[30]","name":"sList","type":"bytes32[30]"},{"internalType":"uint256","name":"packedV","type":"uint256"}],"name":"updateTwapFromSecondary","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e06040523480156200001157600080fd5b50604051620014c7380380620014c7833981810160405260608110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82516401000000008111828201881017156200009457600080fd5b82525081516020918201929091019080838360005b83811015620000c3578181015183820152602001620000a9565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b5060405250505060006200010a6200019260201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606084811b821660805283901b1660a05280516200018390600190602084019062000196565b50504260c05250620002329050565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d957805160ff191683800117855562000209565b8280016001018555821562000209579182015b8281111562000209578251825591602001919060010190620001ec565b50620002179291506200021b565b5090565b5b808211156200021757600081556001016200021c565b60805160601c60a05160601c60c05161124e62000279600039806105f6528061078e5280610922525080610a695280610bbf52508061036e528061074b525061124e6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806394727c941161007157806394727c941461017757806395d89b41146101945780639f05715114610211578063cd9ac7981461022e578063f2fde38b14610264578063fed761ce1461028a576100b4565b806323ac7acb146100b95780633ebbfc4b146100f1578063715018a61461012057806373488beb146101285780637461d7de1461014b5780638da5cb5b1461016f575b600080fd5b6100ef6004803603610b808110156100d057600080fd5b5080359060208101906103e08101906107a0810190610b600135610292565b005b61010e6004803603602081101561010757600080fd5b50356103b1565b60408051918252519081900360200190f35b6100ef6103ee565b6100ef6004803603604081101561013e57600080fd5b50803590602001356104a2565b610153610749565b604080516001600160a01b039092168252519081900360200190f35b61015361076d565b61010e6004803603602081101561018d57600080fd5b503561077c565b61019c6107f8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d65781810151838201526020016101be565b50505050905090810190601f1680156102035780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61010e6004803603602081101561022757600080fd5b5035610885565b6100ef6004803603610b8081101561024557600080fd5b5080359060208101906103e08101906107a0810190610b6001356108dc565b6100ef6004803603602081101561027a57600080fd5b50356001600160a01b0316610ab3565b610153610bbd565b600085815260056020526040902054600e90156102f057610384420386116102eb5760405162461bcd60e51b815260040180806020018281038252603b8152602001806110c2603b913960400191505060405180910390fd5b506002545b6000610394878388601e806020026040519081016040528092919082601e6020028082843760009201919091525050604080516103c081810190925291508a90601e90839083908082843760009201919091525050604080516103c081810190925291508a90601e90839083908082843760009201829052508b92507f00000000000000000000000000000000000000000000000000000000000000009150610be1565b905061038442038711156103a85760028190555b50505050505050565b600081815260056020526040812054156103e55761038442038211156103dd57506002546001016103e9565b50601f6103e9565b50600f5b919050565b6103f6611014565b6000546001600160a01b03908116911614610458576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6104aa611014565b6000546001600160a01b0390811691161461050c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610708820615610559576040805162461bcd60e51b81526020600482015260136024820152720556e616c69676e65642074696d657374616d7606c1b604482015290519081900360640190fd5b611c1f1942018211156105a9576040805162461bcd60e51b81526020600482015260136024820152722737ba103932b0b23c903337b91037bbb732b960691b604482015290519081900360640190fd5b600082815260056020526040902054156105f45760405162461bcd60e51b81526004018080602001828103825260258152602001806111f46025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082116106525760405162461bcd60e51b815260040180806020018281038252603a815260200180611019603a913960400191505060405180910390fd5b610707198201600090815260056020526040902054806106a35760405162461bcd60e51b815260040180806020018281038252603881526020018061118b6038913960400191505060405180910390fd5b600a8104821180156106b7575080600a0282105b6106f25760405162461bcd60e51b81526004018080602001828103825260318152602001806111c36031913960400191505060405180910390fd5b600083815260056020908152604091829020849055815185815290810184905260028183015290517f643c4ca2677b84c8496e6ed64d70f5b11791d4cdea520f5f4bafbeebd553b9619181900360600190a1505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031690565b6000610e0f1942018211806107b157507f00000000000000000000000000000000000000000000000000000000000000008211155b156107be5750601f6103e9565b600082815260056020526040902054156103e557600354821480156107e7575061119319420182115b156103dd57506004546001016103e9565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561087d5780601f106108525761010080835404028352916020019161087d565b820191906000526020600020905b81548152906001019060200180831161086057829003601f168201915b505050505081565b600061038442038211806108ba5750610e0f19420182118015906108ad575061119319420182115b80156108ba575060035482145b156108c7575060006103e9565b506000818152600560205260409020546103e9565b610e0f1942018511156109205760405162461bcd60e51b81526004018080602001828103825260228152602001806111696022913960400191505060405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000851161097e5760405162461bcd60e51b81526004018080602001828103825260498152602001806110796049913960600191505060405180910390fd5b600085815260056020526040902054600e90156109ea57600354861480156109aa575061119319420186115b6109e55760405162461bcd60e51b815260040180806020018281038252603d81526020018061112c603d913960400191505060405180910390fd5b506004545b6000610a91878388601e806020026040519081016040528092919082601e6020028082843760009201919091525050604080516103c081810190925291508a90601e90839083908082843760009201919091525050604080516103c081810190925291508a90601e9083908390808284376000920191909152508a91507f000000000000000000000000000000000000000000000000000000000000000090506001610be1565b90506111931942018711156103a8576003879055600481905550505050505050565b610abb611014565b6000546001600160a01b03908116911614610b1d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610b625760405162461bcd60e51b81526004018080602001828103825260268152602001806110536026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610708890615610c30576040805162461bcd60e51b81526020600482015260136024820152720556e616c69676e65642074696d657374616d7606c1b604482015290519081900360640190fd5b5060018054604080516020601f6002600019610100878916150201909516949094049384018190048102820181019092528281526000938493606093830182828015610cbd5780601f10610c9257610100808354040283529160200191610cbd565b820191906000526020600020905b815481529060010190602001808311610ca057829003601f168201915b509394505050610707198d0191506001905060005b601e811015610f1a57603c83019250600067ffffffffffffffff8d83601e8110610cf857fe5b602002015116905080610d185760018301925060088a901c995050610f12565b886001600160a01b03166001858784604051602001808060200185815260200180602001848152602001838103835260068152602001806570726963657360d01b815250602001838103825285818151815260200191508051906020019080838360005b83811015610d94578181015183820152602001610d7c565b50505050905090810190601f168015610dc15780820380516001836020036101000a031916815260200191505b50955050505050506040516020818303038152906040528051906020012060405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001208c8f86601e8110610e3a57fe5b60200201518f87601e8110610e4b57fe5b602002015160405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610ea4573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610efd576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b60089990991c98600196870196920294909401935b600101610cd2565b508b8511610f595760405162461bcd60e51b815260040180806020018281038252602f8152602001806110fd602f913960400191505060405180910390fd5b6001811115610f8a576001810367ffffffffffffffff8c83601e03601e8110610f7e57fe5b60200201511602840193505b6000601e64e8d4a5100086020490508060056000858152602001908152602001600020819055507f643c4ca2677b84c8496e6ed64d70f5b11791d4cdea520f5f4bafbeebd553b96183828960405180848152602001838152602001826002811115610ff157fe5b8152602001935050505060405180910390a1505050505098975050505050505050565b339056fe4f776e65722063616e6e6f74207570646174652065706f6368206265666f7265207468697320636f6e7472616374206973206465706c6f7965644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546865207365636f6e6461727920736f757263652063616e6e6f74207570646174652065706f6368206265666f7265207468697320636f6e7472616374206973206465706c6f796564546f6f206c61746520666f7220746865207072696d61727920736f7572636520746f2075706461746520616e206578697374696e672065706f63684d6f7265206d657373616765732061726520726571756972656420746f2075706461746520746869732065706f6368546f6f206c61746520666f7220746865207365636f6e6461727920736f7572636520746f2075706461746520616e206578697374696e672065706f63684e6f7420726561647920666f7220746865207365636f6e6461727920736f757263654f776e65722063616e206f6e6c792075706461746520612065706f636820666f6c6c6f77696e6720616e20757064617465642065706f63684f776e657220707269636520646576696174657320746f6f206d7563682066726f6d20746865206c6173742070726963654f776e65722063616e6e6f742075706461746520616e206578697374696e672065706f6368a264697066735822122039f922264218a1e288d8b8f38393c4b95cfa232074dc3cb8039bf71fa8661aad64736f6c634300060c0033000000000000000000000000fceadafab14d46e20144f48824d0c09b1a03f2bc00000000000000000000000085615b076615317c80f14cbad6501eec031cd51c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000034254430000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000fceadafab14d46e20144f48824d0c09b1a03f2bc00000000000000000000000085615b076615317c80f14cbad6501eec031cd51c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000034254430000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : primarySource_ (address): 0xfceadafab14d46e20144f48824d0c09b1a03f2bc
Arg [1] : secondarySource_ (address): 0x85615b076615317c80f14cbad6501eec031cd51c
Arg [2] : symbol_ (string): BTC

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000fceadafab14d46e20144f48824d0c09b1a03f2bc
Arg [1] : 00000000000000000000000085615b076615317c80f14cbad6501eec031cd51c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 4254430000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

3542:13144:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8843:1241;;;;;;;;;;;;;;;;-1:-1:-1;8843:1241:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6871:413;;;;;;;;;;;;;;;;-1:-1:-1;6871:413:0;;:::i;:::-;;;;;;;;;;;;;;;;2556:148;;;:::i;15806:877::-;;;;;;;;;;;;;;;;-1:-1:-1;15806:877:0;;;;;;;:::i;4367:38::-;;;:::i;:::-;;;;-1:-1:-1;;;;;4367:38:0;;;;;;;;;;;;;;1914:79;;;:::i;7622:683::-;;;;;;;;;;;;;;;;-1:-1:-1;7622:683:0;;:::i;4507:20::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5755:780;;;;;;;;;;;;;;;;-1:-1:-1;5755:780:0;;:::i;10720:1555::-;;;;;;;;;;;;;;;;-1:-1:-1;10720:1555:0;;;;;;;;;;;;;;;;;;;:::i;2859:244::-;;;;;;;;;;;;;;;;-1:-1:-1;2859:244:0;-1:-1:-1;;;;;2859:244:0;;:::i;4412:40::-;;;:::i;8843:1241::-;9286:24;9349:18;;;:7;:18;;;;;;9313:21;;9349:23;9345:281;;3984:10;9427:15;:34;9415:9;:46;9389:167;;;;-1:-1:-1;;;9389:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9590:24:0;;9345:281;9636:23;9675:270;9715:9;9743:16;9778:9;9675:270;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9675:270:0;;;;;;;;;;;-1:-1:-1;9806:5:0;;9675:270;;;;9806:5;;9675:270;9806:5;9675:270;;;;;;;;;-1:-1:-1;;9675:270:0;;;;;;;;;;;-1:-1:-1;9830:5:0;;9675:270;;;;9830:5;;9675:270;9830:5;9675:270;;;;;;;;-1:-1:-1;9854:7:0;;-1:-1:-1;9880:13:0;;-1:-1:-1;9675:21:0;:270::i;:::-;9636:309;;3984:10;9972:15;:34;9960:9;:46;9956:121;;;10023:24;:42;;;9956:121;8843:1241;;;;;;;:::o;6871:413::-;6953:7;6977:18;;;:7;:18;;;;;;:23;6973:304;;3984:10;7033:15;:34;7021:9;:46;7017:192;;;-1:-1:-1;7095:24:0;;7122:1;7095:28;7088:35;;7017:192;-1:-1:-1;7171:22:0;7164:29;;6973:304;-1:-1:-1;3931:2:0;6973:304;6871:413;;;:::o;2556:148::-;2136:12;:10;:12::i;:::-;2126:6;;-1:-1:-1;;;;;2126:6:0;;;:22;;;2118:67;;;;;-1:-1:-1;;;2118:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:1:::1;2647:6:::0;;2626:40:::1;::::0;-1:-1:-1;;;;;2647:6:0;;::::1;::::0;2626:40:::1;::::0;2663:1;;2626:40:::1;2694:1;2677:19:::0;;-1:-1:-1;;;;;;2677:19:0::1;::::0;;2556:148::o;15806:877::-;2136:12;:10;:12::i;:::-;2126:6;;-1:-1:-1;;;;;2126:6:0;;;:22;;;2118:67;;;;;-1:-1:-1;;;2118:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3786:37;15907:9;:17:::1;:22:::0;15899:54:::1;;;::::0;;-1:-1:-1;;;15899:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15899:54:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;15985:15:0::1;:29:::0;15972:42;::::1;;15964:74;;;::::0;;-1:-1:-1;;;15964:74:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15964:74:0;;;;;;;;;;;;;::::1;;16057:18;::::0;;;:7:::1;:18;::::0;;;;;:23;16049:73:::1;;;;-1:-1:-1::0;;;16049:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16167:15;16155:9;:27;16133:135;;;;-1:-1:-1::0;;;16133:135:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;16309:17:0;;16281::::1;16301:26:::0;;;:7:::1;:26;::::0;;;;;16346:13;16338:82:::1;;;;-1:-1:-1::0;;;16338:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16473:2;16461:9:::0;:14:::1;16453:5;:22;:48;;;;;16487:9;16499:2;16487:14;16479:5;:22;16453:48;16431:147;;;;-1:-1:-1::0;;;16431:147:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16591:18;::::0;;;:7:::1;:18;::::0;;;;;;;;:26;;;16633:42;;;;;;;::::1;::::0;;;16658:16:::1;16633:42:::0;;;;;;::::1;::::0;;;;;;;::::1;2196:1;15806:877:::0;;:::o;4367:38::-;;;:::o;1914:79::-;1952:7;1979:6;-1:-1:-1;;;;;1979:6:0;1914:79;:::o;7622:683::-;7706:7;-1:-1:-1;;7742:15:0;:40;7730:52;;;:84;;;7799:15;7786:9;:28;;7730:84;7726:572;;;-1:-1:-1;7838:22:0;7831:29;;7726:572;7882:18;;;;:7;:18;;;;;;:23;7878:420;;7957:23;;7944:9;:36;:128;;;;-1:-1:-1;;;8013:15:0;:59;8001:71;;7944:128;7922:308;;;-1:-1:-1;8114:26:0;;8143:1;8114:30;8107:37;;4507:20;;;;;;;;;;;;;;;-1:-1:-1;;4507:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5755:780::-;5823:7;3984:10;6034:15;:34;6022:9;:46;:401;;;-1:-1:-1;;;6233:15:0;:40;6220:53;;;;;:145;;-1:-1:-1;;;6306:15:0;:59;6294:71;;6220:145;:202;;;;;6399:23;;6386:9;:36;6220:202;5915:613;;;-1:-1:-1;6457:1:0;6450:8;;5915:613;-1:-1:-1;6498:18:0;;;;:7;:18;;;;;;6491:25;;10720:1555;-1:-1:-1;;11032:15:0;:40;11019:53;;;10997:137;;;;-1:-1:-1;;;10997:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11179:15;11167:9;:27;11145:150;;;;-1:-1:-1;;;11145:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11306:24;11369:18;;;:7;:18;;;;;;11333:21;;11369:23;11365:371;;11448:23;;11435:9;:36;:132;;;;-1:-1:-1;;;11508:15:0;:59;11496:71;;11435:132;11409:255;;;;-1:-1:-1;;;11409:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11698:26:0;;11365:371;11746:23;11785:274;11825:9;11853:16;11888:9;11785:274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11785:274:0;;;;;;;;;;;-1:-1:-1;11916:5:0;;11785:274;;;;11916:5;;11785:274;11916:5;11785:274;;;;;;;;;-1:-1:-1;;11785:274:0;;;;;;;;;;;-1:-1:-1;11940:5:0;;11785:274;;;;11940:5;;11785:274;11940:5;11785:274;;;;;;;;;-1:-1:-1;11964:7:0;;-1:-1:-1;11990:15:0;;-1:-1:-1;12024:20:0;11785:21;:274::i;:::-;11746:313;-1:-1:-1;;;12086:15:0;:59;12074:71;;12070:198;;;12162:23;:35;;;12212:26;:44;;;10720:1555;;;;;;;:::o;2859:244::-;2136:12;:10;:12::i;:::-;2126:6;;-1:-1:-1;;;;;2126:6:0;;;:22;;;2118:67;;;;;-1:-1:-1;;;2118:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2948:22:0;::::1;2940:73;;;;-1:-1:-1::0;;;2940:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3050:6;::::0;;3029:38:::1;::::0;-1:-1:-1;;;;;3029:38:0;;::::1;::::0;3050:6;::::1;::::0;3029:38:::1;::::0;::::1;3078:6;:17:::0;;-1:-1:-1;;;;;;3078:17:0::1;-1:-1:-1::0;;;;;3078:17:0;;;::::1;::::0;;;::::1;::::0;;2859:244::o;4412:40::-;;;:::o;13086:2547::-;13444:20;3786:37;13485:9;:17;:22;13477:54;;;;;-1:-1:-1;;;13477:54:0;;;;;;;;;;;;-1:-1:-1;;;13477:54:0;;;;;;;;;;;;;;;-1:-1:-1;13619:6:0;13595:30;;;;;;;;-1:-1:-1;;13595:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13557:1;;;;13595:21;;:30;;13619:6;13595:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13595:30:0;;-1:-1:-1;;;;;13661:17:0;;;-1:-1:-1;13706:1:0;;-1:-1:-1;13649:9:0;13718:1533;3699:2;13738:1;:22;13718:1533;;;3637:9;13782:21;;;;14001:9;4211:18;14013:9;14023:1;14013:12;;;;;;;;;;;:25;;-1:-1:-1;14057:6:0;14053:117;;14094:1;14084:11;;;;14126:1;14114:13;;;;;14146:8;;;14053:117;15063:6;-1:-1:-1;;;;;14494:575:0;:565;14816:1;14819:7;14828:1;14795:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14795:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14674:187;;;;;;14562:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14526:385;;;;;;14940:7;15001:5;15007:1;15001:8;;;;;;;;;;;15032:5;15038:1;15032:8;;;;;;;;;;;14494:565;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14494:575:0;;14468:654;;;;;-1:-1:-1;;;14468:654:0;;;;;;;;;;;;-1:-1:-1;;;14468:654:0;;;;;;;;;;;;;;;15238:1;15226:13;;;;;15178:1;15194:17;;;;15144:10;;15137:17;;;;;13718:1533;13762:3;;13718:1533;;;;15284:16;15269:12;:31;15261:91;;;;-1:-1:-1;;;15261:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15376:1;15367:6;:10;15363:118;;;15467:1;15458:6;:10;4211:18;15402:9;15433:6;3699:2;15412:27;15402:38;;;;;;;;;;;:51;15401:68;15394:75;;;;15363:118;15491:15;3699:2;4162:4;15510:16;;15509:39;15491:57;;15572:7;15559;:10;15567:1;15559:10;;;;;;;;;;;:20;;;;15595:30;15602:1;15605:7;15614:10;15595:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13086:2547;;;;;;;;;;;;;;;:::o;543:106::-;631:10;543:106;:::o

Swarm Source

ipfs://39f922264218a1e288d8b8f38393c4b95cfa232074dc3cb8039bf71fa8661aad
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.