Skip to content

Instantly share code, notes, and snippets.

@LordAthis
Forked from bajcmartinez/erc20-token-sample.sol
Last active December 26, 2020 03:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LordAthis/29526a4b6a94d24cdd296abb821dfa4f to your computer and use it in GitHub Desktop.
Save LordAthis/29526a4b6a94d24cdd296abb821dfa4f to your computer and use it in GitHub Desktop.
Necessary code to generate an ERC20 Token
pragma solidity ^0.4.24;
// ----------------------------------------------------------------------------
// Token szerződés minta
//
// Szimbólum : L1T
// Név : Live One Token
// Teljes készlet : 8000000000
// Tizedesjegy : 3
// Tulajdonos Fiók : 0x8AdDd7824c4d172547264295B20Af394C41dDDe1
// FIGYELEM!
// Ezeket az adatokat mindenképpen változtasd meg a dokumentum többi részén is!!!
// A "Tulajdonosi Fiók"-ot is, különben nálam landol a Coin/ICO !!!
//
// Élvezd! (Enjoy.)
//
// Megjegyzés: Ez a kód tájékoztató-oktató, és szórakoztató célokat szolgál!
// Felhasználása csak saját felelősségre!
// Minden felelőség kizárva!
//
// (c) by LordAthis 2020. MIT Licence.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Lib: Biztonságos Matematika
// ----------------------------------------------------------------------------
contract SafeMath {
function safeAdd(uint a, uint b) public pure returns (uint c) {
c = a + b;
require(c >= a);
}
function safeSub(uint a, uint b) public pure returns (uint c) {
require(b <= a);
c = a - b;
}
function safeMul(uint a, uint b) public pure returns (uint c) {
c = a * b;
require(a == 0 || c / a == b);
}
function safeDiv(uint a, uint b) public pure returns (uint c) {
require(b > 0);
c = a / b;
}
}
/**
ERC Token Standard #20 Interface
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
*/
contract ERC20Interface {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
/**
Szerződés funkció jóváhagyás fogadására és a hívás végrehajtására egy hívás során
A MiniMeToken-től kölcsönözve
*/
contract ApproveAndCallFallBack {
function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}
/**
ERC20 Token, szimbólum, név és tizedesjegyek hozzáadásával, valamint segített token átvitel
*/
contract L1TToken is ERC20Interface, SafeMath {
string public symbol;
string public name;
uint8 public decimals;
uint public _totalSupply;
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) allowed;
// ------------------------------------------------------------------------
// Konstruktőr
// ------------------------------------------------------------------------
constructor() public {
symbol = "L1T";
name = "Live One Token";
decimals = 3;
_totalSupply = 8000000000;
balances[0x8AdDd7824c4d172547264295B20Af394C41dDDe1] = _totalSupply;
emit Transfer(address(0), 0x8AdDd7824c4d172547264295B20Af394C41dDDe1, _totalSupply);
}
// ------------------------------------------------------------------------
// Teljes készlet
// ------------------------------------------------------------------------
function totalSupply() public constant returns (uint) {
return _totalSupply - balances[address(0)];
}
// ------------------------------------------------------------------------
// Szerezze be a tokenOwner fiók token egyenlegét
// ------------------------------------------------------------------------
function balanceOf(address tokenOwner) public constant returns (uint balance) {
return balances[tokenOwner];
}
// ------------------------------------------------------------------------
// Átutalja az egyenleget a token tulajdonos számlájáról a számlára
// - A tulajdonos számlájának elegendő egyenleggel kell rendelkeznie az átutaláshoz
// - 0 értéktranszfer megengedett
// ------------------------------------------------------------------------
function transfer(address to, uint tokens) public returns (bool success) {
balances[msg.sender] = safeSub(balances[msg.sender], tokens);
balances[to] = safeAdd(balances[to], tokens);
emit Transfer(msg.sender, to, tokens);
return true;
}
// ------------------------------------------------------------------------
// A token tulajdonosa jóváhagyhatja, hogy a költők átvigyék a (...) tokenekről
// a token tulajdonos számlájáról
//
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// javasolja, hogy ne ellenőrizzék a jóváhagyási kettős kiadások támadását
// mivel ezt a felhasználói felületeken kell megvalósítani
// ------------------------------------------------------------------------
function approve(address spender, uint tokens) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
return true;
}
// ------------------------------------------------------------------------
// Tokenek átvitele a fiókból a fiókba
//
// The calling account must already have sufficient tokens approve(...)-d
// for spending from the from account and
// - A számláról elegendő egyenleggel kell rendelkeznie az átutaláshoz
// - A költőnek elegendő engedéllyel kell rendelkeznie az átutaláshoz
// - 0 értéktranszfer megengedett
// ------------------------------------------------------------------------
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
balances[from] = safeSub(balances[from], tokens);
allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
balances[to] = safeAdd(balances[to], tokens);
emit Transfer(from, to, tokens);
return true;
}
// ------------------------------------------------------------------------
// Visszaadja a tulajdonos által jóváhagyott tokenek azon összegét,
// amelyet át lehet utalni a költő számlájára
// ------------------------------------------------------------------------
function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
return allowed[tokenOwner][spender];
}
// ------------------------------------------------------------------------
// A token tulajdonosa jóváhagyhatja, hogy a költők átadják a From (...)
// tokent a token tulajdonos számlájáról.
// A kiadási szerződés függvény megkapja a jóváhagyást (...),
// majd végrehajtásra kerül
// ------------------------------------------------------------------------
function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
return true;
}
// ------------------------------------------------------------------------
// Ne fogadja el az ETH-t
// ------------------------------------------------------------------------
function () public payable {
revert();
}
}
pragma solidity ^0.4.24;
// ----------------------------------------------------------------------------
// Token szerződés minta
//
// Szimbólum : {{Token Symbol}}
// Név : {{Token Name}}
// Teljes készlet : {{Total Supply}}
// Tizedesjegy : {{Decimals}}
// Tulajdonos Fiók : {{Owner Account}}
// FIGYELEM!
// Ezeket az adatokat mindenképpen változtasd meg a dokumentum többi részén is!!!
// A "Tulajdonosi Fiók"-ot is, különben nálam landol a Coin/ICO !!!
//
// Élvezd! (Enjoy.)
//
// Megjegyzés: Ez a kód tájékoztató-oktató, és szórakoztató célokat szolgál!
// Felhasználása csak saját felelősségre!
// Minden felelőség kizárva!
//
// (c) by LordAthis 2020. MIT Licence.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Lib: Biztonságos Matematika
// ----------------------------------------------------------------------------
contract SafeMath {
function safeAdd(uint a, uint b) public pure returns (uint c) {
c = a + b;
require(c >= a);
}
function safeSub(uint a, uint b) public pure returns (uint c) {
require(b <= a);
c = a - b;
}
function safeMul(uint a, uint b) public pure returns (uint c) {
c = a * b;
require(a == 0 || c / a == b);
}
function safeDiv(uint a, uint b) public pure returns (uint c) {
require(b > 0);
c = a / b;
}
}
/**
ERC Token Standard #20 Interface
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
*/
contract ERC20Interface {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
/**
Szerződés funkció jóváhagyás fogadására és a hívás végrehajtására egy hívás során
A MiniMeToken-től kölcsönözve
*/
contract ApproveAndCallFallBack {
function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}
/**
ERC20 Token, szimbólum, név és tizedesjegyek hozzáadásával, valamint segített token átvitel
*/
contract {{Token Symbol}}Token is ERC20Interface, SafeMath {
string public symbol;
string public name;
uint8 public decimals;
uint public _totalSupply;
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) allowed;
// ------------------------------------------------------------------------
// Konstruktőr
// ------------------------------------------------------------------------
constructor() public {
symbol = "{{Token Symbol}}";
name = "{{Token Name}}";
decimals = {{Decimals}};
_totalSupply = {{Total Supply}};
balances[{{Owner Account}}] = _totalSupply;
emit Transfer(address(0), {{Owner Account}}, _totalSupply);
}
// ------------------------------------------------------------------------
// Teljes készlet
// ------------------------------------------------------------------------
function totalSupply() public constant returns (uint) {
return _totalSupply - balances[address(0)];
}
// ------------------------------------------------------------------------
// Szerezze be a tokenOwner fiók token egyenlegét
// ------------------------------------------------------------------------
function balanceOf(address tokenOwner) public constant returns (uint balance) {
return balances[tokenOwner];
}
// ------------------------------------------------------------------------
// Átutalja az egyenleget a token tulajdonos számlájáról a számlára
// - A tulajdonos számlájának elegendő egyenleggel kell rendelkeznie az átutaláshoz
// - 0 értéktranszfer megengedett
// ------------------------------------------------------------------------
function transfer(address to, uint tokens) public returns (bool success) {
balances[msg.sender] = safeSub(balances[msg.sender], tokens);
balances[to] = safeAdd(balances[to], tokens);
emit Transfer(msg.sender, to, tokens);
return true;
}
// ------------------------------------------------------------------------
// A token tulajdonosa jóváhagyhatja, hogy a költők átvigyék a (...) tokenekről
// a token tulajdonos számlájáról
//
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// javasolja, hogy ne ellenőrizzék a jóváhagyási kettős kiadások támadását
// mivel ezt a felhasználói felületeken kell megvalósítani
// ------------------------------------------------------------------------
function approve(address spender, uint tokens) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
return true;
}
// ------------------------------------------------------------------------
// Tokenek átvitele a fiókból a fiókba
//
// The calling account must already have sufficient tokens approve(...)-d
// for spending from the from account and
// - A számláról elegendő egyenleggel kell rendelkeznie az átutaláshoz
// - A költőnek elegendő engedéllyel kell rendelkeznie az átutaláshoz
// - 0 értéktranszfer megengedett
// ------------------------------------------------------------------------
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
balances[from] = safeSub(balances[from], tokens);
allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
balances[to] = safeAdd(balances[to], tokens);
emit Transfer(from, to, tokens);
return true;
}
// ------------------------------------------------------------------------
// Visszaadja a tulajdonos által jóváhagyott tokenek azon összegét,
// amelyet át lehet utalni a költő számlájára
// ------------------------------------------------------------------------
function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
return allowed[tokenOwner][spender];
}
// ------------------------------------------------------------------------
// A token tulajdonosa jóváhagyhatja, hogy a költők átadják a From (...)
// tokent a token tulajdonos számlájáról.
// A kiadási szerződés függvény megkapja a jóváhagyást (...),
// majd végrehajtásra kerül
// ------------------------------------------------------------------------
function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
return true;
}
// ------------------------------------------------------------------------
// Ne fogadja el az ETH-t
// ------------------------------------------------------------------------
function () public payable {
revert();
}
}
@LordAthis
Copy link
Author

Tesztelés céljából forkoltam, MIT Licensz alatt.

Teszteléséhez 8'000'000 L1T Tokent hoztam létre, mely 3 tizedesig osztható. (8 millió * 1000 = 8'000'000'000)
A megadott ETH Tárcát cseréld a saját tárcádra!
(Ugyanebben a tárcában Adományokat - Donate - elfogadok! ;) )

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