Brownie ile Kendi Token’ımızı Oluşturalım!

Fethi Tekyaygil
6 min readApr 26, 2022

--

Hepinize merhabalar, umarım beni özlemişsinizdir :)

Bugün çok farklı bir konu ile karşınızdayım. Bugün sizlerle beraber Rinkeby ağında kendi tokenımızı oluşturacağız!

İsimlendirme en sevdiğim konulardan olduğu için (sokakta beslediğim kedilerimden birinin adı Asiye, evdeki kedilerimden birinin adı Hüsniye :) ) tokenımın ismini merhum Süleyman Çakır’a atfetmeyi düşünüyorum. Bu nedenle ben CakirToken yapacağım. Bu sizi gaza getirmek için yeterli olmadı mı? O zaman sizi bu efsane tulum müziğine alalım :)

Sıkıldınız mı :) Maalesef ki bu hikayenin yazarı şöyle birisi:

O yüzden biz CakirToken’den devam :)

Tokenımızı oluşturmadan önce, Token oluştururken kullanacağımız ERC20 Token standartından bahsedelim.

Bu yazıda token ve coin birbirileri yerine bolca kullanılmışlardır!

ERC20 Token Standartı Nedir?

Açılımı Ethereum request for comment olan ERC sayesinde akıllı kontratlar sonradan insanların yatırım yapabileceği varlıklar olabilirler.

ERC20, ERC20 standartları kullanılarak deploy edilen ERC20 Tokenlarıdır. Bunun yanında ERC20, Token’ı temsil eden bir akıllı kontrattır. Yani hem token hem akıllı kontrat. Çok havalıııı!

Ethereum Tokenlarının uyması gereken belli başlı kurallar, standartlar ve oluşturulması için alınması gereken bazı aksiyonlar vardır. İşte burada karşımıza ERC20 çıkmaktadır. Elbette ki ERC677 gibi standartlar da mevcut ancak şu an konumuz bu olmadığı için derinlemesine girmiyorum, tokenımızı ERC20 standartı ile oluşturacağız.

ERC20 Tokenlarına Tether, Chainlink ve Uni Token örnek verilebilir.

Tokenımızı oluşturmak için yapmamız gereken en temel şey, belli standartları takip eden bir akıllı kontrat oluşturmak! Hadi gelin başlayalım :)

Hadi Pamuk Parmaklar Brownie’ye :)

  • Terminalimi açıyorum ve aşağıdaki komut ile Masaüstüme gidiyorum:
cd Desktop
  • Aşağıdaki komutla yeni bir klasör oluşturuyorum:
mkdir CakirCoinBrownie
  • Aşağıdaki komutu çalıştırarak klasörüme gidiyorum:
cd CakirCoinBrownie
  • Aşağıdaki komutla klasörümü VS Code’da açıyorum. Siz başka bir IDE de kullanabilirsiniz:
code .
  • Projemiz VS Code’da açıldığında terminalimi açıyorum ve aşağıdaki komutla virtual environment’ımı oluşturuyorum:
python3 -m venv cakircoinvenv

NOT: Python kurulumunuza göre pip-pip3, python-python3 kullanabilirsiniz!

  • Oluşturduğum virtual environment’ı aktive etmek için aşağıdaki kodu terminalden çalıştırıyorum:
source cakircoinvenv/bin/activate

Windows için:

cakircoinvenv/Scripts/activate
  • Aşağıdaki komutla Ethereum’u pip ile yüklüyorum:
pip3 install ethereum
  • Aşağıdaki komutla Brownie’yi pip ile yüklüyorum:
pip3 install eth-brownie
  • Yükleme tamamlandıktan sonra aşağıdaki komutla Brownie projemi oluşturuyorum:
brownie init

