"Enter"a basıp içeriğe geçin

Blockchain Uygulama Geliştirme – #3 Kontratı Yayınlama ve API Hazırlama

Tahmini okuma süresi: 14 dakika

Bir önceki yazımızda UI ile etkileşimin nasıl gerçekleştiğini görmüştük. Bu yazımızda kontratımızı Ethereum’un test ağlarından olan Rinkeby’de yayınlayacağız. Sonrasında kontrat için API hazırlayacağız. Eğer önceki yazıyı okumadıysanız aşağıdaki bağlantıdan giderek okuyabilirsiniz.

Rinkeby Ağına Deployment

Bir önceki yazıda MetaMask’a üye olmuştuk. Bu cüzdan üzerindeki hesaplarımıza Rinkeby ağı için ETH yüklemesi yapmamız gerekli. Bunun için ilk önce hesap adresimizi Twitter’da veya Facebook’da herkese açık gönderi olarak paylaşıyoruz. Daha sonra gönderinin linkini aşağıdaki adrese girip ETH talebinde bulunuyoruz.

Cüzdanımızdaki hesaplara ait özel anahtarlara ihtiyacımız var. Cüzdanımızdaki iki hesabın özel anahtarlarını kopyalayalım. İhtiyacımız olacak. Kontratı ilk hesabın özel anahtarı ile deploy edeceğiz. İlk yazımızda kontratı oluşturan hesabı add ve deliver fonksiyonları için yetkilendirmiştik. Bu sebeple ilk hesap ile add ve deliver fonksiyonlarını, ikinci hesap ile diğer fonksiyonları test edeceğiz.

Infura, HTTPS ve WebSockets üzerinden Ethereum ağına erişmemizi sağlar. Infura ile yaptığımız deployment sayesinde dashboard‘umuzda projelerimizi ve istatistiklerimizi görebiliriz. Ayrıca Infura’nın vereceği API sayesinde blockchain ağı üzerinde sorgulamalar yapabiliriz. Deployment için Infura kullanmak gibi bir zorunluluğumuz yok. Direkt Ethereum ağına da deployment yapabiliriz fakat biz Infura üzerinden deploy edeceğiz. Aşağıdaki adresten Infura’ya üye olabilirsiniz.

Üye olduktan sonra “Create New Project”e basarak bir proje oluşturuyoruz. Projenin detayına girdikten sonra “Settings” sayfasına geçiyoruz. ProjectId’yi kopyalıyoruz. Buna ihtiyacımız olacak.

Backend projemize aşağıdaki paketleri dahil ediyoruz.

npm i @truffle/hdwallet-provider --save
npm i dotenv --save

truffle-config.js dosyamıza yeni bir network ekliyoruz.

Provider olarak HDWalletProvider paketini kullanıyoruz. Hatırlarsanız frontend projesinde provider olarak MetaMask’ı kullanmıştık. Fakat burada UI ile bir iletişim olmayacağı için HDWalletProvider paketini kullanıyoruz. İlk parametre olarak hesaplarımızın özel anahtarlarını veriyoruz. İkinci parametre olarak ise Infura endpoint‘imizi veriyoruz.

Environment variable olarak tanımlarımızı aşağıdaki gibi yapıyoruz.

export PRIVATE_KEYS=[BİRİNCİ ÖZEL ANAHTAR],[İKİNCİ ÖZEL ANAHTAR]
export INFURA_PROJECT_ID=[INFURA PROJECT ID]

2_deploy_contracts.js dosyamıza aşağıdaki gibi bir koşul ekleyerek, test için yazdığımız MockerOrders kontratının Rinkeby’ye gitmesini engelliyoruz. Bu kontratı lokal ağımızda tarih testleri için yazmıştık.

Artık kontratımızı deploy edebiliriz. Aşağıdaki komut satırını çalıştırabiliriz.

truffle migrate --network rinkeby

Konsola yazılan kontrat adresimizi kopyalayalım. Buna ihtiyacımız olacak.

API’nin Hazırlanması

Rinkeby Explorer ile kontrat üzerinde yapılan tüm işlemler görüntülenebilir. Aşağıdaki adrese girerek kontrat adresini girdiğimizde “Contract Creation” isimli transaction‘ı görebiliriz.

https://rinkeby.etherscan.io/

Contract Creation Transaction
Contract Creation Transaction

API projesine github repo’sundan erişebilirsiniz. Örnek olarak Express ile bir API oluşturdum. route.js dosyasında web3’ü hazırlıyoruz.

10. satırda deployment için kullandığımız provider‘ın aynısını kullanıyoruz. 11. satırda ise Web3’e provider‘ı veriyoruz. Hatırlarsanız frontend projemizde provider olarak MetaMask kullanmıştık.

14. satırda ise kontratımızı örneğini oluşturuyoruz.

Artık bu kontrat üzerinden frontend projesinde yaptığımız gibi tüm işlemlerimizi yapabiliriz. Frontend projesinde OrderService oluşturmuştuk. Aynısını burada da kullanabiliriz.

Sipariş Ekleme Endpoint’i

Bu işlemden sonra Rinkeby Explorer’da sorgulama yaparak oluşan bloğu görebiliriz.

Add Order Transaction
Add Order Transaction
Ödeme Alma Endpoint’i

Bu işlemden sonra Rinkeby Explorer’da sorgulama yaparak oluşan bloğu görebiliriz.

Pay Order Transaction
Pay Order Transaction
Siparişi Teslim Etme Endpoint’i

Bu işlemden sonra Rinkeby Explorer’da sorgulama yaparak oluşan bloğu görebiliriz.

Deliver Order Transaction
Deliver Order Transaction
Geri Ödeme Yapma Endpoint’i

Bu işlemden sonra Rinkeby Explorer’da sorgulama yaparak oluşan bloğu görebiliriz.

Refund Transaction
Refund Transaction
Sipariş Sorgulama Endpoint’i

Kontrat Bakiyesi Sorgulama Endpoint’i

Üç bölümden oluşan serinin sonuna geldik. Umarım faydalı olmuştur.

Örnek uygulamaya Github’dan erişebilirsiniz.

Kalın sağlıcakla.

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.