ETH Price: $3,137.07 (-8.72%)
Gas: 9 Gwei

Contract

0xe085C16c49290292de1Ad6383D480d286780FDa5
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Send Payment193998942024-03-09 20:21:35137 days ago1710015695IN
0xe085C16c...86780FDa5
0.3746 ETH0.0041970464.26143986
0x60806040193807342024-03-07 3:52:59140 days ago1709783579IN
 Create: Payment
0 ETH0.026405971.05599614

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
193998942024-03-09 20:21:35137 days ago1710015695
0xe085C16c...86780FDa5
0.011238 ETH
193998942024-03-09 20:21:35137 days ago1710015695
0xe085C16c...86780FDa5
0.051022 ETH
193998942024-03-09 20:21:35137 days ago1710015695
0xe085C16c...86780FDa5
0.18624 ETH
193998942024-03-09 20:21:35137 days ago1710015695
0xe085C16c...86780FDa5
0.1261 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Payment

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : Payment.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Payment {
    error Payment__PaymentAmountMustBeGreaterThanZero();
    error Payment__FailedToSendEther();
    error Payment__InvalidReceiverAddress();
    error Payment__ArrayLengthMismatch();
    error Payment__NotEnoughEtherSent();

    address public constant OWNER = 0x61ec9Cbc365b23eC035986A30FDed12e94756b3B;
    uint256 public constant FEE_PERCENTAGE = 3; // 3%

    function sendPayment(address[] calldata recipients, uint256[] calldata amounts) external payable {
        if (recipients.length != amounts.length) {
            revert Payment__ArrayLengthMismatch();
        }

        uint256 totalAmount = 0;
        for (uint256 i = 0; i < amounts.length; i++) {
            totalAmount += amounts[i];
        }

        if (msg.value < totalAmount) {
            revert Payment__NotEnoughEtherSent();
        }

        uint256 totalEtherSentToRecipients = 0;
        for (uint256 i = 0; i < recipients.length; i++) {
            if (recipients[i] == address(0)) {
                revert Payment__InvalidReceiverAddress();
            }

            if (amounts[i] == 0) {
                revert Payment__PaymentAmountMustBeGreaterThanZero();
            }

            uint256 fee = (amounts[i] * FEE_PERCENTAGE) / 100;
            uint256 amountToSendToRecipient = amounts[i] - fee;
            totalEtherSentToRecipients += amountToSendToRecipient;
            (bool sentToReceiver,) = recipients[i].call{value: amountToSendToRecipient}("");
            if (!sentToReceiver) {
                revert Payment__FailedToSendEther();
            }
        }

        (bool sentToOwner,) = OWNER.call{value: msg.value - totalEtherSentToRecipients}("");
        if (!sentToOwner) {
            revert Payment__FailedToSendEther();
        }
    }

    receive() external payable {
        (bool sentToOwner,) = OWNER.call{value: msg.value}("");
        if (!sentToOwner) {
            revert Payment__FailedToSendEther();
        }
    }

    fallback() external payable {
        (bool sentToOwner,) = OWNER.call{value: msg.value}("");
        if (!sentToOwner) {
            revert Payment__FailedToSendEther();
        }
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"Payment__ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"Payment__FailedToSendEther","type":"error"},{"inputs":[],"name":"Payment__InvalidReceiverAddress","type":"error"},{"inputs":[],"name":"Payment__NotEnoughEtherSent","type":"error"},{"inputs":[],"name":"Payment__PaymentAmountMustBeGreaterThanZero","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"sendPayment","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506105c2806100206000396000f3fe6080604052600436106100375760003560e01c80620b46f8146100f0578063117803e314610118578063de27314b14610158576100c7565b366100c75760007361ec9cbc365b23ec035986a30fded12e94756b3b6001600160a01b0316346040515b60006040518083038185875af1925050503d806000811461009e576040519150601f19603f3d011682016040523d82523d6000602084013e6100a3565b606091505b50509050806100c557604051639fb8bc1760e01b815260040160405180910390fd5b005b60007361ec9cbc365b23ec035986a30fded12e94756b3b6001600160a01b031634604051610061565b3480156100fc57600080fd5b50610105600381565b6040519081526020015b60405180910390f35b34801561012457600080fd5b506101407361ec9cbc365b23ec035986a30fded12e94756b3b81565b6040516001600160a01b03909116815260200161010f565b6100c561016636600461045f565b8281146101865760405163bcea0df560e01b815260040160405180910390fd5b6000805b828110156101c0578383828181106101a4576101a46104cb565b90506020020135826101b691906104f7565b915060010161018a565b50803410156101e257604051637a5f17cb60e01b815260040160405180910390fd5b6000805b85811015610385576000878783818110610202576102026104cb565b90506020020160208101906102179190610510565b6001600160a01b03160361023e5760405163efcff6a960e01b815260040160405180910390fd5b848482818110610250576102506104cb565b9050602002013560000361027757604051639e55ab0960e01b815260040160405180910390fd5b60006064600387878581811061028f5761028f6104cb565b905060200201356102a09190610540565b6102aa9190610557565b90506000818787858181106102c1576102c16104cb565b905060200201356102d29190610579565b90506102de81856104f7565b935060008989858181106102f4576102f46104cb565b90506020020160208101906103099190610510565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610353576040519150601f19603f3d011682016040523d82523d6000602084013e610358565b606091505b505090508061037a57604051639fb8bc1760e01b815260040160405180910390fd5b5050506001016101e6565b5060007361ec9cbc365b23ec035986a30fded12e94756b3b6103a78334610579565b604051600081818185875af1925050503d80600081146103e3576040519150601f19603f3d011682016040523d82523d6000602084013e6103e8565b606091505b505090508061040a57604051639fb8bc1760e01b815260040160405180910390fd5b50505050505050565b60008083601f84011261042557600080fd5b50813567ffffffffffffffff81111561043d57600080fd5b6020830191508360208260051b850101111561045857600080fd5b9250929050565b6000806000806040858703121561047557600080fd5b843567ffffffffffffffff8082111561048d57600080fd5b61049988838901610413565b909650945060208701359150808211156104b257600080fd5b506104bf87828801610413565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561050a5761050a6104e1565b92915050565b60006020828403121561052257600080fd5b81356001600160a01b038116811461053957600080fd5b9392505050565b808202811582820484141761050a5761050a6104e1565b60008261057457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561050a5761050a6104e156fea26469706673582212202ad3384198047f7ca4b65554fea1e83fc3270f5e5dc43f75eac24112e946e27064736f6c63430008170033

Deployed Bytecode

0x6080604052600436106100375760003560e01c80620b46f8146100f0578063117803e314610118578063de27314b14610158576100c7565b366100c75760007361ec9cbc365b23ec035986a30fded12e94756b3b6001600160a01b0316346040515b60006040518083038185875af1925050503d806000811461009e576040519150601f19603f3d011682016040523d82523d6000602084013e6100a3565b606091505b50509050806100c557604051639fb8bc1760e01b815260040160405180910390fd5b005b60007361ec9cbc365b23ec035986a30fded12e94756b3b6001600160a01b031634604051610061565b3480156100fc57600080fd5b50610105600381565b6040519081526020015b60405180910390f35b34801561012457600080fd5b506101407361ec9cbc365b23ec035986a30fded12e94756b3b81565b6040516001600160a01b03909116815260200161010f565b6100c561016636600461045f565b8281146101865760405163bcea0df560e01b815260040160405180910390fd5b6000805b828110156101c0578383828181106101a4576101a46104cb565b90506020020135826101b691906104f7565b915060010161018a565b50803410156101e257604051637a5f17cb60e01b815260040160405180910390fd5b6000805b85811015610385576000878783818110610202576102026104cb565b90506020020160208101906102179190610510565b6001600160a01b03160361023e5760405163efcff6a960e01b815260040160405180910390fd5b848482818110610250576102506104cb565b9050602002013560000361027757604051639e55ab0960e01b815260040160405180910390fd5b60006064600387878581811061028f5761028f6104cb565b905060200201356102a09190610540565b6102aa9190610557565b90506000818787858181106102c1576102c16104cb565b905060200201356102d29190610579565b90506102de81856104f7565b935060008989858181106102f4576102f46104cb565b90506020020160208101906103099190610510565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610353576040519150601f19603f3d011682016040523d82523d6000602084013e610358565b606091505b505090508061037a57604051639fb8bc1760e01b815260040160405180910390fd5b5050506001016101e6565b5060007361ec9cbc365b23ec035986a30fded12e94756b3b6103a78334610579565b604051600081818185875af1925050503d80600081146103e3576040519150601f19603f3d011682016040523d82523d6000602084013e6103e8565b606091505b505090508061040a57604051639fb8bc1760e01b815260040160405180910390fd5b50505050505050565b60008083601f84011261042557600080fd5b50813567ffffffffffffffff81111561043d57600080fd5b6020830191508360208260051b850101111561045857600080fd5b9250929050565b6000806000806040858703121561047557600080fd5b843567ffffffffffffffff8082111561048d57600080fd5b61049988838901610413565b909650945060208701359150808211156104b257600080fd5b506104bf87828801610413565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561050a5761050a6104e1565b92915050565b60006020828403121561052257600080fd5b81356001600160a01b038116811461053957600080fd5b9392505050565b808202811582820484141761050a5761050a6104e1565b60008261057457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561050a5761050a6104e156fea26469706673582212202ad3384198047f7ca4b65554fea1e83fc3270f5e5dc43f75eac24112e946e27064736f6c63430008170033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.