Address Contract Verified
Address
0xeC3867E09Df71605A65495352B6122DcDD05Ae34
Balance
0 ETH
Nonce
1
Code Size
2788 bytes
Creator
0x69df24Da...Cf55 at tx 0x3372d955...f8421f
Indexed Transactions
0
Contract Bytecode
2788 bytes
0x6080604052600436106100705760003560e01c80638da5cb5b1161004e5780638da5cb5b146100e5578063979a5d1514610110578063f2fde38b1461014d578063fe0600941461017657610070565b80633b7b06d61461007557806357ee62fc146100b2578063715018a6146100ce575b600080fd5b34801561008157600080fd5b5061009c6004803603810190610097919061066d565b61019f565b6040516100a991906106b3565b60405180910390f35b6100cc60048036038101906100c7919061070c565b6101b7565b005b3480156100da57600080fd5b506100e36102b3565b005b3480156100f157600080fd5b506100fa6102c7565b6040516101079190610748565b60405180910390f35b34801561011c57600080fd5b5061013760048036038101906101329190610763565b6102f0565b60405161014491906106b3565b60405180910390f35b34801561015957600080fd5b50610174600480360381019061016f919061066d565b610315565b005b34801561018257600080fd5b5061019d600480360381019061019891906107cf565b610398565b005b60016020528060005260406000206000915090505481565b6101bf6104c0565b60008173ffffffffffffffffffffffffffffffffffffffff16346040516101e590610853565b60006040518083038185875af1925050503d8060008114610222576040519150601f19603f3d011682016040523d82523d6000602084013e610227565b606091505b505090508061026b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610262906108c5565b60405180910390fd5b34600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6102bb6104c0565b6102c5600061053e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6002602052816000526040600020602052806000526040600020600091509150505481565b61031d6104c0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361038c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038390610957565b60405180910390fd5b6103958161053e565b50565b6103a06104c0565b6000829050600115158173ffffffffffffffffffffffffffffffffffffffff166323b872dd3387866040518463ffffffff1660e01b81526004016103e693929190610977565b6020604051808303816000875af1158015610405573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042991906109e6565b15151461043957610438610a13565b5b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b6104c8610602565b73ffffffffffffffffffffffffffffffffffffffff166104e66102c7565b73ffffffffffffffffffffffffffffffffffffffff161461053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390610a8e565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061063a8261060f565b9050919050565b61064a8161062f565b811461065557600080fd5b50565b60008135905061066781610641565b92915050565b6000602082840312156106835761068261060a565b5b600061069184828501610658565b91505092915050565b6000819050919050565b6106ad8161069a565b82525050565b60006020820190506106c860008301846106a4565b92915050565b60006106d98261060f565b9050919050565b6106e9816106ce565b81146106f457600080fd5b50565b600081359050610706816106e0565b92915050565b6000602082840312156107225761072161060a565b5b6000610730848285016106f7565b91505092915050565b6107428161062f565b82525050565b600060208201905061075d6000830184610739565b92915050565b6000806040838503121561077a5761077961060a565b5b600061078885828601610658565b925050602061079985828601610658565b9150509250929050565b6107ac8161069a565b81146107b757600080fd5b50565b6000813590506107c9816107a3565b92915050565b6000806000606084860312156107e8576107e761060a565b5b60006107f686828701610658565b935050602061080786828701610658565b9250506040610818868287016107ba565b9150509250925092565b600081905092915050565b50565b600061083d600083610822565b91506108488261082d565b600082019050919050565b600061085e82610830565b9150819050919050565b600082825260208201905092915050565b7f6661696c656420746f2073656e642076616c7565000000000000000000000000600082015250565b60006108af601483610868565b91506108ba82610879565b602082019050919050565b600060208201905081810360008301526108de816108a2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610941602683610868565b915061094c826108e5565b604082019050919050565b6000602082019050818103600083015261097081610934565b9050919050565b600060608201905061098c6000830186610739565b6109996020830185610739565b6109a660408301846106a4565b949350505050565b60008115159050919050565b6109c3816109ae565b81146109ce57600080fd5b50565b6000815190506109e0816109ba565b92915050565b6000602082840312156109fc576109fb61060a565b5b6000610a0a848285016109d1565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610a78602083610868565b9150610a8382610a42565b602082019050919050565b60006020820190508181036000830152610aa781610a6b565b905091905056fea2646970667358221220242fb3bc5d57ec5834f2a3382c295f2af7fdb30ec0b23a98907adb3351038edb64736f6c63430008120033
Verified Source Code Full Match
Compiler: v0.8.18+commit.87f61d96
EVM: paris
Optimization: No
pennyTest.sol 22 lines
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/[email protected]/token/ERC20/IERC20.sol"; import "@openzeppelin/[email protected]/access/Ownable.sol"; contract BwPennyTester is Ownable { mapping(address => uint256) public nativeEnrolled; mapping(address => mapping(address => uint256)) public tokenEnrolled; function payNative(address payable _recipientAddress) public payable onlyOwner { (bool sent, ) = _recipientAddress.call{value: msg.value}(""); require(sent, "failed to send value"); nativeEnrolled[_recipientAddress] = msg.value; } function payToken(address _recipientAddress, address _tokenAddress, uint256 _amount) public onlyOwner { IERC20 token = IERC20(_tokenAddress); assert(token.transferFrom(msg.sender, _recipientAddress, _amount) == true); tokenEnrolled[_tokenAddress][_recipientAddress] = _amount; } }
Context.sol 24 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
Ownable.sol 83 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @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.
*
* By default, the owner account will be the one that deploys the contract. 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 Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing 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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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);
}
}
IERC20.sol 82 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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 amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` 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 amount
) external returns (bool);
}
Read Contract
nativeEnrolled 0x3b7b06d6 → uint256
owner 0x8da5cb5b → address
tokenEnrolled 0x979a5d15 → uint256
Write Contract 4 functions
These functions modify contract state and require a wallet transaction to execute.
payNative 0x57ee62fc
address _recipientAddress
payToken 0xfe060094
address _recipientAddress
address _tokenAddress
uint256 _amount
renounceOwnership 0x715018a6
No parameters
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
No transactions found for this address