Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
BFHApprovalProxyV1
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-06-30 */ // Sources flattened with hardhat v2.0.10 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts3/roles/Roles.sol pragma solidity ^0.8.0; library Roles { struct Role { mapping(address => bool) bearer; } function add(Role storage role, address account) internal { require(!has(role, account), "role already has the account"); role.bearer[account] = true; } function remove(Role storage role, address account) internal { require(has(role, account), "role dosen't have the account"); role.bearer[account] = false; } function has(Role storage role, address account) internal view returns (bool) { return role.bearer[account]; } } // File contracts3/roles/ERC173.sol pragma solidity ^0.8.0; //import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; /// @title ERC-173 Contract Ownership Standard /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-173.md /// Note: the ERC-165 identifier for this interface is 0x7f5828d0 /* is ERC165 */ interface IERC173 { /// @dev This emits when ownership of a contract changes. event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @notice Get the address of the owner /// @return The address of the owner. function owner() external view returns (address); /// @notice Set the address of the new owner of the contract /// @param _newOwner The address of the new owner of the contract function transferOwnership(address _newOwner) external; } abstract contract ERC173 is IERC173 { address private _owner; constructor() { //_registerInterface(0x7f5828d0); _transferOwnership(msg.sender); } modifier onlyOwner() { require(msg.sender == owner(), "Must be owner"); _; } function owner() public view override returns (address) { return _owner; } function transferOwnership(address _newOwner) public virtual override onlyOwner() { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { address previousOwner = owner(); _owner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } } // File contracts3/roles/Operatable.sol pragma solidity ^0.8.0; abstract contract Operatable is ERC173 { using Roles for Roles.Role; event OperatorAdded(address indexed account); event OperatorRemoved(address indexed account); event Paused(address account); event Unpaused(address account); bool private _paused; Roles.Role private operators; constructor() { operators.add(msg.sender); _paused = false; } modifier onlyOperator() { require(isOperator(msg.sender), "Must be operator"); _; } modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } function transferOwnership(address _newOwner) public override onlyOperator() { _transferOwnership(_newOwner); } function isOperator(address account) public view returns (bool) { return operators.has(account); } function addOperator(address account) public onlyOperator() { operators.add(account); emit OperatorAdded(account); } function removeOperator(address account) public onlyOperator() { operators.remove(account); emit OperatorRemoved(account); } function paused() public view returns (bool) { return _paused; } function pause() public onlyOperator() whenNotPaused() { _paused = true; emit Paused(msg.sender); } function unpause() public onlyOperator() whenPaused() { _paused = false; emit Unpaused(msg.sender); } } // File contracts3/IApprovalProxy.sol pragma solidity ^0.8.0; interface IApprovalProxy { function setApprovalForAll(address _owner, address _spender, bool _approved) external; function isApprovedForAll(address _owner, address _spender, bool _original) external view returns (bool); } // File contracts3/BFHApprovalProxyV1.sol pragma solidity ^0.8.0; contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; function set(address _owner, address _spender) external { proxies[_owner] = OwnableDelegateProxy(_spender); } } contract BFHApprovalProxyV1 is IApprovalProxy, Operatable { using Address for address; using Roles for Roles.Role; Roles.Role private approvableContracts; Roles.Role private preapprovedContracts; mapping (address => mapping (address => bool)) private _expresslyNotApprovalSpender; mapping (address => mapping (address => bool)) private _contractApprovals; ProxyRegistry public openSeaProxyRegistry; mapping (address => bool) private openSeaDisabled; event UpdateApprovableContracts (address spender, bool approved); event UpdatePreapprovedContracts (address spender, bool approved); modifier onlyContract(address _spender) { require(_spender.isContract(), "_spender must be contract"); _; } constructor() {} function setApprovalForAll(address _owner, address _spender, bool _approved) override public onlyContract(_spender) onlyOperator() { require(isApprovableContract(_spender), "_spender must belong to approvable role"); _expresslyNotApprovalSpender[_owner][_spender] = !_approved; } function isApprovedForAll(address _owner, address _spender, bool _original) override public view returns (bool) { if (approvalToOpenSea(_owner, _spender)) { return true; } if (_spender.isContract()) { if (!isApprovableContract(_spender)) { return false; } if (isPreapprovedContract(_spender)) { return !_expresslyNotApprovalSpender[_owner][_spender]; } } return _original; } // OpenSea function setOpenSeaProxyRegistry(address _openSeaProxyRegistry) public onlyOperator() { openSeaProxyRegistry = ProxyRegistry(_openSeaProxyRegistry); } function enableOpenSea() public { openSeaDisabled[msg.sender] = false; } function disableOpenSea() public { openSeaDisabled[msg.sender] = true; } function getOpenSeaSpender(address _owner) public view returns (address) { return address(openSeaProxyRegistry.proxies(_owner)); } function approvalToOpenSea(address _owner, address _spender) public view returns (bool) { if (address(openSeaProxyRegistry) == address(0x0)) { return false; } if (openSeaDisabled[_owner]) { return false; } return (getOpenSeaSpender(_owner) == _spender); } // Approvable list function setApprovableContracts(address _spender, bool _approvable) public onlyOperator() onlyContract(_spender) { emit UpdateApprovableContracts(_spender, _approvable); if (_approvable) { approvableContracts.add(_spender); } else { require(!isPreapprovedContract(_spender), "_spender must not be preapproval"); approvableContracts.remove(_spender); } } function isApprovableContract(address _spender) public view returns (bool) { return approvableContracts.has(_spender); } function setPreapprovedContracts(address _spender, bool _approval) public onlyOperator() onlyContract(_spender) { require(isApprovableContract(_spender), "_spender must not be approvable"); emit UpdatePreapprovedContracts(_spender, _approval); if (_approval) { preapprovedContracts.add(_spender); } else { preapprovedContracts.remove(_spender); } } function isPreapprovedContract(address _spender) public view returns (bool) { return preapprovedContracts.has(_spender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorRemoved","type":"event"},{"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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"UpdateApprovableContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"UpdatePreapprovedContracts","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"approvalToOpenSea","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOpenSeaSpender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"isApprovableContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_original","type":"bool"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"}],"name":"isPreapprovedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSeaProxyRegistry","outputs":[{"internalType":"contract ProxyRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approvable","type":"bool"}],"name":"setApprovableContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_openSeaProxyRegistry","type":"address"}],"name":"setOpenSeaProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approval","type":"bool"}],"name":"setPreapprovedContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a33610044565b61003233600161009f60201b61095f1790919060201c565b6000805460ff60a01b19169055610159565b600061004e6100f4565b600080546001600160a01b0319166001600160a01b0385811691821783556040519394509092908416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6100a98282610103565b156100cf5760405162461bcd60e51b81526004016100c690610122565b60405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000546001600160a01b031690565b6001600160a01b03166000908152602091909152604090205460ff1690565b6020808252601c908201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604082015260600190565b610dcc806101686000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806389f69dba116100ad578063ac8a584a11610071578063ac8a584a14610231578063cf10ef2d14610244578063d3b805d814610257578063f2fde38b1461026a578063f8c0c9161461027d5761012c565b806389f69dba146101dd5780638da5cb5b146101f05780638dccfc52146101f85780639870d7fe1461020b578063a4d925f11461021e5761012c565b80635c975abb116100f45780635c975abb1461019f5780635e6241b2146101a75780636025b389146101ba5780636d70f7ae146101c25780638456cb59146101d55761012c565b8063171b5b6a14610131578063367605ca146101465780633f4ba83a146101595780635025b548146101615780635b620bd31461017f575b600080fd5b61014461013f366004610b1d565b610285565b005b610144610154366004610ad7565b610366565b610144610419565b6101696104ae565b6040516101769190610b6d565b60405180910390f35b61019261018d366004610a83565b6104bd565b6040516101769190610b9c565b6101926104d2565b6101926101b5366004610a9f565b6104e2565b61014461054c565b6101926101d0366004610a83565b610565565b610144610572565b6101446101eb366004610b1d565b610604565b6101696106d3565b610192610206366004610ad7565b6106e2565b610144610219366004610a83565b61076f565b61014461022c366004610a83565b6107d6565b61014461023f366004610a83565b61081d565b610192610252366004610a83565b610884565b610169610265366004610a83565b610891565b610144610278366004610a83565b610912565b610144610943565b61028e33610565565b6102b35760405162461bcd60e51b81526004016102aa90610bd5565b60405180910390fd5b816102c6816001600160a01b03166109ab565b6102e25760405162461bcd60e51b81526004016102aa90610bff565b6102eb83610884565b6103075760405162461bcd60e51b81526004016102aa90610d13565b7f41243044fceb8e758713bc0c30e27030c46b1979b7e6936d996d00f840f03d8f8383604051610338929190610b81565b60405180910390a181156103565761035160038461095f565b610361565b6103616003846109b1565b505050565b81610379816001600160a01b03166109ab565b6103955760405162461bcd60e51b81526004016102aa90610bff565b61039e33610565565b6103ba5760405162461bcd60e51b81526004016102aa90610bd5565b6103c383610884565b6103df5760405162461bcd60e51b81526004016102aa90610c36565b506001600160a01b03928316600090815260046020908152604080832094909516825292909252919020805460ff19169115919091179055565b61042233610565565b61043e5760405162461bcd60e51b81526004016102aa90610bd5565b600054600160a01b900460ff166104675760405162461bcd60e51b81526004016102aa90610ba7565b6000805460ff60a01b191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906104a4903390610b6d565b60405180910390a1565b6006546001600160a01b031681565b60006104ca6003836109f9565b90505b919050565b600054600160a01b900460ff1690565b6006546000906001600160a01b03166104fd57506000610546565b6001600160a01b03831660009081526007602052604090205460ff161561052657506000610546565b816001600160a01b031661053984610891565b6001600160a01b03161490505b92915050565b336000908152600760205260409020805460ff19169055565b60006104ca6001836109f9565b61057b33610565565b6105975760405162461bcd60e51b81526004016102aa90610bd5565b600054600160a01b900460ff16156105c15760405162461bcd60e51b81526004016102aa90610c7d565b6000805460ff60a01b1916600160a01b1790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906104a4903390610b6d565b61060d33610565565b6106295760405162461bcd60e51b81526004016102aa90610bd5565b8161063c816001600160a01b03166109ab565b6106585760405162461bcd60e51b81526004016102aa90610bff565b7fb27c82517d508b5ef74d0dee84509db8503c954c999cfb72a3a0bd5e002552e78383604051610689929190610b81565b60405180910390a181156106a25761035160028461095f565b6106ab836104bd565b156106c85760405162461bcd60e51b81526004016102aa90610ca7565b6103616002846109b1565b6000546001600160a01b031690565b60006106ee84846104e2565b156106fb57506001610768565b61070d836001600160a01b03166109ab565b156107655761071b83610884565b61072757506000610768565b610730836104bd565b1561076557506001600160a01b0380841660009081526004602090815260408083209386168352929052205460ff1615610768565b50805b9392505050565b61077833610565565b6107945760405162461bcd60e51b81526004016102aa90610bd5565b61079f60018261095f565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b6107df33610565565b6107fb5760405162461bcd60e51b81526004016102aa90610bd5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b61082633610565565b6108425760405162461bcd60e51b81526004016102aa90610bd5565b61084d6001826109b1565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b60006104ca6002836109f9565b60065460405163c455279160e01b81526000916001600160a01b03169063c4552791906108c2908590600401610b6d565b60206040518083038186803b1580156108da57600080fd5b505afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ca9190610b51565b61091b33610565565b6109375760405162461bcd60e51b81526004016102aa90610bd5565b61094081610a18565b50565b336000908152600760205260409020805460ff19166001179055565b61096982826109f9565b156109865760405162461bcd60e51b81526004016102aa90610cdc565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b3b151590565b6109bb82826109f9565b6109d75760405162461bcd60e51b81526004016102aa90610d4a565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b03166000908152602091909152604090205460ff1690565b6000610a226106d3565b600080546001600160a01b0319166001600160a01b0385811691821783556040519394509092908416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b803580151581146104cd57600080fd5b600060208284031215610a94578081fd5b813561076881610d81565b60008060408385031215610ab1578081fd5b8235610abc81610d81565b91506020830135610acc81610d81565b809150509250929050565b600080600060608486031215610aeb578081fd5b8335610af681610d81565b92506020840135610b0681610d81565b9150610b1460408501610a73565b90509250925092565b60008060408385031215610b2f578182fd5b8235610b3a81610d81565b9150610b4860208401610a73565b90509250929050565b600060208284031215610b62578081fd5b815161076881610d81565b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b901515815260200190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b60208082526010908201526f26bab9ba1031329037b832b930ba37b960811b604082015260600190565b60208082526019908201527f5f7370656e646572206d75737420626520636f6e747261637400000000000000604082015260600190565b60208082526027908201527f5f7370656e646572206d7573742062656c6f6e6720746f20617070726f7661626040820152666c6520726f6c6560c81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f5f7370656e646572206d757374206e6f7420626520707265617070726f76616c604082015260600190565b6020808252601c908201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604082015260600190565b6020808252601f908201527f5f7370656e646572206d757374206e6f7420626520617070726f7661626c6500604082015260600190565b6020808252601d908201527f726f6c6520646f73656e2774206861766520746865206163636f756e74000000604082015260600190565b6001600160a01b038116811461094057600080fdfea26469706673582212204f567043562c579ce8d88f6b591b2a6c9136535c3d216a5b4e2c57d03e4ba6f664736f6c63430008010033
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.