Apa yang harus kita bangun dari blockchain?

Seluruh sejarah umat manusia adalah proses berkelanjutan untuk menghilangkan rantai dan menciptakan rantai baru yang bahkan lebih kuat. (Penulis anonim)

Menganalisis berbagai proyek blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, dll.), Saya memahami bahwa dari sudut pandang teknis, semuanya dibangun berdasarkan prinsip yang sama. Blockchain mengingatkan kita pada rumah, yang, meskipun desain, dekorasi, dan tujuannya beragam, memiliki fondasi, dinding, atap, jendela, pintu yang terhubung satu sama lain dengan cara tertentu. Dan jika Anda memahami prinsip dasar desain bangunan dan mengetahui sifat-sifat bahan yang digunakan, maka Anda dapat menentukan tujuan dari sebuah rumah tertentu. Saat ini, situasi telah muncul dengan blockchain yang semua orang telah mendengarnya, namun hanya sedikit orang yang memahami arsitektur dan prinsip operasinya. Oleh karena itu, terdapat kesalahpahaman tentang alasan dan cara menggunakan teknologi blockchain.

Pada artikel ini kami akan menganalisis properti dan prinsip umum pada semua blockchain. Selanjutnya, mari kita lihat masalah-masalah yang dapat diselesaikan dengan menggunakan blockchain dan untuk memperkuat materi, mari kita membangun sebuah blockchain kecil namun nyata di situs virtual kita!

Jadi, mari kita ingat masalah apa yang awalnya dipecahkan oleh blockchain.

Saya yakin banyak yang akan mengatakan tentang database yang terdistribusi, terdesentralisasi, publik, dan tidak dapat diubah. Namun mengapa semua ini perlu?

Saya lebih suka mulai mempelajari teknologi apa pun dengan membaca standarnya, karena semua artikel dan buku tentang topik yang dipelajari didasarkan pada standar tersebut. Namun saat ini tidak ada standar blockchain; ISO hanya dibuat komite untuk perkembangan mereka. Saat ini, setiap proyek blockchain publik memiliki dokumen Whitepapernya sendiri, yang pada dasarnya merupakan spesifikasi teknis. Proyek blockchain pertama yang diketahui publik adalah jaringan Bitcoin. Kunjungi situs web resmi jaringan dan kami melihat di mana semuanya dimulai.

Tantangan Blockchain

Jadi, tugas yang diselesaikan blockchain di jaringan pionir Bitcoin adalah melakukan transfer kepemilikan aset digital (aset) yang tepercaya di lingkungan yang tidak tepercaya tanpa perantara. Misalnya, dalam jaringan Bitcoin, aset digitalnya adalah koin digital bitcoin. Dan semua solusi teknis Bitcoin dan blockchain lainnya bertujuan untuk memecahkan masalah ini.

Masalah yang dipecahkan oleh blockchain

Misalkan sebuah organisasi keuangan tertentu mengatakan bahwa mereka telah membangun jaringan di seluruh dunia yang memungkinkan untuk mentransfer uang ke siapa pun. Maukah kamu percaya padanya? Jika organisasi ini adalah Visa atau MasterCard, kemungkinan besar Anda akan mempercayainya, tetapi jika, secara relatif, AnonymousWorldMoney, Anda mungkin tidak akan mempercayainya. Mengapa? Tapi karena kita tahu betul bagaimana sistem terdistribusi dibuat oleh perusahaan swasta, untuk tujuan apa, dan apa dampaknya. Mari kita lihat lebih dekat masalah-masalah sistem tersebut dan bagaimana masalah tersebut dapat diselesaikan dengan menggunakan teknologi blockchain.

Katakanlah dalam AnonymousWorldMoney bersyarat ada server dengan database, dan ada baiknya jika ada beberapa server di pusat data yang berbeda. Ketika pengirim mentransfer uang, transaksi dicatat, yang direplikasi ke semua server, dan uang sampai ke penerima.

Apa yang harus kita bangun dari blockchain?

Dalam dunia yang ideal, skema ini berhasil dengan baik, namun di dunia kita muncul masalah-masalah berikut:

  1. Masalah identifikasi peserta di satu sisi dan kebutuhan akan anonimitas transaksi di sisi lain. Itu. Anda perlu mentransfer uang ke penerima tertentu dan sedemikian rupa sehingga tidak ada yang tahu tentang transaksi ini kecuali peserta transaksi. Bank memiliki nomor rekening dan kartu bank yang terhubung dengan individu atau badan hukum tertentu, dan kerahasiaan bank melindungi informasi transaksi. Dan siapa yang menjamin bahwa AnonymousWorldMoney bersyarat tidak menggunakan data pribadi dan informasi transaksi untuk tujuannya sendiri?
  2. Bagaimana cara memastikan bahwa penerima menerima persis jumlah yang ditransfer kepadanya? Secara relatif, pengirim mentransfer $100, dan penerima menerima $10. Pengirim datang ke kantor AnonymousWorldMoney dengan tanda terimanya, dan petugas menunjukkan versinya, yang tertulis bahwa pengirim hanya mentransfer $10.
  3. Masalah lingkungan yang tidak terpercaya, misalnya penipuan yang disebut pembelanjaan ganda. Oknum peserta dapat menghabiskan saldonya beberapa kali hingga pembayaran direplikasi ke semua server. teorema CAP, tentu saja, tidak ada yang membatalkan, dan kesepakatan pada akhirnya akan tercapai, tetapi seseorang tidak akan menerima uang untuk jasa atau barang yang diberikan. Oleh karena itu, jika tidak ada kepercayaan penuh terhadap organisasi pembayaran atau peserta transaksi, maka perlu dibangun jaringan bukan berdasarkan kepercayaan, tetapi berdasarkan kriptografi.
  4. AnonymousWorldMoney Bersyarat memiliki sejumlah server terbatas yang mungkin tidak tersedia secara tidak sengaja atau karena niat jahat.
  5. AnonymousWorldMoney akan mengambil komisi nyatanya sendiri.
  6. Kemungkinan kontrol. Selama pengoperasian Bitcoin, ternyata orang tidak hanya ingin mentransfer koin satu sama lain, tetapi juga memeriksa berbagai kondisi transaksi, skenario kerja program, melakukan tindakan secara otomatis tergantung kondisi, dll.

Bagaimana blockchain mengatasi masalah ini

  1. Identifikasi peserta dilakukan dengan menggunakan sepasang kunci: pribadi dan publik, dan algoritma tanda tangan digital secara unik mengidentifikasi pengirim dan penerima, sehingga identitas mereka tetap anonim.
  2. Transaksi dikumpulkan ke dalam blok, hash dari blok tersebut dihitung dan ditulis ke dalam blok berikutnya. Urutan pencatatan hash dalam blok ini memberi nama pada teknologi blockchain, dan juga membuat perubahan/penghapusan blok atau transaksi individu dari blok menjadi tidak mungkin tanpa disadari. Jadi, jika suatu transaksi dimasukkan ke dalam blockchain, Anda dapat yakin bahwa datanya tidak akan berubah.
  3. Penipuan pembelanjaan ganda dapat dicegah dengan mencapai konsensus jaringan mengenai data mana yang dianggap valid dan data mana yang dibuang. Di jaringan Bitcoin, konsensus dicapai melalui bukti kerja (PoW).
  4. Keandalan jaringan dicapai dengan fakta bahwa blockchain bersifat publik, di mana setiap peserta dapat menjalankan node mereka sendiri, menerima salinan lengkap dari blockchain dan, terlebih lagi, secara mandiri mulai memeriksa kebenaran transaksi. Perlu dicatat bahwa blockchain modern memungkinkan untuk membangun tidak hanya blockchain publik (terbuka) tetapi juga swasta (tertutup), serta penggunaan skema gabungan.
  5. Blockchain tidak akan sepenuhnya menghilangkan komisi, karena... Anda harus membayar orang-orang yang mendukung jaringan tersebut, tetapi dalam blockchain kebutuhan akan komisi terbukti dengan sangat meyakinkan sehingga tidak ada keraguan tentang kebutuhannya.
  6. Blockchain modern memiliki kemampuan untuk mengimplementasikan logika bisnis, yang dalam blockchain disebut Smart Contracts. Logika kontrak pintar diimplementasikan dalam berbagai bahasa tingkat tinggi.

Selanjutnya, kami akan mempertimbangkan solusi ini secara lebih rinci.

Arsitektur blockchain

Komponen Blockchain

Setiap peserta dapat meluncurkan node mereka sendiri dengan salinan lengkap dari blockchain (full node). Node penuh yang dapat mencatat transaksi di blockchain disebut simpul konsensus (saksi) atau penambang (penambang). Node penuh yang hanya memeriksa kebenaran transaksi disebut node audit (audit). Klien ringan (klien ringan) tidak menyimpan salinan lengkap dari blockchain, tetapi berinteraksi dengan jaringan menggunakan node penuh.
Sebagian besar pengguna menggunakan klien ringan atau dompet web untuk melakukan transaksi. Semua node terhubung satu sama lain. Dengan kumpulan elemen ini, arsitektur jaringan menjadi lebih stabil:

Apa yang harus kita bangun dari blockchain?

Siklus hidup transaksi

Mari kita lihat siklus hidup transaksi dan uraikan satu demi satu:

Apa yang harus kita bangun dari blockchain?

Teknologi Blockchain

Mari kita membahas lebih detail tentang solusi teknis dan hubungannya satu sama lain.

Identifikasi

Setiap transaksi blockchain harus ditandatangani secara digital. Oleh karena itu, untuk menyelesaikan suatu transaksi, setiap peserta harus memiliki pasangan kunci: privat/publik. Terkadang sepasang kunci disebut dompet karena kuncinya dikaitkan secara unik dengan alamat dan saldo digital unik peserta. Pada kenyataannya, kunci dan alamat hanyalah rangkaian angka dalam sistem bilangan yang berbeda. Contoh kunci dan alamat dompet:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Untuk membuat tanda tangan digital di blockchain, algoritma berdasarkan kurva elips digunakan: Elliptic Curve Digital Signature Algorithm (ECDSA). Agar dapat berfungsi, kunci privat (angka 256-bit) biasanya diambil secara acak. Jumlah opsi kunci adalah 2 pangkat 256, sehingga kita dapat berbicara tentang ketidakmungkinan praktis untuk mencocokkan nilai kunci pribadi.

Selanjutnya kunci publik diperoleh dari kunci privat dengan cara mengalikan nilainya dengan koordinat suatu titik yang terletak pada kurva elips, sehingga menghasilkan koordinat titik baru pada kurva yang sama. Tindakan ini memastikan Anda mendapatkan pasangan kunci yang cocok untuk menandatangani transaksi secara digital. Terakhir, alamat dompet secara unik berasal dari kunci publik.

Ada banyak sekali artikel yang menjelaskan secara detail tentang kriptografi yang digunakan dalam blockchain, misalnya: Singkatnya Bitcoin – Kriptografi

Kunci pribadi harus benar-benar dirahasiakan dan dijaga keamanannya. Kunci publik diketahui semua orang. Jika kunci pribadi hilang, akses terhadap aset (koin) tidak dapat dipulihkan dan uang akan hilang selamanya. Oleh karena itu, tugas menyimpan kunci pribadi dengan aman sangatlah relevan, karena Ini bukan bank tempat Anda selalu bisa datang dengan membawa paspor dan memulihkan akun Anda. Ada seluruh industri yang memproduksi apa yang disebut dompet kripto dingin, mirip dengan flash drive:

Apa yang harus kita bangun dari blockchain?

atau Anda dapat menggunakan metode yang lebih andal, misalnya, memberi cap pada nilai kunci pribadi pada token:

Apa yang harus kita bangun dari blockchain?

Transaksi

Detail lebih lanjut tentang struktur transaksi dapat ditemukan di artikel Singkatnya Bitcoin – Transaksi. Penting untuk kita pahami bahwa setiap transaksi setidaknya memiliki data sebagai berikut:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ адрСс отправитСля
To: 0x367adb7894334678b90Π°fe7882a5b06f7fbc783a - Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ адрСс получатСля
Value: 0.0001 - сумма Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - Ρ…ΡΡˆ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Selanjutnya, transaksi ditandatangani dengan kunci pribadi dan dikirim (lihat detail pengoperasian protokol Bitcoin singkatnya-Protokol) ke semua node di blockchain yang memeriksa validitas transaksi. Algoritme verifikasi transaksi tidak sepele dan mencakup dua lusin langkah.

Blok transaksi

Setelah memeriksa validitas transaksi, node membentuk blok darinya. Selain transaksi, hash dari blok sebelumnya dan nomor (Nonce counter) ditulis ke dalam blok, dan hash dari blok saat ini dihitung menggunakan algoritma SHA-256. Hash harus memiliki kondisi kompleksitas yang ditetapkan. Misalnya, dalam jaringan Bitcoin, tingkat kesulitan hash secara otomatis diubah setiap 2 minggu tergantung pada kekuatan jaringan sehingga blok dihasilkan kira-kira setiap 10 menit sekali. Kompleksitasnya ditentukan oleh kondisi berikut: hash yang ditemukan harus kurang dari angka yang telah ditentukan. Jika kondisi ini tidak terpenuhi, maka 1 ditambahkan ke Nonce, dan pekerjaan menghitung hash diulangi. Untuk memilih hash, bidang Nonce digunakan, karena Ini adalah satu-satunya data di blok yang dapat diubah; sisanya tidak boleh diubah. Hash yang valid harus memiliki sejumlah angka nol di depan, seperti salah satu hash sebenarnya:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Berhasil menemukan hash adalah bukti pekerjaan yang dilakukan (Proof-of-Work, PoW) untuk jaringan Bitcoin atau Ethereum. Proses menemukan hash disebut penambangan, mirip dengan penambangan emas. Nama tersebut cukup akurat mendefinisikan esensi proses, karena ada pencarian opsi yang sederhana, dan jika seseorang menemukan hash yang cocok, maka ini benar-benar keberuntungan. Ini seperti menemukan bongkahan emas asli di berton-ton batuan sisa. Hadiah bloknya sekarang adalah 12.5 BTC dan jika Anda mengalikannya dengan nilai Bitcoin saat ini sebesar $3900, Anda mendapatkan lebih dari satu kilogram emas murni. Ada sesuatu yang harus diperjuangkan!

Setelah berhasil menemukan hash, blok dan hash yang ditemukan itu sendiri ditulis ke blockchain sebagai blok berikutnya. Rincian lebih lanjut tentang struktur balok dapat ditemukan di artikel Singkatnya, Bitcoin-Blockchain, dan di bawah ini adalah diagram yang disederhanakan:

Apa yang harus kita bangun dari blockchain?

Blockchain dimulai dengan blok yang belum memiliki hash dari blok sebelumnya. Hanya ada satu blok seperti itu di blockchain dan memiliki nama blok Genesis sendiri. Blok lainnya memiliki struktur yang sama dan hanya berbeda dalam jumlah transaksi. Transaksi dan blok nyata yang saat ini dibuat dalam Bitcoin atau Ethereum dapat dilihat Blokir Explorer.

