Contract Overview
Latest 25 from a total of 30377 transactions
Contract Name:
ShadowAggregator
Compiler Version
v0.6.6+commit.6c089d02
// File: contracts/src/v0.6/vendor/SafeMathChainlink.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMathChainlink { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: contracts/src/v0.6/interfaces/AggregatorV3Interface.sol pragma solidity ^0.6.0; interface AggregatorV3Interface { function decimals() external view returns ( uint8 ); function description() external view returns ( string memory ); function version() external view returns ( uint256 ); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } // File: contracts/src/v0.6/vendor/Ownable.sol pragma solidity ^0.6.0; /** * @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. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. * * This contract has been modified to remove the revokeOwnership function */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @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(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/src/v0.6/ShadowAggregator.sol pragma solidity 0.6.6; /** * @title The Prepaid Aggregator contract * @notice Handles aggregating data pushed in from off-chain. Oracles' submissions are gathered in * rounds, with each round aggregating the submissions for each oracle into a * single answer. The latest aggregated answer is exposed as well as historical * answers and their updated at timestamp. */ contract ShadowAggregator is AggregatorV3Interface, Ownable { using SafeMathChainlink for uint256; enum Role{Unset, Transmitter, Signer} struct Round { int256 answer; uint256 startedAt; uint256 updatedAt; uint80 answeredInRound; } struct Oracle { uint16 index; Role role; } AggregatorV3Interface public aggregator; uint8 private dcls; string private desc; address public originAggregator; uint256 constant private MAX_ORACLE_COUNT = 31; uint80 constant private ROUND_MAX = 2**80-1; uint40 internal latestEpochAndRound; uint80 public latestRoundId; bytes16 public configDigest; uint32 public configCount; mapping(uint80 => Round) internal rounds; mapping(address => Oracle) public oracles; address[] private signers; address[] private transmitters; event SubmissionReceived( int256 indexed submission, uint80 indexed round, address indexed oracle ); constructor( address _origin, uint8 _decimals, string memory _description ) public { originAggregator = _origin; dcls = _decimals; desc = _description; } function decimals() external override view returns (uint8) { AggregatorV3Interface aggr = aggregator; if (address(aggr) != address(0)) { return aggr.decimals(); } return dcls; } function description() external override view returns (string memory) { AggregatorV3Interface aggr = aggregator; if (address(aggr) != address(0)) { return aggr.description(); } return desc; } function version() external override view returns (uint256) { AggregatorV3Interface aggr = aggregator; if (address(aggr) != address(0)) { return aggr.version(); } return 4; } function setConfigCount(uint32 _count) external onlyOwner { configCount = _count; } function setAggregator(AggregatorV3Interface _aggregator) external onlyOwner { aggregator = _aggregator; } /** * @notice sets offchain reporting protocol configuration incl. participating oracles * @param _signers addresses with which oracles sign the reports * @param _transmitters addresses oracles use to transmit the reports * @param _threshold number of faulty oracles the system can tolerate * @param _encodedConfigVersion version number for offchainEncoding schema * @param _encoded encoded off-chain oracle configuration */ function setConfig( address[] calldata _signers, address[] calldata _transmitters, uint8 _threshold, uint64 _encodedConfigVersion, bytes calldata _encoded ) external onlyOwner() { while (signers.length != 0) { // remove any old signer/transmitter addresses uint lastIdx = signers.length - 1; address signer = signers[lastIdx]; address transmitter = transmitters[lastIdx]; delete oracles[signer]; delete oracles[transmitter]; signers.pop(); transmitters.pop(); } for (uint i = 0; i < _signers.length; i++) { // add new signer/transmitter addresses require( oracles[_signers[i]].role == Role.Unset, "repeated signer address" ); oracles[_signers[i]] = Oracle(uint8(i), Role.Signer); require( oracles[_transmitters[i]].role == Role.Unset, "repeated transmitter address" ); oracles[_transmitters[i]] = Oracle(uint8(i), Role.Transmitter); signers.push(_signers[i]); transmitters.push(_transmitters[i]); } configCount += 1; configDigest = configDigestFromConfigData( originAggregator, configCount, _signers, _transmitters, _threshold, _encodedConfigVersion, _encoded ); latestEpochAndRound = 0; } function configDigestFromConfigData( address _contractAddress, uint64 _configCount, address[] memory _signers, address[] memory _transmitters, uint8 _threshold, uint64 _encodedConfigVersion, bytes memory _encodedConfig ) internal pure returns (bytes16) { return bytes16(keccak256(abi.encode(_contractAddress, _configCount, _signers, _transmitters, _threshold, _encodedConfigVersion, _encodedConfig ))); } /** * @notice called by oracles when they have witnessed a need to update * @param _report is the observations * @param _rs is the r of oracles * @param _ss is the s of oracles * @param _rawVs is the v of oracles */ function submit( bytes calldata _report, bytes32[] calldata _rs, bytes32[] calldata _ss, bytes32 _rawVs ) external { require(_rs.length == _ss.length, "signatures out of registration"); require(_rs.length <= MAX_ORACLE_COUNT, "too many signatures"); { bytes32 h = keccak256(_report); bool[MAX_ORACLE_COUNT] memory signed; Oracle memory oracle; for (uint i = 0; i < _rs.length; i++) { address signer = ecrecover(h, uint8(_rawVs[i])+27, _rs[i], _ss[i]); oracle = oracles[signer]; require(oracle.role == Role.Signer, "not an active oracle"); require(!signed[oracle.index], "non-unique signature"); signed[oracle.index] = true; } } (bytes32 rawReportContext, bytes32 rawObservers, int192[] memory observations) = abi.decode(_report, (bytes32, bytes32, int192[])); require(bytes16(rawReportContext << 88) == configDigest, "config digest mismatch"); uint40 epochAndRound = uint40(uint256(rawReportContext)); require(latestEpochAndRound < epochAndRound, "stale report"); bytes memory observers = new bytes(observations.length); { bool[MAX_ORACLE_COUNT] memory seen; for (uint8 i = 0; i < observations.length; i++) { uint8 observerIdx = uint8(rawObservers[i]); require(!seen[observerIdx], "duplicate observer index"); seen[observerIdx] = true; observers[i] = rawObservers[i]; } } for (uint8 i = 0; i < observations.length - 1; i++) { bool inOrder = observations[i] <= observations[i+1]; require(inOrder, "observations not sorted"); } int192 median = observations[observations.length/2]; uint80 rid = latestRoundId + 1; rounds[rid].answer = median; rounds[rid].startedAt = block.timestamp; rounds[rid].updatedAt = block.timestamp; rounds[rid].answeredInRound = rid; latestRoundId = rid; latestEpochAndRound = epochAndRound; } function oracleCount() public view returns (uint8) { return uint8(signers.length); } function getOracles() external view returns (address[] memory) { return signers; } function getRoundData(uint80 _roundId) public view virtual override returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { AggregatorV3Interface aggr = aggregator; if (address(aggr) != address(0)) { return aggr.getRoundData(_roundId); } Round memory r = rounds[uint64(_roundId)]; require(r.answeredInRound > 0 && _roundId <= ROUND_MAX, "No data present"); return ( _roundId, r.answer, r.startedAt, r.updatedAt, r.answeredInRound ); } function latestRoundData() public view virtual override returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ) { AggregatorV3Interface aggr = aggregator; if (address(aggr) != address(0)) { return aggr.latestRoundData(); } return getRoundData(latestRoundId); } }
[{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"string","name":"_description","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":true,"internalType":"int256","name":"submission","type":"int256"},{"indexed":true,"internalType":"uint80","name":"round","type":"uint80"},{"indexed":true,"internalType":"address","name":"oracle","type":"address"}],"name":"SubmissionReceived","type":"event"},{"inputs":[],"name":"aggregator","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"configDigest","outputs":[{"internalType":"bytes16","name":"","type":"bytes16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracles","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundId","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oracles","outputs":[{"internalType":"uint16","name":"index","type":"uint16"},{"internalType":"enum ShadowAggregator.Role","name":"role","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originAggregator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract AggregatorV3Interface","name":"_aggregator","type":"address"}],"name":"setAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address[]","name":"_transmitters","type":"address[]"},{"internalType":"uint8","name":"_threshold","type":"uint8"},{"internalType":"uint64","name":"_encodedConfigVersion","type":"uint64"},{"internalType":"bytes","name":"_encoded","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_count","type":"uint32"}],"name":"setConfigCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_report","type":"bytes"},{"internalType":"bytes32[]","name":"_rs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_ss","type":"bytes32[]"},{"internalType":"bytes32","name":"_rawVs","type":"bytes32"}],"name":"submit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506004361061012c5760003560e01c80638f32d59b116100ad578063ac540d4011610071578063ac540d4014610597578063addd5099146105bc578063f2fde38b14610611578063f9120af614610637578063feaf968c1461065d5761012c565b80638f32d59b146103c75780639a6fc8f5146103e35780639e787f0b14610445578063a062063414610553578063a483bd99146105745761012c565b806354fd4d50116100f457806354fd4d50146101f7578063585aa7de14610211578063613d8fcc1461033a5780637284e416146103425780638da5cb5b146103bf5761012c565b806311a8f413146101315780631378256a14610155578063245a7bfc14610179578063313ce5671461018157806340884c521461019f575b600080fd5b610139610665565b604080516001600160501b039092168252519081900360200190f35b61015d610674565b604080516001600160a01b039092168252519081900360200190f35b61015d610683565b610189610692565b6040805160ff9092168252519081900360200190f35b6101a7610728565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101e35781810151838201526020016101cb565b505050509050019250505060405180910390f35b6101ff61078a565b60408051918252519081900360200190f35b610338600480360360a081101561022757600080fd5b810190602081018135600160201b81111561024157600080fd5b82018360208201111561025357600080fd5b803590602001918460208302840111600160201b8311171561027457600080fd5b919390929091602081019035600160201b81111561029157600080fd5b8201836020820111156102a357600080fd5b803590602001918460208302840111600160201b831117156102c457600080fd5b9193909260ff8335169267ffffffffffffffff602082013516929190606081019060400135600160201b8111156102fa57600080fd5b82018360208201111561030c57600080fd5b803590602001918460018302840111600160201b8311171561032d57600080fd5b5090925090506107e0565b005b610189610d30565b61034a610d36565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038457818101518382015260200161036c565b50505050905090810190601f1680156103b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61015d610f05565b6103cf610f14565b604080519115158252519081900360200190f35b610409600480360360208110156103f957600080fd5b50356001600160501b0316610f25565b604080516001600160501b0396871681526020810195909552848101939093526060840191909152909216608082015290519081900360a00190f35b6103386004803603608081101561045b57600080fd5b810190602081018135600160201b81111561047557600080fd5b82018360208201111561048757600080fd5b803590602001918460018302840111600160201b831117156104a857600080fd5b919390929091602081019035600160201b8111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460208302840111600160201b831117156104f857600080fd5b919390929091602081019035600160201b81111561051557600080fd5b82018360208201111561052757600080fd5b803590602001918460208302840111600160201b8311171561054857600080fd5b9193509150356110cc565b61055b611793565b6040805163ffffffff9092168252519081900360200190f35b6103386004803603602081101561058a57600080fd5b503563ffffffff166117a6565b61059f611813565b604080516001600160801b03199092168252519081900360200190f35b6105e2600480360360208110156105d257600080fd5b50356001600160a01b0316611823565b60405161ffff83168152602081018260028111156105fc57fe5b60ff1681526020019250505060405180910390f35b6103386004803603602081101561062757600080fd5b50356001600160a01b0316611844565b6103386004803603602081101561064d57600080fd5b50356001600160a01b0316611897565b610409611900565b6004546001600160501b031681565b6003546001600160a01b031681565b6001546001600160a01b031681565b6001546000906001600160a01b0316801561071557806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e057600080fd5b505afa1580156106f4573d6000803e3d6000fd5b505050506040513d602081101561070a57600080fd5b505191506107259050565b5050600154600160a01b900460ff165b90565b6060600780548060200260200160405190810160405280929190818152602001828054801561078057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610762575b5050505050905090565b6001546000906001600160a01b031680156107d857806001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e057600080fd5b600491505090565b6107e8610f14565b610827576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b6007541561091657600780546000198101916000918390811061084657fe5b6000918252602082200154600880546001600160a01b039092169350908490811061086d57fe5b60009182526020808320909101546001600160a01b03858116845260069092526040808420805462ffffff19908116909155929091168084529220805490911690556007805491925090806108be57fe5b600082815260209020810160001990810180546001600160a01b031916905501905560088054806108eb57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550610827915050565b60005b87811015610bfe576000600660008b8b8581811061093357fe5b602090810292909201356001600160a01b03168352508101919091526040016000205462010000900460ff16600281111561096a57fe5b146109bc576040805162461bcd60e51b815260206004820152601760248201527f7265706561746564207369676e65722061646472657373000000000000000000604482015290519081900360640190fd5b6040805180820190915260ff8216815260026020820152600660008b8b858181106109e357fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815461ffff191661ffff90911617808255918301519091829062ff0000191662010000836002811115610a3757fe5b021790555060009150610a479050565b60066000898985818110610a5757fe5b602090810292909201356001600160a01b03168352508101919091526040016000205462010000900460ff166002811115610a8e57fe5b14610ae0576040805162461bcd60e51b815260206004820152601c60248201527f7265706561746564207472616e736d6974746572206164647265737300000000604482015290519081900360640190fd5b6040805180820190915260ff821681526001602082015260066000898985818110610b0757fe5b602090810292909201356001600160a01b0316835250818101929092526040016000208251815461ffff191661ffff90911617808255918301519091829062ff0000191662010000836002811115610b5b57fe5b02179055509050506007898983818110610b7157fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b0395909202939093013593909316929092179055506008878783818110610bbb57fe5b835460018181018655600095865260209586902090910180546001600160a01b0319166001600160a01b0396909302949094013594909416179091555001610919565b506004805463ffffffff600160d01b80830482166001018216810263ffffffff60d01b199093169290921792839055600354604080516020808e0282810182019093528d8252610ce7966001600160a01b039094169590930490931692918d918d9182919085019084908082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525050604080516020601f8b018190048102820181019092528981528c93508b9250908a908a90819084018382808284376000920191909152506119d492505050565b6004805460809290921c600160501b026fffffffffffffffffffffffffffffffff60501b1990921691909117905550506003805464ffffffffff60a01b19169055505050505050565b60075490565b6001546060906001600160a01b03168015610e7757806001600160a01b0316637284e4166040518163ffffffff1660e01b815260040160006040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610dc157600080fd5b8101908080516040519392919084600160201b821115610de057600080fd5b908301906020820185811115610df557600080fd5b8251600160201b811182820188101715610e0e57600080fd5b82525081516020918201929091019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b50604052505050915050610725565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610efa5780601f10610ecf57610100808354040283529160200191610efa565b820191906000526020600020905b815481529060010190602001808311610edd57829003601f168201915b505050505091505090565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60015460009081908190819081906001600160a01b03168015610fe75760408051639a6fc8f560e01b81526001600160501b038916600482015290516001600160a01b03831691639a6fc8f59160248083019260a0929190829003018186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d60a0811015610fbb57600080fd5b508051602082015160408301516060840151608090940151929950909750955090935091506110c39050565b610fef611bf8565b5067ffffffffffffffff87166000908152600560209081526040918290208251608081018452815481526001820154928101929092526002810154928201929092526003909101546001600160501b0316606082018190521580159061105e57506001600160501b0388811611155b6110a1576040805162461bcd60e51b815260206004820152600f60248201526e139bc819185d18481c1c995cd95b9d608a1b604482015290519081900360640190fd5b8781600001518260200151836040015184606001519650965096509650965050505b91939590929450565b838214611120576040805162461bcd60e51b815260206004820152601e60248201527f7369676e617475726573206f7574206f6620726567697374726174696f6e0000604482015290519081900360640190fd5b601f84111561116c576040805162461bcd60e51b8152602060048201526013602482015272746f6f206d616e79207369676e61747572657360681b604482015290519081900360640190fd5b6000878760405180838380828437604051920182900390912094506111959350611c2992505050565b61119d611c48565b60005b878110156113815760006001858784602081106111b957fe5b1a601b018c8c868181106111c957fe5b905060200201358b8b878181106111dc57fe5b9050602002013560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561123a573d6000803e3d6000fd5b505060408051601f198101516001600160a01b03811660009081526006602090815290849020838501909452835461ffff811684529195509193509083019062010000900460ff16600281111561128d57fe5b600281111561129857fe5b90525092506002836020015160028111156112af57fe5b146112f8576040805162461bcd60e51b81526020600482015260146024820152736e6f7420616e20616374697665206f7261636c6560601b604482015290519081900360640190fd5b8251849061ffff16601f811061130a57fe5b602002015115611358576040805162461bcd60e51b81526020600482015260146024820152736e6f6e2d756e69717565207369676e617475726560601b604482015290519081900360640190fd5b600184846000015161ffff16601f811061136e57fe5b91151560209092020152506001016111a0565b5050505060008060608989606081101561139a57600080fd5b813591602081013591810190606081016040820135600160201b8111156113c057600080fd5b8201836020820111156113d257600080fd5b803590602001918460208302840111600160201b831117156113f357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600454979a5095985090965050505050605885901b6001600160801b0319908116600160501b90930460801b169190911490506114a1576040805162461bcd60e51b81526020600482015260166024820152750c6dedcccd2ce40c8d2cecae6e840dad2e6dac2e8c6d60531b604482015290519081900360640190fd5b600354839064ffffffffff808316600160a01b90920416106114f9576040805162461bcd60e51b815260206004820152600c60248201526b1cdd185b19481c995c1bdc9d60a21b604482015290519081900360640190fd5b6060825167ffffffffffffffff8111801561151357600080fd5b506040519080825280601f01601f19166020018201604052801561153e576020820181803683370190505b509050611549611c29565b60005b84518160ff16101561162f576000868260ff166020811061156957fe5b1a90508281601f811061157857fe5b6020020151156115cf576040805162461bcd60e51b815260206004820152601860248201527f6475706c6963617465206f6273657276657220696e6465780000000000000000604482015290519081900360640190fd5b6001838260ff16601f81106115e057fe5b91151560209283029190910152879060ff84169081106115fc57fe5b1a60f81b848360ff168151811061160f57fe5b60200101906001600160f81b031916908160001a9053505060010161154c565b50600090505b60018451038160ff1610156116dc576000848260010160ff168151811061165857fe5b602002602001015160170b858360ff168151811061167257fe5b602002602001015160170b13159050806116d3576040805162461bcd60e51b815260206004820152601760248201527f6f62736572766174696f6e73206e6f7420736f72746564000000000000000000604482015290519081900360640190fd5b50600101611635565b5060008360028551816116eb57fe5b04815181106116f657fe5b602090810291909101810151600480546001600160501b03908116600190810190911660008181526005909552604090942060179390930b83554290830181905560028301556003918201805469ffffffffffffffffffff199081168517909155815416909217909155805464ffffffffff909416600160a01b0264ffffffffff60a01b1990941693909317909255505050505050505050505050565b600454600160d01b900463ffffffff1681565b6117ae610f14565b6117ed576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b6004805463ffffffff909216600160d01b0263ffffffff60d01b19909216919091179055565b600454600160501b900460801b81565b60066020526000908152604090205461ffff81169062010000900460ff1682565b61184c610f14565b61188b576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b61189481611b58565b50565b61189f610f14565b6118de576040805162461bcd60e51b81526020600482018190526024820152600080516020611c86833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460009081908190819081906001600160a01b031680156119ac57806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561195657600080fd5b505afa15801561196a573d6000803e3d6000fd5b505050506040513d60a081101561198057600080fd5b508051602082015160408301516060840151608090940151929950909750955090935091506119cd9050565b6004546119c1906001600160501b0316610f25565b95509550955095509550505b9091929394565b60008787878787878760405160200180886001600160a01b03166001600160a01b031681526020018767ffffffffffffffff1667ffffffffffffffff16815260200180602001806020018660ff1660ff1681526020018567ffffffffffffffff1667ffffffffffffffff16815260200180602001848103845289818151815260200191508051906020019060200280838360005b83811015611a80578181015183820152602001611a68565b50505050905001848103835288818151815260200191508051906020019060200280838360005b83811015611abf578181015183820152602001611aa7565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015611afb578181015183820152602001611ae3565b50505050905090810190601f168015611b285780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6001600160a01b038116611b9d5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c606026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b604051806080016040528060008152602001600081526020016000815260200160006001600160501b031681525090565b604051806103e00160405280601f906020820280368337509192915050565b60408051808201909152600080825260208201529056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220ab240f6912afb93813b1c6b17b5a2cd021f7111f45b01f7ecf3447ac4f19fa5664736f6c63430006060033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for
interesting conversations.