Wednesday, December 11, 2024

Coding: Create a Smart Contract


Smart Contract adalah program komputer yang berjalan di atas jaringan blockchain dan secara otomatis mengeksekusi perjanjian yang telah diprogram ketika kondisi tertentu terpenuhi. Smart contract dirancang untuk memfasilitasi, menegakkan, dan mengotomatisasi proses kontrak tanpa memerlukan pihak ketiga.

Karakteristik Smart Contract:

  • Desentralisasi: Berjalan di jaringan blockchain, sehingga tidak bergantung pada satu server pusat.
  • Transparansi: Semua transaksi dan eksekusi kontrak dapat dilihat oleh semua pengguna di jaringan.
  • Keamanan: Data dalam blockchain dienkripsi dan sulit untuk dimanipulasi.
  • Otomatisasi: Kontrak akan berjalan otomatis sesuai dengan kode yang telah ditentukan.
  • Immutable: Setelah kontrak diterapkan, tidak dapat diubah.

Contoh Penggunaan:

  • Keuangan: Transfer aset otomatis setelah pembayaran selesai.
  • Supply Chain: Memvalidasi dan melacak barang dalam rantai pasokan.
  • Aset Digital: Membuat dan mentransfer NFT.
  • Asuransi: Membayar klaim secara otomatis jika syarat terpenuhi.

Smart contract sering digunakan dalam jaringan blockchain seperti Ethereum, Binance Smart Chain, dan Solana, dengan bahasa pemrograman seperti Solidity untuk pengembangannya.

Sekarang kita akan mencoba membuat blockchain sederhana

Langkah 1: Install dan Konfigurasi Ganache

Ganache adalah sebuah personal blockchain yang sering digunakan untuk pengembangan, pengujian, dan debugging aplikasi blockchain. Ini adalah bagian dari paket perangkat lunak yang disediakan oleh Truffle Suite, yang dirancang untuk membantu pengembang dalam membangun dan menguji aplikasi blockchain.

Berbeda dengan blockchain publik seperti Ethereum yang digunakan di lingkungan produksi, Ganache menyediakan lingkungan blockchain lokal yang dapat dijalankan di mesin pengembangan.

Download dan Install Ganache:


  1. Download Ganache dari https://trufflesuite.com/ganache/
  2. Install dan jalankan Ganache di komputer Anda.

Konfigurasi Ganache:


Setelah Ganache berjalan, buat jaringan blockchain lokal (Quickstart Ethereum) atau proyek khusus.
Catat IP Address dan Port yang disediakan di Ganache.

Langkah 2: Download MyEtherWallet



