Selam THT ailesi. Bugün, geçen yazımızda bahsettiğimiz Ethereum ağına giriş yazımızın devamı niteliğinde olan bu yazımızda beraber akıllı kontrat yazacağız. Basit bir token oluşturup, onu Remix IDE üzerinden Ethereum Sepolia test ağında dağıtıma çıkaracağız ve test cüzdanımızdan bir başka test cüzdanına yollayacağız. Bir önceki yazımı okumadıysanız bu yazıyı okumadan önce ona göz atmanızı öneririm. Bu alanın yabancısı ama meraklısı iseniz bu yazıda bir çok şeye yabancı kalabilirsiniz. İyi okumalar.
Ethereum ağından ve akıllı kontratlardan bahsetmiştik. Şimdi ise işin biraz daha teknik kısmına girelim ve tanımlarımızı eski bilgilerimizle birlikte tekrar yaparak hafızamızı tazeleyim. Ethereum BlockChain, ademi merkeziyetli (merkeziyetsiz) DApp'lerin geliştirimesine olanak tanıyan akıllı kontrat altapısına sahip bir ağdır. Bu altyapı üzerinde tokenler ve dijital varlıklar üretmek oldukça yaygın ve basittir. ERC-20, Ethereum üzerinde oluşturulan bu tokenler için standartlaştırılmış bir arayüz sunar. Şimdi ERC-20 standardına daha yakından göz atalım.
ERC-20, Etheruem topluluğu tarafından tanımlanan bir token standardıdır. "Ethereum Request for Comments" (Ethereum Yorum İstemcisi) cümlesinin kısaltılmış halidir ve 20 numaralı öneri olduğu için bu adla anılır. Bu standart, Ethereum üzerinde yaratılan tokenlerin birbiriyle uyumlu olmasını sağlar. Bu sayede cüzdanlar, borsalar, DeFi uygulamaları ve diğer akıllı kontratlar, herhangi bir ERC-20 tokenini önceden bilmeden destekleyebilir. Standartları bilmek önemlidir çünkü bir kontrat yazarken o kontratın ne tür olduğunu ve ne için kullanılacağını standartlar dahilinde belirleriz.
Şimdi ise bu işin yazılım kısmına odaklanalım. ERC-20 standardının fonksiyonlarına ve eventslerine basitçe göz atalım. Eğer daha ayrıntılı incelemek isterseniz buraya tıklayarak MetaMaskın sağladığı dökümantasyona erişebilirsiniz.
ERC-20 standardı toplamda 6 fonksiyon ve 2 önemli event içerir.
Fonksiyonlar:
Eventler:
Bunlar bu kısım için bilmemiz gereken ve standartlar içinde kullanmamız gereken kalıplardı. Şimdi ise Remix IDE yardımıyla basit bir kontrat yazalım. Öncelikle Remix IDE'ye gidelim. Remix IDE
Bizi böyle bir ekran karşılıyor. Sol pencerede "contracts" kısmını göreceğiz oranın üzerine geliyoruz ve sağ kısımlarda çıkan simgelerden kağıt resmi olana (create new file) tıklıyoruz ve oluşturacağımız kontratın adını giriyoruz. Ben tht yaptım. sonuna da ".sol" yani solidity uzantısını ekliyoruz ve sayfaya gidiyoruz.
Şimdi ise sol sekmelerimizden S harfi olana yani "Solidity Compiler" kısmına gidiyoruz ve yazacağımız tokenin sürümünü seçiyoruz. Şimdilik "0.8.20" sürümünü tercih edelim.
Şimdi lisansımızı girelim (genelde MIT lisansı kullanılır). MIT lisansı kullanmamızın sebebi en kısa ve en basit açık kaynak lisanslarından biri olmasıdır. Ticari kullanıma uygundur. MIT lisansı, kodun hem kişisel hem de ticari projelerde kullanılmasına izin verir. Geniş bir kitlece kabul görmüş ve çoğu kütüphanelere de uyum sağlamıştır. örneğin OpenZeppelin (bir sonraki yazımızın konusu). Son olarak hiç bir kısıtlamaya tabi değildir. Onun dışında GPL, Apache veya BSD gibi lisanslar da mevcuttur ancak bunlar daha kısıtlayıcı ve daha kurumsal yapılar içerir. Sonrasında Solidity'nin hangi sürümü ile çalıştığımızı belirtiriz ve kontratımızın ismini belirterek parent fonksiyon açarız ve içine kontratımızı yazmaya başlarız. Şimdi kontratımızın her fonksiyonunu açıklayarak gidelim.
Ethereum ağından ve akıllı kontratlardan bahsetmiştik. Şimdi ise işin biraz daha teknik kısmına girelim ve tanımlarımızı eski bilgilerimizle birlikte tekrar yaparak hafızamızı tazeleyim. Ethereum BlockChain, ademi merkeziyetli (merkeziyetsiz) DApp'lerin geliştirimesine olanak tanıyan akıllı kontrat altapısına sahip bir ağdır. Bu altyapı üzerinde tokenler ve dijital varlıklar üretmek oldukça yaygın ve basittir. ERC-20, Ethereum üzerinde oluşturulan bu tokenler için standartlaştırılmış bir arayüz sunar. Şimdi ERC-20 standardına daha yakından göz atalım.
ERC-20, Etheruem topluluğu tarafından tanımlanan bir token standardıdır. "Ethereum Request for Comments" (Ethereum Yorum İstemcisi) cümlesinin kısaltılmış halidir ve 20 numaralı öneri olduğu için bu adla anılır. Bu standart, Ethereum üzerinde yaratılan tokenlerin birbiriyle uyumlu olmasını sağlar. Bu sayede cüzdanlar, borsalar, DeFi uygulamaları ve diğer akıllı kontratlar, herhangi bir ERC-20 tokenini önceden bilmeden destekleyebilir. Standartları bilmek önemlidir çünkü bir kontrat yazarken o kontratın ne tür olduğunu ve ne için kullanılacağını standartlar dahilinde belirleriz.
Şimdi ise bu işin yazılım kısmına odaklanalım. ERC-20 standardının fonksiyonlarına ve eventslerine basitçe göz atalım. Eğer daha ayrıntılı incelemek isterseniz buraya tıklayarak MetaMaskın sağladığı dökümantasyona erişebilirsiniz.
ERC-20 standardı toplamda 6 fonksiyon ve 2 önemli event içerir.
Fonksiyonlar:
totalSupply(): Toplam token arzını döner. balanceOf(address account): Belirli bir adresin token bakiyesini verir. transfer(address recipient, uint256 amount): Tokeni başka kullanıcıya gönderir.approve(address spender, uint256 amount): Başka bir adresin, gönderen adına belirli miktarda token harcamasına izin verir.allowance(address owner, address spender): Bir adresin başka bir adres için verdiği harcama iznini döner.transferFrom(address sender, address recipient, uint256 amount): Onaylı bir transfer işlemini gerçekleştirir.Eventler:
Transfer(address from, address to, uint256 value): Bir token transferi olduğunda tetiklenir.Approval(address owner, address spender, uint256 value): approve fonksiyonunu çağırdığımızda tetiklenir. Bunlar bu kısım için bilmemiz gereken ve standartlar içinde kullanmamız gereken kalıplardı. Şimdi ise Remix IDE yardımıyla basit bir kontrat yazalım. Öncelikle Remix IDE'ye gidelim. Remix IDE
Bizi böyle bir ekran karşılıyor. Sol pencerede "contracts" kısmını göreceğiz oranın üzerine geliyoruz ve sağ kısımlarda çıkan simgelerden kağıt resmi olana (create new file) tıklıyoruz ve oluşturacağımız kontratın adını giriyoruz. Ben tht yaptım. sonuna da ".sol" yani solidity uzantısını ekliyoruz ve sayfaya gidiyoruz.
Şimdi ise sol sekmelerimizden S harfi olana yani "Solidity Compiler" kısmına gidiyoruz ve yazacağımız tokenin sürümünü seçiyoruz. Şimdilik "0.8.20" sürümünü tercih edelim.
Şimdi lisansımızı girelim (genelde MIT lisansı kullanılır). MIT lisansı kullanmamızın sebebi en kısa ve en basit açık kaynak lisanslarından biri olmasıdır. Ticari kullanıma uygundur. MIT lisansı, kodun hem kişisel hem de ticari projelerde kullanılmasına izin verir. Geniş bir kitlece kabul görmüş ve çoğu kütüphanelere de uyum sağlamıştır. örneğin OpenZeppelin (bir sonraki yazımızın konusu). Son olarak hiç bir kısıtlamaya tabi değildir. Onun dışında GPL, Apache veya BSD gibi lisanslar da mevcuttur ancak bunlar daha kısıtlayıcı ve daha kurumsal yapılar içerir. Sonrasında Solidity'nin hangi sürümü ile çalıştığımızı belirtiriz ve kontratımızın ismini belirterek parent fonksiyon açarız ve içine kontratımızı yazmaya başlarız. Şimdi kontratımızın her fonksiyonunu açıklayarak gidelim.
Kod:
//
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract egitimToken { //kontrat fonksiyonu
string public name = "egitimtoken"; // token adı
string public symbol = "THT"; // token sembolu
uint8 public decimals = 18; // desimal değeri
uint256 public totalSupply; // toplam arz
mapping(address => uint256) private balances; // Her adresin token bakiyesini tutar
mapping(address => mapping(address => uint256)) private allowances; //bir adresin, başka bir adrese ne kadar token harcama yetkisi verdiğini tutar
// Standart ERC-20 event'leri
event Transfer(address indexed from, address indexed to, uint256 value); //Bir token transferi gerçekleştiğinde tetiklenir
event Approval(address indexed owner, address indexed spender, uint256 value); //Bir adres, başka bir adrese harcama yetkisi verdiğinde tetiklenir
constructor(uint256 _initialSupply) {
totalSupply = _initialSupply * (10 ** uint256(decimals)); // ilk token arzını belirliyoruz. desimal kadar çarpılarak en küçük birime çevrilir.
balances[msg.sender] = totalSupply; // Tüm tokenler kontratı dağıtan adrese verilir.
emit Transfer(address(0), msg.sender, totalSupply); // Token mint edildi
}
/// 1. balanceOf - Belirli bir adresin token bakiyesini döner
function balanceOf(address account) public view returns (uint256) {
return balances[account];
}
/// 2. transfer - Gönderen (msg.sender), to adresine amount kadar token gönderir. Yeterli bakiyesi olduğundan emin olunur, ardından _transfer fonksiyonu çağrılır.
function transfer(address to, uint256 amount) public returns (bool) {
require(balances[msg.sender] >= amount, "Yetersiz bakiye");
_transfer(msg.sender, to, amount);
return true;
}
/// Dahili transfer işlevi (tekrar kullanılabilirlik için)
function _transfer(address from, address to, uint256 amount) internal {
require(to != address(0), "Gecersiz alici adresi");
balances[from] -= amount;
balances[to] += amount;
emit Transfer(from, to, amount);
}
/// 3. approve - Bir adresin başka bir adres adına harcama yetkisi vermesini sağlar
function approve(address spender, uint256 amount) public returns (bool) {
allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
/// 4. allowance - Bir adresin başka bir adrese verdiği harcama yetkisini döner
function allowance(address owner, address spender) public view returns (uint256) {
return allowances[owner][spender];
}
/// 5. transferFrom - Onaylı transfer işlemi (approve ile verilen hak kadar transfer)
function transferFrom(address from, address to, uint256 amount) public returns (bool) {
require(balances[from] >= amount, "Gonderenin bakiyesi yetersiz");
require(allowances[from][msg.sender] >= amount, "Harcama izni yetersiz");
allowances[from][msg.sender] -= amount;
_transfer(from, to, amount);
return true;
}
}
Kontratımızı yazdık ve her fonksiyonunu açıkladık. Ancak bazı sorular kalmış olabilir. Nedir bu decimals ? Decimals, bir ERC-20 tokenin en küçük biriminin, tokenin ana birimine göre ne kadar küçük olduğunu belirler. Yani virgülden sonra kaç basamak gösterileceğini ifade eder. Ethereum, 18 desimal değeri kullanır. Bunun sebebi etheri yüksek hassasiyetle işleyebilmek ve en küçük biriminin bile satın alınabilmesini sağlamaktır. Aynı şekilde USDT (tether) de ise bu durum farklıdır. USDT, 6 desimal değerini benimsemiştir. Bunun sebebi, gerçek dünyada fiat paraları genellikle virgülden sonra en fazla 2 veya 6 basamak hassasiyetle kullanılır ve 6 basamak değeri yeterli finansal doğruluk sağlar ve aynı zamanda işlem hesaplamalarını hızlandırır.
Peki uint256 nedir ? uint, "Unsigned Integer" (işaretsiz tam sayı) yani negatif içermeyen sayı anlamına gelir. 256 ise bit değeridir. 256 bit = 32 byte yani çok büyük bir sayı aralığını sağlar. Bizim bunu kullanma amacımıza gelecek olursak Solidity de varsayılan tür uint256 dır. Ayrıca Ethereum VM native olarak 256-bit word kullanır. Yani 256 bitlik sayılar işlemci düzeyinde daha hızlı ve verimli işlenir. Güvenlik açısından ise daha sonraki konularda bahsedeceğimiz akıllı kontrat güvenliği konularından biri olan overflow riskini azaltır.
Remix IDE de kontratımızı yazdıktan sonra Compile sekmesinden tht.sol dosyamızı compile edelim. Sonrasında hemen aşağısında bulunan "Deploy and run transactions" kısmına geçelim.
Deploy and run transactions sekmesine geldiğimizde ise "Environment" kısmına tıklayıp "Sepolia Testnet" i seçelim. (eğer sizde Sepolia Testnet yoksa aşağıdaki "customize this list.." kısmına tıklayarak ekleyebilirsiniz.)
testneti seçtiğimizde önceden tarayıcımıza eklediğimiz metamask cüzdanımızdan yetki isteyecektir. Yetkiyi verip cüzdanımızdan Sepolia testnete geçelim. Şimdi ise bize test için biraz ETH'ye ihtiyacımız var. bunun için Sepolia faucetten alabiliriz. Sepolia Faucet için tıklayın.
Buraya cüzdan adresimizi giriyoruz ve bize Testnet için ETH sağlıyor.
artık test için ETH miz mevcut. şimdi ise Deploy and Run Transactions kısmına geri dönelim. "Account" kısmında testnet için ETH attığımız cüzdanımızı seçelim. sonrasında ne kadar token Deploy etmek istiyorsak Deploy tuşumuzun yanına yazıyoruz. Yani başlangıç arzımızı ayarlıyoruz. sonrasında Deploy tuşuna basabiliriz. (ben 100000 yaptım).
Deploy ettikten sonra terminalde önce "creation of egitimToken pending" yazısını görüyoruz. Bu isteğin gittiği anlamına geliyor. Sonrasında ise MetaMask cüzdanımız açılıyor ve bizden ağ ücreti karşılığında kontratın dağıtımını onaylamamızı istiyor (burada gösterilen 58,76$ değeri çok değişkenlik gösterir. Bu ağın o anki meşguliyetine bağlıdır. bazen 58,79 bazen 80 bazen ise 2 dolar isteyebilir.). İşlemi onayladıktan sonra bir süre bekliyoruz. Sonrasında onay mesajımız geliyor.
Gördüğünüz gibi onay geldi ve Akıllı kontratımızı başarılı bir şekilde Test ağına dağıttık. Şimdi elimizde bir token var. Şimdi resimde de gördüğünüz gibi sağ altta "Deployed Contracts" kısmında bir kısım belirdi. Orada bizim akıllı kontratımıza atanan adres ve tokenimizi test edebileceğimiz bir panel var. oraya tıkladığımızda açılıyor. Ancak öncesinde tokenimizi Sepolia Test ağında görüntüleyelim. Bunun için Etherscanin Sepolia testnet platformunu ziyaret edelim. Sepolia Etherscan
Gördüğünüz gibi Etherscande akıllı kontratımızı görüntüleyebiliyoruz. Şimdi ise Remix IDE 'ye geri dönelim ve fonskiyonlarımızı test edelim. Deployed Contracts kısmına tıkladığımızda açılan panelde decimals, name, symbol ve totalSupply butonlarına bastığımızda yarattığımız token hakkında bilgi sahibi oluruz. sonrasındaki işlemler ise transfer, yetkilendirme ve bakiye sorgulama ile ilgili. Biz sadece transfer kısmına gireceğiz. Siz isterseniz tüm fonksiyonları deneyebilirsiniz.
Paneldeki "Transfer" kısmına giriyoruz ve bize transfer edilecek adresi ve miktarı soruyor. MetaMask cüzdanımızda ekstra olarak yeni cüzdanlar açabiliriz. Bunun için Account yazan butona tıklayıp "Hesap veya Donanım cüzdanı ekle" demeniz yeterli. Açtığımız yeni cüzdanın adresini kopyalıyoruz ve Transfer kısmında istenen yere yapıştırıyoruz. Sonrasında ne kadar göndereceğimize karar veriyoruz(ben 10 THT yollayacağım.).
Gördüğünüz gibi tekrardan MetaMask cüzdanımızdan transfer ücreti ve onay istiyor. Onay verdiğimizde aşağıdaki terminalde tik işareti ile bildirim gelmesi gerekiyor. Geldikten sonra terminalden ayrıntıları inceleyebilirsiniz.
Şimdi bizim cüdanımıza bu token gitti ancak attığımız cüzdana gittiğimizde tokeni göremiyor olmamız normal. Bunun sebebi tokenmizin henüz doğrulanmamış olması. Doğrulamamızın eğer gerçek bir token olmayacaksa pek bir anlamı yok. Bu yüzden tokenimizi manuel olarak içe aktaracağız. Yani cüzdanımıza tokenimizi tanıtacağız. Metamaskı açıyoruz ve Tokenler kısmının altındaki üç noktaya tıklayıp "Tokenleri içe aktar" butonuna tıklıyoruz. Sonrasında token adresimizi yapıştırıp onaylıyoruz.
sonrasında gördüğünüz gibi tokenimizi cüzdanımızda göreceğiz.
Aynı zamanda bu transfer işlemimiz Etherscande de gözükecektir.
Gördüğünüz gibi tüm transferler şeffaf olarak zaman damgalı şekilde Etherscande kayıt altına alınıyor ve bu işlemleri herkes görebiliyor. Sizde oluşturduğumuz bu tokeni görmek isterseniz:
0x14F63F036fCf4FfEDcdf8d0341f8A90A19822542
Bu bizim THT tokenimizin adresi.
Bu yazımızda beraber ERC-20 standartlarında bir akıllı kontrat geliştirmeyi ve bunu Sepolia test ağında dağıtmayı, sonrasında bu tokeni etherscan gibi doğrulayıcı platformlarda sorgulamayı öğrendik ve MetaMaska daha çok hakim olduk. Bir sonraki yazımızda Openzeppelin kullanmayı öğreneceğiz ve Akıllı kontrat yazımına daha çok hakim olacağız. İyi forumlar dilerim.
Tüketici yaşamak iyi değildir. Üretici olalım.Peki uint256 nedir ? uint, "Unsigned Integer" (işaretsiz tam sayı) yani negatif içermeyen sayı anlamına gelir. 256 ise bit değeridir. 256 bit = 32 byte yani çok büyük bir sayı aralığını sağlar. Bizim bunu kullanma amacımıza gelecek olursak Solidity de varsayılan tür uint256 dır. Ayrıca Ethereum VM native olarak 256-bit word kullanır. Yani 256 bitlik sayılar işlemci düzeyinde daha hızlı ve verimli işlenir. Güvenlik açısından ise daha sonraki konularda bahsedeceğimiz akıllı kontrat güvenliği konularından biri olan overflow riskini azaltır.
Remix IDE de kontratımızı yazdıktan sonra Compile sekmesinden tht.sol dosyamızı compile edelim. Sonrasında hemen aşağısında bulunan "Deploy and run transactions" kısmına geçelim.
Deploy and run transactions sekmesine geldiğimizde ise "Environment" kısmına tıklayıp "Sepolia Testnet" i seçelim. (eğer sizde Sepolia Testnet yoksa aşağıdaki "customize this list.." kısmına tıklayarak ekleyebilirsiniz.)
testneti seçtiğimizde önceden tarayıcımıza eklediğimiz metamask cüzdanımızdan yetki isteyecektir. Yetkiyi verip cüzdanımızdan Sepolia testnete geçelim. Şimdi ise bize test için biraz ETH'ye ihtiyacımız var. bunun için Sepolia faucetten alabiliriz. Sepolia Faucet için tıklayın.
Buraya cüzdan adresimizi giriyoruz ve bize Testnet için ETH sağlıyor.
artık test için ETH miz mevcut. şimdi ise Deploy and Run Transactions kısmına geri dönelim. "Account" kısmında testnet için ETH attığımız cüzdanımızı seçelim. sonrasında ne kadar token Deploy etmek istiyorsak Deploy tuşumuzun yanına yazıyoruz. Yani başlangıç arzımızı ayarlıyoruz. sonrasında Deploy tuşuna basabiliriz. (ben 100000 yaptım).
Deploy ettikten sonra terminalde önce "creation of egitimToken pending" yazısını görüyoruz. Bu isteğin gittiği anlamına geliyor. Sonrasında ise MetaMask cüzdanımız açılıyor ve bizden ağ ücreti karşılığında kontratın dağıtımını onaylamamızı istiyor (burada gösterilen 58,76$ değeri çok değişkenlik gösterir. Bu ağın o anki meşguliyetine bağlıdır. bazen 58,79 bazen 80 bazen ise 2 dolar isteyebilir.). İşlemi onayladıktan sonra bir süre bekliyoruz. Sonrasında onay mesajımız geliyor.
Gördüğünüz gibi onay geldi ve Akıllı kontratımızı başarılı bir şekilde Test ağına dağıttık. Şimdi elimizde bir token var. Şimdi resimde de gördüğünüz gibi sağ altta "Deployed Contracts" kısmında bir kısım belirdi. Orada bizim akıllı kontratımıza atanan adres ve tokenimizi test edebileceğimiz bir panel var. oraya tıkladığımızda açılıyor. Ancak öncesinde tokenimizi Sepolia Test ağında görüntüleyelim. Bunun için Etherscanin Sepolia testnet platformunu ziyaret edelim. Sepolia Etherscan
Gördüğünüz gibi Etherscande akıllı kontratımızı görüntüleyebiliyoruz. Şimdi ise Remix IDE 'ye geri dönelim ve fonskiyonlarımızı test edelim. Deployed Contracts kısmına tıkladığımızda açılan panelde decimals, name, symbol ve totalSupply butonlarına bastığımızda yarattığımız token hakkında bilgi sahibi oluruz. sonrasındaki işlemler ise transfer, yetkilendirme ve bakiye sorgulama ile ilgili. Biz sadece transfer kısmına gireceğiz. Siz isterseniz tüm fonksiyonları deneyebilirsiniz.
Paneldeki "Transfer" kısmına giriyoruz ve bize transfer edilecek adresi ve miktarı soruyor. MetaMask cüzdanımızda ekstra olarak yeni cüzdanlar açabiliriz. Bunun için Account yazan butona tıklayıp "Hesap veya Donanım cüzdanı ekle" demeniz yeterli. Açtığımız yeni cüzdanın adresini kopyalıyoruz ve Transfer kısmında istenen yere yapıştırıyoruz. Sonrasında ne kadar göndereceğimize karar veriyoruz(ben 10 THT yollayacağım.).
Gördüğünüz gibi tekrardan MetaMask cüzdanımızdan transfer ücreti ve onay istiyor. Onay verdiğimizde aşağıdaki terminalde tik işareti ile bildirim gelmesi gerekiyor. Geldikten sonra terminalden ayrıntıları inceleyebilirsiniz.
Şimdi bizim cüdanımıza bu token gitti ancak attığımız cüzdana gittiğimizde tokeni göremiyor olmamız normal. Bunun sebebi tokenmizin henüz doğrulanmamış olması. Doğrulamamızın eğer gerçek bir token olmayacaksa pek bir anlamı yok. Bu yüzden tokenimizi manuel olarak içe aktaracağız. Yani cüzdanımıza tokenimizi tanıtacağız. Metamaskı açıyoruz ve Tokenler kısmının altındaki üç noktaya tıklayıp "Tokenleri içe aktar" butonuna tıklıyoruz. Sonrasında token adresimizi yapıştırıp onaylıyoruz.
sonrasında gördüğünüz gibi tokenimizi cüzdanımızda göreceğiz.
Aynı zamanda bu transfer işlemimiz Etherscande de gözükecektir.
Gördüğünüz gibi tüm transferler şeffaf olarak zaman damgalı şekilde Etherscande kayıt altına alınıyor ve bu işlemleri herkes görebiliyor. Sizde oluşturduğumuz bu tokeni görmek isterseniz:
0x14F63F036fCf4FfEDcdf8d0341f8A90A19822542
Bu bizim THT tokenimizin adresi.
Bu yazımızda beraber ERC-20 standartlarında bir akıllı kontrat geliştirmeyi ve bunu Sepolia test ağında dağıtmayı, sonrasında bu tokeni etherscan gibi doğrulayıcı platformlarda sorgulamayı öğrendik ve MetaMaska daha çok hakim olduk. Bir sonraki yazımızda Openzeppelin kullanmayı öğreneceğiz ve Akıllı kontrat yazımına daha çok hakim olacağız. İyi forumlar dilerim.



