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.





Tuesday, November 19, 2024

Explain Crypto To COMPLETE Beginners: Resume


Apakah Anda pernah mencoba menjelaskan cryptocurrency kepada teman atau keluarga yang baru mengenal konsep ini? Terkadang, istilah seperti "blockchain", "mining", dan "staking" bisa membuat bingung. Dalam artikel ini, kita akan memecah konsep-konsep kompleks ini menjadi istilah yang lebih sederhana, sehingga Anda bisa menjelaskan potensi cryptocurrency kepada orang yang belum mengenalnya.

Apa itu Cryptocurrency?

Cryptocurrency adalah mata uang digital yang menggunakan kriptografi untuk keamanan. Berbeda dengan mata uang tradisional, cryptocurrency tidak dikendalikan oleh otoritas seperti pemerintah atau bank. Sebagai gantinya, cryptocurrency berjalan pada jaringan terdesentralisasi yang terdiri dari banyak komputer.

Poin utama yang perlu dijelaskan:  

  • Mata uang digital: Hanya ada dalam bentuk digital.  
  • Desentralisasi: Tidak ada entitas tunggal yang mengendalikannya.  
  • Keamanan: Kriptografi memastikan transaksi yang aman.  
  • Contoh: Bitcoin, Ethereum, Dogecoin.

Bagaimana Cryptocurrency Bekerja?

Cryptocurrency beroperasi menggunakan teknologi blockchain. Anda bisa membayangkan blockchain sebagai buku besar digital yang mencatat semua transaksi. Setiap blok dalam rantai berisi sejumlah transaksi, dan begitu sebuah blok ditambahkan, sangat sulit untuk diubah.

Poin utama yang perlu dijelaskan:  

  • Blockchain: Buku besar digital yang mencatat transaksi.  
  • Mining: Proses untuk memverifikasi dan menambahkan transaksi ke blockchain.  
  • Wallet: Dompet digital untuk menyimpan dan mengelola cryptocurrency.  
  • Smart Contracts: Kontrak yang dijalankan sendiri dengan ketentuan yang tertulis langsung dalam kode.

Mengenal Bitcoin

Bitcoin adalah salah satu cryptocurrency yang paling terkenal dan sering kali membuat orang bingung karena konsepnya yang kompleks. Tapi jangan khawatir, kita akan memecahkannya dengan cara yang lebih mudah dimengerti.

Apa itu Bitcoin?



Bitcoin adalah bentuk uang digital yang dapat dikirim langsung dari satu orang ke orang lain tanpa perlu melalui perantara seperti bank. Bitcoin juga bersifat desentralisasi, artinya tidak dikendalikan oleh satu otoritas pun.

Bagaimana Bitcoin Bekerja?

Bitcoin beroperasi menggunakan teknologi blockchain. Blockchain adalah sebuah buku besar digital yang mencatat setiap transaksi. Setiap transaksi yang terjadi dibundel dalam sebuah blok, dan setelah blok tersebut ditambahkan ke dalam rantai, sangat sulit untuk diubah.

Konsep Penting dalam Bitcoin:

  • Mining: Proses untuk memverifikasi dan menambahkan transaksi ke blockchain.  
  • Wallet: Dompet digital untuk menyimpan dan mengelola Bitcoin.  
  • Public dan Private Keys: Public key seperti alamat Anda, sedangkan private key adalah kata sandi yang mengamankan akses ke Bitcoin Anda.  
  • Nodes: Komputer-komputer yang ikut berpartisipasi dalam jaringan Bitcoin dan menjaga integritas blockchain.

Mengapa Bitcoin?


  • Desentralisasi: Tidak ada pihak tunggal yang mengendalikan jaringan.  
  • Keamanan: Teknologi blockchain memastikan transaksi yang aman.  
  • Transparansi: Semua transaksi tercatat di blockchain yang dapat diakses publik.  
  • Jangkauan Global: Bitcoin dapat dikirim ke mana saja di dunia.

Memulai dengan Bitcoin

  1. Pilih Wallet: Pilih dompet yang aman untuk menyimpan Bitcoin Anda.  
  2. Beli Bitcoin: Beli Bitcoin melalui bursa yang terpercaya.  
  3. Simpan Bitcoin Anda: Pastikan untuk menyimpan Bitcoin Anda dengan aman di dompet.  
  4. Kirim dan Terima Bitcoin: Gunakan dompet untuk mengirim dan menerima Bitcoin.


Kesimpulan

Cryptocurrency, termasuk Bitcoin, adalah teknologi revolusioner yang berpotensi mengubah lanskap keuangan global. Dengan memahami konsep dasarnya, Anda dapat berpartisipasi dalam revolusi digital ini. Pastikan untuk selalu mengutamakan keamanan dan melakukan riset yang mendalam sebelum berinvestasi.

Tips Tambahan yang berguna bagi kalian yang ingin mempelajari:

  • Mulai dari yang Kecil: Mulailah dengan investasi kecil untuk memahami pasar.  
  • Tetap Terinformasi: Ikuti berita dan tren terbaru di dunia cryptocurrency.  
  • Konsultasikan dengan Ahli: Cari saran dari penasihat keuangan atau ahli cryptocurrency.

Dengan mengikuti panduan sederhana ini, Anda dapat lebih mudah memahami dunia cryptocurrency dan Bitcoin, serta membantu teman dan keluarga Anda mengenal teknologi yang sedang berkembang ini.


Source: Coin Bureau (Youtube)

  • Explain Crypto To COMPLETE Beginners: Coin Bureau Guide!!
  • Explain Crypto To COMPLETE Beginners: Ultimate Guide!!

Thursday, November 14, 2024

Building a Blockchain with Coding Part 2

 1. Inisialisasi Flask dan Blockchain

Kode diawali dengan mengimpor modul yang diperlukan dan menginisialisasi aplikasi Flask:


Flask memungkinkan kita membuat aplikasi web untuk berinteraksi dengan blockchain.


2. Membuat Kelas Blockchain

Kelas Blockchain bertanggung jawab atas berbagai fungsi utama, seperti pembuatan blok baru, penentuan proof-of-work, dan validasi rantai. Berikut fungsi-fungsi di dalamnya:

A.  __init__: Inisialisasi Blockchain


Fungsi __init__ adalah konstruktor yang menginisialisasi chain sebagai list kosong. Blok pertama (genesis block) dibuat dengan nilai proof=1 dan previous_hash='0'.

B. create_block: Membuat Blok Baru


create_block digunakan untuk membuat blok baru, yang mencakup:
  • index: Nomor urutan blok.
  • timestamp: Waktu pembuatan blok.
  • proof: Bukti dari proof-of-work.
  • previous_hash: Hash dari blok sebelumnya.
Blok yang dihasilkan ditambahkan ke dalam rantai.

C. get_previous_block: Mendapatkan Blok Terakhir


Fungsi ini mengembalikan blok terakhir dalam rantai untuk digunakan dalam proof-of-work dan pembuatan blok baru.

D. proof_of_work: Proses Proof of Work


Fungsi ini menentukan proof-of-work dengan mencari angka (new_proof) yang, ketika digabungkan dengan previous_proof, menghasilkan hash yang diawali dengan empat angka nol (0000). Ini mengontrol kesulitan dalam menambang blok.


E. hash: Menghitung Hash dari Blok


Fungsi hash menghasilkan hash SHA-256 untuk setiap blok. Fungsi ini digunakan untuk memverifikasi keaslian blok di blockchain.


F. is_chain_valid: Validasi Rantai Blockchain


is_chain_valid memastikan bahwa blockchain tidak dimodifikasi. Fungsi ini melakukan dua pemeriksaan:
  1. Memastikan previous_hash setiap blok sesuai dengan hash blok sebelumnya.
  2. Memverifikasi bahwa bukti proof-of-work setiap blok valid.

