Address Contract Verified
Address
0x4dAEAf24Cd300a3DBc0caff3292B7840CDDa58eD
Balance
0 ETH
Nonce
1
Code Size
5826 bytes
Creator
0x107F6eB7...3ABA at tx 0xd3019431...0821b4
Indexed Transactions
0 (1 on-chain, 0.8% indexed)
Contract Bytecode
5826 bytes
0x608060405260043610610058575f3560e01c806301681a6214610063578063331782941461008b57806346904840146100b35780637de794e1146100dd578063bf333f2c146100f9578063e1a45218146101235761005f565b3661005f57005b5f80fd5b34801561006e575f80fd5b5061008960048036038101906100849190610f1c565b61014d565b005b348015610096575f80fd5b506100b160048036038101906100ac9190610fdb565b610399565b005b3480156100be575f80fd5b506100c7610795565b6040516100d4919061106e565b60405180910390f35b6100f760048036038101906100f29190611087565b6107b9565b005b348015610104575f80fd5b5061010d610af7565b60405161011a91906110f3565b60405180910390f35b34801561012e575f80fd5b50610137610afc565b60405161014491906110f3565b60405180910390f35b7f000000000000000000000000107f6eb7c3866c9cef5860952066e185e9383aba73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101d2576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102d3575f7f000000000000000000000000107f6eb7c3866c9cef5860952066e185e9383aba73ffffffffffffffffffffffffffffffffffffffff164760405161024a90611139565b5f6040518083038185875af1925050503d805f8114610284576040519150601f19603f3d011682016040523d82523d5f602084013e610289565b606091505b50509050806102cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c4906111a7565b60405180910390fd5b50610396565b6103957f000000000000000000000000107f6eb7c3866c9cef5860952066e185e9383aba8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610330919061106e565b602060405180830381865afa15801561034b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061036f91906111d9565b8373ffffffffffffffffffffffffffffffffffffffff16610b029092919063ffffffff16565b5b50565b60025f54036103d4576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f819055505f8403610414576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612710600a866104259190611231565b61042f919061129f565b90505f818661043e91906112cf565b905061046d3330888a73ffffffffffffffffffffffffffffffffffffffff16610b81909392919063ffffffff16565b6104b87f000000000000000000000000107f6eb7c3866c9cef5860952066e185e9383aba838973ffffffffffffffffffffffffffffffffffffffff16610b029092919063ffffffff16565b6104e385828973ffffffffffffffffffffffffffffffffffffffff16610c039092919063ffffffff16565b5f808673ffffffffffffffffffffffffffffffffffffffff16868660405161050c929190611334565b5f604051808303815f865af19150503d805f8114610545576040519150601f19603f3d011682016040523d82523d5f602084013e61054a565b606091505b50915091508161059157806040517fff9fa59500000000000000000000000000000000000000000000000000000000815260040161058891906113d6565b60405180910390fd5b6105bc875f8b73ffffffffffffffffffffffffffffffffffffffff16610c039092919063ffffffff16565b5f8973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105f6919061106e565b602060405180830381865afa158015610611573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063591906111d9565b90505f81111561066b5761066a33828c73ffffffffffffffffffffffffffffffffffffffff16610b029092919063ffffffff16565b5b5f4790505f811115610718575f3373ffffffffffffffffffffffffffffffffffffffff168260405161069c90611139565b5f6040518083038185875af1925050503d805f81146106d6576040519150601f19603f3d011682016040523d82523d5f602084013e6106db565b606091505b5050905080610716576040517ff0c49d4400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe41d09ea59537dbbeb0d52b509aff6db0348253cb4f871b7d2c163002576c0428d8d8a604051610779939291906113f6565b60405180910390a350505050505060015f819055505050505050565b7f000000000000000000000000107f6eb7c3866c9cef5860952066e185e9383aba81565b60025f54036107f4576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f819055505f3403610834576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612710600a346108459190611231565b61084f919061129f565b90505f813461085e91906112cf565b90505f7f000000000000000000000000107f6eb7c3866c9cef5860952066e185e9383aba73ffffffffffffffffffffffffffffffffffffffff16836040516108a590611139565b5f6040518083038185875af1925050503d805f81146108df576040519150601f19603f3d011682016040523d82523d5f602084013e6108e4565b606091505b505090508061091f576040517f0d1ac02a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808773ffffffffffffffffffffffffffffffffffffffff16848888604051610949929190611334565b5f6040518083038185875af1925050503d805f8114610983576040519150601f19603f3d011682016040523d82523d5f602084013e610988565b606091505b5091509150816109cf57806040517fff9fa5950000000000000000000000000000000000000000000000000000000081526004016109c691906113d6565b60405180910390fd5b5f4790505f811115610a7c575f3373ffffffffffffffffffffffffffffffffffffffff1682604051610a0090611139565b5f6040518083038185875af1925050503d805f8114610a3a576040519150601f19603f3d011682016040523d82523d5f602084013e610a3f565b606091505b5050905080610a7a576040517ff0c49d4400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe41d09ea59537dbbeb0d52b509aff6db0348253cb4f871b7d2c163002576c0425f348a604051610add939291906113f6565b60405180910390a350505050505060015f81905550505050565b600a81565b61271081565b610b7c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610b3592919061142b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610d10565b505050565b610bfd848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610bb693929190611452565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610d10565b50505050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663095ea7b38484604051602401610c3392919061142b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050610c818482610e1d565b610d0a57610cff848573ffffffffffffffffffffffffffffffffffffffff1663095ea7b3865f604051602401610cb89291906114c9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610d10565b610d098482610d10565b5b50505050565b5f808373ffffffffffffffffffffffffffffffffffffffff1683604051610d379190611520565b5f604051808303815f865af19150503d805f8114610d70576040519150601f19603f3d011682016040523d82523d5f602084013e610d75565b606091505b509150915081610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190611580565b60405180910390fd5b5f81511115610e175780806020019051810190610dd791906115d3565b610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d9061166e565b60405180910390fd5b5b50505050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1684604051610e459190611520565b5f604051808303815f865af19150503d805f8114610e7e576040519150601f19603f3d011682016040523d82523d5f602084013e610e83565b606091505b5091509150818015610eb057505f81511480610eaf575080806020019051810190610eae91906115d3565b5b5b9250505092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610eeb82610ec2565b9050919050565b610efb81610ee1565b8114610f05575f80fd5b50565b5f81359050610f1681610ef2565b92915050565b5f60208284031215610f3157610f30610eba565b5b5f610f3e84828501610f08565b91505092915050565b5f819050919050565b610f5981610f47565b8114610f63575f80fd5b50565b5f81359050610f7481610f50565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610f9b57610f9a610f7a565b5b8235905067ffffffffffffffff811115610fb857610fb7610f7e565b5b602083019150836001820283011115610fd457610fd3610f82565b5b9250929050565b5f805f805f60808688031215610ff457610ff3610eba565b5b5f61100188828901610f08565b955050602061101288828901610f66565b945050604061102388828901610f08565b935050606086013567ffffffffffffffff81111561104457611043610ebe565b5b61105088828901610f86565b92509250509295509295909350565b61106881610ee1565b82525050565b5f6020820190506110815f83018461105f565b92915050565b5f805f6040848603121561109e5761109d610eba565b5b5f6110ab86828701610f08565b935050602084013567ffffffffffffffff8111156110cc576110cb610ebe565b5b6110d886828701610f86565b92509250509250925092565b6110ed81610f47565b82525050565b5f6020820190506111065f8301846110e4565b92915050565b5f81905092915050565b50565b5f6111245f8361110c565b915061112f82611116565b5f82019050919050565b5f61114382611119565b9150819050919050565b5f82825260208201905092915050565b7f455448207377656570206661696c6564000000000000000000000000000000005f82015250565b5f61119160108361114d565b915061119c8261115d565b602082019050919050565b5f6020820190508181035f8301526111be81611185565b9050919050565b5f815190506111d381610f50565b92915050565b5f602082840312156111ee576111ed610eba565b5b5f6111fb848285016111c5565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61123b82610f47565b915061124683610f47565b925082820261125481610f47565b9150828204841483151761126b5761126a611204565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6112a982610f47565b91506112b483610f47565b9250826112c4576112c3611272565b5b828204905092915050565b5f6112d982610f47565b91506112e483610f47565b92508282039050818111156112fc576112fb611204565b5b92915050565b828183375f83830152505050565b5f61131b838561110c565b9350611328838584611302565b82840190509392505050565b5f611340828486611310565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611383578082015181840152602081019050611368565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6113a88261134c565b6113b28185611356565b93506113c2818560208601611366565b6113cb8161138e565b840191505092915050565b5f6020820190508181035f8301526113ee818461139e565b905092915050565b5f6060820190506114095f83018661105f565b61141660208301856110e4565b61142360408301846110e4565b949350505050565b5f60408201905061143e5f83018561105f565b61144b60208301846110e4565b9392505050565b5f6060820190506114655f83018661105f565b611472602083018561105f565b61147f60408301846110e4565b949350505050565b5f819050919050565b5f819050919050565b5f6114b36114ae6114a984611487565b611490565b610f47565b9050919050565b6114c381611499565b82525050565b5f6040820190506114dc5f83018561105f565b6114e960208301846114ba565b9392505050565b5f6114fa8261134c565b611504818561110c565b9350611514818560208601611366565b80840191505092915050565b5f61152b82846114f0565b915081905092915050565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65645f82015250565b5f61156a60208361114d565b915061157582611536565b602082019050919050565b5f6020820190508181035f8301526115978161155e565b9050919050565b5f8115159050919050565b6115b28161159e565b81146115bc575f80fd5b50565b5f815190506115cd816115a9565b92915050565b5f602082840312156115e8576115e7610eba565b5b5f6115f5848285016115bf565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e5f8201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b5f611658602a8361114d565b9150611663826115fe565b604082019050919050565b5f6020820190508181035f8301526116858161164c565b905091905056fea2646970667358221220d728cf1a1125f7136adf18c5a4fb50161281883b39600ef1209050133d3f1d2964736f6c63430008140033
Verified Source Code Full Match
Compiler: v0.8.20+commit.a1b79de6
EVM: shanghai
Optimization: No
TeraSwapFeeCollector.sol 185 lines
// SPDX-License-Identifier: MIT
// TeraSwapFeeCollector — flattened for Remix deployment
// OpenZeppelin Contracts v5.0 (minimal excerpts)
pragma solidity ^0.8.20;
// ═══════════════════════════════════════════════════════════
// OpenZeppelin: IERC20
// ═══════════════════════════════════════════════════════════
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// ═══════════════════════════════════════════════════════════
// OpenZeppelin: SafeERC20
// ═══════════════════════════════════════════════════════════
library SafeERC20 {
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool)));
}
}
// ═══════════════════════════════════════════════════════════
// OpenZeppelin: ReentrancyGuard
// ═══════════════════════════════════════════════════════════
abstract contract ReentrancyGuard {
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
modifier nonReentrant() {
if (_status == ENTERED) revert ReentrancyGuardReentrantCall();
_status = ENTERED;
_;
_status = NOT_ENTERED;
}
}
// ═══════════════════════════════════════════════════════════
// TeraSwapFeeCollector
// ═══════════════════════════════════════════════════════════
/**
* @title TeraSwapFeeCollector
* @notice Universal fee collection proxy for TeraSwap DEX meta-aggregator.
* Collects 0.1% (10 bps) on every swap, forwards rest to DEX router.
*/
contract TeraSwapFeeCollector is ReentrancyGuard {
using SafeERC20 for IERC20;
address public immutable feeRecipient;
uint256 public constant FEE_BPS = 10; // 0.1%
uint256 public constant BPS_DENOMINATOR = 10_000;
event SwapWithFee(
address indexed user,
address indexed router,
address tokenIn,
uint256 totalAmount,
uint256 feeAmount
);
error ZeroAddress();
error ZeroAmount();
error FeeFailed();
error SwapFailed(bytes reason);
error RefundFailed();
error NotAuthorized();
constructor(address _feeRecipient) {
if (_feeRecipient == address(0)) revert ZeroAddress();
feeRecipient = _feeRecipient;
}
/// @notice Swap native ETH with fee collection
function swapETHWithFee(
address router,
bytes calldata routerData
) external payable nonReentrant {
if (msg.value == 0) revert ZeroAmount();
uint256 fee = (msg.value * FEE_BPS) / BPS_DENOMINATOR;
uint256 netValue = msg.value - fee;
(bool feeOk, ) = feeRecipient.call{value: fee}("");
if (!feeOk) revert FeeFailed();
(bool swapOk, bytes memory result) = router.call{value: netValue}(routerData);
if (!swapOk) revert SwapFailed(result);
uint256 remaining = address(this).balance;
if (remaining > 0) {
(bool refundOk, ) = msg.sender.call{value: remaining}("");
if (!refundOk) revert RefundFailed();
}
emit SwapWithFee(msg.sender, router, address(0), msg.value, fee);
}
/// @notice Swap ERC-20 tokens with fee collection
function swapTokenWithFee(
address token,
uint256 totalAmount,
address router,
bytes calldata routerData
) external nonReentrant {
if (totalAmount == 0) revert ZeroAmount();
uint256 fee = (totalAmount * FEE_BPS) / BPS_DENOMINATOR;
uint256 netAmount = totalAmount - fee;
IERC20(token).safeTransferFrom(msg.sender, address(this), totalAmount);
IERC20(token).safeTransfer(feeRecipient, fee);
IERC20(token).forceApprove(router, netAmount);
(bool ok, bytes memory result) = router.call(routerData);
if (!ok) revert SwapFailed(result);
IERC20(token).forceApprove(router, 0);
uint256 tokenBalance = IERC20(token).balanceOf(address(this));
if (tokenBalance > 0) {
IERC20(token).safeTransfer(msg.sender, tokenBalance);
}
uint256 ethBalance = address(this).balance;
if (ethBalance > 0) {
(bool refundOk, ) = msg.sender.call{value: ethBalance}("");
if (!refundOk) revert RefundFailed();
}
emit SwapWithFee(msg.sender, router, token, totalAmount, fee);
}
/// @notice Rescue stuck funds (only feeRecipient)
function sweep(address token) external {
if (msg.sender != feeRecipient) revert NotAuthorized();
if (token == address(0)) {
(bool ok, ) = feeRecipient.call{value: address(this).balance}("");
require(ok, "ETH sweep failed");
} else {
IERC20(token).safeTransfer(
feeRecipient,
IERC20(token).balanceOf(address(this))
);
}
}
receive() external payable {}
}
Read Contract
BPS_DENOMINATOR 0xe1a45218 → uint256
FEE_BPS 0xbf333f2c → uint256
feeRecipient 0x46904840 → address
Write Contract 3 functions
These functions modify contract state and require a wallet transaction to execute.
swapETHWithFee 0x7de794e1
address router
bytes routerData
swapTokenWithFee 0x33178294
address token
uint256 totalAmount
address router
bytes routerData
sweep 0x01681a62
address token
Recent Transactions
This address has 1 on-chain transactions, but only 0.8% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →