Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Payments
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "./ownable.sol"; import "./IOmnify.sol"; contract Payments is Ownable { event PaymentRefundIssued( string _id, address _customer, address _vendor, uint256 _amount, uint256 _blockNumber, uint256 _date ); event PaymentMade( string _id, address _customer, address _vendor, uint256 _amount, uint256 _blockNumber, uint256 _date ); event PaymentInstallmentPaid( string _id, address _customer, address _vendor, uint256 _amount, uint256 _blockNumber, uint256 _date ); event PaymentWithdrawalMade(address _vendor, uint256 _amount, uint256 _blockNumber, uint256 _date); struct Payment { string id; uint256 amount; address customer; address vendor; bool isPaid; bool isRefunded; bool isInstallments; uint256 fullAmount; uint256 amountPerInstallment; uint8 installmentPeriod; uint8 paidInstallments; uint8 remainingInstallments; uint256 datePaid; uint256 dateLastInstallmentPaid; } struct PaymentProfileReceipt { string id; } struct PaymentProfileInstallmentPlan { string id; } struct PaymentProfileWithdrawal { uint256 amount; uint256 date; } struct PaymentProfile { uint256 currentBalance; uint256 totalRevenue; uint256 numberPaymentsReceived; uint256 numberPaymentsMade; uint256 totalSpending; uint256 numberWithdrawals; uint256 amountWithdrawals; uint256 amountRefunds; uint256 numberRefunds; bool exists; uint256 planCount; uint256 receiptCount; uint256 withdrawalCount; mapping(uint256 => PaymentProfileInstallmentPlan) installmentPlans; mapping(uint256 => PaymentProfileReceipt) receipts; mapping(uint256 => PaymentProfileWithdrawal) withdrawals; } constructor( address _paramOmnifyAddress, uint8 _paramNativeDecimals, uint256 _paramFeePerInstallment, uint256 _paramFeePerPayment ) Ownable(msg.sender) { nativeCoinDecimals = _paramNativeDecimals; omnifyAddress = _paramOmnifyAddress; feePerInstallment = _paramFeePerInstallment; feePerPayment = _paramFeePerPayment; maxInstallmentPeriod = 120; } uint8 public nativeCoinDecimals; uint256 internal MAXUINT = 2 ** 256 - 1; uint256 public feePerPayment; uint256 public feePerInstallment; uint8 public maxInstallmentPeriod; uint256 public paymentsMade; uint256 public assetsPaid; uint256 public installmentsCreated; uint256 public installmentsPaid; uint256 public installmentAssetsPaid; uint256 public withdrawalsMade; uint256 public amountWithdrawn; uint256 public uniqueCustomers; uint256 public uniqueVendors; uint256 public refundsIssued; uint256 public refundsAmount; address public feeKeeperAddress; address public omnifyAddress; mapping(string => Payment) public payments; mapping(address => PaymentProfile) public paymentProfiles; modifier onlyFeeKeeper(address _sender) { require(_sender == feeKeeperAddress); _; } function setFeeKeeperAddress(address _feeKeeper) external onlyOwner { feeKeeperAddress = _feeKeeper; } function setOmnifyAddress(address _newaddress) external onlyOwner { omnifyAddress = _newaddress; } function _addUniqueCustomers(address _customer) internal { if (!paymentProfiles[_customer].exists) { uniqueCustomers++; paymentProfiles[_customer].exists = true; } } function _addUniqueVendors(address _vendor) internal { if (!paymentProfiles[_vendor].exists) { uniqueVendors++; paymentProfiles[_vendor].exists = true; } } function _addPaymentsMade() internal { paymentsMade++; } function _addAssetsPaid(uint256 _amount) internal { assetsPaid = safeAdd(assetsPaid, _amount); } function _addInstallmentsCreated(uint256 _installments) internal { installmentsCreated = safeAdd(installmentsCreated, _installments); } function _addInstallmentsPaid() internal { installmentsPaid++; } function _addInstallmentAssetsPaid(uint256 _amount) internal { installmentAssetsPaid = safeAdd(installmentAssetsPaid, _amount); } function _addWithdrawalsMade() internal { withdrawalsMade++; } function _addAmountWithdrawn(uint256 _amount) internal { amountWithdrawn = safeAdd(amountWithdrawn, _amount); } function _addRefundsIssued() internal { refundsIssued++; } function _addRefundsAmount(uint256 _amount) internal { refundsAmount = safeAdd(refundsAmount, _amount); } function setFeePerPayment(uint256 _fee) external onlyOwner { feePerPayment = _fee; } function setFeePerPaymentByKeeper(uint256 _fee) external onlyFeeKeeper(msg.sender) { feePerPayment = _fee; } function setFeePerInstallment(uint256 _fee) external onlyOwner { feePerInstallment = _fee; } function setFeePerInstallmentByFeeKeeper(uint256 _fee) external onlyFeeKeeper(msg.sender) { feePerInstallment = _fee; } function setMaxInstallmentPeriod(uint8 _period) external onlyOwner { maxInstallmentPeriod = _period; } function lookupPayment(string memory _id) public view returns (Payment memory) { return payments[_id]; } function lookupPaymentProfileBalance(address _profile) public view returns (uint256) { return paymentProfiles[_profile].currentBalance; } function lookupPaymentProfileRevenue(address _profile) public view returns (uint256) { return paymentProfiles[_profile].totalRevenue; } function lookupPaymentProfileSpending(address _profile) public view returns (uint256) { return paymentProfiles[_profile].totalSpending; } function lookupPaymentProfileRefundAmount(address _profile) public view returns (uint256) { return paymentProfiles[_profile].amountRefunds; } function lookupPaymentProfileWithdrawnAmount(address _profile) public view returns (uint256) { return paymentProfiles[_profile].amountWithdrawals; } function lookupPaymentProfileNumberPaymentsMade(address _profile) public view returns (uint256) { return paymentProfiles[_profile].numberPaymentsMade; } function lookupPaymentProfileNumberPaymentsReceived(address _profile) public view returns (uint256) { return paymentProfiles[_profile].numberPaymentsReceived; } function lookupPaymentProfileNumberWithdrawals(address _profile) public view returns (uint256) { return paymentProfiles[_profile].numberWithdrawals; } function lookupPaymentProfileNumberRefunds(address _profile) public view returns (uint256) { return paymentProfiles[_profile].numberRefunds; } function lookupPaymentProfileInstallmentPlans(address _profile) public view returns (PaymentProfileInstallmentPlan[] memory) { uint256 profilePlanCount = paymentProfiles[_profile].planCount; PaymentProfileInstallmentPlan[] memory plans = new PaymentProfileInstallmentPlan[](profilePlanCount); if (profilePlanCount > 0) { for (uint256 i = 0; i < profilePlanCount; i++) { plans[i] = paymentProfiles[_profile].installmentPlans[i]; } } return plans; } function lookupPaymentProfileReceipts(address _profile) public view returns (PaymentProfileReceipt[] memory) { uint256 profileReceiptCount = paymentProfiles[_profile].receiptCount; PaymentProfileReceipt[] memory receipts = new PaymentProfileReceipt[](profileReceiptCount); if (profileReceiptCount > 0) { for (uint256 i = 0; i < profileReceiptCount; i++) { receipts[i] = paymentProfiles[_profile].receipts[i]; } } return receipts; } function lookupPaymentProfileWithdrawals(address _profile) public view returns (PaymentProfileWithdrawal[] memory) { uint256 profileWithdrawalCount = paymentProfiles[_profile].withdrawalCount; PaymentProfileWithdrawal[] memory withdrawals = new PaymentProfileWithdrawal[](profileWithdrawalCount); if (profileWithdrawalCount > 0) { for (uint256 i = 0; i < profileWithdrawalCount; i++) { withdrawals[i] = paymentProfiles[_profile].withdrawals[i]; } } return withdrawals; } function getMinAmount(uint8 _decimals) public pure returns (uint256) { if (_decimals == 0) { return 1; } if (_decimals == 1) { return 0.1 * (10 ** 1); } if (_decimals == 2) { return 0.01 * (10 ** 2); } if (_decimals >= 3) { uint8 powa = _decimals - 3; //0.001 return 1 * (10 ** powa); } return 1; } function makePayment( string memory _id, uint256 _amount, address _vendor, bool _isInstallments, uint256 _fullAmount, uint8 _installmentPeriod ) external payable { require(payments[_id].isPaid == false); uint256 _minAmount = getMinAmount(nativeCoinDecimals); require(_amount >= _minAmount); uint256 totalAmount = _amount + feePerPayment; require(totalAmount == msg.value); if (_isInstallments) { require(_installmentPeriod >= 1); require(_installmentPeriod <= maxInstallmentPeriod); require(_fullAmount > _amount); uint256 remainingAmount = _fullAmount - _amount; require(remainingAmount >= _minAmount); uint256 vendorPlanCount = paymentProfiles[_vendor].planCount; uint256 customerPlanCount = paymentProfiles[msg.sender].planCount; paymentProfiles[_vendor].installmentPlans[vendorPlanCount].id = _id; paymentProfiles[msg.sender].installmentPlans[customerPlanCount].id = _id; paymentProfiles[_vendor].planCount++; paymentProfiles[msg.sender].planCount++; _addInstallmentsCreated(_installmentPeriod); } paymentProfiles[_vendor].currentBalance += _amount; paymentProfiles[_vendor].totalRevenue = safeAdd(paymentProfiles[_vendor].totalRevenue, _amount); paymentProfiles[_vendor].numberPaymentsReceived++; uint256 vendorReceiptCount = paymentProfiles[_vendor].receiptCount; paymentProfiles[_vendor].receipts[vendorReceiptCount].id = _id; paymentProfiles[_vendor].receiptCount++; paymentProfiles[msg.sender].totalSpending = safeAdd(paymentProfiles[msg.sender].totalSpending, _amount); paymentProfiles[msg.sender].numberPaymentsMade++; uint256 customerReceiptCount = paymentProfiles[msg.sender].receiptCount; paymentProfiles[msg.sender].receipts[customerReceiptCount].id = _id; paymentProfiles[msg.sender].receiptCount++; _addUniqueVendors(_vendor); _addUniqueCustomers(msg.sender); _addPaymentsMade(); _addAssetsPaid(_amount); _addToPayments(_id, _amount, _vendor, _isInstallments, _fullAmount, _installmentPeriod); IOmnify mainContract = IOmnify(omnifyAddress); mainContract.addProfitsFromExternalContract{value: feePerPayment}(); emit PaymentMade(_id, msg.sender, _vendor, _amount, block.number, block.timestamp); } function payInstallment(string memory _id) external payable { require(payments[_id].isInstallments); require(payments[_id].remainingInstallments > 0); // uint256 dueDate = payments[_id].dateLastInstallmentPaid + 30 days; // require(block.timestamp >= dueDate); uint256 amountPerInstallment = payments[_id].amountPerInstallment; address vendor = payments[_id].vendor; address customer = payments[_id].customer; if (payments[_id].remainingInstallments == 1) { uint256 amountPaid = payments[_id].paidInstallments * amountPerInstallment; amountPaid += payments[_id].amount; uint256 remainingAmount = payments[_id].fullAmount - amountPaid; uint256 totalAmount = remainingAmount + feePerInstallment; require(msg.value == totalAmount); paymentProfiles[vendor].currentBalance += remainingAmount; paymentProfiles[vendor].totalRevenue = safeAdd(paymentProfiles[vendor].totalRevenue, remainingAmount); paymentProfiles[customer].totalSpending = safeAdd(paymentProfiles[customer].totalSpending, remainingAmount); _addInstallmentAssetsPaid(remainingAmount); } else { uint256 totalAmount = amountPerInstallment + feePerInstallment; require(msg.value == totalAmount); paymentProfiles[vendor].currentBalance += amountPerInstallment; paymentProfiles[vendor].totalRevenue = safeAdd(paymentProfiles[vendor].totalRevenue, amountPerInstallment); paymentProfiles[customer].totalSpending = safeAdd(paymentProfiles[customer].totalSpending, amountPerInstallment); _addInstallmentAssetsPaid(amountPerInstallment); } paymentProfiles[vendor].numberPaymentsReceived++; paymentProfiles[customer].numberPaymentsMade++; payments[_id].paidInstallments++; payments[_id].remainingInstallments--; payments[_id].dateLastInstallmentPaid = block.timestamp; _addInstallmentsPaid(); IOmnify mainContract = IOmnify(omnifyAddress); mainContract.addProfitsFromExternalContract{value: feePerInstallment}(); emit PaymentInstallmentPaid(_id, customer, vendor, amountPerInstallment, block.number, block.timestamp); } function withdrawBalance(uint256 _amount) external { require(paymentProfiles[msg.sender].currentBalance >= _amount); paymentProfiles[msg.sender].currentBalance -= _amount; paymentProfiles[msg.sender].amountWithdrawals = safeAdd(paymentProfiles[msg.sender].amountWithdrawals, _amount); paymentProfiles[msg.sender].numberWithdrawals++; uint256 profileWithdrawalCount = paymentProfiles[msg.sender].withdrawalCount; paymentProfiles[msg.sender].withdrawals[profileWithdrawalCount].amount = _amount; paymentProfiles[msg.sender].withdrawals[profileWithdrawalCount].date = block.timestamp; paymentProfiles[msg.sender].withdrawalCount++; _addWithdrawalsMade(); _addAmountWithdrawn(_amount); address payable payTo = payable(msg.sender); (bool success,) = payTo.call{value: _amount}(""); require(success); emit PaymentWithdrawalMade(msg.sender, _amount, block.number, block.timestamp); } function issueRefund(string memory _id) external { require(!payments[_id].isRefunded); address paymentVendor = payments[_id].vendor; require(msg.sender == paymentVendor); uint256 paymentAmount = payments[_id].amount; require(paymentProfiles[paymentVendor].currentBalance >= paymentAmount); payments[_id].isRefunded = true; paymentProfiles[paymentVendor].currentBalance -= paymentAmount; paymentProfiles[paymentVendor].amountRefunds = safeAdd(paymentProfiles[paymentVendor].amountRefunds, paymentAmount); paymentProfiles[paymentVendor].numberRefunds++; _addRefundsIssued(); _addRefundsAmount(paymentAmount); address payable customer = payable(payments[_id].customer); (bool success,) = customer.call{value: paymentAmount}(""); require(success); emit PaymentRefundIssued(_id, customer, paymentVendor, paymentAmount, block.number, block.timestamp); } function _addToPayments( string memory _id, uint256 _amount, address _vendor, bool _isInstallments, uint256 _fullAmount, uint8 _installmentPeriod ) private { payments[_id].id = _id; payments[_id].amount = _amount; payments[_id].vendor = _vendor; payments[_id].customer = msg.sender; payments[_id].isInstallments = _isInstallments; payments[_id].datePaid = block.timestamp; payments[_id].isPaid = true; if (_isInstallments) { uint256 remainingAmount = _fullAmount - _amount; uint256 _amountPerInstallment = remainingAmount / _installmentPeriod; payments[_id].installmentPeriod = _installmentPeriod; payments[_id].amountPerInstallment = _amountPerInstallment; payments[_id].remainingInstallments = _installmentPeriod; payments[_id].dateLastInstallmentPaid = block.timestamp; payments[_id].fullAmount = _fullAmount; } } function safeAdd(uint256 _currentAmount, uint256 _amountToBeAdded) internal view returns (uint256) { uint256 _allowedAmount = MAXUINT - _currentAmount; if (_amountToBeAdded <= _allowedAmount) { return _currentAmount + _amountToBeAdded; } return _currentAmount; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; abstract contract MyContext { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. 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 MyContext { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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 pragma solidity ^0.8.20; interface IOmnify { function addProfitsFromExternalContract() external payable; }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@layerzerolabs/lz-evm-oapp-v2/contracts/=lib/LayerZero-v2/packages/layerzero-v2/evm/oapp/contracts/", "@layerzerolabs/lz-evm-protocol-v2/=lib/LayerZero-v2/packages/layerzero-v2/evm/protocol/", "@layerzerolabs/lz-evm-messagelib-v2/=lib/LayerZero-v2/packages/layerzero-v2/evm/messagelib/", "solidity-bytes-utils/contracts/=lib/solidity-bytes-utils/contracts/", "LayerZero-v2/=lib/LayerZero-v2/", "ds-test/=lib/solidity-stringutils/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solidity-stringutils/=lib/solidity-stringutils/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_paramOmnifyAddress","type":"address"},{"internalType":"uint8","name":"_paramNativeDecimals","type":"uint8"},{"internalType":"uint256","name":"_paramFeePerInstallment","type":"uint256"},{"internalType":"uint256","name":"_paramFeePerPayment","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_customer","type":"address"},{"indexed":false,"internalType":"address","name":"_vendor","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"PaymentInstallmentPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_customer","type":"address"},{"indexed":false,"internalType":"address","name":"_vendor","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"PaymentMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_customer","type":"address"},{"indexed":false,"internalType":"address","name":"_vendor","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"PaymentRefundIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_vendor","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"PaymentWithdrawalMade","type":"event"},{"inputs":[],"name":"amountWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"assetsPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeKeeperAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePerInstallment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePerPayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"getMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"installmentAssetsPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"installmentsCreated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"installmentsPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"issueRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupPayment","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"customer","type":"address"},{"internalType":"address","name":"vendor","type":"address"},{"internalType":"bool","name":"isPaid","type":"bool"},{"internalType":"bool","name":"isRefunded","type":"bool"},{"internalType":"bool","name":"isInstallments","type":"bool"},{"internalType":"uint256","name":"fullAmount","type":"uint256"},{"internalType":"uint256","name":"amountPerInstallment","type":"uint256"},{"internalType":"uint8","name":"installmentPeriod","type":"uint8"},{"internalType":"uint8","name":"paidInstallments","type":"uint8"},{"internalType":"uint8","name":"remainingInstallments","type":"uint8"},{"internalType":"uint256","name":"datePaid","type":"uint256"},{"internalType":"uint256","name":"dateLastInstallmentPaid","type":"uint256"}],"internalType":"struct Payments.Payment","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileInstallmentPlans","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"}],"internalType":"struct Payments.PaymentProfileInstallmentPlan[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileNumberPaymentsMade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileNumberPaymentsReceived","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileNumberRefunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileNumberWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileReceipts","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"}],"internalType":"struct Payments.PaymentProfileReceipt[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileRefundAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileRevenue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileSpending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileWithdrawals","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"date","type":"uint256"}],"internalType":"struct Payments.PaymentProfileWithdrawal[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupPaymentProfileWithdrawnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_vendor","type":"address"},{"internalType":"bool","name":"_isInstallments","type":"bool"},{"internalType":"uint256","name":"_fullAmount","type":"uint256"},{"internalType":"uint8","name":"_installmentPeriod","type":"uint8"}],"name":"makePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"maxInstallmentPeriod","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeCoinDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"omnifyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"payInstallment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"paymentProfiles","outputs":[{"internalType":"uint256","name":"currentBalance","type":"uint256"},{"internalType":"uint256","name":"totalRevenue","type":"uint256"},{"internalType":"uint256","name":"numberPaymentsReceived","type":"uint256"},{"internalType":"uint256","name":"numberPaymentsMade","type":"uint256"},{"internalType":"uint256","name":"totalSpending","type":"uint256"},{"internalType":"uint256","name":"numberWithdrawals","type":"uint256"},{"internalType":"uint256","name":"amountWithdrawals","type":"uint256"},{"internalType":"uint256","name":"amountRefunds","type":"uint256"},{"internalType":"uint256","name":"numberRefunds","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"planCount","type":"uint256"},{"internalType":"uint256","name":"receiptCount","type":"uint256"},{"internalType":"uint256","name":"withdrawalCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"payments","outputs":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"customer","type":"address"},{"internalType":"address","name":"vendor","type":"address"},{"internalType":"bool","name":"isPaid","type":"bool"},{"internalType":"bool","name":"isRefunded","type":"bool"},{"internalType":"bool","name":"isInstallments","type":"bool"},{"internalType":"uint256","name":"fullAmount","type":"uint256"},{"internalType":"uint256","name":"amountPerInstallment","type":"uint256"},{"internalType":"uint8","name":"installmentPeriod","type":"uint8"},{"internalType":"uint8","name":"paidInstallments","type":"uint8"},{"internalType":"uint8","name":"remainingInstallments","type":"uint8"},{"internalType":"uint256","name":"datePaid","type":"uint256"},{"internalType":"uint256","name":"dateLastInstallmentPaid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentsMade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundsIssued","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeKeeper","type":"address"}],"name":"setFeeKeeperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePerInstallment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePerInstallmentByFeeKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePerPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePerPaymentByKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_period","type":"uint8"}],"name":"setMaxInstallmentPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setOmnifyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniqueCustomers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniqueVendors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalsMade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080346200012557601f6200298338819003918201601f19168301916001600160401b038311848410176200012a57808492608094604052833981010312620001255780516001600160a01b039182821691829003620001255760208101519160ff831683036200012557606060408301519201519233156200010c576000549060405195339083167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a36000196001556001600160a81b03199091163360ff60a01b19161760a09190911b60ff60a01b1617600055601180546001600160a01b0319169190911790556003556002556004805460ff191660781790556128429081620001418239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816301815c5b146123ff575080630d662a1f146123e15780630e39a5cd146123b6578063117e274b1461217257806317b6dd421461214957806318b0ea201461211e5780631906f343146120f257806319ddccf8146120c75780631c82d0f31461208e5780632168d0dd1461206b5780632b75bbc214611e625780632de6adb314611d1857806330d43f0414611cf5578063422bdac114611cc85780634ab274ba14611caa5780634ff59cf814611c8c5780636318ac6414611c695780636d3be85f14611b32578063715018a614611ad857806376b3336714611aba5780638486d5b31461162457806385620409146116065780638da5cb5b146115df5780638e9ca1ea146115c15780638f269128146115a357806390c549431461145457806395c301c11461143657806399103a92146114185780639b467be2146113fa5780639da923f6146113c7578063a04b81ea1461139c578063a1bfb0271461137e578063affaa4c914611353578063beb2e2201461128e578063c31e23181461126d578063c342cac31461122d578063c874a8f91461120f578063d3c08e95146111e2578063da76d5cd146110ae578063dc71f8ae146104c4578063de2231da1461049b578063e45594f114610470578063e61ad62914610433578063f2618bff14610415578063f2fde38b1461038a578063f4ed4c841461034a5763f94687131461022657600080fd5b3461034757602036600319011261034757600435906001600160401b038211610347576102d6610271602061025e3660048701612506565b816040519382858094519384920161254d565b81016012815203019020610284816125df565b9060018101549060018060a01b0390816002820154169160038201549060ff9160048401548360058601549260068701549460086007890154980154986040519c8d9c8d6101c0908181520190612570565b9a60208d015260408c0152811660608b0152818160a01c16151560808b0152818160a81c16151560a08b015260b01c16151560c089015260e0880152610100870152818116610120870152818160081c1661014087015260101c166101608501526101808401526101a08301520390f35b80fd5b503461034757602036600319011261034757610364612439565b61036c6127bc565b60018060a01b03166001600160601b0360a01b601054161760105580f35b5034610347576020366003190112610347576103a4612439565b6103ac6127bc565b6001600160a01b039081169081156103fc57600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346103475780600319360112610347576020600254604051908152f35b5034610347576020366003190112610347576020906008906040906001600160a01b0361045e612439565b16815260138452200154604051908152f35b5034610347576020366003190112610347576020906002906040906001600160a01b0361045e612439565b50346103475780600319360112610347576010546040516001600160a01b039091168152602090f35b5060c0366003190112610347576004356001600160401b0381116109ef576104f0903690600401612506565b906044356001600160a01b03811690036110a9576064351515606435036103475760ff60a4351660a435036110a95760ff600360405160208186516105388183858b0161254d565b81016012815203019020015460a01c166103475761055c60ff825460a01c16612684565b80602435106109ef57610573600254602435612772565b34036109ef57606435610dad575b506044356001600160a01b0316815260136020526040812080546105a89060243590612772565b90556044356001600160a01b03168152601360205260408120600101546002906105d590602435906127e8565b6044356001600160a01b031683526013602052604083206001810191909155018054610600906126f2565b90556044356001600160a01b03168152601360209081526040808320600b8101548452600e01909152812082516001600160401b038111610bd45761064582546125a5565b601f8111610d6c575b50806020601f8211600114610d08578491610cfd575b508160011b916000199060031b1c19161790555b6044356001600160a01b03168152601360205260408120600b01805461069d906126f2565b9055338152601360205260036106bc60243560046040852001546127e8565b338352601360205260408320906004820155016106d981546126f2565b90553381526013602052600e60408220600b8101548352016020526040812082516001600160401b038111610bd45761071282546125a5565b601f8111610cbc575b50806020601f8211600114610c58578491610c4d575b508160011b916000199060031b1c19161790555b3381526013602052600b604082200161075e81546126f2565b90556044356001600160a01b031681526013602052604081206009015460ff1615610c15575b33815260ff60096040832001541615610be8575b6107a36005546126f2565b6005556107b46024356006546127e8565b60065560405160208184516107cc818385890161254d565b81016012815203019020918051926001600160401b038411610bd4576107f281546125a5565b601f8111610b93575b50602093601f8111600114610b2f5783948192939491610b24575b508160011b916000199060031b1c19161790555b6040516001825161083f81846020870161254d565b82019160128352602081602435940301902001556003604051602081845161086a818385890161254d565b81016012815203019020016001600160601b0360a01b9060018060a01b036044351682825416179055600260405160208185516108aa8183858a0161254d565b8101601281520301902001903390825416179055600360405160208184516108d5818385890161254d565b60129082019081520301902001805460ff60b01b1916606435151560b01b60ff60b01b16179055604051815160079061091281846020870161254d565b8201916012835260208142940301902001556003604051602081845161093b818385890161254d565b60129082019081520301902001805460ff60a01b1916600160a01b179055606435610a02575b60115460025483916001600160a01b0316803b156109fe57829060046040518094819363162c2c8560e01b83525af180156109f3576109db575b506040517f07934d4fdcb2dcbf96247632d6fa979c171f0db15743b347362f0fd1deb86d8190806109d54243602435604435338a8761277f565b0390a180f35b6109e4906124b7565b6109ef57813861099b565b5080fd5b6040513d84823e3d90fd5b8280fd5b610a106024356084356126e5565b60ff60a4351615610b105760066040516020818551610a328183858a0161254d565b810160128152030190200160ff60a4351660ff1982541617905560056040516020818551610a638183858a0161254d565b8101946012865260ff60a43516900494030190200155610abb60405160068351610a9181846020880161254d565b601290830190815282900360200190912001805462ff0000191660a43560101b62ff000016179055565b60405160088251610ad081846020870161254d565b82019160128352602081429403019020015560405160048251610af781846020870161254d565b8201916012835260208160843594030190200155610961565b634e487b7160e01b83526012600452602483fd5b905083015138610816565b81845260208420845b601f1983168110610b7b575060019293949582601f19811610610b62575b5050811b01905561082a565b85015160001960f88460031b161c191690553880610b56565b84870151825560209687019660019092019101610b38565b81845260208420601f860160051c810160208710610bcd575b601f830160051c82018110610bc25750506107fb565b858155600101610bac565b5080610bac565b634e487b7160e01b83526041600452602483fd5b610bf3600c546126f2565b600c55338152601360205260408120600901805460ff19166001179055610798565b610c20600d546126f2565b600d556044356001600160a01b03168152601360205260408120600901805460ff19166001179055610784565b905084015138610731565b91508284526020842084925b601f1983168410610ca4576001935082601f19811610610c8b575b5050811b019055610745565b86015160001960f88460031b161c191690553880610c7f565b86810151825560209384019360019092019101610c64565b82845260208420601f830160051c810160208410610cf6575b601f830160051c82018110610ceb57505061071b565b858155600101610cd5565b5080610cd5565b905084015138610664565b91508284526020842084925b601f1983168410610d54576001935082601f19811610610d3b575b5050811b019055610678565b86015160001960f88460031b161c191690553880610d2f565b86810151825560209384019360019092019101610d14565b82845260208420601f830160051c810160208410610da6575b601f830160051c82018110610d9b57505061064e565b858155600101610d85565b5080610d85565b600160ff60a43516106109ef5760ff6004541660ff60a43516116109ef5760243560843511156109ef57610de56024356084356126e5565b10610347576044356001600160a01b0316808252601360209081526040808420600a9081015433865282862090910154938552818520908552600d01909152822083516001600160401b03811161109557610e4082546125a5565b601f8111611054575b50806020601f8211600114610ff0578591610fe5575b508160011b916000199060031b1c19161790555b3382526013602052600d60408320019082526020526040812082516001600160401b038111610bd457610ea682546125a5565b601f8111610fa4575b50806020601f8211600114610f40578491610f35575b508160011b916000199060031b1c19161790555b6044356001600160a01b03168152601360205260408120600a018054610efe906126f2565b90553381526013602052600a6040822001610f1981546126f2565b9055610f2c60ff60a435166007546127e8565b60075538610581565b905084015138610ec5565b91508284526020842084925b601f1983168410610f8c576001935082601f19811610610f73575b5050811b019055610ed9565b86015160001960f88460031b161c191690553880610f67565b86810151825560209384019360019092019101610f4c565b82845260208420601f830160051c810160208410610fde575b601f830160051c82018110610fd3575050610eaf565b858155600101610fbd565b5080610fbd565b905085015138610e5f565b91508285526020852085925b601f198316841061103c576001935082601f19811610611023575b5050811b019055610e73565b87015160001960f88460031b161c191690553880611017565b87810151825560209384019360019092019101610ffc565b82855260208520601f830160051c81016020841061108e575b601f830160051c82018110611083575050610e49565b86815560010161106d565b508061106d565b634e487b7160e01b84526041600452602484fd5b600080fd5b5034610347576020806003193601126109ef5760043533835260138083526040842080548381106111de57836110e3916126e5565b905533845280835260056110fe8360066040882001546127e8565b338652828552604086209060068201550161111981546126f2565b905533845280835260408420600f600c82015491828752018452826040862055338552818452600f604086200190855283524260016040862001553384528252600c604084200161116a81546126f2565b9055611177600a546126f2565b600a5561118681600b546127e8565b600b558280808084335af1611199612701565b50156109fe577f9b6093d97305786e64b25e3b74e3def1323187f81763a9a6d22ba86b37bdf0869160809160405191338352820152436040820152426060820152a180f35b8580fd5b5034610347576020366003190112610347576010546001600160a01b031633036103475760043560035580f35b50346103475780600319360112610347576020600654604051908152f35b503461034757602036600319011261034757611247612439565b61124f6127bc565b60018060a01b03166001600160601b0360a01b601154161760115580f35b5034610347578060031936011261034757602060ff60045416604051908152f35b5034610347576020366003190112610347576101a0906040906001600160a01b036112b7612439565b1681526013602052208054906001810154906002810154600382015460048301546005840154600685015460078601549160088701549360ff60098901541695600a89015497600c600b8b01549a01549a6040519c8d5260208d015260408c015260608b015260808a015260a089015260c088015260e08701526101008601521515610120850152610140840152610160830152610180820152f35b5034610347576020366003190112610347576020906007906040906001600160a01b0361045e612439565b50346103475780600319360112610347576020600754604051908152f35b5034610347576020366003190112610347576020906001906040906001600160a01b0361045e612439565b50346103475760203660031901126103475760ff6113e3612595565b6113eb6127bc565b1660ff19600454161760045580f35b50346103475780600319360112610347576020600954604051908152f35b50346103475780600319360112610347576020600a54604051908152f35b50346103475780600319360112610347576020600d54604051908152f35b5034610347576020806003193601126109ef576001600160a01b03611477612439565b168083526013808352600a6040852001549061149282612731565b926114a060405194856124ca565b8284526114ac83612731565b601f190185875b828110611585575050508261152a575b50506040805184815283518186018190529094600582901b860183019481019350909185015b8287106114f65785850386f35b90919293828061151a600193603f198a820301865282895151918181520190612570565b96019201960195929190926114e9565b855b83811061153957506114c3565b600190828852838752600d60408920018189528752604088206115676040519161156283612481565b6125df565b81526115738288612748565b5261157e8187612748565b500161152c565b60405161159181612481565b606081528282890101520186906114b3565b50346103475780600319360112610347576020600f54604051908152f35b50346103475780600319360112610347576020600354604051908152f35b5034610347578060031936011261034757546040516001600160a01b039091168152602090f35b50346103475780600319360112610347576020600c54604051908152f35b5060209081600319360112610347576004356001600160401b0381116109ef57611652903690600401612506565b916040518351908285019161166881838561254d565b81019060129384835260ff80938383600395869303019020015460b01c16156111de5782600660405183818b516116a081838c61254d565b81018a815203019020015460101c16156111de57600560405182818a516116c881838b61254d565b8101898152030190200154946040519188516116e581858961254d565b830182815284848360018060a01b0396879403019020015416958360028b8460405180925161171581838961254d565b810188815203019020015416956040518b5161173281838661254d565b8101858152819003840190206006015460019060101c82168103611a33578160068d8660405180925161176681838b61254d565b81018a815203019020015460081c168a8102908082048c1490151715611a1f578c60046117b96117dc93856117a88a8a8d604051809481938b5192839161254d565b820190815203019020015490612772565b91876040518092516117cc81838c61254d565b81018b81520301902001546126e5565b6117e7885482612772565b3403611a1b57611857908a8360408f83815260138a5281812061180b868254612772565b905583815260138a52611823858484842001546127e8565b93815260138a52200155898d528c60046040611844848383862001546127e8565b928d815260138a522001556009546127e8565b6009555b888b5260138452600260408c200161187381546126f2565b9055878b52601384528660408c200161188c81546126f2565b905560068c856040518092516118a381838a61254d565b8101898152030190200190815490838260081c16848114611a07579061ff00910160081b169061ff00191617905560068b846040518092516118e681838961254d565b8101888152030190200190815460101c1680156119f357815462ff0000191660001990910160101b62ff00001617905560089161192d916040519283918d5192839161254d565b82019384528142940301902001556119466008546126f2565b60085560115416905490803b156111de57859060046040518094819363162c2c8560e01b83525af180156119e8576119b1575b506109d5907fdfaae0cc8a41588cc50ffaf5f0a4d39d2ccd01d053ba26b8b81fd417089772539495604051948594429343938761277f565b907fdfaae0cc8a41588cc50ffaf5f0a4d39d2ccd01d053ba26b8b81fd41708977253946119e06109d5936124b7565b945090611979565b6040513d87823e3d90fd5b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b8e52601160045260248efd5b8b80fd5b634e487b7160e01b8c52601160045260248cfd5b611a3e87548b612772565b3403611ab657611a938a600460408e8d815260138952818120611a62858254612772565b90558d8152601389528d611a7b858885852001546127e8565b90825260138a528683832001558c81522001546127e8565b888c5260138552600460408d200155611aae8a6009546127e8565b60095561185b565b8a80fd5b50346103475780600319360112610347576020600e54604051908152f35b5034610347578060031936011261034757611af16127bc565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610347576020806003193601126109ef576001600160a01b03611b55612439565b16918281526013808352600c60408320015490611b7182612731565b94611b7f60405196876124ca565b828652611b8b83612731565b601f190185855b828110611c475750505082611beb575b505050916040519180830190808452825180925280604085019301945b828110611bcc5784840385f35b8551805185528201518483015294810194604090930192600101611bbf565b835b838110611bfa5750611ba2565b600190828652838752600f60408720018187528752604086208260405191611c218361249c565b80548352015488820152611c35828a612748565b52611c408189612748565b5001611bed565b604051611c538161249c565b878152878382015282828b010152018690611b92565b503461034757806003193601126103475760ff6020915460a01c16604051908152f35b50346103475780600319360112610347576020600554604051908152f35b50346103475780600319360112610347576020600854604051908152f35b5034610347576020366003190112610347576010546001600160a01b031633036103475760043560025580f35b503461034757602036600319011261034757611d0f6127bc565b60043560035580f35b5034610347576020806003193601126109ef576001600160a01b03611d3b612439565b168083526013808352600b60408520015490611d5682612731565b92611d6460405194856124ca565b828452611d7083612731565b601f190185875b828110611e445750505082611dee575b50506040805184815283518186018190529094600582901b860183019481019350909185015b828710611dba5785850386f35b909192938280611dde600193603f198a820301865282895151918181520190612570565b9601920196019592919092611dad565b855b838110611dfd5750611d87565b600190828852838752600e6040892001818952875260408820611e266040519161156283612481565b8152611e328288612748565b52611e3d8187612748565b5001611df0565b604051611e5081612481565b60608152828289010152018690611d77565b5034610347576020806003193601126109ef576004356001600160401b0381116109fe57611e94903690600401612506565b6040519060ff6003825193858181860196611eb081838a61254d565b81016012815203019020015460a81c1661206757604051928151611ed581868661254d565b8401601281526003858360018060a01b0397889403019020015416938433036111de5785600160405184818751611f0d81838c61254d565b8101601281520301902001549486825260138452856040832054106109ef5783816008611f9d89600760406002988e6003611f588f611fe99c8c91875193849283925192839161254d565b60129082019081520301902001805460ff60a81b1916600160a81b179055808252601389528282208054611f8d9087906126e5565b90558152601388522001546127e8565b8a8c526013845260408c2090600782015501611fb981546126f2565b9055611fc6600e546126f2565b600e55611fd588600f546127e8565b600f5560405180938192895192839161254d565b81016012815203019020015416928580808084885af1612007612701565b50156111de577f89dc25b437baf4da76c02c69fd9f45661d822f0425d0ef8f9af5b3f341a4eb5e946120479460405195869560c0875260c0870190612570565b93850152604084015260608301524360808301524260a08301520390a180f35b8380fd5b5034610347576020366003190112610347576120856127bc565b60043560025580f35b5034610347576020366003190112610347576020906040906001600160a01b036120b6612439565b168152601383522054604051908152f35b5034610347576020366003190112610347576020906006906040906001600160a01b0361045e612439565b5034610347576020366003190112610347576020612116612111612595565b612684565b604051908152f35b5034610347576020366003190112610347576020906005906040906001600160a01b0361045e612439565b50346103475780600319360112610347576011546040516001600160a01b039091168152602090f35b5034610347576020366003190112610347576004356001600160401b0381116109ef5761221e916121a96020923690600401612506565b906101a06040516121b98161244f565b6060815282858201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201528261014082015282610160820152826101808201520152816040519382858094519384920161254d565b810160128152030190206008604051916122378361244f565b612240816125df565b83526001810154602084015260018060a01b03600282015416604084015260ff600382015460018060a01b0381166060860152818160a01c1615156080860152818160a81c16151560a086015260b01c16151560c0840152600481015460e0840152600581015461010084015260ff60068201548181166101208601528181851c1661014086015260101c16610160840152600781015461018084015201546101a08201526040518091602082526101a061230982516101c060208601526101e0850190612570565b916020810151604085015260018060a01b03604082015116606085015260018060a01b0360608201511660808501526080810151151560a085015260a0810151151560c085015260c0810151151560e085015260e081015161010085015261010081015161012085015260ff6101208201511661014085015260ff6101408201511661016085015260ff610160820151166101808501526101808101518285015201516101c08301520390f35b5034610347576020366003190112610347576020906004906040906001600160a01b0361045e612439565b50346103475780600319360112610347576020600b54604051908152f35b9050346109ef5760203660031901126109ef576020916003906040906001600160a01b0361242b612439565b168152601385522001548152f35b600435906001600160a01b03821682036110a957565b6101c081019081106001600160401b0382111761246b57604052565b634e487b7160e01b600052604160045260246000fd5b602081019081106001600160401b0382111761246b57604052565b604081019081106001600160401b0382111761246b57604052565b6001600160401b03811161246b57604052565b90601f801991011681019081106001600160401b0382111761246b57604052565b6001600160401b03811161246b57601f01601f191660200190565b81601f820112156110a95780359061251d826124eb565b9261252b60405194856124ca565b828452602083830101116110a957816000926020809301838601378301015290565b60005b8381106125605750506000910152565b8181015183820152602001612550565b906020916125898151809281855285808601910161254d565b601f01601f1916010190565b6004359060ff821682036110a957565b90600182811c921680156125d5575b60208310146125bf57565b634e487b7160e01b600052602260045260246000fd5b91607f16916125b4565b906040519182600082546125f2816125a5565b908184526020946001916001811690816000146126625750600114612623575b505050612621925003836124ca565b565b600090815285812095935091905b81831061264a5750506126219350820101388080612612565b85548884018501529485019487945091830191612631565b9250505061262194925060ff191682840152151560051b820101388080612612565b60ff1680156126df57600181146126df57600281146126df5760038110156126ac5750600190565b6002190160ff81116126c95760ff16604d81116126c957600a0a90565b634e487b7160e01b600052601160045260246000fd5b50600190565b919082039182116126c957565b60001981146126c95760010190565b3d1561272c573d90612712826124eb565b9161272060405193846124ca565b82523d6000602084013e565b606090565b6001600160401b03811161246b5760051b60200190565b805182101561275c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b919082018092116126c957565b929695949161279960a0959260c0865260c0860190612570565b97600180871b038092166020860152166040840152606083015260808201520152565b6000546001600160a01b031633036127d057565b60405163118cdaa760e01b8152336004820152602490fd5b906127f5826001546126e5565b811115612800575090565b61280991612772565b9056fea26469706673582212206d833259aec4d9b01326be5007fad4495f5f71b2b71c299edac5b7bc2071b43964736f6c63430008180033000000000000000000000000883ba282d409e0e984bef70b338f641d0045942f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000305d3509223c800000000000000000000000000000000000000000000000000004180cefe0bd8000
Deployed Bytecode
0x608080604052600436101561001357600080fd5b600090813560e01c90816301815c5b146123ff575080630d662a1f146123e15780630e39a5cd146123b6578063117e274b1461217257806317b6dd421461214957806318b0ea201461211e5780631906f343146120f257806319ddccf8146120c75780631c82d0f31461208e5780632168d0dd1461206b5780632b75bbc214611e625780632de6adb314611d1857806330d43f0414611cf5578063422bdac114611cc85780634ab274ba14611caa5780634ff59cf814611c8c5780636318ac6414611c695780636d3be85f14611b32578063715018a614611ad857806376b3336714611aba5780638486d5b31461162457806385620409146116065780638da5cb5b146115df5780638e9ca1ea146115c15780638f269128146115a357806390c549431461145457806395c301c11461143657806399103a92146114185780639b467be2146113fa5780639da923f6146113c7578063a04b81ea1461139c578063a1bfb0271461137e578063affaa4c914611353578063beb2e2201461128e578063c31e23181461126d578063c342cac31461122d578063c874a8f91461120f578063d3c08e95146111e2578063da76d5cd146110ae578063dc71f8ae146104c4578063de2231da1461049b578063e45594f114610470578063e61ad62914610433578063f2618bff14610415578063f2fde38b1461038a578063f4ed4c841461034a5763f94687131461022657600080fd5b3461034757602036600319011261034757600435906001600160401b038211610347576102d6610271602061025e3660048701612506565b816040519382858094519384920161254d565b81016012815203019020610284816125df565b9060018101549060018060a01b0390816002820154169160038201549060ff9160048401548360058601549260068701549460086007890154980154986040519c8d9c8d6101c0908181520190612570565b9a60208d015260408c0152811660608b0152818160a01c16151560808b0152818160a81c16151560a08b015260b01c16151560c089015260e0880152610100870152818116610120870152818160081c1661014087015260101c166101608501526101808401526101a08301520390f35b80fd5b503461034757602036600319011261034757610364612439565b61036c6127bc565b60018060a01b03166001600160601b0360a01b601054161760105580f35b5034610347576020366003190112610347576103a4612439565b6103ac6127bc565b6001600160a01b039081169081156103fc57600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346103475780600319360112610347576020600254604051908152f35b5034610347576020366003190112610347576020906008906040906001600160a01b0361045e612439565b16815260138452200154604051908152f35b5034610347576020366003190112610347576020906002906040906001600160a01b0361045e612439565b50346103475780600319360112610347576010546040516001600160a01b039091168152602090f35b5060c0366003190112610347576004356001600160401b0381116109ef576104f0903690600401612506565b906044356001600160a01b03811690036110a9576064351515606435036103475760ff60a4351660a435036110a95760ff600360405160208186516105388183858b0161254d565b81016012815203019020015460a01c166103475761055c60ff825460a01c16612684565b80602435106109ef57610573600254602435612772565b34036109ef57606435610dad575b506044356001600160a01b0316815260136020526040812080546105a89060243590612772565b90556044356001600160a01b03168152601360205260408120600101546002906105d590602435906127e8565b6044356001600160a01b031683526013602052604083206001810191909155018054610600906126f2565b90556044356001600160a01b03168152601360209081526040808320600b8101548452600e01909152812082516001600160401b038111610bd45761064582546125a5565b601f8111610d6c575b50806020601f8211600114610d08578491610cfd575b508160011b916000199060031b1c19161790555b6044356001600160a01b03168152601360205260408120600b01805461069d906126f2565b9055338152601360205260036106bc60243560046040852001546127e8565b338352601360205260408320906004820155016106d981546126f2565b90553381526013602052600e60408220600b8101548352016020526040812082516001600160401b038111610bd45761071282546125a5565b601f8111610cbc575b50806020601f8211600114610c58578491610c4d575b508160011b916000199060031b1c19161790555b3381526013602052600b604082200161075e81546126f2565b90556044356001600160a01b031681526013602052604081206009015460ff1615610c15575b33815260ff60096040832001541615610be8575b6107a36005546126f2565b6005556107b46024356006546127e8565b60065560405160208184516107cc818385890161254d565b81016012815203019020918051926001600160401b038411610bd4576107f281546125a5565b601f8111610b93575b50602093601f8111600114610b2f5783948192939491610b24575b508160011b916000199060031b1c19161790555b6040516001825161083f81846020870161254d565b82019160128352602081602435940301902001556003604051602081845161086a818385890161254d565b81016012815203019020016001600160601b0360a01b9060018060a01b036044351682825416179055600260405160208185516108aa8183858a0161254d565b8101601281520301902001903390825416179055600360405160208184516108d5818385890161254d565b60129082019081520301902001805460ff60b01b1916606435151560b01b60ff60b01b16179055604051815160079061091281846020870161254d565b8201916012835260208142940301902001556003604051602081845161093b818385890161254d565b60129082019081520301902001805460ff60a01b1916600160a01b179055606435610a02575b60115460025483916001600160a01b0316803b156109fe57829060046040518094819363162c2c8560e01b83525af180156109f3576109db575b506040517f07934d4fdcb2dcbf96247632d6fa979c171f0db15743b347362f0fd1deb86d8190806109d54243602435604435338a8761277f565b0390a180f35b6109e4906124b7565b6109ef57813861099b565b5080fd5b6040513d84823e3d90fd5b8280fd5b610a106024356084356126e5565b60ff60a4351615610b105760066040516020818551610a328183858a0161254d565b810160128152030190200160ff60a4351660ff1982541617905560056040516020818551610a638183858a0161254d565b8101946012865260ff60a43516900494030190200155610abb60405160068351610a9181846020880161254d565b601290830190815282900360200190912001805462ff0000191660a43560101b62ff000016179055565b60405160088251610ad081846020870161254d565b82019160128352602081429403019020015560405160048251610af781846020870161254d565b8201916012835260208160843594030190200155610961565b634e487b7160e01b83526012600452602483fd5b905083015138610816565b81845260208420845b601f1983168110610b7b575060019293949582601f19811610610b62575b5050811b01905561082a565b85015160001960f88460031b161c191690553880610b56565b84870151825560209687019660019092019101610b38565b81845260208420601f860160051c810160208710610bcd575b601f830160051c82018110610bc25750506107fb565b858155600101610bac565b5080610bac565b634e487b7160e01b83526041600452602483fd5b610bf3600c546126f2565b600c55338152601360205260408120600901805460ff19166001179055610798565b610c20600d546126f2565b600d556044356001600160a01b03168152601360205260408120600901805460ff19166001179055610784565b905084015138610731565b91508284526020842084925b601f1983168410610ca4576001935082601f19811610610c8b575b5050811b019055610745565b86015160001960f88460031b161c191690553880610c7f565b86810151825560209384019360019092019101610c64565b82845260208420601f830160051c810160208410610cf6575b601f830160051c82018110610ceb57505061071b565b858155600101610cd5565b5080610cd5565b905084015138610664565b91508284526020842084925b601f1983168410610d54576001935082601f19811610610d3b575b5050811b019055610678565b86015160001960f88460031b161c191690553880610d2f565b86810151825560209384019360019092019101610d14565b82845260208420601f830160051c810160208410610da6575b601f830160051c82018110610d9b57505061064e565b858155600101610d85565b5080610d85565b600160ff60a43516106109ef5760ff6004541660ff60a43516116109ef5760243560843511156109ef57610de56024356084356126e5565b10610347576044356001600160a01b0316808252601360209081526040808420600a9081015433865282862090910154938552818520908552600d01909152822083516001600160401b03811161109557610e4082546125a5565b601f8111611054575b50806020601f8211600114610ff0578591610fe5575b508160011b916000199060031b1c19161790555b3382526013602052600d60408320019082526020526040812082516001600160401b038111610bd457610ea682546125a5565b601f8111610fa4575b50806020601f8211600114610f40578491610f35575b508160011b916000199060031b1c19161790555b6044356001600160a01b03168152601360205260408120600a018054610efe906126f2565b90553381526013602052600a6040822001610f1981546126f2565b9055610f2c60ff60a435166007546127e8565b60075538610581565b905084015138610ec5565b91508284526020842084925b601f1983168410610f8c576001935082601f19811610610f73575b5050811b019055610ed9565b86015160001960f88460031b161c191690553880610f67565b86810151825560209384019360019092019101610f4c565b82845260208420601f830160051c810160208410610fde575b601f830160051c82018110610fd3575050610eaf565b858155600101610fbd565b5080610fbd565b905085015138610e5f565b91508285526020852085925b601f198316841061103c576001935082601f19811610611023575b5050811b019055610e73565b87015160001960f88460031b161c191690553880611017565b87810151825560209384019360019092019101610ffc565b82855260208520601f830160051c81016020841061108e575b601f830160051c82018110611083575050610e49565b86815560010161106d565b508061106d565b634e487b7160e01b84526041600452602484fd5b600080fd5b5034610347576020806003193601126109ef5760043533835260138083526040842080548381106111de57836110e3916126e5565b905533845280835260056110fe8360066040882001546127e8565b338652828552604086209060068201550161111981546126f2565b905533845280835260408420600f600c82015491828752018452826040862055338552818452600f604086200190855283524260016040862001553384528252600c604084200161116a81546126f2565b9055611177600a546126f2565b600a5561118681600b546127e8565b600b558280808084335af1611199612701565b50156109fe577f9b6093d97305786e64b25e3b74e3def1323187f81763a9a6d22ba86b37bdf0869160809160405191338352820152436040820152426060820152a180f35b8580fd5b5034610347576020366003190112610347576010546001600160a01b031633036103475760043560035580f35b50346103475780600319360112610347576020600654604051908152f35b503461034757602036600319011261034757611247612439565b61124f6127bc565b60018060a01b03166001600160601b0360a01b601154161760115580f35b5034610347578060031936011261034757602060ff60045416604051908152f35b5034610347576020366003190112610347576101a0906040906001600160a01b036112b7612439565b1681526013602052208054906001810154906002810154600382015460048301546005840154600685015460078601549160088701549360ff60098901541695600a89015497600c600b8b01549a01549a6040519c8d5260208d015260408c015260608b015260808a015260a089015260c088015260e08701526101008601521515610120850152610140840152610160830152610180820152f35b5034610347576020366003190112610347576020906007906040906001600160a01b0361045e612439565b50346103475780600319360112610347576020600754604051908152f35b5034610347576020366003190112610347576020906001906040906001600160a01b0361045e612439565b50346103475760203660031901126103475760ff6113e3612595565b6113eb6127bc565b1660ff19600454161760045580f35b50346103475780600319360112610347576020600954604051908152f35b50346103475780600319360112610347576020600a54604051908152f35b50346103475780600319360112610347576020600d54604051908152f35b5034610347576020806003193601126109ef576001600160a01b03611477612439565b168083526013808352600a6040852001549061149282612731565b926114a060405194856124ca565b8284526114ac83612731565b601f190185875b828110611585575050508261152a575b50506040805184815283518186018190529094600582901b860183019481019350909185015b8287106114f65785850386f35b90919293828061151a600193603f198a820301865282895151918181520190612570565b96019201960195929190926114e9565b855b83811061153957506114c3565b600190828852838752600d60408920018189528752604088206115676040519161156283612481565b6125df565b81526115738288612748565b5261157e8187612748565b500161152c565b60405161159181612481565b606081528282890101520186906114b3565b50346103475780600319360112610347576020600f54604051908152f35b50346103475780600319360112610347576020600354604051908152f35b5034610347578060031936011261034757546040516001600160a01b039091168152602090f35b50346103475780600319360112610347576020600c54604051908152f35b5060209081600319360112610347576004356001600160401b0381116109ef57611652903690600401612506565b916040518351908285019161166881838561254d565b81019060129384835260ff80938383600395869303019020015460b01c16156111de5782600660405183818b516116a081838c61254d565b81018a815203019020015460101c16156111de57600560405182818a516116c881838b61254d565b8101898152030190200154946040519188516116e581858961254d565b830182815284848360018060a01b0396879403019020015416958360028b8460405180925161171581838961254d565b810188815203019020015416956040518b5161173281838661254d565b8101858152819003840190206006015460019060101c82168103611a33578160068d8660405180925161176681838b61254d565b81018a815203019020015460081c168a8102908082048c1490151715611a1f578c60046117b96117dc93856117a88a8a8d604051809481938b5192839161254d565b820190815203019020015490612772565b91876040518092516117cc81838c61254d565b81018b81520301902001546126e5565b6117e7885482612772565b3403611a1b57611857908a8360408f83815260138a5281812061180b868254612772565b905583815260138a52611823858484842001546127e8565b93815260138a52200155898d528c60046040611844848383862001546127e8565b928d815260138a522001556009546127e8565b6009555b888b5260138452600260408c200161187381546126f2565b9055878b52601384528660408c200161188c81546126f2565b905560068c856040518092516118a381838a61254d565b8101898152030190200190815490838260081c16848114611a07579061ff00910160081b169061ff00191617905560068b846040518092516118e681838961254d565b8101888152030190200190815460101c1680156119f357815462ff0000191660001990910160101b62ff00001617905560089161192d916040519283918d5192839161254d565b82019384528142940301902001556119466008546126f2565b60085560115416905490803b156111de57859060046040518094819363162c2c8560e01b83525af180156119e8576119b1575b506109d5907fdfaae0cc8a41588cc50ffaf5f0a4d39d2ccd01d053ba26b8b81fd417089772539495604051948594429343938761277f565b907fdfaae0cc8a41588cc50ffaf5f0a4d39d2ccd01d053ba26b8b81fd41708977253946119e06109d5936124b7565b945090611979565b6040513d87823e3d90fd5b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b8e52601160045260248efd5b8b80fd5b634e487b7160e01b8c52601160045260248cfd5b611a3e87548b612772565b3403611ab657611a938a600460408e8d815260138952818120611a62858254612772565b90558d8152601389528d611a7b858885852001546127e8565b90825260138a528683832001558c81522001546127e8565b888c5260138552600460408d200155611aae8a6009546127e8565b60095561185b565b8a80fd5b50346103475780600319360112610347576020600e54604051908152f35b5034610347578060031936011261034757611af16127bc565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610347576020806003193601126109ef576001600160a01b03611b55612439565b16918281526013808352600c60408320015490611b7182612731565b94611b7f60405196876124ca565b828652611b8b83612731565b601f190185855b828110611c475750505082611beb575b505050916040519180830190808452825180925280604085019301945b828110611bcc5784840385f35b8551805185528201518483015294810194604090930192600101611bbf565b835b838110611bfa5750611ba2565b600190828652838752600f60408720018187528752604086208260405191611c218361249c565b80548352015488820152611c35828a612748565b52611c408189612748565b5001611bed565b604051611c538161249c565b878152878382015282828b010152018690611b92565b503461034757806003193601126103475760ff6020915460a01c16604051908152f35b50346103475780600319360112610347576020600554604051908152f35b50346103475780600319360112610347576020600854604051908152f35b5034610347576020366003190112610347576010546001600160a01b031633036103475760043560025580f35b503461034757602036600319011261034757611d0f6127bc565b60043560035580f35b5034610347576020806003193601126109ef576001600160a01b03611d3b612439565b168083526013808352600b60408520015490611d5682612731565b92611d6460405194856124ca565b828452611d7083612731565b601f190185875b828110611e445750505082611dee575b50506040805184815283518186018190529094600582901b860183019481019350909185015b828710611dba5785850386f35b909192938280611dde600193603f198a820301865282895151918181520190612570565b9601920196019592919092611dad565b855b838110611dfd5750611d87565b600190828852838752600e6040892001818952875260408820611e266040519161156283612481565b8152611e328288612748565b52611e3d8187612748565b5001611df0565b604051611e5081612481565b60608152828289010152018690611d77565b5034610347576020806003193601126109ef576004356001600160401b0381116109fe57611e94903690600401612506565b6040519060ff6003825193858181860196611eb081838a61254d565b81016012815203019020015460a81c1661206757604051928151611ed581868661254d565b8401601281526003858360018060a01b0397889403019020015416938433036111de5785600160405184818751611f0d81838c61254d565b8101601281520301902001549486825260138452856040832054106109ef5783816008611f9d89600760406002988e6003611f588f611fe99c8c91875193849283925192839161254d565b60129082019081520301902001805460ff60a81b1916600160a81b179055808252601389528282208054611f8d9087906126e5565b90558152601388522001546127e8565b8a8c526013845260408c2090600782015501611fb981546126f2565b9055611fc6600e546126f2565b600e55611fd588600f546127e8565b600f5560405180938192895192839161254d565b81016012815203019020015416928580808084885af1612007612701565b50156111de577f89dc25b437baf4da76c02c69fd9f45661d822f0425d0ef8f9af5b3f341a4eb5e946120479460405195869560c0875260c0870190612570565b93850152604084015260608301524360808301524260a08301520390a180f35b8380fd5b5034610347576020366003190112610347576120856127bc565b60043560025580f35b5034610347576020366003190112610347576020906040906001600160a01b036120b6612439565b168152601383522054604051908152f35b5034610347576020366003190112610347576020906006906040906001600160a01b0361045e612439565b5034610347576020366003190112610347576020612116612111612595565b612684565b604051908152f35b5034610347576020366003190112610347576020906005906040906001600160a01b0361045e612439565b50346103475780600319360112610347576011546040516001600160a01b039091168152602090f35b5034610347576020366003190112610347576004356001600160401b0381116109ef5761221e916121a96020923690600401612506565b906101a06040516121b98161244f565b6060815282858201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201528261014082015282610160820152826101808201520152816040519382858094519384920161254d565b810160128152030190206008604051916122378361244f565b612240816125df565b83526001810154602084015260018060a01b03600282015416604084015260ff600382015460018060a01b0381166060860152818160a01c1615156080860152818160a81c16151560a086015260b01c16151560c0840152600481015460e0840152600581015461010084015260ff60068201548181166101208601528181851c1661014086015260101c16610160840152600781015461018084015201546101a08201526040518091602082526101a061230982516101c060208601526101e0850190612570565b916020810151604085015260018060a01b03604082015116606085015260018060a01b0360608201511660808501526080810151151560a085015260a0810151151560c085015260c0810151151560e085015260e081015161010085015261010081015161012085015260ff6101208201511661014085015260ff6101408201511661016085015260ff610160820151166101808501526101808101518285015201516101c08301520390f35b5034610347576020366003190112610347576020906004906040906001600160a01b0361045e612439565b50346103475780600319360112610347576020600b54604051908152f35b9050346109ef5760203660031901126109ef576020916003906040906001600160a01b0361242b612439565b168152601385522001548152f35b600435906001600160a01b03821682036110a957565b6101c081019081106001600160401b0382111761246b57604052565b634e487b7160e01b600052604160045260246000fd5b602081019081106001600160401b0382111761246b57604052565b604081019081106001600160401b0382111761246b57604052565b6001600160401b03811161246b57604052565b90601f801991011681019081106001600160401b0382111761246b57604052565b6001600160401b03811161246b57601f01601f191660200190565b81601f820112156110a95780359061251d826124eb565b9261252b60405194856124ca565b828452602083830101116110a957816000926020809301838601378301015290565b60005b8381106125605750506000910152565b8181015183820152602001612550565b906020916125898151809281855285808601910161254d565b601f01601f1916010190565b6004359060ff821682036110a957565b90600182811c921680156125d5575b60208310146125bf57565b634e487b7160e01b600052602260045260246000fd5b91607f16916125b4565b906040519182600082546125f2816125a5565b908184526020946001916001811690816000146126625750600114612623575b505050612621925003836124ca565b565b600090815285812095935091905b81831061264a5750506126219350820101388080612612565b85548884018501529485019487945091830191612631565b9250505061262194925060ff191682840152151560051b820101388080612612565b60ff1680156126df57600181146126df57600281146126df5760038110156126ac5750600190565b6002190160ff81116126c95760ff16604d81116126c957600a0a90565b634e487b7160e01b600052601160045260246000fd5b50600190565b919082039182116126c957565b60001981146126c95760010190565b3d1561272c573d90612712826124eb565b9161272060405193846124ca565b82523d6000602084013e565b606090565b6001600160401b03811161246b5760051b60200190565b805182101561275c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b919082018092116126c957565b929695949161279960a0959260c0865260c0860190612570565b97600180871b038092166020860152166040840152606083015260808201520152565b6000546001600160a01b031633036127d057565b60405163118cdaa760e01b8152336004820152602490fd5b906127f5826001546126e5565b811115612800575090565b61280991612772565b9056fea26469706673582212206d833259aec4d9b01326be5007fad4495f5f71b2b71c299edac5b7bc2071b43964736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000883ba282d409e0e984bef70b338f641d0045942f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000305d3509223c800000000000000000000000000000000000000000000000000004180cefe0bd8000
-----Decoded View---------------
Arg [0] : _paramOmnifyAddress (address): 0x883bA282D409e0E984Bef70B338f641D0045942F
Arg [1] : _paramNativeDecimals (uint8): 18
Arg [2] : _paramFeePerInstallment (uint256): 3485000000000000000
Arg [3] : _paramFeePerPayment (uint256): 295000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000883ba282d409e0e984bef70b338f641d0045942f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [2] : 000000000000000000000000000000000000000000000000305d3509223c8000
Arg [3] : 00000000000000000000000000000000000000000000000004180cefe0bd8000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.