JavaScript ve Blockchain: Akıllı Kontratlar Yazmak

Blockchain teknolojisi son yıllarda hızla popülerleşen bir kavram haline geldi. Özellikle finansal uygulamalarda, akıllı kontratlar (smart contracts) gibi gelişmiş özellikler sayesinde blok zincirlerinin potansiyeli çok daha genişledi. JavaScript, genellikle web geliştirme için kullanılan bir dil olmasına rağmen, blockchain uygulamaları geliştirmede de önemli bir yer edinmeye başladı. Bu yazıda, JavaScript kullanarak blockchain üzerinde nasıl akıllı kontratlar yazabileceğimizi detaylı bir şekilde inceleyeceğiz.


1. Blockchain Nedir?

Blockchain, verilerin birbirine bağlı "bloklar" şeklinde depolandığı bir veri yapısıdır. Bu bloklar, üzerinde yapılan işlemleri saklar ve her blok, bir önceki bloğa bağlanarak zincir oluşturur. Blockchain, merkeziyetsiz bir yapıya sahip olduğu için verilerin güvenli ve şeffaf bir şekilde kaydedilmesini sağlar.

Blockchain, finansal sistemlerin ötesinde, tedarik zinciri yönetimi, sağlık sektörü ve akıllı kontratlar gibi birçok farklı alanda da kullanılmaktadır. Akıllı kontratlar, blockchain üzerinde belirli koşullar sağlandığında otomatik olarak çalışan programlardır.


2. Akıllı Kontrat Nedir?

Akıllı kontratlar, bir blockchain ağı üzerinde koşullu sözleşmeleri uygulayan dijital programlardır. Bu kontratlar, taraflar arasında güveni artırmak ve aracılara olan ihtiyacı ortadan kaldırmak için kullanılır. Akıllı kontratlar, bir anlaşmanın koşullarını yazılım kodu olarak tanımlar ve belirli bir koşul gerçekleştiğinde otomatik olarak uygulanır.

Ethereum, akıllı kontratlar yazmak için en popüler blockchain platformlarından biridir. Ethereum ağı, Solidity adlı bir dil ile akıllı kontratlar yazmayı destekler. Ancak JavaScript de, Ethereum üzerinde çalışan akıllı kontratları yönetmek ve etkileşimde bulunmak için kullanılabilir.


3. JavaScript ve Blockchain: Temel Araçlar

JavaScript, genellikle frontend geliştirmede kullanılsa da, blockchain teknolojisiyle etkileşime geçmek için de güçlü araçlar sunmaktadır. Ethereum blockchain'ine bağlanmak ve akıllı kontratlarla etkileşimde bulunmak için en yaygın kullanılan JavaScript araçları şunlardır:

3.1. Web3.js

Web3.js, Ethereum blockchain'i ile etkileşime geçmek için kullanılan en popüler JavaScript kütüphanesidir. Web3.js, Ethereum ağına bağlanmanızı, akıllı kontratlar ile etkileşimde bulunmanızı, işlem göndermenizi ve daha fazlasını gerçekleştirmenizi sağlar. Web3.js, özellikle Ethereum üzerinde çalışan merkeziyetsiz uygulamalar (dApps) geliştirmek için kullanılır.

Web3.js ile Ethereum'a Bağlanmak
Aşağıdaki örnekte, Web3.js kullanarak Ethereum ağına nasıl bağlanılacağını göstereceğiz:

// Web3.js kütüphanesini dahil et
const Web3 = require('web3');

// Ethereum ağına bağlanmak için Web3 nesnesi oluştur
const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID');

// Ethereum cüzdanının adresi
const address = '0xYourEthereumAddress';

// Cüzdan bakiyesini al
web3.eth.getBalance(address).then(balance => {
  console.log('Cüzdan Bakiyesi:', web3.utils.fromWei(balance, 'ether'), 'ETH');
});

Bu kod, Web3.js kullanarak Ethereum ana ağına bağlanır ve belirtilen adresin bakiyesini getirir.

3.2. ethers.js

ethers.js, Web3.js’e alternatif olarak kullanılan bir başka JavaScript kütüphanesidir. Ethers.js, daha küçük ve daha hızlı bir kütüphane olarak popülerdir ve özellikle Ethereum blockchain’i ile etkileşimde bulunmak için kullanılır. Bu kütüphane, akıllı kontratlarla etkileşimde bulunmanızı sağlayacak araçlar sunar.

