Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- Swap
- Optimization enabled
- false
- Compiler version
- v0.8.7+commit.e28d00a7
- EVM Version
- default
- Verified at
- 2022-11-01T21:20:22.560441Z
Constructor Arguments
0x00000000000000000000000009a9e6d00b07f7c991b98575f75d16811c9c50a4
Arg [0] (address) : 0x09a9e6d00b07f7c991b98575f75d16811c9c50a4
swap.sol
pragma solidity ^0.8.0; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract IAV is IERC20 { string public constant name = "In Argentum Veritas"; string public constant symbol = "IAV"; uint8 public constant decimals = 15; mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed; uint256 totalSupply_ = 2000 ether; constructor() { totalSupply_ = 2000 ether; balances[msg.sender] = totalSupply_; } function totalSupply() public override view returns (uint256) { return totalSupply_; } function balanceOf(address tokenOwner) public override view returns (uint256) { return balances[tokenOwner]; } function transfer(address receiver, uint256 numTokens) public override returns (bool) { require(numTokens <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender]-numTokens; balances[receiver] = balances[receiver]+numTokens; emit Transfer(msg.sender, receiver, numTokens); return true; } function approve(address delegate, uint256 numTokens) public override returns (bool) { allowed[msg.sender][delegate] = numTokens; emit Approval(msg.sender, delegate, numTokens); return true; } function allowance(address owner, address delegate) public override view returns (uint) { return allowed[owner][delegate]; } function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) { require(numTokens <= balances[owner]); require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner]-numTokens; allowed[owner][msg.sender] = allowed[owner][msg.sender]-numTokens; balances[buyer] = balances[buyer]+numTokens; emit Transfer(owner, buyer, numTokens); return true; } } contract Swap { event Bought(uint256 amount); event Sold(uint256 amount); IERC20 _token; address owner; constructor(address token) { _token = IERC20(token); owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function buy() payable public { uint256 amountTobuy = msg.value; uint256 dexBalance = _token.balanceOf(address(this)); require(amountTobuy > 0, "You need to send some ether"); require(amountTobuy <= dexBalance, "Not enough tokens in the reserve"); _token.transfer(msg.sender, amountTobuy); emit Bought(amountTobuy); } function sell(uint256 amount) public { require(amount > 0, "You need to sell at least some tokens"); uint256 allowance = _token.allowance(msg.sender, address(this)); require(allowance >= amount, "Check the token allowance"); _token.transferFrom(msg.sender, address(this), amount); payable(msg.sender).transfer(amount); emit Sold(amount); } function withdrawToken(address _tokenContract, uint256 _amount) external onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); // transfer the token from address of this contract // to address of the user (executing the withdrawToken() function) tokenContract.transfer(msg.sender, _amount); } function _SendEth(uint256 amount) public payable onlyOwner { payable(msg.sender).transfer(amount); } receive() external payable { uint256 amountTobuy = msg.value; _token.transfer(msg.sender, amountTobuy); emit Bought(msg.value); } fallback() external payable { uint256 amountTobuy = msg.value; _token.transfer(msg.sender, amountTobuy); emit Bought(msg.value); } }
Contract ABI
[{"type":"constructor","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"_SendEth","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"buy","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"sell","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawToken","inputs":[{"type":"address","name":"_tokenContract","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"event","name":"Bought","inputs":[{"type":"uint256","name":"amount","indexed":false}],"anonymous":false},{"type":"event","name":"Sold","inputs":[{"type":"uint256","name":"amount","indexed":false}],"anonymous":false},{"type":"receive"},{"type":"fallback"}]
Deployed ByteCode
0x6080604052600436106100435760003560e01c80639e281a9814610222578063a6f2ae3a1461024b578063c19c4cc414610255578063e4849b321461027157610135565b3661013557600034905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016100a8929190610afa565b602060405180830381600087803b1580156100c257600080fd5b505af11580156100d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fa919061094e565b507f4e08ba899977cf7d4c2964bce71c6b9a7ef76ee5166a4c1249a1e08016e33ef13460405161012a9190610ba3565b60405180910390a150005b600034905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610195929190610afa565b602060405180830381600087803b1580156101af57600080fd5b505af11580156101c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e7919061094e565b507f4e08ba899977cf7d4c2964bce71c6b9a7ef76ee5166a4c1249a1e08016e33ef1346040516102179190610ba3565b60405180910390a150005b34801561022e57600080fd5b506102496004803603810190610244919061090e565b61029a565b005b61025361038c565b005b61026f600480360381019061026a919061097b565b6105ae565b005b34801561027d57600080fd5b506102986004803603810190610293919061097b565b610652565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102f457600080fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610334929190610afa565b602060405180830381600087803b15801561034e57600080fd5b505af1158015610362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610386919061094e565b50505050565b600034905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103ed9190610a7f565b60206040518083038186803b15801561040557600080fd5b505afa158015610419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043d91906109a8565b905060008211610482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047990610b83565b60405180910390fd5b808211156104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc90610b63565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610520929190610afa565b602060405180830381600087803b15801561053a57600080fd5b505af115801561054e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610572919061094e565b507f4e08ba899977cf7d4c2964bce71c6b9a7ef76ee5166a4c1249a1e08016e33ef1826040516105a29190610ba3565b60405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060857600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561064e573d6000803e3d6000fd5b5050565b60008111610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90610b23565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016106f3929190610a9a565b60206040518083038186803b15801561070b57600080fd5b505afa15801561071f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074391906109a8565b905081811015610788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077f90610b43565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016107e593929190610ac3565b602060405180830381600087803b1580156107ff57600080fd5b505af1158015610813573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610837919061094e565b503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561087e573d6000803e3d6000fd5b507f92f64ca637d023f354075a4be751b169c1a8a9ccb6d33cdd0cb3520543995727826040516108ae9190610ba3565b60405180910390a15050565b6000813590506108c981610ce6565b92915050565b6000815190506108de81610cfd565b92915050565b6000813590506108f381610d14565b92915050565b60008151905061090881610d14565b92915050565b6000806040838503121561092557610924610c17565b5b6000610933858286016108ba565b9250506020610944858286016108e4565b9150509250929050565b60006020828403121561096457610963610c17565b5b6000610972848285016108cf565b91505092915050565b60006020828403121561099157610990610c17565b5b600061099f848285016108e4565b91505092915050565b6000602082840312156109be576109bd610c17565b5b60006109cc848285016108f9565b91505092915050565b6109de81610bcf565b82525050565b60006109f1602583610bbe565b91506109fc82610c1c565b604082019050919050565b6000610a14601983610bbe565b9150610a1f82610c6b565b602082019050919050565b6000610a37602083610bbe565b9150610a4282610c94565b602082019050919050565b6000610a5a601b83610bbe565b9150610a6582610cbd565b602082019050919050565b610a7981610c0d565b82525050565b6000602082019050610a9460008301846109d5565b92915050565b6000604082019050610aaf60008301856109d5565b610abc60208301846109d5565b9392505050565b6000606082019050610ad860008301866109d5565b610ae560208301856109d5565b610af26040830184610a70565b949350505050565b6000604082019050610b0f60008301856109d5565b610b1c6020830184610a70565b9392505050565b60006020820190508181036000830152610b3c816109e4565b9050919050565b60006020820190508181036000830152610b5c81610a07565b9050919050565b60006020820190508181036000830152610b7c81610a2a565b9050919050565b60006020820190508181036000830152610b9c81610a4d565b9050919050565b6000602082019050610bb86000830184610a70565b92915050565b600082825260208201905092915050565b6000610bda82610bed565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f596f75206e65656420746f2073656c6c206174206c6561737420736f6d65207460008201527f6f6b656e73000000000000000000000000000000000000000000000000000000602082015250565b7f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e7320696e207468652072657365727665600082015250565b7f596f75206e65656420746f2073656e6420736f6d652065746865720000000000600082015250565b610cef81610bcf565b8114610cfa57600080fd5b50565b610d0681610be1565b8114610d1157600080fd5b50565b610d1d81610c0d565b8114610d2857600080fd5b5056fea26469706673582212201aaac7ac7298184a981e68dd065b5a5e6d8a15508b81ccf7d9b2ad2a92e9877964736f6c63430008070033