Ana sayfa
Makaleler
ERC-20 Tokenlarına Giriş

ERC-20 Tokenlarına Giriş

Orta Seviye
Yayınlanma: Jul 31, 2020Güncellenme: Dec 28, 2022
12m

İçerik


Giriş

Ethereum, 2014 yılında Vitalik Buterin tarafından kurularak kendini merkeziyetsiz uygulamalar (DApp'ler) çıkarmak için bir açık kaynak platform konumuna yerleştirmiştir. Buterin’in yeni bir blockchain yaratmak için motivasyonunun büyük kısmı Bitcoin protokolünün esnek olmamasından kaynaklanır.
Ethereum blockchaini faaliyete geçtiği günden bu yana geliştiricileri, şirketleri ve girişimcileri kendine çekerek akıllı kontratlar ve dağıtılmış uygulamalar çıkaran kullanıcılardan oluşan büyümekte bir sektör yaratmıştır.
Bu makalede, tokenlar yaratmak için önemli bir çerçeve olan ERC-20 standardından bahsedeceğiz. ERC-20 standardı Ethereum ağına özel olsa da bu çerçeve, Binance Chain’in BEP-2’si gibi diğer blockchain standartlarına ilham vermiştir.


ERC-20 standardı nedir?

Ethereum’da ERC, Ethereum Requests for Comments’in kısaltmasıdır. Bunlar, Ethereum üzerinde programlama yapabilmek için standartların ana hatlarını belirleyen teknik belgelerdir. ERC’nin, Bitcoin'in BIP’lerindeki gibi protokolün kendisine yönelik iyileştirmeler öneren Ethereum Improvement Proposal’ları (Ethereum Geliştirme Önerileri - EIP) ile karıştırılmaması gerekir. ERC, uygulamaların ve kontratların birbirleriyle daha kolay etkileşim kurmasını sağlamak için bir düzen yaratmayı amaçlar.

2015 yılında Vitalik Buterin ve Fabian Vogelsteller tarafından yazılan ERC-20, Ethereum temelli tokenlar için nispeten daha basit bir format ortaya koyar. Geliştiriciler bu çerçeveyi takip ettiğinde her şeye baştan başlamak zorunda kalmaz. Bunun yerine, sektör genelinde halihazırda kullanılan bir temel üzerine inşa edebilirler.

Yeni ERC-20 tokenlar yaratıldıklarında, ERC-20 standardını destekleyen yazılımlar ve hizmetlerle (yazılım cüzdanlarıdonanım cüzdanlarıborsalar, vb.) otomatik olarak karşılıklı çalışabilir hale gelir.

ERC-20 standardının bir EIP (tam olarak EIP-20) üzerine inşa edildiğine dikkat edilmelidir. Bu gelişme, orijinal öneriden birkaç yıl sonra, geniş çaplı kullanım nedeniyle gerçekleşmiştir. Fakat yıllar sonra bile hala “ERC-20” ismi kullanılmaktadır.


Ethereum tokenlarının kısa bir özeti

ETH’nin (Ethereum’un yerel para birimi) aksine ERC-20 tokenları hesaplar tarafından tutulmaz. Tokenlar, yalnızca bir kontratın içinde var olur ve bu kontrat kendi kendine yeten bir veritabanına benzerlik gösterir. Tokenlar için kuralları belirler (örn. isim, sembol, bölünebilirlik) ve kullanıcıların bakiyelerini Ethereum adreslerine bağlayan bir liste tutar.

Kullanıcılar, tokenları hareket ettirebilmek için bakiyelerinin bir kısmının başka bir yere aktarılması talebinde bulunan bir işlemi kontrata göndermelidir. Örneğin Alice, Bob’a 5.000 BinanceAcademyToken göndermek isterse BinanceAcademyToken akıllı kontratının içindeki bir fonksiyonu çağırarak bu işlemin yapılmasını talep eder.



Çağrısı, token kontratına 0 ETH ödeyen standart bir Ethereum işlemi gözüken bir işlemin içinde olacaktır. Bu çağrı, işlemin ek bir bölümüne dahil edilir ve Alice’in ne yapmak istediğini belirtir – örneğimizde Alice'in isteği tokenları Bob’a transfer etmektir.

Ether göndermiyor olsa da işleminin bir bloğa dahil edilmesi için yine de ETH cinsinden bir ücret ödemesi gereklidir. ETH’si yoksa tokenları transfer etmeden önce biraz ether alması gerekir.
Yukarıda bahsettiğimizin Etherscan üzerindeki gerçek hayattan bir örneği şu şekildedir: Bir kişi BUSD kontratına çağrı yapar. Tokenların transfer edildiğini ve bir işlem ücretinin ödendiğini görebilirsiniz, oysa Değer alanı 0 ETH’nin gönderildiğini gösterir.

Bazı temel bilgilerin üzerinden geçtiğimize göre artık tipik bir ERC-20 kontratının yapısını anlamak için biraz daha detaya inebiliriz.


ERC-20 tokenları nasıl yaratılır?



ERC-20 uyumlu olabilmesi için kontratın altı zorunlu fonksiyonu içermesi gerekir: totalSupply (toplam arz), balanceOf (bakiye), transfer (transfer), transferFrom (transferin kaynağı), approve (onay) ve allowance (kalan bakiye). Buna ek olarak, name (isim), symbol (sembol) ve decimal (ondalık) gibi opsiyonel fonksiyonları da belirleyebilirsiniz. Bu fonksiyonların ne yaptığını isimlerinden anlayabilirsiniz. Anlayamıyorsanız da sorun değil, her birini ayrıntılı olarak inceleyeceğiz. 

Ethereum’un amaca özel Solidity dilinde gözüktükleri şekilde fonksiyonlar şunlardan oluşur:


totalSupply

function totalSupply() public view returns (uint256)
Yukarıdaki fonksiyon bir kullanıcı tarafından çağrıldığında kontratın üzerinde bulunan tokenların toplam arzını verir.


balanceOf 

function balanceOf(address _owner) public view returns (uint256 balance)
totalSupply'ın aksine balanceOf (bakiye) bir parametre (bir adres) alır. Çağrıldığında bu adresin token birikimlerinin bakiyesini verir. Ethereum ağındaki hesapların herkese açık olduğunu unutmayın, dolayısıyla adresini bildiğiniz müddetçe herhangi bir kullanıcının bakiyesini sorgulayabilirsiniz.


transfer

function transfer(address _to, uint256 _value) public returns (bool success)
transfer, tokenları bir kullanıcıdan diğerine uygun bir şekilde transfer eder. Burada, gönderim yapmak istediğiniz adresi ve gönderilecek tutarı belirtmeniz gerekir.
transfer çağrıldığında, blockchainin kendisine verilmiş bir referansı eklemesini söyleyen bir event'i (etkinlik - bu durumda transfer etkinliği) tetikler.


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
transferFrom (transferin kaynağı) fonksiyonu, transfer'in merkeziyetsiz uygulamalarda biraz daha programlanabilirlik sunan kullanışlı bir alternatifidir. Aynı transfer gibi bu fonksiyon da tokenları hareket ettirmek için kullanılır, ama bu tokenların kontratı çağıran kişiye ait olmasına gerek yoktur. 

Diğer bir deyişle, bir kişiyi – ya da başka bir kontratı – sizin adınıza fonları transfer etmesi için yetkilendirebilirsiniz. Olası bir kullanım alanı, ödemeleri her gün/hafta/ay manuel olarak yapmak istemediğiniz abonelik bazlı hizmetlerdir. Ödemeyi kendiniz yapmak yerine programın sizin yerinize yapmasına izin verirsiniz.

Bu fonksiyon da transfer'le aynı event'i (etkinliği) tetikler.


approve

function approve(address _spender, uint256 _value) public returns (bool success)
approve (onay), programlanabilirlik açısından bir diğer kullanışlı fonksiyondur. Bu fonksiyonla, bir akıllı kontratın bakiyenizden çekebileceği token sayısını sınırlayabilirsiniz. Bu fonksiyon olmazsa, kontratın arızalanması (ya da ele geçirilmesi) ve tüm fonlarınızı çalması riskiyle karşı karşıya kalırsınız. 
Abonelik modeli örneğimize tekrar dönelim. Çok yüksek miktarda BinanceAcademyToken'ına sahip olduğunuzu ve bir yayın akışı DApp'ine haftalık tekrar eden ödemeler yapmak istediğinizi varsayalım. Gece gündüz Binance Academy içeriklerini okumakla meşgul olduğunuz için her hafta manuel olarak bir işlem yapmakla uğraşmak istemiyorsunuz.
BinanceAcademyToken'larınızın bakiyesi çok yüksek, abonelik için ödemeniz gerekenden çok daha fazla. DApp'in tüm tokenlarınızı almasını engellemek için approve fonksiyonunu kullanarak bir limit belirleyebilirsiniz. Aboneliğinize haftalık olarak bir BinanceAcademyToken ödediğinizi varsayalım. Onaylanan tutarın üst limitini yirmi token olarak belirlerseniz, aboneliğinizin beş ay boyunca otomatik olarak ödenmesini sağlayabilirsiniz.

En kötü ihtimalle DApp tüm fonlarınızı çekmeye çalışırsa ya da bir yazılım açığı bulunursa yalnızca yirmi token kaybedersiniz. Elbette bu durum ideal olmayacaktır, ama tüm birikimlerinizi kaybetmenize kıyasla çok daha iyidir.

approve çağrıldığında bir approval (onaylama) event'ini (etkinliğini) tetikler. Bu etkinlik de, transfer etkinliği gibi veriyi blockchain üzerine yazar.


allowance 

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance, (kalan bakiye) approve ile birlikte kullanılabilir. Bir kontrata tokenlarınızı yönetmesi için izin verdiğinizde, kontratın çekebileceği ne kadar tokenın kaldığını kontrol etmek isteyebilirsiniz. Örneğin, aboneliğiniz onaylanmış yirmi tokenınızın on ikisini kullandıysa allowance fonksiyonunu çağırdığınızda yanıt olarak sekiz alırsınız.


Opsiyonel fonksiyonlar

Yukarıda bahsettiğimiz fonksiyonlar zorunludur. Diğer yandan name (isim), symbol (sembol) ve decimal'ın (ondalık) dahil edilmesi şart değildir, ama bu özellikler ERC-20 kontratınızı biraz daha iyi bir hale getirebilir. Bu fonksiyonlar sırasıyla, insan tarafından okunabilir bir isim eklemenize, bir sembol belirlemenize (örn. ETH, BTC, BNB) ve tokenın kaç ondalık birime bölünebileceğini belirlemenize imkan tanır. Örneğin, para birimi olarak kullanılan tokenlar için bölünebilirliğin daha fazla olması, mülkiyeti temsil eden bir tokena kıyasla daha önemlidir.


Bu öğeleri gerçek bir kontrat üzerinde incelemek için GitHub'daki bu örneğe göz atabilirsiniz.


ERC-20 tokenları ne yapabilir?



Yukarıdaki tüm fonksiyonları bir araya getirdiğimizde bir ERC-20 kontratına sahip oluruz. Toplam arzı sorgulayabilir, bakiyeleri kontrol edebilir, fon transfer edebilir ve tokenlarımızı bizim yerimize idare etmesi için diğer Dapp'lere izin verebiliriz.

ERC-20 tokenlarının çekici olması büyük oranda esnek olmalarına dayanır. Mevcut düzen, geliştirmelerin yapılmasını sınırlandırmaz, dolayısıyla taraflar ek özellikleri uygulamaya koyabilir ve ihtiyaçları doğrultusunda özel parametreler belirleyebilir.


Sabit coinler

Sabit coinler (değeri itibari para birimlerine endekslenmiş tokenlar) çoğu zaman ERC-20 token standardını kullanır. Daha önce bahsettiğimiz BUSD kontratına yapılan işlem bunun bir örneğidir ve büyük sabit coinlerin çoğu da bu formatı kullanır.

Tipik bir itibari paraya endeksli sabit coinde, coini çıkaran kurum euro, dolar, vb. rezervlere sahiptir. Daha sonra rezervindeki her bir birim için bir token çıkarır. Yani, bir kasada 10.000 USD kilitliyse çıkarıcı kurum, her biri 1USD karşılığında bozdurulabilen 10.000 token yaratabilir.

Teknik anlamda bunu Ethereum'da uygulamaya koymak oldukça kolaydır. Çıkarıcı kurumun 10.000 tokenla bir kontrat çıkarması yeterlidir. Daha sonra bu tokenlar, ileride itibari paralara bire bir oranda çevrilebilecekleri sözüyle kullanıcılara dağıtılır. 

Kullanıcılar, tokenlarıyla birçok şey yapabilir – ürün ve hizmet satın alabilir ya da tokenları Dapp'lerde kullanabilirler. Bunun yerine, çıkarıcı kurumdan tokenları hemen çevirmesini de isteyebilirler. Bu noktada, çıkarıcı kurum iade edilen tokenları yakar (kullanılmaz hale getirir) ve rezervinden karşılık gelen tutarda itibari para çeker.

Bu sistemi yöneten kontrat, daha önce bahsettiğimiz gibi oldukça basittir. Fakat bir sabit coin çıkarmak, lojistik, yasal uyumluluk ve benzeri birçok dış etmen üzerinde çok fazla çalışma gerektirir.


Menkul kıymet tokenları

Menkul kıymet tokenları da sabit coinlere benzerdir. Her ikisi de aynı şekilde çalıştığından kontrat seviyesinde birebir aynı olabilirler. Fark, çıkarıcı kurum seviyesinde ortaya çıkar. Menkul kıymet tokenları, hisse senedi, bono ve fiziksel varlıklar gibi menkul kıymetleri temsil eder. Çoğu zaman (fakat her zaman değil), token sahibine bir şirket ya da ürün üzerinde pay tahsis ederler.


Hizmet tokenları

Hizmet tokenları muhtemelen günümüzün en yaygın token türüdür. Diğer iki tokenın aksine hizmet tokenları herhangi bir şeyle destekli değildir. Varlık destekli tokenları bir hava yolu şirketindeki hisselere benzetirsek, bu durumda hizmet tokenları da sık uçuş yapan kullanıcı programlarına benzerlik gösterecektir: bir amaca hizmet eder, fakat dışarıda bir değere sahip değildir. Hizmet tokenlarının birçok kullanım alanı vardır ve oyun içi para birimi, merkeziyetsiz uygulamalar için ödeme aracı, sadakat puanları ve benzeri birçok amaca hizmet edebilirler.



ERC-20 tokenlarında madencilik yapılabilir mi?

Ether (ETH) madenciliği yapabilirsiniz, ama tokenlar madenciliğe uygun değildir – yeni tokenların yaratılmasına çıkarılma (mint) adı verilir. Bir kontrat yaratıldığında, geliştiriciler arzı planlarına ve yol haritalarına göre dağıtır.
Bu işlem genellikle bir İlk Coin Arzı (ICO), İlk Borsa Arzı (IEO) ya da Menkul Kıymet Token Arzı (STO) ile yapılır. Bu kısaltmaların çeşitli versiyonlarıyla karşılaşabilirsiniz, ama kavramlar oldukça benzer olacaktır. Yatırımcılar, kontrat adresine ether gönderir ve bunun karşılığında yeni tokenlardan alır. Toplanan para projenin geliştirilmesine yönelik harcanır. Kullanıcılar, tokenlarını kullanabiliyor olmayı bekler (ya hemen ya da ileri bir tarihte) ya da proje geliştikçe kar elde etmek için tokenlarını satar.

Token dağıtımının otomatik olmasına gerek yoktur. Birçok fon toplama etkinliği kullanıcıların farklı dijital para birimleriyle (BNB, BTC, ETH ve USDT gibi) ödeme yapmasına imkan tanır. Daha sonra, karşılık gelen miktarda bakiye kullanıcıların verdiği adreslere aktarılır.


ERC-20 tokenlarının avantaj ve dezavantajları

ERC-20 tokenlarının avantajları

Mübadele edilebilir

ERC-20 tokenları mübadele edilebilirdir – tüm birimler birbirlerinin yerine kullanılabilir. Bir BinanceAcademyToken'ına sahipseniz, hangi belirli tokena sahip olduğunuz önemli değildir. Elinizdeki tokenı başka bir kişinin tokenıyla takas edebilirsiniz ve nakit para ya da altındakine benzer şekilde elinizdeki token daha öncekiyle aynı şekilde çalışacaktır.

Tokenlarınız bir tür para birimi olmayı hedefliyorsa bu ideal bir özelliktir. Birimlerin, birbirinden farklılık gösteren özelliklere sahip olmasını istemezsiniz, çünkü bu durumda mübadele edilemez hale gelirler. Farklılık olması durumunda bazı tokenlar diğerlerinden daha az ya da çok değerli hale gelerek altta yatan amaca zarar verebilir.


Esneklik

Daha önceki bölümde incelediğimiz gibi ERC-20 tokenları büyük oranda kişiselleştirilebilir ve farklı birçok uygulamaya uyumlu hale getirilebilir. Örneğin, oyun içi para birimi olarak, sadakat puanı programlarında, dijital koleksiyonluklar olarak ve hatta sanat eserlerini ve mülkiyet haklarını temsil etmek için kullanılabilirler.


Popülerlik

ERC-20'nin kripto para sektöründeki popülerliği bu standardı bir taslak olarak kullanmak için oldukça çekici bir nedendir. Yeni çıkarılan tokenlarla halihazırda uyumlu çok sayıda borsa, cüzdan ve akıllı kontrat olacaktır. Dahası, geliştirici desteği ve dokümantasyonlara ulaşmak kolaydır. 


ERC-20 tokenlarının dezavantajları

Ölçeklenebilirlik

Birçok kripto para ağı gibi Ethereum da büyümeye yönelik sorunlar yaşar. Şu anki haliyle ölçeklenebilirliği yüksek değildir – yoğun zamanlarda bir işlem göndermeye çalışmak yüksek işlem ücretlerine ve gecikmelere neden olabilir. Bir ERC-20 tokenı çıkarırsanız ve ağ tıkanırsa, tokenın kullanılabilirliği bundan etkilenir.

Bu sorun Ethereum'a has değildir. Aslında ölçeklenebilirlik, güvenli ve dağıtılmış sistemler için gerekli bir kar zarar dengesidir. Topluluk bu sorunlar için Ethereum Plasma ve Ethereum Casper gibi yükseltmeleri uygulamaya koyacak olan Ethereum 2.0'a geçmeyi planlamaktadır.
Ölçeklenebilirlik sorunları hakkında daha fazla bilgiye Blockchain Ölçeklenebilirliği: Yan Zincirler ve Ödeme Kanalları makalemizden ulaşabilirsiniz.


Dolandırıcılıklar

Bu, teknolojinin kendisine yönelik bir sorun olmasa da bir token çıkarmanın bu kadar kolay olması bazı açılardan dezavantaj yaratabilir. Minimum çabayla basit bir ERC-20 token çıkarmak mümkündür, yani herhangi biri bunu iyi niyetle ya da kötü niyetle yapabilir.

Dolayısıyla, neye yatırım yaptığınız konusunda dikkatli olmanız gerekir. Blockchain projeleri adı altında gizlenmiş çok sayıda Piramit ve Ponzi düzeni bulunur. Yatırım yapmadan önce kendi araştırmanızı yaparak karşınızdaki fırsatın meşru olup olmadığına yönelik kendi çıkarımınızı yapmanız çok önemlidir.

 

ERC-20, ERC-1155, ERC-223, ERC-721 tokenlarının farkı nedir?

ERC-20 ilk (ve bugüne kadarki en popüler) Ethereum token standardıdır, ama mevcut tek standart değildir. Yıllar içinde, ERC-20'ye geliştirmeler ekleyen ya da tamamen farklı amaçlara sahip başka birçok alternatif ortaya çıkmıştır.

Daha az yaygın standartlardan bazıları benzersiz tokenlarda (NFT'ler) kullanılanlardır. Kimi zaman, hedeflediğiniz kullanım alanı için farklı özelliklere sahip benzersiz tokenlara sahip olmak daha avantajlıdır. Benzersiz bir sanat eserini, oyun içi bir varlığı vb. tokenlaştırmak isterseniz bu kontrat türleri daha çok ilginizi çekebilir.
Örneğin ERC-721 standardı, son derece popüler CryptoKitties DApp'inde kullanılmıştır. Böylesi bir kontrat, kullanıcıların kendi benzersiz tokenlarını çıkarması ve meta veriyi (resimler, tanımlar, vb.) kodlaması için bir API sunar. 

ERC-1155 standardı hem ERC-721 hem de ERC-20 için bir geliştirme olarak görülebilir. Aynı kontrat içinde hem mübadele edilebilir hem de benzersiz tokenları destekleyen bir standart ortaya koyar.

ERC-223 ve ERC-621 gibi diğer seçenekler kullanılabilirliği iyileştirmeyi amaçlar. ERC-223, yanlışlıkla yapılan token transferlerini engelleyen bir güvenlik önlemine sahiptir. ERC-621 ise token arzını artırmak ve azaltmak için ekstra fonksiyonlar ekler.

NFT'ler hakkında daha fazla bilgi için Kripto Koleksiyonlukları ve Benzersiz Tokenlar (NFT'er) Rehberi makalemizi okuyabilirsiniz.


Son düşünceler

ERC-20 standardı kripto varlık dünyasında yıllardır baskın konumdadır ve bunun nedenini anlamak oldukça kolaydır. Herhangi biri, oldukça kolay bir şekilde birçok farklı kullanım alanına (hizmet tokenı, sabit coin, vb.) uygun basit bir kontrat çıkarabilir. Bununla birlikte ERC-20, diğer standartların sunduğu bazı özelliklere sahip değildir. Daha sonra gelen kontrat türlerinin ERC-20'nin yerini alıp almayacağını ancak zaman gösterebilir.