Ukuran blok dalam Bitcoin dibatasi hingga 1MB dan dengan jumlah minimum informasi dalam satu transaksi sekitar 200 byte, jumlah maksimum transaksi dalam satu blok bisa sekitar 6000. Dari sini, berikut kinerja Bitcoin, yang ditertawakan semua orang: satu blok dihasilkan kira-kira sekali setiap 10 menit * 60 detik = 600 detik, yang memberikan kinerja formal sekitar 10 TPS. Meski sebenarnya ini bukan produktivitas, melainkan algoritma kerja yang sengaja diterapkan. Di Ethereum, untuk kompetisi, mereka hanya membuat waktu pembuatan blok menjadi 15 detik. dan produktivitas secara resmi melonjak. Oleh karena itu, dalam blockchain yang menggunakan PoW sebagai konsensus, tidak masuk akal untuk membandingkan kinerja sama sekali, karena ini secara langsung bergantung pada kompleksitas penghitungan cache, yang dapat ditetapkan ke nilai apa pun.

Garpu

Apa yang terjadi jika, misalnya, beberapa node menemukan hash yang memenuhi kondisi kompleksitas, namun nilainya berbeda (dengan kata lain, mereka mencapai konsensus yang berbeda) dan menulis blok ke blockchain? Mari kita lihat bagaimana blockchain melindungi dari situasi ini. Dalam hal ini, apa yang disebut fork terjadi, dan blockchain memiliki dua versi rantai:

Apa yang harus kita bangun dari blockchain?

Apa yang terjadi selanjutnya? Selanjutnya, sebagian jaringan mulai bekerja pada blok N+2 dari satu rantai, dan sebagian lagi dari rantai lainnya:

Apa yang harus kita bangun dari blockchain?

Salah satu blok ini akan ditemukan lebih awal dan dikirim ke blockchain, dan kemudian, menurut aturan, blockchain harus beralih ke rantai yang lebih panjang dan membatalkan semua transaksi dari blok alternatif:

Apa yang harus kita bangun dari blockchain?

Pada saat yang sama, situasi mungkin muncul ketika transaksi peserta hanya berada di salah satu blok fork, yang dibatalkan. Oleh karena itu, untuk memastikan bahwa transaksi yang diinginkan dicatat dalam blockchain, ada rekomendasi umum - sebelum mempercayai transaksi tersebut, Anda harus menunggu hingga beberapa blok berikutnya ditambahkan ke blockchain. Rekomendasi berapa banyak blok yang harus menunggu untuk berbagai blockchain berbeda-beda. Misalnya untuk jaringan Bitcoin minimal 2 blok, maksimal 6.

Gambaran yang sama dengan fork blok akan diamati selama apa yang disebut serangan 51% - ini adalah ketika sekelompok penambang mencoba mengembangkan rantai blok alternatif, berusaha untuk membatalkan rantai tersebut dengan transaksi penipuan mereka. Meskipun saat ini, daripada melakukan penipuan, lebih menguntungkan menghabiskan kekuatan Anda untuk penambangan yang jujur.

Konsensus

Untuk mencatat blok di blockchain, jaringan harus mencapai konsensus. Mari kita ingat tugas mencapai konsensus dalam jaringan komunikasi komputer. Masalah tersebut dirumuskan sebagai tugas para jenderal Bizantium BFT (Toleransi kesalahan Bizantium). Dengan menghilangkan gambaran yang jelas tentang masalah tentara Bizantium, masalahnya dapat dirumuskan sebagai berikut: bagaimana node jaringan dapat mencapai hasil yang sama jika beberapa node jaringan dengan sengaja mendistorsinya. Algoritma yang ada untuk menyelesaikan masalah BFT menunjukkan bahwa jaringan dapat berfungsi dengan baik jika jumlah penipu kurang dari 1/3. Mengapa konsensus BFT belum diterapkan pada jaringan Bitcoin? Mengapa perlu menggunakan PoW? Ada beberapa alasan:

  • BFT bekerja dengan baik dengan sekumpulan kecil node yang tetap, namun dalam blockchain publik, jumlah node tidak dapat diprediksi dan, terlebih lagi, node dapat diaktifkan dan dinonaktifkan secara acak.
  • Penting untuk memotivasi orang untuk meluncurkan node blockchain. Untuk melakukan hal ini, masyarakat harus diberi penghargaan. Di BFT secara formal tidak ada imbalan yang dapat diterima, tetapi tujuan imbalan di PoW jelas bagi semua orang pada tingkat intuitif: untuk listrik yang dikonsumsi oleh prosesor dalam proses menemukan hash blok.

