Web3.js

Web3.js de EVM üzerindeki blockchain ağları ile etkileşim kurmak için kullanılan bir diğer popüler JavaScript kütüphanesidir.

DApp (Decentralized Application) geliştiricileri tarafından, smart contract'ler ile etkileşim, hesapların yönetimi, işlemlerin gönderilmesi ve blockchain verilerinin alınması gibi görevler için yaygın olarak kullanılır.

1 - Kurulum

Web3.js kütüphanesinin kurulumu için öncelikle bağımlılıkları projenize import etmeniz gerekmektedir.

npm install web3
//veya
yarn add web3

2 - Web3.js ile Temel İşlemler

Web3.js'i Projeye Dahil Etmek

Web3.js kurulumu yaptıktan sonra akıllı sözleşmenizin en üstünde kullandığınız frameworke göre (react.js, next.js, vanillaJS) aşağıdaki komutlardan uygun olanını kullanabilirsiniz.

const Web3 = require('web3');
// veya ES6 modülleri kullanıyorsanız
import Web3 from 'web3';

Bir Ethereum Cüzdanı Oluşturma

Akıllı sözleşmemizde create() fonksiyonu ile yeni bir cüzdan oluşturabiliriz.

const account = web3.eth.accounts.create();
console.log(`Address: ${account.address}`);
console.log(`Private Key: ${account.privateKey}`);

Bir Cüzdanı Mevcut Bir Private Key ile İçe Aktarma

Oluşturduğumuz cüzdan adresini ve private key'i import etmemiz gerektiği durumlar olabilir.

const privateKey = "PRIVATE_KEY";
const wallet = new ethers.Wallet(privateKey);
console.log(`Address: ${wallet.address}`);

Bir Ethereum Node'una Bağlanma

Web3.js, farklı provider'larla çalışabilir. Örneğin, Infura veya Alchemy gibi bir servis sağlayıcı ile Ethereum blockchain'e bağlanabilirsiniz.

// Infura kullanarak bir provider oluşturma
const web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"));

Bir Hesap Bakiyesini Kontrol Etme

web3.eth.getBalance("0xAdresGir").then((balance) => {
    console.log(`Balance: ${web3.utils.fromWei(balance, 'ether')} ETH`);
});

Bir Varlık Gönderme İşlemi/Transaction

Metamask arayüzünü kullanmadan kontrat üzerinden bakiye transferi de yapabilirsiniz.

const tx = {
    from: '0xGönderenAdres',
    to: '0xAlıcıAdres',
    value: web3.utils.toWei('0.01', 'ether'), // Gönderilecek ETH miktarı
    gas: 21000
};

web3.eth.accounts.signTransaction(tx, 'YOUR_PRIVATE_KEY').then((signedTx) => {
    web3.eth.sendSignedTransaction(signedTx.rawTransaction).then((receipt) => {
        console.log(`Transaction Hash: ${receipt.transactionHash}`);
    });
});

Bir Smart Contract ile Etkileşim

Kullanıcılarınız akıllı sözleşmeleriniz ile sitenin ön yüzünden etkileşime geçebilmesi için web3.js de mükemmel bir araçtır. Tek lazım olan akıllı sözleşme adresi ve ABI kodu.

Sözleşmenizi deploy ederken otomatik oluşturulan bir ABI kodu bulunmaktadır. Bu ABI kodunu ister contractABI kısmına ekleyebilir isterseniz de bunu harici bir dosyadan çağırabilirsiniz.

const contractABI = [
    // ABI burada olmalı
];
const contractAddress = "0xKontratAdresi";
const contract = new web3.eth.Contract(contractABI, contractAddress);

// Örneğin bir fonksiyonu çağırmak için
contract.methods.someFunction().call().then((result) => {
    console.log(result);
});

3 - Web3.js Ekstra Araçlar ve Yardımcı Fonksiyonlar

BigNumber Kullanımı

Akıllı sözleşmelerde birimler ifade edilirken Wei kullanılır. Bu nedenle sayılar çok büyük olmakta ve bu yüzden BigNumber hatası almaktayız.

1 ether = 1000000000000000000 wei (19 hane)

Burada Web3.js'in bize sağladığı yerleşik BigNumber dönüşümü sayesinde büyük sayılarla çalışabilmekteyiz.

const bigNumber = web3.utils.toBN('1000000000000000000');
console.log(bigNumber.toString()); // 1000000000000000000

Event Dinleme

Bir akıllı sözleşmenin veya bireysel bir hesabın event'lerini aşağıdaki yöntemle dinleyebiliriz.

contract.events.Transfer({
    filter: {value: web3.utils.toWei('100', 'ether')}, // Değeri 100 ETH olan transferleri dinleme
    fromBlock: 0
}, (error, event) => {
    if (!error) {
        console.log(event);
    }
});

Hash Oluşturma

const hash = web3.utils.sha3('Hello, World!');
console.log(hash);

Last updated