Ana içeriğe geç

Attester Hesabı Oluşturma 🏢

Hadi başlayalım! Bir önceki adımda gerekli dosya konumlarını ayarladık. Şimdi, Attester karakterimizin blokzincirdeki hesabını oluşturmanın zamanı geldi. 🎉

⚠️ Attester adresin var mı?

İki ana bileşen var burada: public address yani halka açık adres ve tabii ki mnemonic şifre. Eğer bu detayları zaten bir sanal cüzdan kullanarak oluşturduysanız, yeni bir hesap oluşturmanıza gerek yok. 🎯

KILT blokzinciri'nde bir hesap, blokzincirle etkileşime giren ana bileşenlerden biridir. 🌐 Bu hesapta çeşitli özellikler bulunur. Bunlardan biri de address, yani hesap adresidir. 💳 Bu adres, işlem ücretleri ve depozitoları ödemek için kullanılır.

📒 KILT Hesabı

Bir KILT hesabı aslında birkaç kripto elemanının birleşiminden oluşur:

  • Halka açık bir adres 🌐
  • İmza için bir anahtar çifti 🔑
🎓 MNEMONIC

Mnemonic şifre genellikle 12, 18 veya 24 kelimeden oluşur. 📝 Bu, cüzdanınıza ve varlıklarınıza erişim sağlar. Örneğin "elma şamdan dağ bisikleti çiçek" gibi. Güvenlik için kritiktir, bu yüzden bu şifreyi güvende tutmak çok önemli! 🔒

alternative text

Hesabı Oluşturmak 🛠️

Hesap oluşturmak için, KiltKeyringPair sınıfı üzerinde addFromMnemonic() fonksiyonunu kullanıyoruz. 🌟 Bu, bize 12 kelimelik bir mnemonic şifre oluşturuyor.

📘 Polkadot.js

KILT SDK polkadot.js kütüphanesi üzerine kuruludur. 🛠️ Çalışmalarınızda sıkça karşılaşacaksınız. Bu kütüphane, KILT ve diğer substrate tabanlı blokzincirler için birçok yararlı özelliğe sahiptir. 🌐

Kodlamaya başlayalım

Temelleri ve neleri neden yaptığımzı öğrendiğimize göre kodlamaya başlayabiliriz:

Kütüphane Entegrasyonu

attester/genarateAccount.ts
import { config as envConfig } from "dotenv"

import * as Kilt from "@kiltprotocol/sdk-js"

İlk olarak diğer yazılım projelerininde de yapılması gerektiği üzere kütüphanelerimizi kodumuza entegre ediyoruz. Bu kodları satır satır incelemek gerekirse:

  • İlk olarak dotenv kütüphanesinden envConfig methodunu config olarak çağırarak işe başlayabiliriz. Bu kütüphane sayesinde harici bir .env dosyasında kaydettiğimiz verilere kodumuz içerisinde config anahtar kelimesini kullanarak erişim sağlayabiliriz.
  • Alt satıra indiğimizde de KILT SDK'nin tüm özelliklerinin @kiltprotcol/sdk-js kütüphanesinden Kilt olarak isimlendirilerek çağırıldığını görüyoruz. Bu satırdaki * yapısı kütüphanenin içerisindeki tüm kodları entegre ettiğimizi ifade ederken as Kilt yapısı ise her seferinde uzun uzun kütüphanenin @kiltprotocol/sdk-js ismini kullanmamıza gerek kalmadan Kilt adıyla erişim sağlamamızı mümkün kılmaktadır.

generateAccount Fonksiyonu

attester/genarateAccount.ts
export function generateAccount(
mnemonic = Kilt.Utils.Crypto.mnemonicGenerate()
): {
account: Kilt.KiltKeyringPair
mnemonic: string
} {

Kütüphanelerimizi ekledikten sonra işlemlere başlayabiliriz. Bu işlemlerden ilki mnemonic anahtarı oluşturmaktır. Üstte ifade edilen generateAccount() fonksiyonu tam olarak bu işlemi yapmaktadır. Sırasıyla incelenecek olunursa:

  • İlk olarak export methodu ile kodun dışarısından da erişilebilen bir fonsksiyon oluşturulur. Bu fonksiyona istediğimiz adı verebilsek de şimdilik generateAccount() ismini verdik.
  • Bir alt satıra indiğimizde ilk kez KILT SDK'ye erişim sağladığımız kod karşılar. Bu satırda mnemonic olarak tanımladığımız değişkeni KILT-SDK kütüphanesi içerisinde bulunan Utils.Crypto paketinin mnemonicGenerate() methodu karşılamaktadır. Bu sayede mnemonic anahtarı oluşturmuş oluruz.
  • Bir alt kısıma indiğimizde çok alışık olmadığımız bir :{ ... } yapısı ile karşılaşmaktayız. Bu yapı fonksiyonun çalışmasından sonra döndüreceği değerin türünü belirlemek için kullanılmaktadır. Bu yapının da içerisine girersek:
    • İlk satırda account: Kilt.KiltKeyringPair ifadesinde dödürülecek nesnenin account isimli özelliğinin olacağını ve bu özelliğin Kilt.KiltKeyringPair özel türünde olacağını belirtiriz. Bu değer aslında biizim için daha önce de kısaca öneminden bahsettiğimiz KeyPair adındaki imzalama işlemleri için kullanılan anahtar çiftimizi ifade etmektedir.
    • İkinci satırda bulunan mnemonic: string ifadesi ise döndürülecek nesnenin mnemonic isimli bir özelliği daha olacağını ve bu özelliğin türünün string olacağını ifade etmektedir. Bu da aslında bizim oluşturmaya çalıştığımız mnemonic şifre yapısının ta kendisidir.
attester/genarateAccount.ts
  const keyring = new Kilt.Utils.Keyring({
ss58Format: 38,
type: 'sr25519'
})

Fonksiyonumuz içerisindeki bir sonraki kod yapısı ise keyring değişkeninin oluşturduğumuz yapı olmaktadır. Bu yapı bir üstte bulunan koddan hemen sonra kod bloğu içerisinde yazılmaktadır ve keyring değerinin oluşmasını sağlamaktadır.

keyring nedir?

Koddaki keyring terimi, bir anahtar yüzüğü (keyring) oluşturmak için kullanılır. Bir anahtar yüzüğü, çeşitli anahtar çiftlerini (public ve private keys) yönetmeyi kolaylaştıran bir veri yapısıdır. Bu yapı, genellikle kriptografik işlemler için anahtarların güvenli ve etkin bir şekilde saklanması ve yönetilmesi amacıyla kullanılır.

Satır satır inceleyecek olursak:

  • İlk olarak keyring olarak tanımlanan değişkenin Kilt.Utils.Keyring methodundan new anahtar kelimesi ile yeni bir obje oluşturduğunu görebiliriz. Bu objenin iki adet parametresi olmaktadır:
    • ss58Format: Anahtarın kodlandığı formatı belirtmektedir. SS58 genellikle Substrate tabanlı blokzincirlerde kullanılır. Değerini şimdilik 38 olarak belirledik.
    • type: kullanıcının kriptografik algoritmasını belirler. Biz burada sr25519 değerini tercih ettik. Bu değer Substrate tabanlı blokzincirlerde yaygın olarak kullanılır.
attester/genarateAccount.ts
  return {
account: keyring.addFromMnemonic(mnemonic) as Kilt.KiltKeyringPair, mnemonic
}
}