Selain PoW, ada beberapa konsensus lain yang digunakan dalam blockchain modern, misalnya:

  • PoS (Proof-of-Stake) - di blockchain Hyperledger
  • DPoS (Proof-of-Stake yang Didelegasikan) - di blockchain BitShares
  • Modifikasi BFT: SBFT (BFT Sederhana) dan PBFT (BFT Praktis), misalnya di blockchain Eksonum

Mari kita membahas sedikit tentang konsensus PoS, karena... Ini adalah PoS dan variasinya yang paling banyak tersebar di blockchain swasta. Mengapa secara pribadi? Di satu sisi, karakteristik PoS lebih baik dibandingkan PoW, karena Untuk mencapai konsensus, sumber daya komputasi yang dibutuhkan lebih sedikit, yang berarti kecepatan penulisan data ke blockchain meningkat. Namun di sisi lain, PoS memiliki peluang lebih besar untuk melakukan penipuan, sehingga untuk menetralisirnya, semua partisipan di dalam blockchain harus diketahui.

Konsensus PoS didasarkan pada pemilihan node yang dapat menulis blok dengan transaksi ke blockchain tergantung pada jumlah dana di akun, atau lebih tepatnya, bukan di akun, tetapi di agunan, mis. Semakin banyak dana yang Anda miliki sebagai jaminan, semakin besar kemungkinan jaringan akan memilih node Anda untuk menulis blok. Deposit tidak akan dikembalikan jika blok tidak valid. Ini memberikan perlindungan terhadap penipuan. Ada variasi PoS berikut:

  • Konsensus PoS yang Didelegasikan (DPoS) membagi peserta menjadi β€œpemilih” dan β€œvalidator”. Pemegang koin (peserta pemungutan suara) mendelegasikan kekuasaannya untuk memverifikasi dan mencatat transaksi di blockchain kepada peserta lain. Dengan demikian, validator melakukan seluruh pekerjaan komputasi dan mendapat imbalan atas hal tersebut, dan kehadiran peserta voting menjamin kejujuran validator, karena mereka dapat diubah kapan saja.
  • Konsensus LPoS (Leased Proof-of-Stake) memungkinkan Anda untuk menyewakan dana Anda ke node lain sehingga mereka memiliki peluang lebih baik untuk memvalidasi blok. Itu. Anda dapat menerima komisi untuk transaksi tanpa berpartisipasi dalam verifikasi transaksi sebenarnya dan memblokir penambangan.

Ada beberapa konsensus lain yang belum banyak digunakan, saya akan mencantumkannya di sini saja untuk informasinya, dan gambaran umum tentang algoritma konsensus itu sendiri dapat ditemukan, misalnya di artikel: Algoritma Konsensus di Blockchain.

  • Penyair (Bukti Waktu yang Telah Berlalu)
  • PoC (Bukti Kapasitas)
  • PoB (Bukti Terbakar)
  • PoWeight (Bukti Berat)
  • PoA (Bukti Aktivitas) – PoW + PoS
  • PoI (Bukti Penting)

Model keandalan dan penerapan blockchain

Blockchain publik

Stabilitas Publik atau nama lain Blockchain tanpa izin Hal ini dicapai dengan memungkinkan siapa saja untuk terhubung dan melihat informasi atau bahkan menghubungkan node mereka sendiri, dan kepercayaan dibangun berdasarkan konsensus PoW.

Blockchain pribadi

Swasta ΠΈΠ»ΠΈ Blockchain yang Diizinkan Pribadi. Dalam blockchain ini, hanya sekelompok peserta tertentu (organisasi atau orang) yang memiliki akses terhadap informasi. Blockchain semacam itu dibangun oleh organisasi dengan tujuan meningkatkan manfaat atau efisiensi secara keseluruhan. Keandalannya dijamin oleh tujuan bersama para peserta dan algoritma konsensus PoS dan BFT.