3. Endpoint API untuk Interaksi dengan Blockchain

Berikut adalah endpoint Flask untuk mengakses fungsi-fungsi blockchain melalui HTTP:

A. mine_block: Menambang Blok Baru



Endpoint ini menambang blok baru dengan mengidentifikasi previous_proof, menjalankan proof_of_work, dan membuat blok baru melalui create_block. Hasilnya dikirimkan sebagai respons JSON.

B. get_chain: Mendapatkan Rantai Blockchain


Endpoint ini mengembalikan rantai blockchain lengkap beserta panjangnya dalam format JSON.

C. is_valid: Memeriksa Validitas Blockchain


Endpoint ini memvalidasi blockchain, mengembalikan pesan apakah rantai tersebut valid atau tidak.

4. Menjalankan Aplikasi Flask

Terakhir, aplikasi Flask diaktifkan untuk berfungsi di alamat 0.0.0.0 pada port 5000:


Lalu, running kodenya di code editor


Python akan menjalankan aplikasi Flask yang berisi implementasi blockchain sederhana. Berikut adalah penjelasan dari setiap output yang muncul:

Serving Flask app 'Blockchain'
Ini menunjukkan bahwa Flask berhasil menemukan aplikasi bernama 'Blockchain'. Nama ini didasarkan pada nama file yang Anda jalankan, yaitu Blockchain.py.

Debug mode: off
Menunjukkan bahwa Flask menjalankan aplikasi dalam mode produksi dan bukan mode debug. Mode debug biasanya digunakan dalam pengembangan untuk memudahkan debugging, tetapi untuk keamanan dan performa, ini dimatikan pada aplikasi siap produksi.

WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
Ini adalah peringatan dari Flask bahwa server yang dijalankan sekarang adalah server pengembangan. Flask menyarankan untuk tidak menggunakan server ini dalam produksi karena server ini tidak cukup aman atau cepat untuk aplikasi yang melayani banyak pengguna. Untuk produksi, Anda disarankan menggunakan WSGI server seperti Gunicorn atau uWSGI.

Running on all addresses (0.0.0.0)
Output ini menunjukkan bahwa aplikasi Flask berjalan di semua alamat jaringan yang tersedia di perangkat Anda. Artinya, aplikasi dapat diakses melalui alamat IP lokal maupun IP jaringan.

Running on http://127.0.0.1:5000
Ini adalah alamat lokal yang dapat Anda gunakan untuk mengakses aplikasi dari komputer yang sama di mana server dijalankan. 127.0.0.1 adalah alamat loopback standar (localhost), dan 5000 adalah port default yang digunakan oleh Flask.

Running on http://192.168.18.54:5000
Ini adalah alamat IP jaringan lokal yang diberikan oleh router atau jaringan. Alamat ini memungkinkan Anda mengakses aplikasi dari perangkat lain yang terhubung ke jaringan yang sama, seperti komputer atau ponsel yang terhubung ke Wi-Fi.

Cara Menggunakan Aplikasi Blockchain



Mengakses Endpoint: Buka browser atau aplikasi seperti Postman, lalu akses salah satu dari alamat yang diberikan, misalnya http://127.0.0.1:5000.

Endpoint yang Tersedia:
  • /mine_block: Untuk menambang blok baru

  • /get_chain: Untuk melihat seluruh rantai blockchain.

                                           

  • /is_valid: Untuk memverifikasi apakah blockchain valid atau tidak.


Output ini menunjukkan bahwa aplikasi Flask berhasil berjalan dan siap menerima permintaan HTTP untuk berinteraksi dengan blockchain. Hal ini dapat menguji aplikasi blockchain ini dari perangkat yang sama atau dari perangkat lain di jaringan lokal, selama alamat IP yang disediakan digunakan.

Coding: Create a Smart Contract

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