apeescape2.com
  • Glavni
  • Mobilni
  • Rast Prihoda
  • Okretan
  • Mobilni Dizajn
Pozadina

Kako na jednostavan način stvoriti ERC20 žeton

Cilj ovog članka je pokazati kako stvoriti ERC20 token u što kraćem vremenu.

Počnimo s osnovama: Što je to ERC20 token?



Posljednjih godina specifikacija tokena ERC20 postala je defacto standardom za Ethereum tokene. Drugim riječima, većina današnjih ugovora Ethereuma usklađena je s ERC20. Ovaj će članak detaljno objasniti kako možete stvoriti vlastiti Ethereum token, no prije nego što započnemo, pogledajmo bliže standard ERC20.



Ilustracija ERC20 tokena

Što ERC20 tokene čini tako atraktivnim i uspješnim? U igri je nekoliko čimbenika:



  1. Kao što ćete vidjeti u ovom vodiču, ERC20 tokeni su jednostavni i laki za postavljanje.
  2. Standard ERC20 rješava značajan problem, jer tržnice i kripto-novčanici temeljeni na blockchainu trebaju jedinstveni, standardizirani skup naredbi za komunikaciju s nizom tokena kojima upravljaju. To uključuje pravila interakcije između različitih tokena, kao i pravila kupnje tokena.
  3. Bila je to prva popularna specifikacija koja je ponudila standardizaciju Ethereum tokena. Nije to bilo ni na koji način prvi , ali zahvaljujući svojoj popularnosti brzo je postao industrijski standard.

Baš kao i drugi Ethereum tokeni, ERC20 tokeni implementirani su kao pametni ugovori i izvršavaju se na Ethereum Virtual Machine (EVM) na decentraliziran način.

Čvrstoća: programski jezik pametnog ugovora

Pametni ugovori Ethereuma napisani su u Solidity. Iako postoje alternativni jezici, rijetko ih tko koristi u tu svrhu. Solidnost je slična JavaScriptu, pa ako imate neko znanje o JavaScriptu, ili čak o Javi i drugim jezicima sličnim C-u, ne biste trebali imati problema shvatiti da komad koda u Solidity-u to čini, čak i prije nego što zapravo svladate Solidity dovoljno za upotrebu to.

Tu zabava započinje, jer biste za tren trebali započeti stvaranje jednostavnog ugovora ERC20. Ovo je jednostavan zadatak, dovoljno jednostavan da će ovaj članak pokazati kako možete napisati i primijeniti ERC20 token za manje od sat vremena.



Token koji ćemo stvoriti u ovoj demonstraciji bit će gola kost implementacije ERC20, bez previše zvona i zvižduka. Međutim, vidio sam mnogo sličnih jednostavnih tokena u stvarnom svijetu, i oni obično idu prilično dobro.

Pregled ERC20 token standarda

Što je ERC20?

Jednostavno rečeno, standard ERC20 definira skup funkcija koje trebaju implementirati svi tokeni ERC20 kako bi se omogućila integracija s drugim ugovorima, novčanicima ili tržištima. Ovaj je skup funkcija prilično kratak i osnovni.

function totalSupply() public view returns (uint256); function balanceOf(address tokenOwner) public view returns (uint); function allowance(address tokenOwner, address spender) public view returns (uint); function transfer(address to, uint tokens) public returns (bool); function approve(address spender, uint tokens) public returns (bool); function transferFrom(address from, address to, uint tokens) public returns (bool);

Funkcije ERC20 omogućuju vanjskom korisniku, recimo aplikaciji za kripto-novčanik, da utvrdi korisničko stanje i prebaci sredstva s jednog korisnika na drugog uz odgovarajuću autorizaciju.

prepreke za ukrštanje kulturne komunikacije

Pametni ugovor definira dva posebno definirana događaja:

event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Transfer(address indexed from, address indexed to, uint tokens);

Ti će se događaji pozivati ​​ili emitiran kada se korisniku odobre prava za povlačenje žetona s računa i nakon što su tokeni stvarno preneseni.

Uz standardne funkcije ERC20, mnogi tokeni ERC20 imaju i dodatna polja, a neki su postali faktički dio standarda ERC20, ako ne u pisanom obliku, onda u praksi. Evo nekoliko primjera takvih polja.

string public constant name; string public constant symbol; uint8 public constant decimals;

Evo nekoliko točaka u vezi s ERC20 i nomenklaturom Solidity:

  • A public Funkciji se može pristupiti izvan samog ugovora
  • view u osnovi znači konstantno, tj. funkcija neće promijeniti unutarnje stanje ugovora
  • An event je Solidityjev način dopuštanja klijentima na pr. sučelje vaše prijave da biste bili obaviješteni o određenim događajima u ugovoru

Većina konstrukcija jezika Solidity trebala bi biti jasna ako već posjedujete osnovne Java / JavaScript vještine.

Pisanje ERC20 tokena u solidnosti

ERC20 tokeni u solidnosti

Sad kad smo iznijeli osnove i objasnili što je potrebno za stvaranje ERC20 tokena, vrijeme je da započnemo s pisanjem neke logike.

Prvo, moramo definirati dva objekta za mapiranje. Ovo je pojam Solidity za asocijativni niz ili ključ / vrijednost:

mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed;

Izraz mapping(address => uint256) definira asocijativni niz čiji su ključevi tipa address - broj koji se koristi za označavanje adresa računa, a čije su vrijednosti tipa uint256 - 256-bitni cijeli broj koji se obično koristi za spremanje stanja žetona.

Prvi objekt mapiranja, balances, sadržavat će token stanje svakog računa vlasnika.

Drugi objekt mapiranja, allowed, uključivat će sve račune odobrene za povlačenje s određenog računa, zajedno sa zbrojem povlačenja dozvoljenim za svaki.

Kao što vidite, polje vrijednosti dopuštenog mapiranja samo je po sebi karta računanja adrese računa na odobreni zbroj povlačenja.

Ta će se preslikavanja, zajedno sa svim ostalim ugovornim poljima, pohraniti u blockchain i bit će miniran što rezultira širenjem promjena na sve mrežne korisničke čvorove.

Blockchain pohrana je skupa i korisnici vašeg ugovora morat će platiti, na ovaj ili onaj način. Stoga biste uvijek trebali pokušati smanjiti veličinu pohrane i upisivati ​​u blockchain.

Sad kad imamo potrebne podatkovne strukture, možemo početi unositi logiku ERC20 u odgovarajuće funkcije.

Postavljanje broja ICO tokena

Kako postavljamo broj ICO tokena? Pa, postoji nekoliko načina postavljanja maksimalnog broja ICO tokena i ovo bi pitanje samo o sebi moglo vrijediti duge rasprave.

Za potrebe našeg ECR20 vodiča koristit ćemo najjednostavniji pristup: postavite ukupan iznos tokena u vrijeme stvaranja ugovora i u početku ih sve dodijelite 'vlasniku ugovora', tj. Računu koji je primijenio pametni ugovor:

uint256 totalSupply_; constructor(uint256 total) public { totalSupply_ = total; balances[msg.sender] = _totalSupply; }

Konstruktor je posebna funkcija koju Ethereum automatski poziva odmah nakon primjene ugovora. Obično se koristi za inicijalizaciju stanja tokena pomoću parametara koje prosljeđuje račun za implementaciju ugovora.

msg je globalna varijabla koju deklarira i naseljava sam Ethereum. Sadrži važne podatke za izvršenje ugovora. Polje koje ovdje koristimo: msg.sender sadrži račun Ethereuma koji izvršava trenutnu funkciju ugovora.

koristeći angularjs s čvorom js

Samo račun za postavljanje može ući u konstruktor ugovora. Kada je ugovor pokrenut, ova funkcija dodjeljuje dostupne tokene na račun ‘vlasnika ugovora’.

Nabavite ukupnu zalihu žetona

function totalSupply() public view returns (uint256) { return totalSupply_; }