Konsorsium Blockchain

Sana Konsorsium ΠΈΠ»ΠΈ Blockchain yang Diizinkan Publik. Ini adalah blockchain yang dapat disambungkan oleh siapa saja untuk dilihat, namun peserta dapat menambahkan informasi atau menghubungkan nodenya hanya dengan izin dari peserta lain. Blockchain semacam itu dibangun oleh organisasi untuk meningkatkan kepercayaan pelanggan atau konsumen produk atau masyarakat secara keseluruhan. Di sini, keandalan juga dicapai dengan adanya kepercayaan antar peserta dan algoritma konsensus PoS dan BFT yang sama.

Kontrak Cerdas

Blockchain yang diterapkan setelah Bitcoin, pada tingkat tertentu, telah menambahkan kemampuan untuk mengeksekusi kontrak pintar. Pada dasarnya, kontrak pintar adalah transaksi di mana kode program ditempatkan untuk dieksekusi. Kontrak pintar di jaringan Ethereum dijalankan di EVM (Ethereum Virtual Machine). Untuk mulai mengeksekusi kontrak pintar, kontrak tersebut harus diluncurkan secara eksplisit oleh transaksi lain, atau prasyarat eksekusi harus dipenuhi. Hasil eksekusi kontrak pintar juga akan dicatat di blockchain. Menerima data dari luar blockchain dimungkinkan, tetapi sangat terbatas.

Logika bisnis apa yang dapat diimplementasikan menggunakan kontrak pintar? Sebenarnya tidak banyak, misalnya memeriksa kondisi menggunakan data dari blockchain, mengubah pemilik aset digital tergantung pada kondisi tersebut, mencatat data dalam penyimpanan permanen di dalam blockchain. Logikanya diimplementasikan dalam Soliditas bahasa tingkat tinggi khusus.

Contoh klasik fungsionalitas yang diimplementasikan menggunakan kontrak pintar adalah penerbitan token untuk ICO. Misalnya, saya menerapkan kontrak pintar untuk mengeluarkan 500 AlexToken. Oleh tautan di Etherscan adalah

kode sumber kontrak pintar dalam bahasa Soliditas

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

dan representasi biner seperti yang dilihat jaringan

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Detail lebih lanjut tentang kontrak pintar dapat ditemukan di artikel: Apa itu kontrak pintar di Ethereum.

Kesimpulan

Kami telah membuat daftar teknologi yang menjadi dasar pembuatan blockchain modern dan bagaimana mereka terhubung satu sama lain. Sekarang mari kita rumuskan masalah mana yang dapat diselesaikan dengan menggunakan blockchain, dan solusi mana yang paling banter tidak efektif. Jadi, penggunaan blockchain tidak diperlukan jika:

  • Transaksi dilakukan di lingkungan yang terpercaya;
  • Kehadiran komisi perantara tidak memperburuk kehidupan peserta;
  • Peserta tidak memiliki properti yang dapat direpresentasikan sebagai aset digital;
  • Tidak ada distribusi aset digital, mis. nilai tersebut dimiliki atau dipasok hanya oleh satu peserta.

Bagaimana masa depan blockchain? Sekarang kita hanya bisa berspekulasi tentang kemungkinan cara pengembangan teknologi blockchain:

  • Blockchain akan menjadi teknologi database umum yang sama seperti, misalnya, SQL atau NoSQL untuk memecahkan berbagai masalah spesifiknya;
  • Blockchain akan menjadi protokol yang tersebar luas, seperti HTTP untuk Internet;
  • Blockchain akan menjadi dasar bagi sistem keuangan dan politik baru di planet ini!

Pada bagian selanjutnya kita akan melihat apa saja blockchain yang ada saat ini dan mengapa mereka digunakan di berbagai industri.

Ini baru permulaan!

Sumber: www.habr.com

Tambah komentar