Fonksiyonumuzun son aşaması olarak da return yapısı ile çıktı verildiği görülmektedir. Bu çıktı aslında account adındaki Attester hesabı olmaktadır. İçerisinde iki adet değer bulundurmaktadır. Bunlar:

  • addFromMnemonic(mnemonic) metodu, verilen mnemonic şifreyi kullanarak bir anahtar çifti oluşturur ve keyring'e ekler.
  • mnemonic ifadesi ise adresin mnemonic şifresinin kaydedilmesi için kullanılmaktadır.

Bu şekilde hesabımızı oluşturmuş oluruz. Tek yapmamız gereken fonksiyonu çağırıp doğru çalıştığına emin olmaktır.

Ana Program Kısmı

Üst kısımda oluşturduğumuz fonksiyonu çağırmak için bir yapı lazım olmaktadır. Bu yapı kod diğer modüller olmadan tek başına çalışınca neler olacağını ifade eder.

attester/genarateAccount.ts
if (require.main === module) {
;(async () => {
envConfig()

Üst satırda belirtildiği üzere ilk olarak bir if döngüsü içerisinde çalışan dosyanın ana program olup olmadığını kontrol etmekteyiz. Eğer ana program ise çevre değişkenlerini elde etmek için envConfig değerini çağırarak .env dosyasından verilerimizi projemize entegre etmiş oluruz.

attester/genarateAccount.ts
    try {
await Kilt.init()
.
.
.
}catch (e){
console.log('Error while setting up attester account')
throw e
}
})()
}

Sonrasında if fonksiyonu içerisinde try yapısı ile KILT-SDK'yi başlatmayı deneriz. Yazmaya devam ettiğimiz tüm kodlar bu try yapısının içerisinde yer alacaktır.

Altına indiğimizde hataları algılamak, konsola yazdırmak için bir catch yapısı olduğunu görüntüleyebiliriz.

attester/genarateAccount.ts
      const { mnemonic, account } = generateAccount()

Try yapısı içerisine girdiğimizde generateAccount fonksiyonumuzu çağırdığımızı ve bu fonksiyon içerisinden mnemonic ve account değerlerini değişkenine kaydettiğimizi görüntüleyebiliriz.

attester/genarateAccount.ts
       console.log('Devam etmedeönce .env        dosyasına kaydet!\n\n')
console.l(`ATTESTER_ACCOUNT_MNEMONIC= {mnemonic}"`)
console.(`ATTESTER_ACCOUNT_ADDRESS {account.address}"\n\n`

Yukarıda belirtilen kod ile bu değerler teker teker terminale kod tarafından yazdırılır.

Kodumuzu Çalıştıralım!

Artık kodumuzu çalıştırarak Attester bireyimizin adres'ini ve mnemonic şifresini elde edebiliriz.

Kodu çalıştırmak için terminalde kilt-rocks klasöründe bulunduğumuza emin olduktan sonra alt kısımdaki kodu çalıştırabiliriz:

yarn ts-node ./attester/generateAccount.ts
Kaydetmeyi Unutma!

Konsola yazdırılan bu değerlerin aynı şekilde kopyalanıp .env dosyasına kaydedilmesi gerekmektedir.

dotenv
WSS_ADDRESS=wss://peregrine.kilt.io
ATTESTER_ACCOUNT_MNEMONIC="MNEMONİC ŞİFRE"
ATTESTER_ACCOUNT_ADDRESS="ADRES"
Artık PILT Coinler'i almaya hazırız!

Hesaplarımızı oluşturduğumuza göre artık işlem ücretlerini ve depozitoları ödeyecek bir yapıya sahibiz. Ancak eksik olan bir şey var, o da neyle ödeyeceğimiz! Bu işlemi yapmak için kod çalışınca oluşan account_address değerini buradaki linke girerek faucet'den transfer edebilirsin.

alternative text