Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 9 internal transactions
[ Download CSV Export ]
Contract Name:
ShowUpClub
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.4; import "@openzeppelin/contracts/security/PullPayment.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /// @title The Show Up Club. contract ShowUpClub is PullPayment, Ownable { struct Journey { string action; // Action. string format; // Format. uint duration; // Duration in days. uint dailyValue; // Daily value. E.g, 20 string description; // Description of the journey. address creator; // Journey Creator. address sink; // Sink Address. uint startDate; // Start date. uint currentValue; // Current value. uint deposit; // Deposit. bool completed; // Completed. } event JourneyCreated(address indexed creator, uint id); event JourneyCompleted(uint indexed id); event ShowUp(uint indexed journeyId, uint value, string note); // All Journeys Journey[] public journeys; // Map from address to journey ids. mapping(address => uint[]) userJourneys; // Journey Id to ShowUps //mapping(uint => ShowUp[]) showups; /// Journey does not exist. error JourneyDoesNotExist(); /// Sender did not create journey. error NotCreatorOfJourney(); /// Journey ended. error JourneyEnded(); /// Journey not ended yet. error JourneyNotEnded(); /// Journey already completed. error JourneyAlreadyCompleted(); constructor() {} // TODO? function createJourney( string calldata action, string calldata format, uint duration, uint dailyValue, string calldata description, address sink, uint fee) external payable { _createJourney(action, format, duration, dailyValue, description, sink, fee); } function _createJourney( string calldata action, string calldata format, uint duration, uint dailyValue, string calldata description, address sink, uint fee) internal { Journey memory journey = Journey({ action: action, format: format, duration: duration, dailyValue: dailyValue, description: description, creator: msg.sender, sink: sink, startDate: block.timestamp, currentValue: 0, deposit: msg.value - fee, completed: false }); journeys.push(journey); userJourneys[msg.sender].push(journeys.length - 1); _asyncTransfer(owner(), fee); emit JourneyCreated(journey.creator, journeys.length - 1); } function getJourney(uint id) external view returns (Journey memory journey_) { journey_ = getJourneyInternal(id); } function getJourneyInternal(uint id) internal view returns (Journey memory journey_) { journey_ = journeys[id]; } function getJourneyIds() external view returns (uint[] memory journeyIds_) { journeyIds_ = userJourneys[msg.sender]; } function getJourneyIdsForUser(address creator) external view returns (uint[] memory journeyIds_) { journeyIds_ = userJourneys[creator]; } function showUp(uint journeyId, uint value, string calldata note) external { uint journeyEndDate = getJourneyEndDate(journeyId); if (journeyEndDate < block.timestamp) revert JourneyEnded(); Journey storage journey = journeys[journeyId]; if (journey.creator != msg.sender) revert NotCreatorOfJourney(); journey.currentValue = journey.currentValue + value; emit ShowUp(journeyId, value, note); } function getJourneyEndDate(uint journeyId) internal view returns (uint endDate_) { Journey memory journey = getJourneyInternal(journeyId); endDate_ = journey.startDate + _getJourneyDurationInSeconds(journey); } function _getJourneyDurationInSeconds(Journey memory journey) internal pure returns (uint durationInDays_) { durationInDays_ = journey.duration * 1 days; } function completeJourney(uint journeyId) public { uint journeyEndDate = getJourneyEndDate(journeyId); // TODO: is it cheaper to use the storage journey? if (journeyEndDate >= block.timestamp) revert JourneyNotEnded(); Journey storage journey = journeys[journeyId]; if (journey.completed) revert JourneyAlreadyCompleted(); journey.completed = true; uint totalValueRequired = journey.duration * journey.dailyValue; bool success = journey.currentValue >= totalValueRequired; if (success) { _asyncTransfer(journey.creator, journey.deposit); } else { _asyncTransfer(journey.sink, journey.deposit); } emit JourneyCompleted(journeyId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/PullPayment.sol) pragma solidity ^0.8.0; import "../utils/escrow/Escrow.sol"; /** * @dev Simple implementation of a * https://consensys.github.io/smart-contract-best-practices/recommendations/#favor-pull-over-push-for-external-calls[pull-payment] * strategy, where the paying contract doesn't interact directly with the * receiver account, which must withdraw its payments itself. * * Pull-payments are often considered the best practice when it comes to sending * Ether, security-wise. It prevents recipients from blocking execution, and * eliminates reentrancy concerns. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * To use, derive from the `PullPayment` contract, and use {_asyncTransfer} * instead of Solidity's `transfer` function. Payees can query their due * payments with {payments}, and retrieve them with {withdrawPayments}. */ abstract contract PullPayment { Escrow private immutable _escrow; constructor() { _escrow = new Escrow(); } /** * @dev Withdraw accumulated payments, forwarding all gas to the recipient. * * Note that _any_ account can call this function, not just the `payee`. * This means that contracts unaware of the `PullPayment` protocol can still * receive funds this way, by having a separate account call * {withdrawPayments}. * * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities. * Make sure you trust the recipient, or are either following the * checks-effects-interactions pattern or using {ReentrancyGuard}. * * @param payee Whose payments will be withdrawn. */ function withdrawPayments(address payable payee) public virtual { _escrow.withdraw(payee); } /** * @dev Returns the payments owed to an address. * @param dest The creditor's address. */ function payments(address dest) public view returns (uint256) { return _escrow.depositsOf(dest); } /** * @dev Called by the payer to store the sent amount as credit to be pulled. * Funds sent in this way are stored in an intermediate {Escrow} contract, so * there is no danger of them being spent before withdrawal. * * @param dest The destination address of the funds. * @param amount The amount to transfer. */ function _asyncTransfer(address dest, uint256 amount) internal virtual { _escrow.deposit{value: amount}(dest); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/escrow/Escrow.sol) pragma solidity ^0.8.0; import "../../access/Ownable.sol"; import "../Address.sol"; /** * @title Escrow * @dev Base escrow contract, holds funds designated for a payee until they * withdraw them. * * Intended usage: This contract (and derived escrow contracts) should be a * standalone contract, that only interacts with the contract that instantiated * it. That way, it is guaranteed that all Ether will be handled according to * the `Escrow` rules, and there is no need to check for payable functions or * transfers in the inheritance tree. The contract that uses the escrow as its * payment method should be its owner, and provide public methods redirecting * to the escrow's deposit and withdraw. */ contract Escrow is Ownable { using Address for address payable; event Deposited(address indexed payee, uint256 weiAmount); event Withdrawn(address indexed payee, uint256 weiAmount); mapping(address => uint256) private _deposits; function depositsOf(address payee) public view returns (uint256) { return _deposits[payee]; } /** * @dev Stores the sent amount as credit to be withdrawn. * @param payee The destination address of the funds. */ function deposit(address payee) public payable virtual onlyOwner { uint256 amount = msg.value; _deposits[payee] += amount; emit Deposited(payee, amount); } /** * @dev Withdraw accumulated balance for a payee, forwarding all gas to the * recipient. * * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities. * Make sure you trust the recipient, or are either following the * checks-effects-interactions pattern or using {ReentrancyGuard}. * * @param payee The address whose funds will be withdrawn and transferred to. */ function withdraw(address payable payee) public virtual onlyOwner { uint256 payment = _deposits[payee]; _deposits[payee] = 0; payee.sendValue(payment); emit Withdrawn(payee, payment); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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"); (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"); (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"); (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"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"JourneyAlreadyCompleted","type":"error"},{"inputs":[],"name":"JourneyDoesNotExist","type":"error"},{"inputs":[],"name":"JourneyEnded","type":"error"},{"inputs":[],"name":"JourneyNotEnded","type":"error"},{"inputs":[],"name":"NotCreatorOfJourney","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"JourneyCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"JourneyCreated","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":true,"internalType":"uint256","name":"journeyId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"note","type":"string"}],"name":"ShowUp","type":"event"},{"inputs":[{"internalType":"uint256","name":"journeyId","type":"uint256"}],"name":"completeJourney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"action","type":"string"},{"internalType":"string","name":"format","type":"string"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"dailyValue","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"sink","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"createJourney","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getJourney","outputs":[{"components":[{"internalType":"string","name":"action","type":"string"},{"internalType":"string","name":"format","type":"string"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"dailyValue","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"sink","type":"address"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"currentValue","type":"uint256"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"bool","name":"completed","type":"bool"}],"internalType":"struct ShowUpClub.Journey","name":"journey_","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getJourneyIds","outputs":[{"internalType":"uint256[]","name":"journeyIds_","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"}],"name":"getJourneyIdsForUser","outputs":[{"internalType":"uint256[]","name":"journeyIds_","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"journeys","outputs":[{"internalType":"string","name":"action","type":"string"},{"internalType":"string","name":"format","type":"string"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"dailyValue","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"address","name":"sink","type":"address"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"currentValue","type":"uint256"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"bool","name":"completed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dest","type":"address"}],"name":"payments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"journeyId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"note","type":"string"}],"name":"showUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payee","type":"address"}],"name":"withdrawPayments","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620000209062000166565b604051809103906000f0801580156200003d573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505062000094620000886200009a60201b60201c565b620000a260201b60201c565b62000174565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610d09806200228583390190565b60805160601c6120e4620001a1600039600081816102f701528181610b03015261108e01526120e46000f3fe6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101855780638df5a9fa146101b0578063b5443038146101f7578063d9fa41f814610234578063e2982c2114610271578063f2fde38b146102ae576100a7565b80630bb5c1ca146100ac57806331b3eb94146100c85780635b3ddf16146100f157806369abfa5d1461011c578063715018a6146101455780637c30c6b61461015c575b600080fd5b6100c660048036038101906100c19190611731565b6102d7565b005b3480156100d457600080fd5b506100ef60048036038101906100ea9190611708565b6102f5565b005b3480156100fd57600080fd5b50610106610383565b6040516101139190611bd9565b60405180910390f35b34801561012857600080fd5b50610143600480360381019061013e9190611824565b610418565b005b34801561015157600080fd5b5061015a6105d8565b005b34801561016857600080fd5b50610183600480360381019061017e9190611876565b610660565b005b34801561019157600080fd5b5061019a6107d8565b6040516101a79190611ba3565b60405180910390f35b3480156101bc57600080fd5b506101d760048036038101906101d29190611824565b610801565b6040516101ee9b9a99989796959493929190611bfb565b60405180910390f35b34801561020357600080fd5b5061021e60048036038101906102199190611824565b610a50565b60405161022b9190611cfb565b60405180910390f35b34801561024057600080fd5b5061025b600480360381019061025691906116df565b610a68565b6040516102689190611bd9565b60405180910390f35b34801561027d57600080fd5b50610298600480360381019061029391906116df565b610aff565b6040516102a59190611d1d565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906116df565b610bb1565b005b6102e98a8a8a8a8a8a8a8a8a8a610ca9565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161034e9190611bbe565b600060405180830381600087803b15801561036857600080fd5b505af115801561037c573d6000803e3d6000fd5b5050505050565b6060600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561040e57602002820191906000526020600020905b8154815260200190600101908083116103fa575b5050505050905090565b60006104238261105e565b905042811061045e576040517f0df9088d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001838154811061049a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600b0201905080600a0160009054906101000a900460ff16156104f3576040517f0d9d5ac600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600181600a0160006101000a81548160ff0219169083151502179055506000816003015482600201546105269190611e26565b905060008183600801541015905080156105715761056c8360050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846009015461108c565b6105a4565b6105a38360060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846009015461108c565b5b847f59554e552a32c114e5a089a4be2d29479b0f8fdb596321bcc6b8d64ad1f7dffa60405160405180910390a25050505050565b6105e061111c565b73ffffffffffffffffffffffffffffffffffffffff166105fe6107d8565b73ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b90611cdb565b60405180910390fd5b61065e6000611124565b565b600061066b8561105e565b9050428110156106a7576040517f68829e5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600186815481106106e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600b020190503373ffffffffffffffffffffffffffffffffffffffff168160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461077c576040517fa47914c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84816008015461078c9190611dd0565b8160080181905550857fd80234d13ab205b3bd5d6fd81784bb9594683c5842cbb46ca56e2e3500b6c4308686866040516107c893929190611d38565b60405180910390a2505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001818154811061081157600080fd5b90600052602060002090600b020160009150905080600001805461083490611f50565b80601f016020809104026020016040519081016040528092919081815260200182805461086090611f50565b80156108ad5780601f10610882576101008083540402835291602001916108ad565b820191906000526020600020905b81548152906001019060200180831161089057829003601f168201915b5050505050908060010180546108c290611f50565b80601f01602080910402602001604051908101604052809291908181526020018280546108ee90611f50565b801561093b5780601f106109105761010080835404028352916020019161093b565b820191906000526020600020905b81548152906001019060200180831161091e57829003601f168201915b50505050509080600201549080600301549080600401805461095c90611f50565b80601f016020809104026020016040519081016040528092919081815260200182805461098890611f50565b80156109d55780601f106109aa576101008083540402835291602001916109d5565b820191906000526020600020905b8154815290600101906020018083116109b857829003601f168201915b5050505050908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600701549080600801549080600901549080600a0160009054906101000a900460ff1690508b565b610a58611516565b610a61826111e8565b9050919050565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610af357602002820191906000526020600020905b815481526020019060010190808311610adf575b50505050509050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b8152600401610b5a9190611ba3565b60206040518083038186803b158015610b7257600080fd5b505afa158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa919061184d565b9050919050565b610bb961111c565b73ffffffffffffffffffffffffffffffffffffffff16610bd76107d8565b73ffffffffffffffffffffffffffffffffffffffff1614610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490611cdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611cbb565b60405180910390fd5b610ca681611124565b50565b60006040518061016001604052808c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020018a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200188815260200187815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001428152602001600081526020018334610df29190611e80565b815260200160001515815250905060018190806001815401808255809150506001900390600052602060002090600b02016000909190919091506000820151816000019080519060200190610e4892919061159e565b506020820151816001019080519060200190610e6592919061159e565b5060408201518160020155606082015181600301556080820151816004019080519060200190610e9692919061159e565b5060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff0219169083151502179055505050600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018080549050610fb89190611e80565b9080600181540180825580915050600190039060005260206000200160009091909190915055610fef610fe96107d8565b8361108c565b8060a0015173ffffffffffffffffffffffffffffffffffffffff167f714e6fb1f17fde5d08dc6e44b3b940f9cf871d4a3eaf9872dd77169463ab32e56001808054905061103c9190611e80565b6040516110499190611d1d565b60405180910390a25050505050505050505050565b60008061106a836111e8565b9050611075816114fa565b8160e001516110849190611dd0565b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b81526004016110e69190611ba3565b6000604051808303818588803b1580156110ff57600080fd5b505af1158015611113573d6000803e3d6000fd5b50505050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6111f0611516565b6001828154811061122a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600b02016040518061016001604052908160008201805461125490611f50565b80601f016020809104026020016040519081016040528092919081815260200182805461128090611f50565b80156112cd5780601f106112a2576101008083540402835291602001916112cd565b820191906000526020600020905b8154815290600101906020018083116112b057829003601f168201915b505050505081526020016001820180546112e690611f50565b80601f016020809104026020016040519081016040528092919081815260200182805461131290611f50565b801561135f5780601f106113345761010080835404028352916020019161135f565b820191906000526020600020905b81548152906001019060200180831161134257829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201805461138c90611f50565b80601f01602080910402602001604051908101604052809291908181526020018280546113b890611f50565b80156114055780601f106113da57610100808354040283529160200191611405565b820191906000526020600020905b8154815290600101906020018083116113e857829003601f168201915b505050505081526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff1615151515815250509050919050565b600062015180826040015161150f9190611e26565b9050919050565b6040518061016001604052806060815260200160608152602001600081526020016000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000151581525090565b8280546115aa90611f50565b90600052602060002090601f0160209004810192826115cc5760008555611613565b82601f106115e557805160ff1916838001178555611613565b82800160010185558215611613579182015b828111156116125782518255916020019190600101906115f7565b5b5090506116209190611624565b5090565b5b8082111561163d576000816000905550600101611625565b5090565b60008135905061165081612069565b92915050565b60008135905061166581612080565b92915050565b60008083601f84011261167d57600080fd5b8235905067ffffffffffffffff81111561169657600080fd5b6020830191508360018202830111156116ae57600080fd5b9250929050565b6000813590506116c481612097565b92915050565b6000815190506116d981612097565b92915050565b6000602082840312156116f157600080fd5b60006116ff84828501611641565b91505092915050565b60006020828403121561171a57600080fd5b600061172884828501611656565b91505092915050565b60008060008060008060008060008060e08b8d03121561175057600080fd5b60008b013567ffffffffffffffff81111561176a57600080fd5b6117768d828e0161166b565b9a509a505060208b013567ffffffffffffffff81111561179557600080fd5b6117a18d828e0161166b565b985098505060406117b48d828e016116b5565b96505060606117c58d828e016116b5565b95505060808b013567ffffffffffffffff8111156117e257600080fd5b6117ee8d828e0161166b565b945094505060a06118018d828e01611641565b92505060c06118128d828e016116b5565b9150509295989b9194979a5092959850565b60006020828403121561183657600080fd5b6000611844848285016116b5565b91505092915050565b60006020828403121561185f57600080fd5b600061186d848285016116ca565b91505092915050565b6000806000806060858703121561188c57600080fd5b600061189a878288016116b5565b94505060206118ab878288016116b5565b935050604085013567ffffffffffffffff8111156118c857600080fd5b6118d48782880161166b565b925092505092959194509250565b60006118ee8383611b85565b60208301905092915050565b61190381611ec6565b82525050565b61191281611eb4565b82525050565b61192181611eb4565b82525050565b600061193282611d7a565b61193c8185611d9d565b935061194783611d6a565b8060005b8381101561197857815161195f88826118e2565b975061196a83611d90565b92505060018101905061194b565b5085935050505092915050565b61198e81611ed8565b82525050565b61199d81611ed8565b82525050565b60006119af8385611dbf565b93506119bc838584611f0e565b6119c583611fe0565b840190509392505050565b60006119db82611d85565b6119e58185611dae565b93506119f5818560208601611f1d565b6119fe81611fe0565b840191505092915050565b6000611a1482611d85565b611a1e8185611dbf565b9350611a2e818560208601611f1d565b611a3781611fe0565b840191505092915050565b6000611a4f602683611dbf565b9150611a5a82611ff1565b604082019050919050565b6000611a72602083611dbf565b9150611a7d82612040565b602082019050919050565b6000610160830160008301518482036000860152611aa682826119d0565b91505060208301518482036020860152611ac082826119d0565b9150506040830151611ad56040860182611b85565b506060830151611ae86060860182611b85565b5060808301518482036080860152611b0082826119d0565b91505060a0830151611b1560a0860182611909565b5060c0830151611b2860c0860182611909565b5060e0830151611b3b60e0860182611b85565b50610100830151611b50610100860182611b85565b50610120830151611b65610120860182611b85565b50610140830151611b7a610140860182611985565b508091505092915050565b611b8e81611f04565b82525050565b611b9d81611f04565b82525050565b6000602082019050611bb86000830184611918565b92915050565b6000602082019050611bd360008301846118fa565b92915050565b60006020820190508181036000830152611bf38184611927565b905092915050565b6000610160820190508181036000830152611c16818e611a09565b90508181036020830152611c2a818d611a09565b9050611c39604083018c611b94565b611c46606083018b611b94565b8181036080830152611c58818a611a09565b9050611c6760a0830189611918565b611c7460c0830188611918565b611c8160e0830187611b94565b611c8f610100830186611b94565b611c9d610120830185611b94565b611cab610140830184611994565b9c9b505050505050505050505050565b60006020820190508181036000830152611cd481611a42565b9050919050565b60006020820190508181036000830152611cf481611a65565b9050919050565b60006020820190508181036000830152611d158184611a88565b905092915050565b6000602082019050611d326000830184611b94565b92915050565b6000604082019050611d4d6000830186611b94565b8181036020830152611d608184866119a3565b9050949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611ddb82611f04565b9150611de683611f04565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e1b57611e1a611f82565b5b828201905092915050565b6000611e3182611f04565b9150611e3c83611f04565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e7557611e74611f82565b5b828202905092915050565b6000611e8b82611f04565b9150611e9683611f04565b925082821015611ea957611ea8611f82565b5b828203905092915050565b6000611ebf82611ee4565b9050919050565b6000611ed182611ee4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611f3b578082015181840152602081019050611f20565b83811115611f4a576000848401525b50505050565b60006002820490506001821680611f6857607f821691505b60208210811415611f7c57611f7b611fb1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61207281611eb4565b811461207d57600080fd5b50565b61208981611ec6565b811461209457600080fd5b50565b6120a081611f04565b81146120ab57600080fd5b5056fea2646970667358221220c3ed21896f33e3a634ac4288b5d9f5f4ef5dbba28f33a31ce5681d8792db14f464736f6c63430008040033608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610bfc8061010d6000396000f3fe6080604052600436106100555760003560e01c806351cff8d91461005a578063715018a6146100835780638da5cb5b1461009a578063e3a9db1a146100c5578063f2fde38b14610102578063f340fa011461012b575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c91906107f5565b610147565b005b34801561008f57600080fd5b506100986102c7565b005b3480156100a657600080fd5b506100af61034f565b6040516100bc9190610900565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906107cc565b610378565b6040516100f9919061099b565b60405180910390f35b34801561010e57600080fd5b50610129600480360381019061012491906107cc565b6103c1565b005b610145600480360381019061014091906107cc565b6104b9565b005b61014f6105e2565b73ffffffffffffffffffffffffffffffffffffffff1661016d61034f565b73ffffffffffffffffffffffffffffffffffffffff16146101c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ba9061097b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610275818373ffffffffffffffffffffffffffffffffffffffff166105ea90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516102bb919061099b565b60405180910390a25050565b6102cf6105e2565b73ffffffffffffffffffffffffffffffffffffffff166102ed61034f565b73ffffffffffffffffffffffffffffffffffffffff1614610343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033a9061097b565b60405180910390fd5b61034d60006106de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103c96105e2565b73ffffffffffffffffffffffffffffffffffffffff166103e761034f565b73ffffffffffffffffffffffffffffffffffffffff161461043d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104349061097b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156104ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a49061091b565b60405180910390fd5b6104b6816106de565b50565b6104c16105e2565b73ffffffffffffffffffffffffffffffffffffffff166104df61034f565b73ffffffffffffffffffffffffffffffffffffffff1614610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c9061097b565b60405180910390fd5b600034905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461058991906109d2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040516105d6919061099b565b60405180910390a25050565b600033905090565b8047101561062d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106249061095b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610653906108eb565b60006040518083038185875af1925050503d8060008114610690576040519150601f19603f3d011682016040523d82523d6000602084013e610695565b606091505b50509050806106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d09061093b565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000813590506107b181610b98565b92915050565b6000813590506107c681610baf565b92915050565b6000602082840312156107de57600080fd5b60006107ec848285016107a2565b91505092915050565b60006020828403121561080757600080fd5b6000610815848285016107b7565b91505092915050565b61082781610a28565b82525050565b600061083a6026836109c1565b915061084582610aa5565b604082019050919050565b600061085d603a836109c1565b915061086882610af4565b604082019050919050565b6000610880601d836109c1565b915061088b82610b43565b602082019050919050565b60006108a36020836109c1565b91506108ae82610b6c565b602082019050919050565b60006108c66000836109b6565b91506108d182610b95565b600082019050919050565b6108e581610a6c565b82525050565b60006108f6826108b9565b9150819050919050565b6000602082019050610915600083018461081e565b92915050565b600060208201905081810360008301526109348161082d565b9050919050565b6000602082019050818103600083015261095481610850565b9050919050565b6000602082019050818103600083015261097481610873565b9050919050565b6000602082019050818103600083015261099481610896565b9050919050565b60006020820190506109b060008301846108dc565b92915050565b600081905092915050565b600082825260208201905092915050565b60006109dd82610a6c565b91506109e883610a6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610a1d57610a1c610a76565b5b828201905092915050565b6000610a3382610a4c565b9050919050565b6000610a4582610a4c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b610ba181610a28565b8114610bac57600080fd5b50565b610bb881610a3a565b8114610bc357600080fd5b5056fea2646970667358221220b2a6db4c00e57e7ef608d5e81a53c60e6688cd2b85172cc39bb6858c6c6988ec64736f6c63430008040033
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.