Akıllı Kontratımızı Yazalım

  • contracts klasörü altında CakirToken.sol dosyamı oluşturuyorum. Bu kontrat ERC20 standartlarını alacak ve kendi tokenımızı oluşturmamıza yarayacak! Dosyamını içeriği aşağıdaki gibi olmalıdır:

Kodu incelediğimizde bu kontratın ERC20 olduğunu şu şekilde vurguluyorum:

CakirToken is ERC20

constructor’da tokenımın ismini Cakir, ve sembolünü CKR veriyorum:

constructor(uint256 initialSupply) public ERC20("CakirToken", "CKR")

initialSupply, Token piyasada işlem görmeye başladığında dolaşımda olan token sayısıdır

  • FaceRecognition ve Brownie’nin Gücü Adına! yazımı okumuşsanız burada importların Github’tan çekildiğini biliyorsunuz demektir, bilmeyenler için, solidity kodunda import edilen sol dosyalarını Brownie Github’tan okuyabilir. Yapmanız gereken tek şey brownie’ye nereye bakması gerektiğini göstermek. Bunun için brownie-config.yaml dosyamı ana dizinime oluşturuyorum ve içine ilgili mapping konfigürasyonları ekliyorum:
dependencies:
- OpenZeppelin/openzeppelin-contracts@4.5.0
compiler:
solc:
remappings:
- "@openzeppelin=OpenZeppelin/openzeppelin-contracts@4.5.0"

Bu kısmın nasıl çalıştığını FaceRecognition ve Brownie’nin Gücü Adına! yazımda IMPORTLAR ve brownie-config.yaml başlığı altında anlattım.

Kendi Hesabımız Ekleyelim

  • Kontratı deploy edebilmek için bir hesaba ihtiyacımız var. Bunun için Rinkeby ağındaki bir hesabımı Brownie’ye ekleyeceğim. Bunun için aşağıdaki komutu çalıştırıyorum:
brownie accounts new fethitekyaygil
  • Hesabımın private key değerini veriyorum
  • Kendi belirlediğim şifreyi giriyorum

Hesabınıza ait Private Key değerini nasıl alacağınıza FaceRecognition ve Brownie’nin Gücü Adına! yazımda Accountlarımızı Ekleyelim başlığı altında değindim.

Deploy Scriptimizi Yazalım

  • Yazacağımız deploy scripti, Python tarafından tetikleyeceğimiz ve kontratımızı dolayısıyla tokenımızı deploy edecek scripttir. scripts klasörü altında deploy.py dosyasını oluşturuyorum. Scriptimin içeriği aşağıdaki gibidir:
  • Bir önceki adımda eklediğim fethitekyaygil hesabını yüklüyorum ve kontrat deploy işlemini bu hesap üzerinden yapacağımı söylüyorum
  • CakirToken kontratını fethitekyaygil hesabını kullanarak deploy ediyorum
  • Solidity’de decimal kavramı olmadığı için 18 tane 0'ı initial_supply değerimin sonuna ekliyorum

Kontratımızı Compile Etmek

  • Kontratımızı Brownie içerisinde kullanabilmek için öncelikle compile etmemiz gerekmektedir. Bunun için aşağıdaki komutu çalıştırıyorum:
brownie compile

Brownie Projemi Rinkeby Ağı ile Çalıştırabilmek ve Tokenımızı Oluşturabilmek İçin Infura ID ve Etherscan Token Eklenmesi

Kontratımızı Rinkeby ağına bağlayabilmek ve deploy edebilmek için INFURA ve ETHERSCAN TOKEN’a ihtiyacımız var.

  • Infura’nın ne olduğunu ve yeni bir proje oluşturup nasıl ID alındığını FaceRecognition ve Brownie’nin Gücü Adına! yazımda INFURA başlığı altında, Etherscan Token’ın ne olduğunu ve nasıl alındığını da aynı yazımda anlattım. O yüzden şu an sadece ana dizinde .env dosyamı oluşturuyorum ve içine aşağıdaki gibi ID’mi gibiyorum:
WEB3_INFURA_PROJECT_ID=……………
  • Brownie’nin env dosyasını okumasını sağlayabilmek için brownie-config.yaml dosyasına aşağıdaki eklemeyi yapıyorum:
dependencies:
- OpenZeppelin/openzeppelin-contracts@4.5.0
compiler:
solc:
remappings:
- "@openzeppelin=OpenZeppelin/openzeppelin-contracts@4.5.0"
dotenv: .env
  • Son olarak ETHERSCAN_TOKEN değerimi .env dosyama ekliyorum.
WEB3_INFURA_PROJECT_ID=........
ETHERSCAN_TOKEN=..........

Projemin son halinde klasör yapısı aşağıdaki gibi olmalıdır:

Kontratımızı Deploy Etmek

Kontratımı aşağıdaki komutu çalıştırarak deploy ediyorum:

brownie run scripts/deploy.py --network rinkeby

Deploy bittiğinde aşağıdaki gibi bir görüntü elde etmemiz gerekiyor:

Kontratın deploy olduğu 0xB75F1C9207E0a84C154D49D7cF734Dd0f18e6F7c adresini etherscan üzerinde sorguladığımızda kontratımın ağa deploy edildiğini görebiliriz:

Artık tokenımız resmi olarak yayında!

Token’ımızı MetaMask’e Eklemek

Oluşturduğumuz tokenı Metamask’te görmek istemez misiniz? Bunun için sabırsızlandığınızı hissedebiliyorum, o zaman gelin tokenlarımızı MetaMask’e ekleyelim!

  • MetaMask’te Rinkeby hesabım seçiliyken Assets sekmesi altından import token diyorum.
  • Bana token kontratımın adresini soruyor. Girdiğimde tokenımın sembol ve decimal bilgilerinin otomatik yüklendiğini görebilirim:
  • Add Custom Token butonuna bastıktan sonra karşıma gelen ekrandan Import Tokens butonuna basıyorum:

Ve ta da! Tokenımı Metamask hesabıma eklemiş oldum :)

Tokenımızı Diğer Hesaplara Gönderelim!

Şimdi sırada bu Tokenımızı diğer hesabımıza göndermek var.

  • Hiç CakirToken’ı olmayan hesabımın public key’ini alıyorum.
  • Sonrasında CakirToken’ı olan hesabımda tokenımı seçiyorum ve gönder seçeneğini seçiyorum.
  • Ne kadar Token göndermek istediğimi soruyor. Ben başlangıçta 100 Token göndermek istediğimi söylüyorum ve sonraki seçeneğini seçiyorum.
  • Onayla diyerek transactionımı gerçekleştiriyorum.

Ve ta da! hesaplarınızı kontrol ettiğinizde token transferinin gerçekleştiğini görebilirsiniz:

İlk CakirToken’a sahip olan hesap
  • Gönderdiğiniz hesapta tokenı görmek için token adresini import tokens ile hesabınıza import etmelisiniz. Bu işlemi yaptıktan sonra gönderilen 100 CKR’ı hesabınızda görebileceksiniz!

KAPANIŞ

Tebrikler! Siz de artık bir CakirCoin sahibisiniz. Merhum Süleyman Çakır görse oldukça gururlanırdı!

Bu yazımızda hep beraber Rinkeby ağında token oluşturup MetaMask hesabımıza ekledik. Projenin kodlarını burada bulabilir, gönlünüzce Pull Request atabilirsiniz :) Her türlü yapıcı öneri ve eleştiriye açığım :)

Hepinize mutlu, sağlıklı ve bol kodlu günler diliyorum efendim.

Sevgiyle kalın :)

--

--

Fethi Tekyaygil
Fethi Tekyaygil

Written by Fethi Tekyaygil

.NET Core Backend & Google Certified Tensorflow Developer — Flutter & Solidity Padawan — Animal Person

No responses yet