Created
April 8, 2021 12:43
-
-
Save slavagoreev/743199f6f03d7144f929b588f0500803 to your computer and use it in GitHub Desktop.
Lab #6. NFT Exchange
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Successfully deployed:
https://ropsten.etherscan.io/tx/0xea2a22759b4ee5e69f30248f9869787256a79d508f9a5712664400da3591adbe