Skip to content

Instantly share code, notes, and snippets.

@slavagoreev
Created April 8, 2021 12:43
Show Gist options
  • Save slavagoreev/743199f6f03d7144f929b588f0500803 to your computer and use it in GitHub Desktop.
Save slavagoreev/743199f6f03d7144f929b588f0500803 to your computer and use it in GitHub Desktop.
Lab #6. NFT Exchange
pragma solidity ^0.4.19;
contract ERC20 {
string public name;
string public symbol;
string public website;
address public base_address;
address public owner_address;
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
event Transfer(address indexed from, address indexed to, uint tokens);
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
uint256 totalSupply_;
using SafeMath for uint256;
constructor(uint256 total, string _name, string _symbol, string _website, address _owner_address) public {
totalSupply_ = total;
balances[msg.sender] = totalSupply_;
name = _name;
symbol = _symbol;
website = _website;
owner_address = this;
owner_address = _owner_address;
}
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
function balanceOf(address tokenOwner) public view returns (uint) {
return balances[tokenOwner];
}
function transfer(address receiver, uint numTokens) public returns (bool) {
require(numTokens <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(numTokens);
balances[receiver] = balances[receiver].add(numTokens);
emit Transfer(msg.sender, receiver, numTokens);
return true;
}
function approve(address delegate, uint numTokens) public returns (bool) {
allowed[msg.sender][delegate] = numTokens;
Approval(msg.sender, delegate, numTokens);
return true;
}
function allowance(address owner, address delegate) public view returns (uint) {
return allowed[owner][delegate];
}
function transferFrom(address owner, address buyer, uint numTokens) public returns (bool) {
require(numTokens <= balances[owner]);
require(numTokens <= allowed[owner][msg.sender]);
balances[owner] = balances[owner].sub(numTokens);
allowed[owner][msg.sender] = allowed[owner][msg.sender].sub(numTokens);
balances[buyer] = balances[buyer].add(numTokens);
Transfer(owner, buyer, numTokens);
return true;
}
}
library SafeMath {
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract contractsHolder {
mapping(address => ERC20) public addresses;
function createToken (uint256 total, string name, string symbol, string website) public {
ERC20 new_contract = new ERC20(total, name, symbol, website, msg.sender);
addresses[msg.sender] = new_contract;
}
function transferOwnership (address _new_owner) public payable {
require(msg.value == 0.5 * 10 ** 18, "Minimal cost is 0.5 ETH");
ERC20 contract_entity = addresses[msg.sender];
addresses[msg.sender] = addresses[_new_owner];
addresses[_new_owner] = contract_entity;
}
}
@slavagoreev
Copy link
Author

@slavagoreev
Copy link
Author

image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment