Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24390532 | 13 hrs ago | 0.000005 ETH | ||||
| Transfer | 24390532 | 13 hrs ago | 0.000495 ETH | ||||
| Send ETH | 24390532 | 13 hrs ago | 0.0005 ETH | ||||
| Transfer | 24390490 | 13 hrs ago | 0.000005 ETH | ||||
| Transfer | 24390490 | 13 hrs ago | 0.000495 ETH | ||||
| Send ETH | 24390490 | 13 hrs ago | 0.0005 ETH | ||||
| Transfer | 24390006 | 14 hrs ago | 0.000015 ETH | ||||
| Transfer | 24390006 | 14 hrs ago | 0.001485 ETH | ||||
| Send ETH | 24390006 | 14 hrs ago | 0.0015 ETH | ||||
| Transfer | 24384268 | 34 hrs ago | 0.00000033 ETH | ||||
| Transfer | 24384268 | 34 hrs ago | 0.00003267 ETH | ||||
| Send ETH | 24384268 | 34 hrs ago | 0.000033 ETH | ||||
| Transfer | 24378008 | 2 days ago | 0.00000001 ETH | ||||
| Transfer | 24378008 | 2 days ago | 0.00000099 ETH | ||||
| Send ETH | 24378008 | 2 days ago | 0.000001 ETH | ||||
| Transfer | 24377839 | 2 days ago | 0.0000001 ETH | ||||
| Transfer | 24377839 | 2 days ago | 0.0000099 ETH | ||||
| Send ETH | 24377839 | 2 days ago | 0.00001 ETH | ||||
| Transfer | 24375554 | 2 days ago | 0.00000568 ETH | ||||
| Transfer | 24375554 | 2 days ago | 0.00056268 ETH | ||||
| Send ETH | 24375554 | 2 days ago | 0.00056837 ETH | ||||
| Transfer | 24335013 | 8 days ago | 0.0000001 ETH | ||||
| Transfer | 24335013 | 8 days ago | 0.0000099 ETH | ||||
| Send ETH | 24335013 | 8 days ago | 0.00001 ETH | ||||
| Transfer | 24320174 | 10 days ago | 0.000001 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SendWithFeeModular
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import { IERC20 } from '../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol';
interface IXCareConstants {
function sendFeeBps() external view returns (uint256);
function feeSendRecipient() external view returns (address);
}
contract SendWithFeeModular {
address public immutable owner;
address public immutable constantsAddress;
event TokenSent(
address indexed from,
address indexed to,
address indexed token,
uint256 amount,
uint256 fee
);
modifier onlyOwner() {
require(msg.sender == owner, 'Not owner');
_;
}
constructor(address _constantsAddress) {
owner = msg.sender;
constantsAddress = _constantsAddress;
}
function sendERC20(address token, address to, uint256 amount) external {
require(to != address(0), 'Invalid recipient');
require(amount > 0, 'Amount must be > 0');
uint256 feeBps = IXCareConstants(constantsAddress).sendFeeBps();
address feeRecipient = IXCareConstants(constantsAddress).feeSendRecipient();
uint256 fee = (amount * feeBps) / 10_000;
uint256 net = amount - fee;
IERC20(token).transferFrom(msg.sender, to, net);
IERC20(token).transferFrom(msg.sender, feeRecipient, fee); // TODO: should be ETH amount
emit TokenSent(msg.sender, to, token, net, fee);
}
function sendETH(address to, uint256 amount) external payable {
require(to != address(0), "Invalid recipient");
require(amount > 0, "Amount must be > 0");
uint256 feeBps = IXCareConstants(constantsAddress).sendFeeBps();
address feeRecipient = IXCareConstants(constantsAddress).feeSendRecipient();
uint256 fee = (amount * feeBps) / 10_000;
uint256 net = amount - fee;
// Send net amount to recipient
(bool sentTo, ) = to.call{ value: net }("");
require(sentTo, "ETH to recipient failed");
// Send fee to fixed fee recipient
(bool sentFee, ) = feeRecipient.call{ value: fee }("");
require(sentFee, "ETH to feeRecipient failed");
emit TokenSent(msg.sender, to, address(0), net, fee);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_constantsAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"TokenSent","type":"event"},{"inputs":[],"name":"constantsAddress","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":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendETH","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60c060405234801561000f575f5ffd5b5060405161096238038061096283398101604081905261002e91610043565b336080526001600160a01b031660a052610070565b5f60208284031215610053575f5ffd5b81516001600160a01b0381168114610069575f5ffd5b9392505050565b60805160a0516108b76100ab5f395f818160530152818161018e01528181610211015281816104d9015261055c01525f60b701526108b75ff3fe60806040526004361061003e575f3560e01c806345f1c1b91461004257806364a197f3146100915780638da5cb5b146100a65780638f975a64146100d9575b5f5ffd5b34801561004d575f5ffd5b506100757f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100a461009f36600461075e565b6100f8565b005b3480156100b1575f5ffd5b506100757f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e4575f5ffd5b506100a46100f3366004610788565b610448565b6001600160a01b0382166101475760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b60448201526064015b60405180910390fd5b5f811161018b5760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b604482015260640161013e565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c52c4d646040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020c91906107c6565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663de83bf0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561026b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028f91906107dd565b90505f61271061029f8486610813565b6102a99190610830565b90505f6102b6828661084f565b90505f866001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610301576040519150601f19603f3d011682016040523d82523d5f602084013e610306565b606091505b50509050806103575760405162461bcd60e51b815260206004820152601760248201527f45544820746f20726563697069656e74206661696c6564000000000000000000604482015260640161013e565b5f846001600160a01b0316846040515f6040518083038185875af1925050503d805f81146103a0576040519150601f19603f3d011682016040523d82523d5f602084013e6103a5565b606091505b50509050806103f65760405162461bcd60e51b815260206004820152601a60248201527f45544820746f20666565526563697069656e74206661696c6564000000000000604482015260640161013e565b60408051848152602081018690525f916001600160a01b038b169133917f0f4a52d8b6314b187b37f57abf3c18b407c3c10fa736754a3628867864e1ea90910160405180910390a45050505050505050565b6001600160a01b0382166104925760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b604482015260640161013e565b5f81116104d65760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b604482015260640161013e565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c52c4d646040518163ffffffff1660e01b8152600401602060405180830381865afa158015610533573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055791906107c6565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663de83bf0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906107dd565b90505f6127106105ea8486610813565b6105f49190610830565b90505f610601828661084f565b6040516323b872dd60e01b81523360048201526001600160a01b03888116602483015260448201839052919250908816906323b872dd906064016020604051808303815f875af1158015610657573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067b9190610862565b506040516323b872dd60e01b81523360048201526001600160a01b038481166024830152604482018490528816906323b872dd906064016020604051808303815f875af11580156106ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f29190610862565b5060408051828152602081018490526001600160a01b03808a16929089169133917f0f4a52d8b6314b187b37f57abf3c18b407c3c10fa736754a3628867864e1ea90910160405180910390a450505050505050565b6001600160a01b038116811461075b575f5ffd5b50565b5f5f6040838503121561076f575f5ffd5b823561077a81610747565b946020939093013593505050565b5f5f5f6060848603121561079a575f5ffd5b83356107a581610747565b925060208401356107b581610747565b929592945050506040919091013590565b5f602082840312156107d6575f5ffd5b5051919050565b5f602082840312156107ed575f5ffd5b81516107f881610747565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761082a5761082a6107ff565b92915050565b5f8261084a57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561082a5761082a6107ff565b5f60208284031215610872575f5ffd5b815180151581146107f8575f5ffdfea2646970667358221220e71feba821dc8ca3064f44c07115f532c49f8dd1a14f91f8fc8ba9e96d1cdc9a64736f6c634300081c0033000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef02
Deployed Bytecode
0x60806040526004361061003e575f3560e01c806345f1c1b91461004257806364a197f3146100915780638da5cb5b146100a65780638f975a64146100d9575b5f5ffd5b34801561004d575f5ffd5b506100757f000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef0281565b6040516001600160a01b03909116815260200160405180910390f35b6100a461009f36600461075e565b6100f8565b005b3480156100b1575f5ffd5b506100757f000000000000000000000000e324c63fdb51f7d597ff68d92bec74fa054ee12881565b3480156100e4575f5ffd5b506100a46100f3366004610788565b610448565b6001600160a01b0382166101475760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b60448201526064015b60405180910390fd5b5f811161018b5760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b604482015260640161013e565b5f7f000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef026001600160a01b031663c52c4d646040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020c91906107c6565b90505f7f000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef026001600160a01b031663de83bf0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561026b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028f91906107dd565b90505f61271061029f8486610813565b6102a99190610830565b90505f6102b6828661084f565b90505f866001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610301576040519150601f19603f3d011682016040523d82523d5f602084013e610306565b606091505b50509050806103575760405162461bcd60e51b815260206004820152601760248201527f45544820746f20726563697069656e74206661696c6564000000000000000000604482015260640161013e565b5f846001600160a01b0316846040515f6040518083038185875af1925050503d805f81146103a0576040519150601f19603f3d011682016040523d82523d5f602084013e6103a5565b606091505b50509050806103f65760405162461bcd60e51b815260206004820152601a60248201527f45544820746f20666565526563697069656e74206661696c6564000000000000604482015260640161013e565b60408051848152602081018690525f916001600160a01b038b169133917f0f4a52d8b6314b187b37f57abf3c18b407c3c10fa736754a3628867864e1ea90910160405180910390a45050505050505050565b6001600160a01b0382166104925760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b604482015260640161013e565b5f81116104d65760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b604482015260640161013e565b5f7f000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef026001600160a01b031663c52c4d646040518163ffffffff1660e01b8152600401602060405180830381865afa158015610533573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055791906107c6565b90505f7f000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef026001600160a01b031663de83bf0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906107dd565b90505f6127106105ea8486610813565b6105f49190610830565b90505f610601828661084f565b6040516323b872dd60e01b81523360048201526001600160a01b03888116602483015260448201839052919250908816906323b872dd906064016020604051808303815f875af1158015610657573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067b9190610862565b506040516323b872dd60e01b81523360048201526001600160a01b038481166024830152604482018490528816906323b872dd906064016020604051808303815f875af11580156106ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f29190610862565b5060408051828152602081018490526001600160a01b03808a16929089169133917f0f4a52d8b6314b187b37f57abf3c18b407c3c10fa736754a3628867864e1ea90910160405180910390a450505050505050565b6001600160a01b038116811461075b575f5ffd5b50565b5f5f6040838503121561076f575f5ffd5b823561077a81610747565b946020939093013593505050565b5f5f5f6060848603121561079a575f5ffd5b83356107a581610747565b925060208401356107b581610747565b929592945050506040919091013590565b5f602082840312156107d6575f5ffd5b5051919050565b5f602082840312156107ed575f5ffd5b81516107f881610747565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761082a5761082a6107ff565b92915050565b5f8261084a57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561082a5761082a6107ff565b5f60208284031215610872575f5ffd5b815180151581146107f8575f5ffdfea2646970667358221220e71feba821dc8ca3064f44c07115f532c49f8dd1a14f91f8fc8ba9e96d1cdc9a64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef02
-----Decoded View---------------
Arg [0] : _constantsAddress (address): 0x890ed658905EFbaeeD77069760Ec9c7a62aBEF02
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000890ed658905efbaeed77069760ec9c7a62abef02
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.