Ova će funkcija vratiti broj svih tokena dodijeljenih ovim ugovorom, bez obzira na vlasnika.

Nabavite Token Saldo vlasnika

function balanceOf(address tokenOwner) public view returns (uint) { return balances[tokenOwner]; }

balanceOf vratit će trenutno stanje tokena na računu, identificirano adresom vlasnika.

Prenesite žetone na drugi račun

function transfer(address receiver, uint numTokens) public 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; }

Kao što mu samo ime govori, transfer funkcija se koristi za pomicanje numTokens iznos žetona s stanja vlasnika na saldo drugog korisnika ili receiver. Vlasnik koji prenosi je msg.sender tj. onaj koji izvršava funkciju, što podrazumijeva da ih samo vlasnik tokena može prenijeti drugima.

Solidity-ov način utvrđivanja predikata je require. U ovom slučaju račun za prijenos ima dovoljan saldo za izvršenje prijenosa. Ako je a require Izjava ne uspije, transakcija se odmah vraća prema nazad, bez promjena zapisanih u blockchain.

Neposredno prije izlaska, funkcija aktivira ERC20 događaj Transfer omogućujući registriranim slušateljima da reagiraju na njegovo dovršavanje.

Odobrite delegata za povlačenje tokena

Ova se funkcija najčešće koristi u scenariju tržišta tokena.

function approve(address delegate, uint numTokens) public returns (bool) { allowed[msg.sender][delegate] = numTokens; emit Approval(msg.sender, delegate, numTokens); return true; }

Što approve čini dopuštanje vlasniku tj. msg.sender da odobri delegatski račun - moguće i samo tržište - da povuče tokene sa svog računa i prenese ih na druge račune.

kako napisati provjerljivi kod

Kao što vidite, ova se funkcija koristi za scenarije u kojima vlasnici nude tokene na tržištu. Omogućuje tržištu da finalizira transakciju bez čekanja na prethodno odobrenje.

Na kraju izvršenja, ova funkcija aktivira Approval događaj.

Nabavite broj žetona odobrenih za povlačenje

function allowance(address owner, address delegate) public view returns (uint) { return allowed[owner][delegate]; }

Ova funkcija vraća trenutni odobreni broj tokena od strane vlasnika određenom delegatu, kako je postavljeno u approve funkcija.

Prenesite žetone delegatom

The transferFrom funkcija je ravnoteža approve funkcija, o kojoj smo prethodno razgovarali. Omogućuje delegatu odobrenom za povlačenje da prenosi vlasnička sredstva na račun treće strane.

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] — numTokens; allowed[owner][msg.sender] = allowed[from][msg.sender] — numTokens; balances[buyer] = balances[buyer] + numTokens; Transfer(owner, buyer, numTokens); return true; }

Dvoje require izjave pri pokretanju funkcije trebaju potvrditi da je transakcija legitimna, tj. da vlasnik ima dovoljno tokena za prijenos i da delegat ima odobrenje za (barem) numTokens povući.

Pored prijenosa numTokens iznos od vlasnika do kupca, ova funkcija također oduzima numTokens od dodatka delegata. To u osnovi omogućuje delegatu s danom dozvolom da ga podijeli na nekoliko zasebnih povlačenja, što je tipično ponašanje na tržištu.

Mogli bismo se ovdje zaustaviti i imati valjanu implementaciju ERC20. Međutim, želimo ići korak dalje, jer želimo znak industrijske snage. To zahtijeva da svoj kod učinimo malo sigurnijim, iako ćemo i dalje moći zadržati token relativno jednostavnim, ako ne i osnovnim.

SafeMath Solidity Library

SafeMath je knjižnica Solidity čiji je cilj suočavanje s jednim načinom na koji hakeri raskidaju ugovore: napadom preko cijelog broja. U takvom napadu, haker prisiljava ugovor da koristi netočne numeričke vrijednosti prolazeći parametre koji će uzeti odgovarajuće cijele brojeve prošlost njihove maksimalne vrijednosti.

