Solidity ile Akıllı Kontratlar ve Ethereum Dünyası -2
İkinci yazı ile dizimize devam ediyoruz.
İlk yazımızda gönderici ile alıcı arasında kontrolsüz bir şekilde ethereum transferi yapmıştık. Şimdi ise networkumuze transferler için belirli kurallar getireceğimiz akıllı kontratlar sistemini yükleyip testlerini yapacağız. Akıllı Kontratlar hakikaten akıllılar networkte içerisinde bir hesap gibi davranıp bir çeşit güvenli ödeme mantığı sağlarlar.
Öncelikle tipik bir kontrat oluşturabilmek için Solidity dilinden yararlanalım.
Introduction to Smart Contracts — Solidity 0.8.5 documentation (soliditylang.org)
Kurgumuz bir otomat makinesi için olsun;
pragma solidity ^0.8.5;
contract VendingMachine {
// method tetikleyici adresi
address public owner;
// Gönderici adresin balance durumunu tutan obje
mapping (address => uint) public productBalances;
constructor() public {
owner = msg.sender;
productBalances[address(this)] = 100;
}
// Balance dolduruluyor artık ne satılıyorsa
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
productBalances[address(this)] += amount;
}
//Balance düşümü yapılacak
//payable keywordu koyarak transaction yapılması sağlıyoruz
function purchase(uint amount) public payable {
// require keywordu ile işlem öncesi şartlar kontrol edilir.
require(productBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
productBalances[address(this)] -= amount;
productBalances[msg.sender] += amount;
}
}
Dosyamızı contract.sol uzantılı olarak kaydedelim. Derleme yapabilmemiz için npm ile download işlemi yapalım.
Dosyayı derlemek için aşağıdaki derleme kodunu çalıştıralım.
solc contract.sol --bin --abi --optimize -o X:/xxx
Web3j download edebilirsiniz.
Muhtelif OS ler için download yöntemleri aşağıdaki linkte bulunuyor.
https://github.com/web3j/web3j
Java wrapper classlarımızı üretelim.
web3j generate solidity -b contract_sol_VendingMachine.bin -a contract_sol_VendingMachine.abi -o D:/Quorum/src/main/java -p com.etherweb3j
Oluşan java classımızı projemize dahil edelim. Böylece client tarafını tamamlamış olduk.
Şimdi projemizi konuşturacağımız ethereum node unu ayağa kaldıralım. Ganache GUI de kontratlarda görsel sorunlar olduğu için ganache-cli yi kullanacağız.
npm install -g ganache-cli
ile node umuzu ayağa kaldırıyoruz.
Solidity ile oluşturduğumuz kontratı yüklemek için http://remix.ethereum.org/ sitesinden destek alacağız. Solidity seçip yüklemek için
Web3 Provider ile lokaldeki node a bağlanıp owner account olarak kontratı deploy edebilirsiniz. Aşağıda oluşacak kontrat adresini web3j client da kullanıyor olacaksınız.
Son olarak web3j ile node a bağlanıp kontrat üzerinden işlem yapalım.
Kontrat ı aşağıdaki gibi load edip methodu çalıştırıyoruz.
Contract_sol_VendingMachine contract = Contract_sol_VendingMachine.load(
contract_address, web3j, Credentials.create(purchaserKEY), gasProvider);
contract.purchase(new BigInteger(String.valueOf(90))).send();
Böylece elimizdeki productBalance ı baz alarak ethereum transferini kısıtlamış olduk. Son yazımızda mobil üzerinden işlemlerimizi yapıp dizimizi sonlandıracağız.



Yorumlar
Yorum Gönder