Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x42e0357aa61d2593da9b4b58b7f4a527211c917ea4a858d858b4d862214dd176 | 32337738 | 280 days 22 hrs ago | 0x2fd525b8b2e2a69d054dccb033a0e33e0b4ab370 | Contract Creation | 0 MATIC |
[ Download CSV Export ]
Contract Name:
DexManagerFacet
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; import "../Libraries/LibStorage.sol"; import "../Libraries/LibDiamond.sol"; import { InvalidConfig } from "../Errors/GenericErrors.sol"; import { LibAccess } from "../Libraries/LibAccess.sol"; /// @title Dex Manager Facet /// @author LI.FI (https://li.fi) /// @notice Facet contract for managing approved DEXs to be used in swaps. contract DexManagerFacet { /// Events /// event DexAdded(address indexed dexAddress); event DexRemoved(address indexed dexAddress); event FunctionSignatureApprovalChanged(bytes32 indexed functionSignature, bool indexed approved); /// Storage /// LibStorage internal appStorage; /// External Methods /// /// @notice Register the address of a DEX contract to be approved for swapping. /// @param _dex The address of the DEX contract to be approved. function addDex(address _dex) external { if (msg.sender != LibDiamond.contractOwner()) { LibAccess.enforceAccessControl(); } _checkAddress(_dex); mapping(address => bool) storage dexAllowlist = appStorage.dexAllowlist; if (dexAllowlist[_dex]) return; dexAllowlist[_dex] = true; appStorage.dexs.push(_dex); emit DexAdded(_dex); } /// @notice Batch register the addresss of DEX contracts to be approved for swapping. /// @param _dexs The addresses of the DEX contracts to be approved. function batchAddDex(address[] calldata _dexs) external { if (msg.sender != LibDiamond.contractOwner()) { LibAccess.enforceAccessControl(); } mapping(address => bool) storage dexAllowlist = appStorage.dexAllowlist; uint256 length = _dexs.length; for (uint256 i = 0; i < length; i++) { _checkAddress(_dexs[i]); if (dexAllowlist[_dexs[i]]) continue; dexAllowlist[_dexs[i]] = true; appStorage.dexs.push(_dexs[i]); emit DexAdded(_dexs[i]); } } /// @notice Unregister the address of a DEX contract approved for swapping. /// @param _dex The address of the DEX contract to be unregistered. function removeDex(address _dex) external { if (msg.sender != LibDiamond.contractOwner()) { LibAccess.enforceAccessControl(); } _checkAddress(_dex); mapping(address => bool) storage dexAllowlist = appStorage.dexAllowlist; address[] storage storageDexes = appStorage.dexs; if (!dexAllowlist[_dex]) { return; } dexAllowlist[_dex] = false; uint256 length = storageDexes.length; for (uint256 i = 0; i < length; i++) { if (storageDexes[i] == _dex) { _removeDex(i); return; } } } /// @notice Batch unregister the addresses of DEX contracts approved for swapping. /// @param _dexs The addresses of the DEX contracts to be unregistered. function batchRemoveDex(address[] calldata _dexs) external { if (msg.sender != LibDiamond.contractOwner()) { LibAccess.enforceAccessControl(); } mapping(address => bool) storage dexAllowlist = appStorage.dexAllowlist; address[] storage storageDexes = appStorage.dexs; uint256 ilength = _dexs.length; uint256 jlength = storageDexes.length; for (uint256 i = 0; i < ilength; i++) { _checkAddress(_dexs[i]); if (!dexAllowlist[_dexs[i]]) { continue; } dexAllowlist[_dexs[i]] = false; for (uint256 j = 0; j < jlength; j++) { if (storageDexes[j] == _dexs[i]) { _removeDex(j); jlength = storageDexes.length; break; } } } } /// @notice Adds/removes a specific function signature to/from the allowlist /// @param _signature the function signature to allow/disallow /// @param _approval whether the function signature should be allowed function setFunctionApprovalBySignature(bytes32 _signature, bool _approval) external { if (msg.sender != LibDiamond.contractOwner()) { LibAccess.enforceAccessControl(); } appStorage.dexFuncSignatureAllowList[_signature] = _approval; emit FunctionSignatureApprovalChanged(_signature, _approval); } /// @notice Batch Adds/removes a specific function signature to/from the allowlist /// @param _signatures the function signatures to allow/disallow /// @param _approval whether the function signatures should be allowed function batchSetFunctionApprovalBySignature(bytes32[] calldata _signatures, bool _approval) external { if (msg.sender != LibDiamond.contractOwner()) { LibAccess.enforceAccessControl(); } mapping(bytes32 => bool) storage dexFuncSignatureAllowList = appStorage.dexFuncSignatureAllowList; uint256 length = _signatures.length; for (uint256 i = 0; i < length; i++) { bytes32 _signature = _signatures[i]; dexFuncSignatureAllowList[_signature] = _approval; emit FunctionSignatureApprovalChanged(_signature, _approval); } } /// @notice Returns whether a function signature is approved /// @param _signature the function signature to query /// @return approved Approved or not function isFunctionApproved(bytes32 _signature) public view returns (bool approved) { return appStorage.dexFuncSignatureAllowList[_signature]; } /// @notice Returns a list of all approved DEX addresses. /// @return addresses List of approved DEX addresses function approvedDexs() external view returns (address[] memory addresses) { return appStorage.dexs; } /// Private Methods /// /// @dev Contains business logic for removing a DEX address. /// @param index index of the dex to remove function _removeDex(uint256 index) private { address[] storage storageDexes = appStorage.dexs; address toRemove = storageDexes[index]; // Move the last element into the place to delete storageDexes[index] = storageDexes[storageDexes.length - 1]; // Remove the last element storageDexes.pop(); emit DexRemoved(toRemove); } /// @dev Contains business logic for validating a DEX address. /// @param _dex address of the dex to check function _checkAddress(address _dex) private pure { if (_dex == 0x0000000000000000000000000000000000000000) { revert InvalidConfig(); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; struct LibStorage { mapping(address => bool) dexAllowlist; mapping(bytes32 => bool) dexFuncSignatureAllowList; address[] dexs; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; import { IDiamondCut } from "../Interfaces/IDiamondCut.sol"; library LibDiamond { bytes32 internal constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndPosition { address facetAddress; uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint256 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorage { // maps function selector to the facet address and // the position of the selector in the facetFunctionSelectors.selectors array mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; // maps facet addresses to function selectors mapping(address => FacetFunctionSelectors) facetFunctionSelectors; // facet addresses address[] facetAddresses; // Used to query if a contract implements an interface. // Used to implement ERC-165. mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; // solhint-disable-next-line no-inline-assembly assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamondCut.FacetCutAction.Add) { addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Replace) { replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Remove) { removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else { revert("LibDiamondCut: Incorrect FacetCutAction"); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); addFunction(ds, selector, selectorPosition, _facetAddress); selectorPosition++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); removeFunction(ds, oldFacetAddress, selector); addFunction(ds, selector, selectorPosition, _facetAddress); selectorPosition++; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(ds, oldFacetAddress, selector); } } function addFacet(DiamondStorage storage ds, address _facetAddress) internal { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length; ds.facetAddresses.push(_facetAddress); } function addFunction( DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress ) internal { ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector); ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress; } function removeFunction( DiamondStorage storage ds, address _facetAddress, bytes4 _selector ) internal { require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); // an immutable function is a function defined directly in a diamond require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); // replace selector with last selector, then delete last selector uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; // if not the same then replace _selector with lastSelector if (selectorPosition != lastSelectorPosition) { bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition); } // delete the last selector ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); delete ds.selectorToFacetAndPosition[_selector]; // if no more selectors for facet address then delete the facet address if (lastSelectorPosition == 0) { // replace facet address with last facet address and delete last facet address uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; if (facetAddressPosition != lastFacetAddressPosition) { address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; ds.facetAddresses[facetAddressPosition] = lastFacetAddress; ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition; } ds.facetAddresses.pop(); delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); } else { require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); if (_init != address(this)) { enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); } // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert("LibDiamondCut: _init function reverted"); } } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; // solhint-disable-next-line no-inline-assembly assembly { contractSize := extcodesize(_contract) } require(contractSize > 0, _errorMessage); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; error InvalidAmount(); error TokenAddressIsZero(); error CannotBridgeToSameNetwork(); error ZeroPostSwapBalance(); error InvalidBridgeConfigLength(); error NoSwapDataProvided(); error NativeValueWithERC(); error ContractCallNotAllowed(); error NullAddrIsNotAValidSpender(); error NullAddrIsNotAnERC20Token(); error NoTransferToNullAddress(); error NativeAssetTransferFailed(); error InvalidContract(); error InvalidConfig();
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; /// @title Access Library /// @author LI.FI (https://li.fi) /// @notice Provides functionality for managing method level access control library LibAccess { /// Types /// bytes32 internal constant ACCESS_MANAGEMENT_POSITION = hex"df05114fe8fad5d7cd2d71c5651effc2a4c21f13ee8b4a462e2a3bd4e140c73e"; // keccak256("com.lifi.library.access.management") /// Storage /// struct AccessStorage { mapping(bytes4 => mapping(address => bool)) execAccess; } /// Errors /// error UnAuthorized(); /// @dev Fetch local storage function accessStorage() internal pure returns (AccessStorage storage accStor) { bytes32 position = ACCESS_MANAGEMENT_POSITION; // solhint-disable-next-line no-inline-assembly assembly { accStor.slot := position } } /// @notice Gives an address permission to execute a method /// @param selector The method selector to execute /// @param executor The address to grant permission to function addAccess(bytes4 selector, address executor) internal { AccessStorage storage accStor = accessStorage(); accStor.execAccess[selector][executor] = true; } /// @notice Revokes permission to execute a method /// @param selector The method selector to execute /// @param executor The address to revoke permission from function removeAccess(bytes4 selector, address executor) internal { AccessStorage storage accStor = accessStorage(); accStor.execAccess[selector][executor] = false; } /// @notice Enforces access control by reverting if `msg.sender` /// has not been given permission to execute `msg.sig` function enforceAccessControl() internal view { AccessStorage storage accStor = accessStorage(); if (accStor.execAccess[msg.sig][msg.sender] != true) revert UnAuthorized(); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.13; interface IDiamondCut { enum FacetCutAction { Add, Replace, Remove } // Add=0, Replace=1, Remove=2 struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); }
{ "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"InvalidConfig","type":"error"},{"inputs":[],"name":"UnAuthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dexAddress","type":"address"}],"name":"DexAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dexAddress","type":"address"}],"name":"DexRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"functionSignature","type":"bytes32"},{"indexed":true,"internalType":"bool","name":"approved","type":"bool"}],"name":"FunctionSignatureApprovalChanged","type":"event"},{"inputs":[{"internalType":"address","name":"_dex","type":"address"}],"name":"addDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approvedDexs","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_dexs","type":"address[]"}],"name":"batchAddDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_dexs","type":"address[]"}],"name":"batchRemoveDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_signatures","type":"bytes32[]"},{"internalType":"bool","name":"_approval","type":"bool"}],"name":"batchSetFunctionApprovalBySignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_signature","type":"bytes32"}],"name":"isFunctionApproved","outputs":[{"internalType":"bool","name":"approved","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dex","type":"address"}],"name":"removeDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_signature","type":"bytes32"},{"internalType":"bool","name":"_approval","type":"bool"}],"name":"setFunctionApprovalBySignature","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610f14806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063ba1a5bdd1161005b578063ba1a5bdd146100db578063c6bd579d14610113578063fbb2d38114610126578063fcd8e49e1461013b57600080fd5b8063124f1ead1461008d5780634363b848146100a2578063536db266146100b55780639afc19c7146100c8575b600080fd5b6100a061009b366004610c2f565b61014e565b005b6100a06100b0366004610ccd565b61027d565b6100a06100c3366004610c2f565b610353565b6100a06100d6366004610d21565b610486565b6100fe6100e9366004610d63565b60009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100a0610121366004610d7c565b61068c565b61012e61071e565b60405161010a9190610da8565b6100a0610149366004610d21565b610790565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610194576101946109ad565b61019d81610a4d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604081205460029060ff166101d257505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602083905260408120805460ff191690558154905b81811015610264578473ffffffffffffffffffffffffffffffffffffffff1683828154811061023457610234610e02565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff160361026b5761026481610a9d565b5050505050565b8061027581610e60565b915050610203565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1633146102c3576102c36109ad565b60018260005b8181101561034b5760008686838181106102e5576102e5610e02565b602090810292909201356000818152928790526040808420805460ff19168a15159081179091559051919450928492507f0530b9c29ef48134f8041dfb0d833636aad6cfc43439c54ed4184067c3b1b27891a3508061034381610e60565b9150506102c9565b505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff163314610399576103996109ad565b6103a281610a4d565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604081205460ff16156103d4575050565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260208390526040808220805460ff1916600190811790915560028054918201815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517f7e0058dd0cbc0a8b7beaa013a4825655d8e9e81a5e2cc6582818deded0a41b999190a25050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1633146104cc576104cc6109ad565b60028054600091908390835b828110156106835761050f8787838181106104f5576104f5610e02565b905060200201602081019061050a9190610c2f565b610a4d565b84600088888481811061052457610524610e02565b90506020020160208101906105399190610c2f565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561067157600085600089898581811061057f5761057f610e02565b90506020020160208101906105949190610c2f565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000908120805460ff1916921515929092179091555b8281101561066f578787838181106105e7576105e7610e02565b90506020020160208101906105fc9190610c2f565b73ffffffffffffffffffffffffffffffffffffffff1685828154811061062457610624610e02565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff160361065d5761065481610a9d565b8454925061066f565b8061066781610e60565b9150506105cd565b505b8061067b81610e60565b9150506104d8565b50505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1633146106d2576106d26109ad565b600082815260016020526040808220805460ff19168415159081179091559051909184917f0530b9c29ef48134f8041dfb0d833636aad6cfc43439c54ed4184067c3b1b2789190a35050565b6060600060020180548060200260200160405190810160405280929190818152602001828054801561078657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161075b575b5050505050905090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1633146107d6576107d66109ad565b600081815b81811015610264576107f88585838181106104f5576104f5610e02565b82600086868481811061080d5761080d610e02565b90506020020160208101906108229190610c2f565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff1661099b57600183600087878581811061086757610867610e02565b905060200201602081019061087c9190610c2f565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020805460ff191691151591909117905560028585838181106108c5576108c5610e02565b90506020020160208101906108da9190610c2f565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905584848281811061094357610943610e02565b90506020020160208101906109589190610c2f565b73ffffffffffffffffffffffffffffffffffffffff167f7e0058dd0cbc0a8b7beaa013a4825655d8e9e81a5e2cc6582818deded0a41b9960405160405180910390a25b806109a581610e60565b9150506107db565b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fdf05114fe8fad5d7cd2d71c5651effc2a4c21f13ee8b4a462e2a3bd4e140c73e6020818152604080842033855290915290912054600160ff909116151514610a4a576040517fbe24598300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8116600003610a4a576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028054600090829084908110610ab657610ab6610e02565b600091825260209091200154825473ffffffffffffffffffffffffffffffffffffffff90911691508290610aec90600190610e98565b81548110610afc57610afc610e02565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828481548110610b3957610b39610e02565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081805480610b9157610b91610eaf565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590910190915560405173ffffffffffffffffffffffffffffffffffffffff8316917f78e0a2ffcdfbbb49ba5c8050d8630fab2176d825e8360809db049cd98f462a7891a2505050565b600060208284031215610c4157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610c6557600080fd5b9392505050565b60008083601f840112610c7e57600080fd5b50813567ffffffffffffffff811115610c9657600080fd5b6020830191508360208260051b8501011115610cb157600080fd5b9250929050565b80358015158114610cc857600080fd5b919050565b600080600060408486031215610ce257600080fd5b833567ffffffffffffffff811115610cf957600080fd5b610d0586828701610c6c565b9094509250610d18905060208501610cb8565b90509250925092565b60008060208385031215610d3457600080fd5b823567ffffffffffffffff811115610d4b57600080fd5b610d5785828601610c6c565b90969095509350505050565b600060208284031215610d7557600080fd5b5035919050565b60008060408385031215610d8f57600080fd5b82359150610d9f60208401610cb8565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610df657835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610dc4565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e9157610e91610e31565b5060010190565b600082821015610eaa57610eaa610e31565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220628aa6d3f8fbc57c48da681f2f352089a5f1dff3d146c01c0d9ed49fbdb005a664736f6c634300080d0033
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.