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

29.03.2022 | dakika okuma

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.

Blockchain Uygulama Geliştirme – #2 UI ile Etkileşim
Bir önceki yazımızda kontratımızı hazırlamıştık, test kodlarımızı yazmıştık. Bu yazıda ise UI ile kontratın iletişimini gerçekleştireceğiz ve kontratta tanımlı fonksiyonları çağıracağız. Eğer önceki yazıyı okumadıysanız…

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.

Rinkeby: Authenticated Faucet
This Ether faucet is running on the Rinkeby network. To prevent malicious actors from exhausting all available funds or accumulating enough Ether to mount long running spam attacks, requests are tied to common 3rd party social network accounts. Anyone having a Twitter or Facebook account may request…

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.

Ethereum API | IPFS API & Gateway | ETH Nodes as a Service | Infura

Infura’s development suite provides instant, scalable API access to the Ethereum and IPFS networks. Connect your app to Ethereum and IPFS now, for free!

Ü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.

ahmetkucukoglu/order-blockchain-app

JavaScript
10
1

Kalın sağlıcakla.

Yazıyı Paylaş

Yorum bırak

Yanıtla

Yanıtlamayı iptal et
Bu site reCAPTCHA tarafından korunmaktadır ve Google Gizlilik Politikası ve Hizmet Şartları geçerlidir. Yorumunuz başarılı şekilde gönderildi reCaptcha doğrulanamadı
Muhabbetle ASP.NET Core ile geliştirildi.