Biblioteka Safemath u Solidity: ilustracija

SafeMath štiti od toga testiranjem na prelijevanje prije izvođenja aritmetičke radnje, uklanjajući tako opasnost od prelijevanja. Knjižnica je toliko mala da je utjecaj na veličinu ugovora minimalan, ne iziskuje performanse i ima malo troškova za pohranu.

Dodajmo SafeMath na naš kod:

library SafeMath { // Only relevant functions 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; } }

SafeMath koristi assert izjave za provjeru ispravnosti proslijeđenih parametara. Trebalo bi assert ako ne uspije, izvršavanje funkcije bit će odmah zaustavljeno i sve promjene blockchaina vratit će se natrag.

Dalje, dodajmo sljedeću izjavu kojom uvodimo knjižnicu u kompajler Solidity:

using SafeMath for uint256;

Zatim naivnu aritmetiku koju smo koristili zamjenjujemo funkcijama SafeMath:

balances[msg.sender] = balances[msg.sender].sub(numTokens); balances[receiver] = balances[receiver].add(numTokens); balances[buyer] = balances[buyer].add(numTokens); balances[owner] = balances[owner].sub(numTokens);

Spakujte sve zajedno

U Solidity-u su funkcije i događaji pametnog ugovora umotani u entitet nazvan a ugovor koje možete tiho prevesti u 'blockchain klasu'. Ispod je ugovor kompatibilan s ERC20 koji smo stvorili, uključujući i sadržaj našeg koda. Polja imena i simbola mogu se mijenjati po želji. Većina tokena drži decimalnu vrijednost na 18, pa ćemo i mi učiniti isto.

Uvođenje Ethereum ugovora

Došlo je vrijeme rasporediti naš ugovor na blockchain . Nakon implementacije, naš će se ugovor prenijeti na sve čvorove koji sudjeluju u mreži. Sve promjene u ugovoru bit će prenesene na sve čvorove koji sudjeluju.

Programeri Ethereuma obično koriste alate za implementaciju poput Tartuf . Čak je i Tartuf pretjeran za ograničene potrebe ovog članka, a zove se i jednostavni internetski alat Remix bit će dovoljno.

kako hakirati brojeve kreditnih kartica 2016

Da biste ga koristili, morat ćete instalirati Dodatak MetaMask u vašem pregledniku i Rinkeby (Ethereum test network) račun s barem malo Rinkeby Etera u njemu. To su relativno jednostavni koraci, pa nećemo ulaziti u detalje.

U slučaju da nemate nijedno, prijeđite na MetaMask i Rinkeby za veze za preuzimanje i za dobivanje jasnih uputa za instalaciju i upotrebu.

Sad kad imamo sve gradivne blokove na mjestu, krenut ćemo do Remix i zalijepite gornji kod, uključujući pragma redak i knjižnicu SafeMath, u mrežni uređivač.

Zatim ćemo preskočiti na drugu karticu s desne strane nazvanu „ Trčanje 'I kliknite' Rasporediti . ' Pojavit će se skočni prozor MetaMask koji traži da potvrdimo transakciju. Naravno, odobrit ćemo to.

slika alt tekst

  • Zelena kutija: provjerite jeste li na Rinkebyju
  • Plavi okvir: postavite ukupnu zalihu tokena
  • Crveni okvir: Raspored!

Suština : https://gist.github.com/giladHaimov/8e81dbde10c9aeff69a1d683ed6870be#file-basicerc20-sol

Čestitamo! Upravo ste postavili svoj prvi ERC20 token, poput istine Profesionalni Ethereum . Kao što je i obećano, token je jednostavan i lagan, ali u potpunosti funkcionalan, u skladu sa standardom ERC20 i zaštićen MathSafeom. Spreman je za kupnju, plaćanje i prijenos preko cijelog Blockchaina.

Je li to sve što postoje pametni ugovori?

Ne, ni izbliza, jer naša kratka demonstracija jedva grebe površinu i bavi se samo jednim aspektom razvoja pametnih ugovora.

Pametni ugovori mogu biti puno složeniji, ovisno o vašoj poslovnoj logici, vašem modeliranju korisničke interakcije, dopuštate li kovanje i sagorijevanje tokena, promjene životnog ciklusa koje uvodite u ugovor, potrebu za mogućnostima na razini administratora koja obično dolazi s skup funkcija koje je odobrio administrator itd. Shvatili ste sliku.

Ipak, ako možete ponoviti ono što smo ovdje radili, to je čvrst temelj za proširenje vašeg znanja i prema potrebi prelazak na složenije ugovore.

Razumijevanje osnova

Što je pametni ugovor?

Pametni ugovor je dio koda izveden na virtualnom stroju Ethereum. Pametni ugovor Ethereuma nepromjenjiv je i može slati ili primati eter i podatke.

Što su ERC20 tokeni?

Pojednostavljeno, ERC20 tokeni su ugovori koji implementiraju ERC20 standard. Operacije kojima se upravljaju ovi ugovori uključuju dobivanje ukupne ponude i bilance tokena i metode korištene za njihov prijenos.

Koji programski jezik koristi Ethereum?

Razvoj Ethereuma trenutno se provodi u Solidity, programskom jeziku orijentiranom na ugovor nadahnutom JavaScriptom, Pythonom i C ++.

Što znači ERC?

ERC je kratica za Ethereum Request for Comment. Ovom je zahtjevu dodijeljen broj 20, odatle i sufiks.

iOS centralizirano i nevezano umrežavanje: Vodič za AFNetworking s jednim razredom

Pozadina

iOS centralizirano i nevezano umrežavanje: Vodič za AFNetworking s jednim razredom
Ulaganje u kriptovalute: Krajnji vodič

Ulaganje u kriptovalute: Krajnji vodič

Financijski Procesi

Popularni Postovi
Avanture u programiranju i razvoju GPS-a: geoprostorni vodič
Avanture u programiranju i razvoju GPS-a: geoprostorni vodič
TAM metodologija: Objašnjenje i primjer ukupne adresirane analize tržišta
TAM metodologija: Objašnjenje i primjer ukupne adresirane analize tržišta
Omjeri vrednovanja: Ključni metrički podaci koje stručnjaci za financije trebaju znati
Omjeri vrednovanja: Ključni metrički podaci koje stručnjaci za financije trebaju znati
Agile dokumentacija: Usklađivanje brzine i zadržavanja znanja
Agile dokumentacija: Usklađivanje brzine i zadržavanja znanja
Rizik portfelja industrije-savjetnika u industriji: učinkovitost ili rezanje kutova?
Rizik portfelja industrije-savjetnika u industriji: učinkovitost ili rezanje kutova?
 
Kako provesti učinkovito UX istraživanje - Vodič
Kako provesti učinkovito UX istraživanje - Vodič
Skok u VR / AR dizajn
Skok u VR / AR dizajn
Upoznajte RxJavu: Nestala knjižnica reaktivnog programiranja za Android
Upoznajte RxJavu: Nestala knjižnica reaktivnog programiranja za Android
10 UX isporuka vrhunskih dizajnera
10 UX isporuka vrhunskih dizajnera
Pregled Microsoftovog HoloLens - Premošćavanje praznine između AR i VR
Pregled Microsoftovog HoloLens - Premošćavanje praznine između AR i VR
Popularni Postovi
  • kako privatne dioničke tvrtke prikupljaju kapital
  • popis fondova nekretnina privatnog kapitala
  • angularjs 2 korak po korak
  • koji je jedan od načina da se negativni saldo trgovine pretvori u platnu bilancu od 0 USD?
  • eliksir (programski jezik)
Kategorije
Ostalo Uspon Daljinskog Uspon Daljinskog Upravljača Trendovi Inovacija Isplativost I Učinkovitost Kpi I Analitika Financijski Procesi Tehnologija Proces Dizajniranja

© 2021 | Sva Prava Pridržana

apeescape2.com