Tujuan BNB Smart Chain adalah menghadirkan kemampuan program dan interoperabilitas ke BNB Beacon Chain. Untuk merangkul komunitas populer yang ada dan teknologi canggih, hal ini akan membawa manfaat besar dengan tetap kompatibel dengan semua kontrak pintar yang ada pada Ethereum dan perkakas Ethereum. Dan untuk mencapai hal tersebut, solusi termudah adalah mengembangkannya berdasarkan go-ethereum fork, karena kami sangat menghargai karya hebat Ethereum.
BNB Smart Chain memulai pengembangannya berdasarkan fork go-ethereum. Jadi Anda mungkin melihat banyak perkakas, binari, dan juga dokumen yang didasarkan pada Ethereum, seperti nama “geth”.
Namun dari dasar kompatibilitas EVM tersebut, BNB Smart Chain memperkenalkan sistem 21 validator dengan konsensus Proof of Staked Authority (PoSA) yang dapat mendukung waktu blok yang singkat dan biaya yang lebih rendah. Kandidat validator staking yang paling terikat akan menjadi validator dan menghasilkan blok. Deteksi tanda ganda dan logika pemotongan lainnya menjamin keamanan, stabilitas, dan finalitas rantai.
Rantai Cerdas BNB akan menjadi:
Detail selengkapnya ada di Buku Putih.
Meskipun Proof-of-Work (PoW) telah disetujui sebagai mekanisme praktis untuk menerapkan jaringan terdesentralisasi, hal ini tidak ramah terhadap lingkungan dan juga memerlukan peserta dalam jumlah besar untuk menjaga keamanan.
Proof-of-Authority (PoA) memberikan pertahanan terhadap 51% serangan, dengan peningkatan efisiensi dan toleransi terhadap pemain Bizantium pada level tertentu (berbahaya atau diretas). Sementara itu, protokol PoA paling banyak dikritik karena tidak terdesentralisasi seperti PoW, karena validatornya, yaitu node yang bergiliran menghasilkan blok, memiliki semua otoritas dan rentan terhadap korupsi dan serangan keamanan.
Blockchain lain, seperti EOS dan Cosmos, keduanya memperkenalkan berbagai jenis Deputy Proof of Stake (DPoS) untuk memungkinkan pemegang token memilih dan memilih set validator. Hal ini meningkatkan desentralisasi dan mendukung tata kelola masyarakat.
Untuk menggabungkan DPoS dan PoA demi konsensus, BNB Smart Chain menerapkan mesin konsensus baru yang disebut Parlia yang:
BNB akan berjalan di BNB Smart Chain dengan cara yang sama seperti ETH yang berjalan di Ethereum sehingga tetap menjadi native token
untuk BSC. Artinya, BNB akan digunakan untuk:
gas
untuk menerapkan atau menjalankan Kontrak Cerdas di BSC Banyak di bawah ini yang sama atau mirip dengan go-ethereum.
Untuk prasyarat dan instruksi pembuatan terperinci, silakan baca Petunjuk Instalasi.
Membangun geth
memerlukan kompiler Go (versi 1.21 atau lebih baru) dan C (GCC 5 atau lebih tinggi). Anda dapat menginstalnya menggunakan manajer paket favorit Anda. Setelah dependensi diinstal, jalankan
make geth
atau, untuk membangun rangkaian utilitas lengkap:
make all
Jika Anda mendapatkan kesalahan seperti itu saat menjalankan node dengan biner yang dibuat sendiri:
Caught SIGILL in blst_cgo_init, consult < blst > /bindinds/go/README.md.
silakan coba tambahkan variabel lingkungan berikut dan buat lagi:
export CGO_CFLAGS= " -O -D__BLST_PORTABLE__ "
export CGO_CFLAGS_ALLOW= " -O -D__BLST_PORTABLE__ "
Proyek bsc dilengkapi dengan beberapa wrapper/executable yang ditemukan di direktori cmd
.
Memerintah | Keterangan |
---|---|
geth | Biner klien BNB Smart Chain utama. Ini adalah titik masuk ke jaringan BSC (jaringan utama, pengujian, atau pribadi), yang mampu berjalan sebagai node penuh (default), node arsip (menyimpan semua status historis) atau node ringan (mengambil data secara langsung). Ini memiliki RPC yang sama dan lebih banyak serta antarmuka lain seperti go-ethereum dan dapat digunakan oleh proses lain sebagai gerbang ke jaringan BSC melalui titik akhir JSON RPC yang diekspos di atas transport HTTP, WebSocket dan/atau IPC. geth --help dan halaman CLI untuk opsi baris perintah. |
clef | Alat penandatanganan yang berdiri sendiri, yang dapat digunakan sebagai penandatangan backend untuk geth . |
devp2p | Utilitas untuk berinteraksi dengan node pada lapisan jaringan, tanpa menjalankan blockchain penuh. |
abigen | Generator kode sumber untuk mengonversi definisi kontrak Ethereum menjadi paket Go yang mudah digunakan dan aman untuk tipe waktu kompilasi. Ini beroperasi pada ABI kontrak Ethereum biasa dengan fungsionalitas yang diperluas jika bytecode kontrak juga tersedia. Namun, ia juga menerima file sumber Solidity, membuat pengembangan lebih efisien. Silakan lihat halaman DApps Asli kami untuk detailnya. |
bootnode | Versi sederhana dari implementasi klien Ethereum kami yang hanya mengambil bagian dalam protokol penemuan node jaringan, namun tidak menjalankan protokol aplikasi tingkat yang lebih tinggi. Ini dapat digunakan sebagai node bootstrap ringan untuk membantu menemukan rekan di jaringan pribadi. |
evm | Versi utilitas pengembang dari EVM (Ethereum Virtual Machine) yang mampu menjalankan cuplikan bytecode dalam lingkungan yang dapat dikonfigurasi dan mode eksekusi. Tujuannya adalah untuk memungkinkan proses debug opcode EVM yang terisolasi dan terperinci (misalnya evm --code 60ff60ff --debug run ). |
rlpdump | Alat utilitas pengembang untuk mengonversi dump biner RLP (Awalan Panjang Rekursif) (pengkodean data yang digunakan oleh protokol Ethereum baik jaringan maupun konsensus) menjadi representasi hierarki yang lebih ramah pengguna (misalnya rlpdump --hex CE0183FFFFFFC4C304050583616263 ). |
geth
Menelusuri semua kemungkinan tanda baris perintah berada di luar cakupan di sini (lihat halaman CLI Wiki kami), namun kami telah menyebutkan beberapa kombo parameter umum agar Anda dapat mengetahui dengan cepat cara menjalankan instance geth
Anda sendiri.
Perangkat keras harus memenuhi persyaratan tertentu untuk menjalankan node penuh di mainnet:
Persyaratan untuk testnet:
# Linux
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep geth_linux | cut -d " -f4 )
mv geth_linux geth
chmod -v u+x geth
# MacOS
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep geth_mac | cut -d " -f4 )
mv geth_macos geth
chmod -v u+x geth
//== mainnet
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep mainnet | cut -d " -f4 )
unzip mainnet.zip
//== testnet
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep testnet | cut -d " -f4 )
unzip testnet.zip
Unduh snapshot chaindata terbaru dari sini. Ikuti panduan untuk menyusun file Anda.
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0
# # It is recommend to run fullnode with `--tries-verify-mode none` if you want high performance and care little about state consistency
# # It will run with Hash-Base Storage Scheme by default
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none
# # It runs fullnode with Path-Base Storage Scheme.
# # It will enable inline state prune, keeping the latest 90000 blocks' history state by default.
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none --state.scheme path
Pantau log dari ./node/bsc.log secara default. Ketika node sudah mulai melakukan sinkronisasi, seharusnya dapat melihat output berikut:
t=2022-09-08T13:00:27+0000 lvl=info msg= " Imported new chain segment " blocks=1 txs=177 mgas=17.317 elapsed=31.131ms mgasps=556.259 number=21,153,429 hash=0x42e6b54ba7106387f0650defc62c9ace3160b427702dab7bd1c5abb83a32d8db dirty= " 0.00 B "
t=2022-09-08T13:00:29+0000 lvl=info msg= " Imported new chain segment " blocks=1 txs=251 mgas=39.638 elapsed=68.827ms mgasps=575.900 number=21,153,430 hash=0xa3397b273b31b013e43487689782f20c03f47525b4cd4107c1715af45a88796e dirty= " 0.00 B "
t=2022-09-08T13:00:33+0000 lvl=info msg= " Imported new chain segment " blocks=1 txs=197 mgas=19.364 elapsed=34.663ms mgasps=558.632 number=21,153,431 hash=0x0c7872b698f28cb5c36a8a3e1e315b1d31bda6109b15467a9735a12380e2ad14 dirty= " 0.00 B "
Jalankan konsol JavaScript interaktif bawaan geth
, (melalui subperintah console
tambahan) yang melaluinya Anda dapat berinteraksi menggunakan metode web3
(catatan: versi web3
yang disertakan dalam geth
sudah sangat lama, dan tidak mutakhir dengan dokumen resmi), serta API manajemen geth
sendiri. Alat ini bersifat opsional dan jika Anda membiarkannya, Anda selalu dapat melampirkan ke instance geth
yang sudah berjalan dengan geth attach
.
Detail selengkapnya tentang menjalankan node dan menjadi validator
Catatan: Meskipun beberapa tindakan perlindungan internal mencegah transaksi berpindah antara jaringan utama dan jaringan pengujian, Anda harus selalu menggunakan akun terpisah untuk bermain dan uang sungguhan. Kecuali Anda memindahkan akun secara manual, geth
secara default akan memisahkan kedua jaringan dengan benar dan tidak akan menyediakan akun apa pun di antara keduanya.
Sebagai alternatif untuk meneruskan banyak flag ke biner geth
, Anda juga dapat meneruskan file konfigurasi melalui:
$ geth --config /path/to/your_config.toml
Untuk mendapatkan gambaran tentang tampilan file, Anda dapat menggunakan subperintah dumpconfig
untuk mengekspor konfigurasi yang ada:
$ geth --your-favourite-flags dumpconfig
geth
secara terprogram Sebagai pengembang, cepat atau lambat Anda pasti ingin mulai berinteraksi dengan geth
dan jaringan BSC melalui program Anda sendiri dan bukan secara manual melalui konsol. Untuk membantu hal ini, geth
memiliki dukungan bawaan untuk API berbasis JSON-RPC (API standar dan API khusus geth
). Ini dapat diekspos melalui HTTP, WebSockets dan IPC (soket UNIX pada platform berbasis UNIX, dan pipa bernama pada Windows).
Antarmuka IPC diaktifkan secara default dan mengekspos semua API yang didukung oleh geth
, sedangkan antarmuka HTTP dan WS perlu diaktifkan secara manual dan hanya mengekspos sebagian API karena alasan keamanan. Ini dapat diaktifkan/dinonaktifkan dan dikonfigurasi sesuai harapan Anda.
Opsi API JSON-RPC berbasis HTTP:
--http
Aktifkan server HTTP-RPC--http.addr
Antarmuka mendengarkan server HTTP-RPC (default: localhost
)--http.port
Port mendengarkan server HTTP-RPC (default: 8545
)--http.api
API ditawarkan melalui antarmuka HTTP-RPC (default: eth,net,web3
)--http.corsdomain
Daftar domain yang dipisahkan koma untuk menerima permintaan lintas asal (diberlakukan browser)--ws
Aktifkan server WS-RPC--ws.addr
Antarmuka mendengarkan server WS-RPC (default: localhost
)--ws.port
Port mendengarkan server WS-RPC (default: 8546
)--ws.api
API ditawarkan melalui antarmuka WS-RPC (default: eth,net,web3
)--ws.origins
Asal untuk menerima permintaan WebSocket--ipcdisable
Menonaktifkan server IPC-RPC--ipcapi
API ditawarkan melalui antarmuka IPC-RPC (default: admin,debug,eth,miner,net,personal,txpool,web3
)--ipcpath
Nama file untuk soket/pipa IPC di dalam datadir (jalur eksplisit keluar darinya) Anda harus menggunakan kemampuan lingkungan pemrograman Anda sendiri (perpustakaan, alat, dll) untuk terhubung melalui HTTP, WS, atau IPC ke node geth
yang dikonfigurasi dengan tanda di atas dan Anda harus menggunakan JSON-RPC di semua transportasi. Anda dapat menggunakan kembali koneksi yang sama untuk beberapa permintaan!
Catatan: Harap pahami implikasi keamanan dari membuka transportasi berbasis HTTP/WS sebelum melakukannya! Peretas di internet secara aktif mencoba menumbangkan node BSC dengan API yang terbuka! Lebih jauh lagi, semua tab browser dapat mengakses server web yang berjalan secara lokal, sehingga halaman web yang berbahaya dapat mencoba menumbangkan API yang tersedia secara lokal!
Bootnode adalah node super ringan yang tidak berada di belakang NAT dan hanya menjalankan protokol penemuan. Saat Anda memulai sebuah node, ia harus mencatat enode Anda, yang merupakan pengidentifikasi publik yang dapat digunakan orang lain untuk terhubung ke node Anda.
Pertama, bootnode memerlukan kunci, yang dapat dibuat dengan perintah berikut, yang akan menyimpan kunci ke boot.key:
bootnode -genkey boot.key
Kunci ini kemudian dapat digunakan untuk menghasilkan bootnode sebagai berikut:
bootnode -nodekey boot.key -addr :30311 -network bsc
Pilihan port yang diteruskan ke -addr bersifat sewenang-wenang. Perintah bootnode mengembalikan log berikut ke terminal, mengonfirmasi bahwa terminal sedang berjalan:
enode://3063d1c9e1b824cfbb7c7b6abafa34faec6bb4e7e06941d218d760acdd7963b274278c5c3e63914bd6d1b58504c59ec5522c56f883baceb8538674b92da48a96@127.0.0.1:0?discport=30311
Note: you're using cmd/bootnode, a developer tool.
We recommend using a regular node as bootstrap node for production deployments.
INFO [08-21|11:11:30.687] New local node record seq=1,692,616,290,684 id=2c9af1742f8f85ce ip= udp=0 tcp=0
INFO [08-21|12:11:30.753] New local node record seq=1,692,616,290,685 id=2c9af1742f8f85ce ip=54.217.128.118 udp=30311 tcp=0
INFO [09-01|02:46:26.234] New local node record seq=1,692,616,290,686 id=2c9af1742f8f85ce ip=34.250.32.100 udp=30311 tcp=0
Terima kasih telah mempertimbangkan untuk membantu dengan kode sumber! Kami menyambut kontribusi dari siapa pun di internet, dan berterima kasih atas perbaikan terkecil sekalipun!
Jika Anda ingin berkontribusi pada bsc, silakan fork, perbaiki, komit, dan kirim permintaan tarik agar pengelola dapat meninjau dan menggabungkannya ke dalam basis kode utama. Jika Anda ingin mengirimkan perubahan yang lebih kompleks, silakan hubungi pengembang inti terlebih dahulu di saluran perselisihan kami untuk memastikan perubahan tersebut sejalan dengan filosofi umum proyek dan/atau dapatkan masukan awal yang dapat sangat membantu upaya Anda. lebih ringan serta prosedur peninjauan dan penggabungan kami cepat dan sederhana.
Harap pastikan kontribusi Anda mematuhi pedoman pengkodean kami:
master
.Silakan lihat Panduan Pengembang untuk detail lebih lanjut tentang konfigurasi lingkungan Anda, pengelolaan dependensi proyek, dan prosedur pengujian.
Pustaka bsc (yaitu semua kode di luar direktori cmd
) dilisensikan di bawah GNU Lesser General Public License v3.0, juga disertakan dalam repositori kami dalam file COPYING.LESSER
.
Biner bsc (yaitu semua kode di dalam direktori cmd
) dilisensikan di bawah GNU General Public License v3.0, juga disertakan dalam repositori kami dalam file COPYING
.