Ethers.js ile Akıllı Kontrat Çağrısı Yapmak
Aşağıda, ethers.js kullanarak Ethereum üzerinde bir akıllı kontrat ile nasıl etkileşimde bulunabileceğimizi gösteren bir örnek bulunmaktadır:

const { ethers } = require('ethers');

// Ethereum ağına bağlan
const provider = new ethers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID');

// Akıllı kontrat adresi ve ABI (Application Binary Interface)
const contractAddress = '0xYourSmartContractAddress';
const abi = [
  // Akıllı kontratın ABI'si
  "function getBalance(address _owner) public view returns (uint256)"
];

// Akıllı kontrat nesnesini oluştur
const contract = new ethers.Contract(contractAddress, abi, provider);

// Akıllı kontrattan veri almak
async function getBalance() {
  const balance = await contract.getBalance('0xYourEthereumAddress');
  console.log('Akıllı Kontrattaki Bakiyeniz:', ethers.utils.formatEther(balance));
}

getBalance();

Bu kod, ethers.js kullanarak bir Ethereum akıllı kontratından veri alır.


4. Akıllı Kontrat Yazmak: Solidity

Akıllı kontratlar, genellikle Solidity adlı bir programlama diliyle yazılır. Solidity, Ethereum blockchain’i üzerinde çalışan bir dildir ve akıllı kontratların oluşturulmasında yaygın olarak kullanılır. Solidity, sözleşme koşullarını tanımlamak için kodlama yapmanıza olanak tanır.

4.1. Solidity ile Basit Bir Akıllı Kontrat

Aşağıda, Solidity ile yazılmış basit bir akıllı kontrat örneği bulunmaktadır. Bu kontrat, bir kullanıcının bakiyesini saklamak için kullanılan bir sözleşmeyi temsil eder:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 public storedData;

    // Değeri ayarlamak için fonksiyon
    function set(uint256 x) public {
        storedData = x;
    }

    // Değeri almak için fonksiyon
    function get() public view returns (uint256) {
        return storedData;
    }
}

Bu kontrat, bir set fonksiyonu ile veri saklamanızı sağlar ve get fonksiyonu ile saklanan veriyi alabilirsiniz.


5. JavaScript ile Akıllı Kontrat Etkileşimi

JavaScript, Solidity ile yazılmış akıllı kontratlar ile etkileşime geçmek için Web3.js veya ethers.js gibi kütüphaneleri kullanabilir. Bu kütüphaneler, Ethereum ağına bağlanmanıza, akıllı kontratlara veri göndermenize ve kontratlarla etkileşimde bulunmanıza olanak tanır.

Web3.js ile Akıllı Kontrata Veri Göndermek
Aşağıdaki örnek, Web3.js kullanarak bir Ethereum akıllı kontratına veri gönderme işlemini göstermektedir:

const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID');
const contractAddress = '0xYourSmartContractAddress';
const abi = [
  // Akıllı kontratın ABI'si
  "function set(uint256 x) public"
];

// Akıllı kontrat nesnesi oluştur
const contract = new web3.eth.Contract(abi, contractAddress);

// Cüzdan adresiniz ve işlem gönderme
const account = '0xYourEthereumAddress';
const privateKey = '0xYourPrivateKey';

web3.eth.accounts.signTransaction({
  to: contractAddress,
  data: contract.methods.set(100).encodeABI(),
  gas: 2000000
}, privateKey).then(signedTx => {
  web3.eth.sendSignedTransaction(signedTx.rawTransaction);
});

Bu kod, Web3.js kullanarak akıllı kontrata veri gönderir. set fonksiyonu ile belirli bir değeri kontrata ekler.


6. Sonuç

JavaScript, blockchain teknolojisi ile güçlü bir şekilde entegre olabilen bir dildir. Web3.js ve ethers.js gibi kütüphaneler sayesinde, Ethereum blockchain’i üzerinde akıllı kontratlar yazabilir ve bu kontratlarla etkileşimde bulunabilirsiniz. Akıllı kontratlar, blockchain üzerinde güvenli ve otomatik işlemler gerçekleştirilmesini sağlar ve merkeziyetsiz uygulamaların (dApps) temelini oluşturur.

Blockchain ve JavaScript kombinasyonu, geliştiricilere hem frontend hem de backend üzerinde blockchain tabanlı uygulamalar geliştirme konusunda büyük bir esneklik sağlar.