Download MEW:
Download file ZIP MyEtherWallet (MEW) dari https://github.com/MyEtherWallet/etherwallet.
Ekstrak file ZIP di komputer Anda dan jalankan file index.html di browser untuk membuka MyEtherWallet secara lokal (Disini saya menggunakan xampp yang akan diletakkan didalam htdocs folder.

Langkah 3: Menulis dan Mengimplementasikan Kontrak Pintar

Buka Remix IDE:
Akses https://remix.ethereum.org/.

Buat File Baru:
Buat file baru dengan nama hadcoin.sol atau sesuai selera kalian di Remix.


Kode Kontrak Pintar: Copy dan letakkan didalam file tersebut

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

contract HadcoinICO {
    // Maximum number of Hadcoins available for sale
    uint public maxHadcoins = 1000000;

    // USD to Hadcoins conversion rate
    uint public usdToHadcoins = 1000;

    // Total number of Hadcoins bought by investors
    uint public totalHadcoinsBought = 0;

    // Mapping from investor address to equity in Hadcoins and USD
    mapping(address => uint) public equityHadcoins;
    mapping(address => uint) public equityUsd;

    // Modifier to check if an investor can buy Hadcoins
    modifier canBuyHadcoins(uint usdInvested) {
        require(
            usdInvested * usdToHadcoins + totalHadcoinsBought <= maxHadcoins,
            "Not enough Hadcoins available"
        );
        _;
    }

    // Get equity in Hadcoins of an investor
    function equityInHadcoins(address investor) external view returns (uint) {
        return equityHadcoins[investor];
    }

    // Get equity in USD of an investor
    function equityInUsd(address investor) external view returns (uint) {
        return equityUsd[investor];
    }

    // Buy Hadcoins
    function buyHadcoins(address investor, uint usdInvested) external canBuyHadcoins(usdInvested) {
        uint hadcoinsBought = usdInvested * usdToHadcoins;
        equityHadcoins[investor] += hadcoinsBought;
        equityUsd[investor] = equityHadcoins[investor] / usdToHadcoins;
        totalHadcoinsBought += hadcoinsBought;
    }

    // Sell Hadcoins
    function sellHadcoins(address investor, uint hadcoinsSold) external {
        require(equityHadcoins[investor] >= hadcoinsSold, "Insufficient Hadcoins to sell");
        equityHadcoins[investor] -= hadcoinsSold;
        equityUsd[investor] = equityHadcoins[investor] / usdToHadcoins;
        totalHadcoinsBought -= hadcoinsSold;
    }
}


Compile Kontrak Pintar:
Pilih compiler 0.8.22 di Remix dan klik Compile.


Langkah 4: Deploy Kontrak di MyEtherWallet





Salin Bytecode:
Setelah kontrak berhasil dikompilasi, salin Bytecode dari tab Compilation Details di Remix yang berada di HadcoinICO.json. Kemudian atur gas


Hubungkan MEW dengan Ganache:




Di MyEtherWallet, klik Add Custom Network/Node.
Masukkan IP Address dan Port dari Ganache.
Pilih jaringan ini untuk digunakan.

Deploy Kontrak:




Di MEW, buka menu Contracts dan pilih Deploy Contract.
Tempelkan Bytecode yang disalin sebelumnya.
Pilih akun dari Ganache untuk mendanai transaksi (gunakan private key dari Ganache).




Klik Sign Transaction dan kemudian Deploy.

Langkah 5: Interaksi dengan Kontrak
Masukkan ABI:




Salin ABI dari Remix dan tempelkan di MEW pada bagian Interact with Contract.

Interaksi Fungsi Kontrak:




Gunakan fungsi seperti buy_hadcoins atau sell_hadcoins untuk menguji. Isi parameter sesuai kebutuhan (misalnya, alamat akun dan jumlah USD).

Friday, December 6, 2024

Building a Blockchain with Coding Part 3


Kali ini saya akan membahas tentang lanjutan case pembuatan cryptocurrency yang sebelumnya sudah membuat coding berbasis python yang kemudian dilanjutkan menggunakan postman, sekarang saya mencoba untuk melanjutkan pembuatan case lebih dalam.

Teknologi blockchain telah merevolusi cara kita mengelola transaksi digital. Salah satu aplikasinya yang paling populer adalah cryptocurrency, seperti Bitcoin, yang memungkinkan transaksi aman tanpa perantara. Dalam tutorial ini, Anda akan belajar bagaimana membuat blockchain sederhana menggunakan Python dan Flask untuk membangun dasar dari cryptocurrency.

1. Dasar-Dasar Blockchain

Blockchain adalah rangkaian data yang tersimpan dalam blok-blok yang saling terhubung secara kronologis. Setiap blok memuat data tertentu, termasuk jejak dari blok sebelumnya, sehingga menciptakan rantai yang tidak dapat diubah tanpa persetujuan jaringan. Teknologi ini dikenal karena keandalannya dalam mencatat transaksi dan mencegah perubahan yang tidak sah.

Proyek ini bertujuan membuat blockchain yang mendukung pencatatan transaksi, penambahan blok baru, dan validasi struktur blockchain.

2. Alat yang Dibutuhkan

Python: Bahasa pemrograman yang digunakan untuk logika utama.

Flask: Framework web Python untuk mengembangkan API sederhana yang memungkinkan interaksi dengan blockchain.

Pastikan Python dan Flask telah terinstal di perangkat Anda.

3. Komponen Inti Blockchain

Blockchain terdiri dari:

  • Blok: Unit penyimpanan data yang berisi transaksi, waktu pencatatan, bukti kerja (proof), dan referensi hash dari blok sebelumnya.
  • Transaksi: Data yang mencatat aktivitas, misalnya pengirim, penerima, dan jumlah yang dikirim.
  • Proof of Work: Mekanisme yang memastikan setiap blok baru membutuhkan komputasi tertentu, sehingga sulit dimanipulasi.
  • Rantai (Chain): Sekumpulan blok yang disusun secara berurutan untuk membentuk blockchain.

4. Implementasi Blockchain

Berikut adalah contoh case lain dari struktur dasar blockchain:

Buatkan masing masing file dengan nama seperti gambar diatas, lalu setiap file itu diisi dengan code yang sudah kita bahas di part 2, jika belum mengetahui silahkan bisa melihat didalam blog saya " Building a Blockchain with Coding Part 2". Jika sudah, isi setiap file tersebut dengan code lalu yang membedakan antara mereka adalah tata letak port pada barisan terakhir



Maka, akan terlihat seperti ini;


Lalu buka Postman dan jalankan fungsi get_chain dengan GET request untuk membuat genesis block pada masing-masing node
http://127.0.0.1:5001/get_chain (Hadelin Node)


  • URL: http://127.0.0.1:5001/get_chain
  • Method: GET
  • Klik "Send" untuk mendapatkan genesis block pada Hadelin Node.

http://127.0.0.1:5002/get_chain (Kirill Node)


  • URL: http://127.0.0.1:5002/get_chain
  • Method: GET
  • Klik "Send" untuk mendapatkan genesis block pada Kirill Node.

http://127.0.0.1:5003/get_chain (Your Node)



  • URL: http://127.0.0.1:5003/get_chain
  • Method: GET
  • Klik "Send" untuk mendapatkan genesis block pada Your Node.
Catatan: Pastikan semua node memiliki genesis block yang sama.

Selanjutnya, kita perlu menghubungkan node-node satu sama lain. Jalankan fungsi connect_node dengan menggunakan POST request pada Postman untuk setiap node dengan parameter JSON seperti berikut:

Hadelin Node (5001):

  • URL: http://127.0.0.1:5001/connect_node
  • Method: POST
  • Body (JSON):



Klik "Send" untuk menghubungkan node lainnya. Lakukan hal yang sama dengan node yang lain

Sekarang, kita akan melakukan mining untuk menambahkan blok baru pada jaringan. Lakukan langkah berikut untuk masing-masing node:

  • Hadelin Node (5001):
  • URL: http://127.0.0.1:5001/mine_block
  • Method: GET
  • Klik "Send" untuk menambahkan blok baru pada Hadelin Node.

Setelah mining, cek apakah blok baru sudah ditambahkan dengan menggunakan fungsi get_chain pada node yang lain:

Kirill Node (5002):

  • URL: http://127.0.0.1:5002/get_chain
  • Method: GET
  • Klik "Send" untuk memeriksa apakah Kirill Node mendapatkan blok yang sama.



hasilnya adalah belum sama, hal ini dikarenakan belum membuat request replace_chain yang berfungsi menjalankan konsensus agar semua node memiliki block yang sama.

Untuk memastikan bahwa semua node memiliki blockchain yang sama, jalankan fungsi replace_chain pada setiap node:

Kirill Node (5002):
  • URL: http://127.0.0.1:5002/replace_chain
  • Method: GET
  • Klik "Send" untuk memastikan blockchain di Kirill Node sudah diperbarui sesuai dengan konsensus.


Your Node (5003):
  • URL: http://127.0.0.1:5003/replace_chain
  • Method: GET
  • Klik "Send" untuk memastikan blockchain di Your Node sudah diperbarui sesuai dengan konsensus.

Setelah itu, lakukan pengecekan menggunakan fungsi get_chain pada setiap node:

Hadelin Node (5001): Cek apakah blockchain sudah sama pada semua node.




Kirill Node (5002): Cek apakah blockchain sudah sama pada semua node.




Kirill Node (5003): Cek apakah blockchain sudah sama pada semua node.


Menambahkan Transaksi Lagi

Tambahkan transaksi lagi dari Hadelin ke Anda (1.000.000 coin):

Hadelin Node (5001):
URL: http://127.0.0.1:5001/add_transaction
Method: POST
Body (JSON):

Klik "Send" untuk menambahkan transaksi. Lalu cek menggunakan mine_block 


Lakukan hal yang sama untuk memastikan konsensus pada semua node dengan mining dan replace_chain.


Transaksi dari Kirill ke Your

Tambahkan transaksi dari Kirill ke Anda (5000 coin):

Kirill Node (5002):
URL: http://127.0.0.1:5002/add_transaction
Method: POST
Body (JSON):


Klik "Send" untuk menambahkan transaksi.

Lakukan mining dan konsensus untuk memastikan semua node memiliki blockchain yang sama.





Coding: Create a Smart Contract

Smart Contract adalah program komputer yang berjalan di atas jaringan blockchain dan secara otomatis mengeksekusi perjanjian yang telah dipr...