Lab ini dikembangkan dengan partner kami, Block.one. Informasi Anda mungkin akan dibagikan kepada Block.one, yang merupakan sponsor lab ini, jika Anda memilih untuk menerima info terbaru terkait produk, pengumuman, dan penawaran di Profil Akun Anda.
GSP991
Ringkasan
Dalam lab ini, Anda akan memperluas blockchain EOSIO satu node untuk menggunakan beberapa node. Anda akan menginstal berbagai komponen software EOSIO untuk menyiapkan blockchain EOSIO multi-node. Terakhir, Anda akan melakukan beberapa tugas operator node di blockchain EOSIO baru.
Tujuan
Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:
- Memuat virtual machine Compute Engine yang ada.
- Menginstal dan membangun kontrak sistem EOSIO.
- Men-deploy blockchain multi-node dengan empat (4) node EOSIO.
- Membuat akun pengguna di blockchain multi-node EOSIO.
- Memanggil tindakan untuk mentransfer token antar-akun pengguna.
Prasyarat
Sebelum memulai lab ini, sebaiknya Anda menyelesaikan lab yang berjudul Block.one: Mulai Menggunakan Blockchain EOSIO.
Sebaiknya Anda juga memahami konsep berikut:
Penyiapan dan persyaratan
Sebelum mengklik tombol Start Lab
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Untuk menyelesaikan lab ini, Anda memerlukan:
- Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran (direkomendasikan) atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
- Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.
Cara memulai lab dan login ke Konsol Google Cloud
-
Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran.
Di sebelah kanan terdapat panel Lab setup and access yang berisi hal-hal berikut:
- Tombol Open Google Cloud console
- Kredensial sementara (nama pengguna dan sandi) yang harus Anda gunakan untuk lab ini
- Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
Perhatikan bahwa timer lab terletak di dekat bagian atas halaman, yang menampilkan waktu yang tersisa.
-
Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).
Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.
Tips: Atur tab di jendela terpisah secara berdampingan.
Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
-
Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.
{{{user_0.username | "Username"}}}
Anda juga dapat menemukan Username di panel Lab setup and access.
-
Klik Next.
-
Salin Password di bawah dan tempel ke dialog Welcome.
{{{user_0.password | "Password"}}}
Anda juga dapat menemukan Password di panel Lab setup and access.
-
Klik Next.
Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda.
Catatan: Penggunaan akun Google Cloud sendiri untuk lab ini mungkin dikenai biaya tambahan.
-
Klik untuk melanjutkan ke halaman berikutnya:
- Setujui persyaratan dan ketentuan.
- Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
- Jangan daftar uji coba gratis.
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Catatan: Untuk mengakses produk dan layanan Google Cloud, klik Navigation menu atau ketik nama layanan atau produk di kolom Search.
Latar belakang
Bagian ini memberikan ringkasan konsep yang dibahas dalam lab ini.
Blockchain EOSIO
Blockchain EOSIO adalah mesin status terdistribusi yang sangat efisien dan deterministik yang dapat beroperasi secara terdesentralisasi. Blockchain melacak transaksi dalam urutan blok yang dipertukarkan. Setiap blok secara kriptografis berkomitmen pada blok sebelumnya di sepanjang rantai yang sama. Oleh karena itu, transaksi yang dicatat pada blok tertentu tidak dapat diubah tanpa merusak pemeriksaan kriptografi blok berikutnya. Fakta sederhana ini membuat transaksi blockchain tidak dapat diubah dan aman. Produksi blok dan validasi blok dilakukan oleh node khusus yang disebut Produsen Blok.
Konsensus EOSIO
Validasi blok menimbulkan tantangan di antara grup node terdistribusi mana pun. Model konsensus harus diterapkan untuk memvalidasi blok tersebut dengan cara yang fault-tolerant dalam sistem terdesentralisasi. Konsensus adalah cara bagi node dan pengguna terdistribusi tersebut untuk menyetujui status blockchain saat ini. Dua model konsensus yang paling umum digunakan dalam blockchain adalah Proof of Work (PoW) dan Proof of Stake (PoS). Dalam Proof of Stake, node yang memiliki kepemilikan atau persentase aset terbesar memiliki kekuatan pengambilan keputusan yang setara. Salah satu varian yang menarik adalah Delegated Proof-of-Stake (DPoS) yang memungkinkan sejumlah besar peserta atau pemangku kepentingan memilih sejumlah kecil delegasi, yang pada gilirannya membuat keputusan untuk mereka. EOSIO menggunakan Delegated Proof of Stake (DPoS) untuk memilih produsen aktif yang kemudian akan diberi otorisasi untuk membuat blok, memvalidasinya, dan menandatanganinya agar akhirnya ditambahkan ke blockchain.
Akun, kunci, dan izin EOSIO
Akun mengidentifikasi peserta dalam blockchain EOSIO. Peserta dapat berupa individu atau grup, bergantung pada izin yang ditetapkan dalam akun. Akun juga merepresentasikan pelaku smart contract yang mengirim dan menerima tindakan ke dan dari akun lain di blockchain. Kunci di EOSIO adalah string biner yang ditampilkan dalam Base58 yang digunakan untuk menandatangani dan memverifikasi transaksi, blok, dan pesan lainnya. Kunci dibuat dalam dompet digital yang terkait dengan akun. Karena kepemilikan akun hanya ditentukan oleh nama akun, kunci yang terkait dengan akun dapat diperbarui tanpa mengorbankan keamanan. Skema izin baru yang melibatkan akun, izin, dan tabel otoritas menentukan tindakan yang dapat dilakukan akun dan cara otorisasi tindakan yang membuat transaksi. Untuk itu, setiap akun diberi struktur izin hierarkis dan setiap izin diberi pasangan kunci publik dan pribadi yang digunakan untuk penandatanganan dan verifikasi.
Smart contract EOSIO
Smart contract adalah library software tingkat rendah yang berisi penerapan tindakan yang membuat transaksi. Selain itu, tindakan ini juga menentukan cara penyimpanan data yang diakses dan diproses oleh tindakan. Di EOSIO, smart contract diimplementasikan dalam bahasa tingkat tinggi seperti C++ dan dikompilasi menjadi program biner WebAssembly (WASM). Setelah itu, smart contract dapat di-deploy dan dijalankan dalam sandbox akun di blockchain.
Tugas 1. Membuat virtual machine
-
Pada Navigation menu (
), klik Compute Engine > VM instances.
-
Untuk membuat instance baru, klik Create Instance.
-
Di Machine configuration.
Pilih nilai berikut:
-
Name:
instance-1
-
Region:
-
Zone:
-
Machine Family -
General Purpose (default)
-
Series -
E2
-
Machine Type -
e2-standard-2 (2 vCPU, 8 GB memory)
-
Klik OS and storage.
Klik Change untuk mulai mengonfigurasi boot disk dan pilih nilai berikut:
-
Operating system:
Ubuntu
-
Version:
Ubuntu 22.04 LTS
-
Architecture:
x86/64
Klik Select.
-
Untuk membuat dan meluncurkan VM, klik Create.
Catatan: Perlu waktu sekitar dua menit untuk meluncurkan dan membuat VM sepenuhnya tersedia untuk digunakan.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat virtual machine
Tugas 2. Menginstal platform EOSIO
- Pada Navigation menu (
), klik Compute Engine > Instance VM.
Anda akan melihat instance VM yang Anda buat.
-
Untuk membuka command prompt di instance instance-1 VM, klik SSH di barisnya pada daftar VM instances. Tindakan ini akan membuka jendela terminal shell.
-
Pertama, pastikan untuk memperbarui daftar paket software di kotak VM Anda:
sudo apt update
- Instal dependensi
libssl1.1, yang diperlukan untuk EOSIO 2.1.0, tetapi tidak disertakan dalam Ubuntu 22.04+ secara default:
wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb
sudo apt install ./libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb
- Dapatkan biner software EOSIO. Ini mencakup nodeos (software p2p node), cleos (klien CLI), keosd (pengelola dompet), dan alat lainnya:
curl -LO https://github.com/eosio/eos/releases/download/v2.1.0/eosio_2.1.0-1-ubuntu-20.04_amd64.deb
- Instal biner software EOSIO. Tekan Enter jika dibutuhkan untuk menginstal dependensi software yang diperlukan:
sudo apt install ./eosio_2.1.0-1-ubuntu-20.04_amd64.deb
- Pastikan nodeos telah diinstal:
nodeos --version
Responsnya adalah versi nodeos:
v2.1.0
- Pastikan cleos telah diinstal:
cleos version client
Responsnya adalah versi cleos:
v2.1.0
- Pastikan keosd telah diinstal:
keosd -v
Responsnya adalah versi keosd:
v2.1.0
Klik Periksa progres saya untuk memverifikasi tujuan.
Menginstal platform EOSIO
Tugas 3. Membuat dompet default
Dompet menyimpan kunci kriptografi yang digunakan oleh akun dan produsen untuk menandatangani transaksi dan blok. Dompet ini juga menyediakan enklave yang aman untuk melakukan penandatanganan, sehingga kunci pribadi tidak pernah keluar dari dompet. Untuk mengubah status di blockchain, Anda memerlukan dompet untuk menyimpan kunci kriptografis dan melakukan penandatanganan digital.
- Pertama, tetapkan waktu tunggu buka kunci yang besar untuk dompet apa pun yang dikelola oleh keosd, pengelola dompet EOSIO:
keosd --unlock-timeout 999999999 &
Tindakan ini akan mencegah pembukaan kunci dompet setiap 15 menit, yaitu waktu tunggu default. Tindakan ini juga akan meluncurkan layanan daemon keosd. Responsnya akan terlihat seperti ini:
info thread-0 wallet_plugin.cpp:38 plugin_initialize ] initializing wallet plugin
info thread-0 wallet_api_plugin.cpp:84 plugin_startup ] starting wallet_api_plugin
info thread-0 http_plugin.cpp:983 add_handler ] add api url: /v1/wallet/create
...
info thread-0 http_plugin.cpp:983 add_handler ] add api url: /v1/wallet/unlock
info thread-0 http_plugin.cpp:983 add_handler ] add api url: /v1/node/get_supported_apis
Tekan Enter jika perlu untuk mendapatkan kembali perintah shell.
- Buat dompet default dan simpan sandi dompet ke file bernama my_wallet_password:
cleos wallet create --file my_wallet_password
Tindakan ini akan membuat dompet bernama default. Responsnya akan terlihat seperti ini:
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
saving password to my_wallet_password
Setelah dompet dibuat, keosd akan membukanya dan membuka kuncinya secara default.
- Untuk melihat semua dompet yang dikelola, jalankan perintah ini:
cleos wallet list
Responsnya akan terlihat seperti ini:
Wallets:
[
"default *"
]
Tanda bintang di samping nama dompet menunjukkan bahwa dompet tersebut tidak terkunci.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat dompet default
Tugas 4. Menambahkan kunci pribadi akun sistem EOSIO ke dompet
Setiap blockchain EOSIO baru memiliki akun sistem default yang disebut eosio. Akun ini awalnya digunakan untuk menyiapkan blockchain. Secara default, akun ini dikaitkan dengan kunci pribadi berikut: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3.
Impor kunci pribadi ini ke dompet Anda untuk menandatangani transaksi atas nama akun eosio.
- Gunakan perintah cleos wallet open untuk membuka dompet default. Perhatikan bahwa dompet sudah dibuka dan tidak terkunci. Namun, Anda harus menjalankan prosedur berikut jika dompet terkunci lagi:
cleos wallet open
Responsnya akan terlihat seperti ini:
Opened: default
- Buka kunci dompet default menggunakan perintah cleos wallet unlock dan teruskan sandi dompet yang disimpan dalam file my_wallet_password:
cleos wallet unlock <my_wallet_password
Responsnya akan terlihat seperti ini:
password: Unlocked: default
- Gunakan perintah cleos wallet import untuk mengimpor kunci pribadi eosio,
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 ke dompet default:
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
Responsnya akan terlihat seperti ini:
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
Ini adalah kunci publik yang sesuai untuk kunci pribadi yang diimpor. Abaikan peringatan apa pun terkait penggunaan dompet default. Dalam deployment produksi, Anda mungkin ingin memberi nama dompet selain menggunakan nama default.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menambahkan kunci pribadi akun sistem eosio ke dompet
Tugas 5. Menginstal EOSIO Contract Development Toolkit (CDT)
Toolkit EOSIO CDT mencakup compiler C++ CDT, yang dapat Anda gunakan untuk membangun kontrak sistem dan, selanjutnya, smart contract C++ Anda sendiri. Kontrak sistem sangat penting karena memungkinkan fungsi software lapisan kedua yang mengizinkan penambahan dan dukungan fitur tambahan.
- Pertama, instal paket build-essential. Paket ini berisi berbagai alat yang diperlukan untuk membangun software C/C++ di kotak Linux Anda.
sudo apt install build-essential
- Dapatkan biner EOSIO CDT:
curl -LO https://github.com/eosio/eosio.cdt/releases/download/v1.8.1/eosio.cdt_1.8.1-1-ubuntu-18.04_amd64.deb
- Instal biner EOSIO CDT:
sudo apt install ./eosio.cdt_1.8.1-1-ubuntu-18.04_amd64.deb
- Pastikan compiler EOSIO CDT telah diinstal:
eosio-cpp --version
Responsnya akan berupa versi compiler EOSIO CDT:
eosio-cpp version 1.8.1
Klik Periksa progres saya untuk memverifikasi tujuan.
Menginstal EOSIO Contract Development Toolkit
Tugas 6. Membangun kontrak sistem dan eosio.boot
Untuk memiliki blockchain EOSIO multi-node yang berfungsi, Anda perlu men-deploy kontrak sistem EOSIO. Antara lain, kontrak sistem menyediakan fungsi 2 lapisan yang diperlukan untuk konsensus EOSIO, kemampuan untuk melakukan staking token, memberikan suara, membuat token Anda sendiri, dll. Kontrak ini juga memungkinkan dukungan untuk berbagai fitur baru.
- Instal CMake, dependensi software yang digunakan oleh skrip build eosio.contracts:
sudo apt install cmake
- Download eosio.contracts sistem terbaru:
git clone https://github.com/EOSIO/eosio.contracts.git \
--branch release/1.9.x --single-branch
- Bangun sistem eosio.contracts. Pada langkah ini, Anda juga perlu meneruskan direktori penginstalan eosio dan eosio.cdt.
cd eosio.contracts
./build.sh -e /usr/opt/eosio/2.1.0 -c /usr/opt/eosio.cdt/1.8.1
cd ~
Abaikan peringatan tentang kontrak ricardian yang tidak ada, jika ada. Responsnya akan terlihat seperti ini (tanpa peringatan):
Using EOSIO.CDT installation at: /usr/opt/eosio.cdt/1.8.1
=========== Building eosio.contracts ===========
...
-- Building eosio.contracts v1.9.2
...
-- Unit tests will not be built. To build tests, set BUILD_TESTS to true.
-- Configuring done
-- Generating done
-- Build files have been written to: ./eosio.contracts/build
[ 11%] Performing build step for 'contracts_project'
[ 18%] Built target eosio.bios
[ 18%] Built target eosio.msig
[ 36%] Built target powup.results
[ 36%] Built target rex.results
[ 54%] Built target eosio.token
[ 90%] Built target eosio.system
[100%] Built target eosio.wrap
[ 22%] No install step for 'contracts_project'
[ 33%] No test step for 'contracts_project'
[ 44%] Completed 'contracts_project'
[100%] Built target contracts_project`
Catat lokasi tempat kontrak sistem EOSIO dibuat. Anda akan memerlukannya nanti saat men-deploy kontrak sistem tertentu: ~/eosio.contracts/build/contracts.
- Bangun kontrak sistem eosio.boot:
git clone https://github.com/EOSIO/eos.git \
--branch release/2.1.x --single-branch
cd eos/contracts/contracts/eosio.boot
cmake .
make
cd ~
Abaikan peringatan. Responsnya akan terlihat seperti ini:
-- Configuring done
-- Generating done
-- Build files have been written to: ~/eos/contracts/contracts/eosio.boot
- Catat lokasi tempat kontrak eosio.boot dibuat. Anda harus men-deploy-nya nanti:
~/eos/contracts/contracts/eosio.boot.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membangun kontrak sistem dan eosio.boot
Tugas 7. Memulai node booting dan membuat akun sistem
Dalam tugas ini, Anda akan meluncurkan node genesis booting dan membuat akun sistem. Tidak seperti pembuatan dompet, Anda perlu mengirim transaksi ke blockchain untuk membuat akun.
Oleh karena itu, setidaknya node booting harus berjalan. Untuk itu, pertama-tama Anda perlu membuat direktori data dan file genesis yang akan digunakan oleh semua node. Dalam lingkungan produksi, setiap node akan dihosting di servernya sendiri dan menggunakan resource-nya sendiri. Di sini, Anda akan men-deploy semua node dalam kotak yang sama.
- Buat direktori baru bernama nodes. Di sinilah database blockchain, file log, dan file konfigurasi untuk setiap node akan disimpan.
mkdir nodes
- Buat file genesis.json default di direktori nodes:
cat >nodes/genesis.json
- Salin/tempel konten JSON berikut ke terminal, tekan Enter, lalu tekan Ctrl-D untuk menyimpan file genesis.json:
{
"initial_timestamp": "2018-06-01T12:00:00.000",
"initial_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"initial_configuration": {
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
"max_block_cpu_usage": 200000,
"target_block_cpu_usage_pct": 1000,
"max_transaction_cpu_usage": 150000,
"min_transaction_cpu_usage": 100,
"max_transaction_lifetime": 3600,
"deferred_trx_expiration_window": 600,
"max_transaction_delay": 3888000,
"max_inline_action_size": 524288,
"max_inline_action_depth": 4,
"max_authority_depth": 6
},
"initial_chain_id": "0000000000000000000000000000000000000000000000000000000000000000"
}
"initial_key" menunjukkan kunci publik pengembangan awal yang digunakan oleh akun eosio. Di sini, Anda dapat menggantinya dengan kunci pengembangan Anda sendiri, jika diperlukan, yang direkomendasikan untuk deployment produksi. Kunci tersebut harus ada di dompet yang digunakan oleh akun eosio. Anda telah mengimpor kunci tersebut di bagian sebelumnya.
- Periksa apakah file genesis.json memang telah dibuat dan diisi:
cat nodes/genesis.json
Anda akan melihat konten yang sama seperti pada langkah sebelumnya.
- Buat direktori node booting nodes/00-boot untuk menyimpan semua data blockchain yang terkait dengan node booting tersebut:
mkdir nodes/00-boot
- Luncurkan node booting, dengan menjalankan daemon layanan nodeos sebagai tugas latar belakang, lalu mengalihkan stdout/stderr ke file 00-boot/00.log:
nodeos \
--plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::chain_plugin --plugin eosio::producer_api_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::net_api_plugin \
--contracts-console \
--max-transaction-time=200 \
--chain-state-db-size-mb 1024 \
--enable-stale-production \
--producer-name eosio \
--genesis-json ~/nodes/genesis.json \
--blocks-dir ~/nodes/00-boot/blocks \
--config-dir ~/nodes/00-boot \
--data-dir ~/nodes/00-boot \
--http-server-address 127.0.0.1:8888 \
--p2p-listen-endpoint 127.0.0.1:9876 \
--signature-provider EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 \
>>~/nodes/00-boot/00.log 2>&1 &
Perintah ini akan meluncurkan node booting dengan beberapa plugin, nama produsen eosio, yang memproses port http 8888, port p2p 9876, dan menggunakan kunci pengembangan default EOS6MRy..., 5KQwrP... untuk penandatanganan blok. Jika tidak diganti dengan --signature-provider, kunci pengembangan eosio default akan digunakan.
- Pastikan bahwa node booting sedang berjalan dan menghasilkan blok:
tail -f nodes/00-boot/00.log
Outputnya akan terlihat seperti berikut.
Output:
...
info 2021-03-08T02:44:11.900 nodeos producer_plugin.cpp:2333 produce_block ] Produced block e0dc6324ce3c8f35... #588 @ 2021-03-08T02:44:12.000 signed by eosio [trxs: 0, lib: 587, confirmed: 0]
Baris terakhir menampilkan nomor blok terakhir yang dihasilkan dan blok terakhir yang tidak dapat diubah (lib) saat ini yang menandai blok terakhir dan akhir blockchain.
-
Tekan Ctrl+C untuk keluar dari program tail.
-
Setelah node booting berjalan, Anda bisa mendapatkan informasi tentang akun eosio yang disimpan dalam database blockchain:
cleos get account eosio
Responsnya akan terlihat seperti ini:
created: 2018-06-01T12:00:00.000
privileged: true
permissions:
owner 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
active 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
memory:
quota: unlimited used: 2.66 KiB
net bandwidth:
used: unlimited
available: unlimited
limit: unlimited
cpu bandwidth:
used: unlimited
available: unlimited
limit: unlimited
Perhatikan bahwa akun eosio memang merupakan akun dengan hak istimewa, dan kunci yang terkait dengan izin owner dan active adalah kunci pengembangan default yang sama yang diimpor ke dompet. Langkah ini akan memungkinkan akun eosio mengizinkan transaksi saat blockchain multi-node disiapkan.
- Buat akun sistem tambahan. Akun ini juga akan disimpan di database blockchain.
cleos create account eosio eosio.bpay EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.names EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.ram EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.ramfee EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.saving EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.stake EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.vpay EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio eosio.rex EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
Anda menetapkan pasangan kunci pengembangan yang sama ke semua akun sistem serta ke izin owner dan active. Dalam deployment produksi, Anda sebaiknya menetapkan pasangan kunci yang berbeda untuk setiap izin demi keamanan tambahan. Anda juga dapat menggunakan kunci yang berbeda untuk setiap akun sistem.
Respons untuk perintah di atas akan terlihat seperti ini:
executed transaction: 98f22027c6703e554042b1d4a93beb70b1dc30be0fe65267932155c9d70e6493 200 bytes 153 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"eosio.bpay","owner":{"threshold":1,"keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfn...
warning: transaction executed locally, but may not be confirmed by the network yet ]
...
executed transaction: 2f0cb00110374976f3cd9195bccac81fe0ee330c515b4a656d6d41f6181f636d 200 bytes 189 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"eosio.rex","owner":{"threshold":1,"keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnV...
warning: transaction executed locally, but may not be confirmed by the network yet ]
Abaikan peringatan. Anda akan menggunakan akun ini di tugas berikutnya.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membangun kontrak sistem dan eosio.boot
Tugas 8. Men-deploy kontrak eosio.token, eosio.msig, dan membuat/menerbitkan token SYS
Dalam tugas ini, Anda akan membuat dan menerbitkan token SYS fiktif. Untuk itu, Anda juga perlu men-deploy kontrak sistem eosio.token dan eosio.msig yang dibuat sebelumnya.
- Deploy kontrak eosio.token. Kontrak ini memungkinkan Anda membuat, menerbitkan, dan mentransfer token baru atau yang sudah ada.
cleos set contract eosio.token ~/eosio.contracts/build/contracts/eosio.token/
Responsnya akan terlihat seperti ini:
Reading WASM from ~/eosio.contracts/build/contracts/eosio.token/eosio.token.wasm...
Publishing contract...
executed transaction: 11aca7fb68e0821cf8f74be0188741964787f830d0918abdfccae4a54c25e291 19360 bytes 4445 us
# eosio <= eosio::setcode {"account":"eosio.token","vmtype":0,"vmversion":0,"code":"0061736d010000000180022860000060037f7f7f01...
# eosio <= eosio::setabi {"account":"eosio.token","abi":"0e656f73696f3a3a6162692f312e320008076163636f756e7400010762616c616e63...
- Deploy kontrak eosio.msig. Kontrak ini memungkinkan proses multi-tanda tangan di antara akun dan menyederhanakan pengelolaan izin.
cleos set contract eosio.msig ~/eosio.contracts/build/contracts/eosio.msig/
Responsnya akan terlihat seperti ini:
Reading WASM from ~/eosio.contracts/build/contracts/eosio.msig/eosio.msig.wasm...
Publishing contract...
executed transaction: c2260b7d05bb38d2df097799baedd890ce7560bedbd1b79e7d07e4f6a5b25238 23256 bytes 3684 us
# eosio <= eosio::setcode {"account":"eosio.msig","vmtype":0,"vmversion":0,"code":"0061736d0100000001b8022f60000060037f7f7f017...
# eosio <= eosio::setabi {"account":"eosio.msig","abi":"0e656f73696f3a3a6162692f312e32001006616374696f6e0004076163636f756e740...
- Buat token SYS dengan total distribusi 10 miliar token:
cleos push action eosio.token create '["eosio", "10000000000.0000 SYS"]' -p eosio.token
Perintah di atas mendorong transaksi dengan tindakan create dari kontrak eosio.token, yang diotorisasi oleh izin aktif akun eosio.token.
Responsnya akan terlihat seperti ini:
executed transaction: 6a4766a00c8fe26343d5eb6c1ad5e53b35064dc6f3a5f55908eff2edba30efca 120 bytes 603 us
# eosio.token <= eosio.token::create {"issuer":"eosio","maximum_supply":"10000000000.0000 SYS"}
- Terbitkan 1 miliar token SYS dari cadangan ke dalam sirkulasi:
cleos push action eosio.token issue '["eosio", "1000000000.0000 SYS", "memo"]' -p eosio
Perintah di atas mendorong transaksi dengan tindakan issue dari kontrak eosio.token, yang diotorisasi oleh izin aktif akun eosio.
Responsnya akan terlihat seperti ini:
executed transaction: 4613fcff26bc6f96010273b475e839018f0afe2ef2af840d481070c9c54e36f1 128 bytes 405 us
# eosio.token <= eosio.token::issue {"to":"eosio","quantity":"1000000000.0000 SYS","memo":"memo"}
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat dan men-deploy kontrak eosio.token, eosio.msig, dan token SYS
Tugas 9. Mengaktifkan fitur protokol dan men-deploy kontrak eosio.boot dan eosio.system
Fitur protokol menghadirkan kemampuan opsional tambahan ke blockchain EOSIO. Dalam tugas ini, Anda akan mengaktifkan beberapa fitur protokol yang sangat direkomendasikan untuk blockchain EOSIO. Untuk itu, Anda harus men-deploy kontrak eosio.boot terlebih dahulu, lalu mengaktifkan fitur ini. Terakhir, Anda akan men-deploy kontrak eosio.system untuk menyelesaikan lapisan kedua blockchain EOSIO.
Hal ini memungkinkan resource sistem (CPU, RAM, NET), memungkinkan token di-staking dan dibatalkan staking-nya, resource dibeli, calon produsen terdaftar dan kemudian dipilih, reward produsen diklaim, hak istimewa dan batas ditetapkan, dll. Fitur protokol harus diaktifkan melalui konsensus EOSIO oleh mayoritas super produsen. Dalam hal ini, Anda hanya memerlukan node booting yang sedang berjalan.
- Pertama, instal alat jq untuk mengurai string JSON dalam bentuk yang lebih mudah dibaca:
sudo apt install jq
- Sekarang, mari kita periksa fitur protokol mana yang didukung:
curl -X POST http://127.0.0.1:8888/v1/producer/get_supported_protocol_features -d '{"exclude_disabled": false, "exclude_unactivatable": false}' | jq | more
Perintah di atas mengirim permintaan POST HTTP ke endpoint get_supported_protocol_features yang disediakan oleh plugin Producer API.
Respons akan menampilkan semua fitur protokol yang didukung oleh jaringan EOSIO saat ini (yang sejauh ini terdiri dari node booting).
Periksa output (tekan tombol spasi beberapa kali) hingga Anda mendapatkan kembali perintah shell.
Output:
[{"feature_digest": "0ec7e080177b2c02b278d5088611686b49d739925a92d9bfcacd7fc6b74053bd", "subjective_restrictions": {"enabled": true, "preactivation_required": false, "earliest_allowed_activation_time": "1970-01-01T00:00:00.000"}, "description_digest": "64fe7df32e9b86be2b296b3f81dfd527f84e82b98e363bc97e40bc7a83733310", "dependencies": [], "protocol_feature_type": "builtin", "specification": [{"name": "builtin_feature_codename", "value": "PREACTIVATE_FEATURE"}]},
...
{"feature_digest": "ded2e25adcd78cbb94fa7f63a8f80a9af2b1a905e551a6e124e7d7829da1ea02", "subjective_restrictions": {"enabled": true, "preactivation_required": true, "earliest_allowed_activation_time": "1970-01-01T00:00:00.000"}, "description_digest": "72ec6337e369cbb33ef7716d3267db9d5678fe54555c25ca4c9f5b9dfb7739f3", "dependencies": [], "protocol_feature_type": "builtin", "specification": [{"name": "builtin_feature_codename", "value": "SECURITY_GROUP"}]},
...
{"feature_digest": "f0af56d2c5a48d60a4a5b5c903edfb7db3a736a94ed589d0b797df33ff9d3e1d", "subjective_restrictions": {"enabled": true, "preactivation_required": true, "earliest_allowed_activation_time": "1970-01-01T00:00:00.000"}, "description_digest": "1eab748b95a2e6f4d7cb42065bdee5566af8efddf01a55a0a8d831b823f8828a", "dependencies": [], "protocol_feature_type": "builtin", "specification": [{"name": "builtin_feature_codename", "value": "GET_SENDER"}]}]
- Aktifkan fitur PREACTIVATE_FEATURE. Hal ini memungkinkan fitur lain diaktifkan, termasuk potensi upgrade pada kontrak eosio.system yang mungkin menerapkan fitur baru. Perhatikan juga bahwa fitur protokol harus diaktifkan dengan meneruskan ringkasan atau hashcode fitur untuk fitur tertentu.
curl -X POST http://127.0.0.1:8888/v1/producer/schedule_protocol_feature_activations -d '{"protocol_features_to_activate": ["0ec7e080177b2c02b278d5088611686b49d739925a92d9bfcacd7fc6b74053bd"]}'
Perhatikan bahwa hashcode ringkasan fitur 0ec7e... dapat diperoleh dari kolom feature_digest yang ditampilkan oleh endpoint get_supported_protocol_features pada langkah sebelumnya. Jika aktivasi berhasil, responsnya akan terlihat seperti yang ditunjukkan.
Output:
{"result": "ok"}
Jika fitur telah diaktifkan, respons berikut akan ditampilkan, yang dapat diabaikan dengan aman.
Output:
{"code": 500, "message": "Internal Service Error", "error": {"code": 3250000, "name": "protocol_feature_exception", "what": "Protocol feature exception", "details": [{"message": "protocol feature with digest '<hex-value>' has already been activated", "file": "controller.cpp", "line_number": 1650, "method": "check_protocol_features"}]}}
- Deploy kontrak eosio.boot:
cleos set contract eosio ~/eos/contracts/contracts/eosio.boot/
Responsnya akan terlihat seperti ini:
Reading WASM from ~/eos/contracts/contracts/eosio.boot/eosio.boot.wasm...
Publishing contract...
executed transaction: a029c644104da357a201f75058fc6772cf63f5fdfa9135be2c3b7c498d81d46d 2752 bytes 852 us
# eosio <= eosio::setcode {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d01000000013e0c60000060027f7f0060017e0060...
# eosio <= eosio::setabi {"account":"eosio","abi":"0e656f73696f3a3a6162692f312e32001008616374697661746500010e666561747572655f...
- Aktifkan fitur protokol tambahan, seperti KV_DATABASE, ACTION_RETURN_VALUE, dll. Hal ini dapat dilakukan setelah men-deploy kontrak eosio.boot.
# KV_DATABASE
cleos push action eosio activate '["825ee6288fb1373eab1b5187ec2f04f6eacb39cb3a97f356a07c91622dd61d16"]' -p eosio
# ACTION_RETURN_VALUE
cleos push action eosio activate '["c3a6138c5061cf291310887c0b5c71fcaffeab90d5deb50d3b9e687cead45071"]' -p eosio
# CONFIGURABLE_WASM_LIMITS
cleos push action eosio activate '["bf61537fd21c61a60e542a5d66c3f6a78da0589336868307f94a82bccea84e88"]' -p eosio
# BLOCKCHAIN_PARAMETERS
cleos push action eosio activate '["5443fcf88330c586bc0e5f3dee10e7f63c76c00249c87fe4fbf7f38c082006b4"]' -p eosio
# GET_SENDER
cleos push action eosio activate '["f0af56d2c5a48d60a4a5b5c903edfb7db3a736a94ed589d0b797df33ff9d3e1d"]' -p eosio
# FORWARD_SETCODE
cleos push action eosio activate '["2652f5f96006294109b3dd0bbde63693f55324af452b799ee137a81a905eed25"]' -p eosio
# ONLY_BILL_FIRST_AUTHORIZER
cleos push action eosio activate '["8ba52fe7a3956c5cd3a656a3174b931d3bb2abb45578befc59f283ecd816a405"]' -p eosio
# RESTRICT_ACTION_TO_SELF
cleos push action eosio activate '["ad9e3d8f650687709fd68f4b90b41f7d825a365b02c23a636cef88ac2ac00c43"]' -p eosio
# DISALLOW_EMPTY_PRODUCER_SCHEDULE
cleos push action eosio activate '["68dcaa34c0517d19666e6b33add67351d8c5f69e999ca1e37931bc410a297428"]' -p eosio
# FIX_LINKAUTH_RESTRICTION
cleos push action eosio activate '["e0fb64b1085cc5538970158d05a009c24e276fb94e1a0bf6a528b48fbc4ff526"]' -p eosio
# REPLACE_DEFERRED
cleos push action eosio activate '["ef43112c6543b88db2283a2e077278c315ae2c84719a8b25f25cc88565fbea99"]' -p eosio
# NO_DUPLICATE_DEFERRED_ID
cleos push action eosio activate '["4a90c00d55454dc5b059055ca213579c6ea856967712a56017487886a4d4cc0f"]' -p eosio
# ONLY_LINK_TO_EXISTING_PERMISSION
cleos push action eosio activate '["1a99a59d87e06e09ec5b028a9cbb7749b4a5ad8819004365d02dc4379a8b7241"]' -p eosio
# RAM_RESTRICTIONS
cleos push action eosio activate '["4e7bf348da00a945489b2a681749eb56f5de00b900014e137ddae39f48f69d67"]' -p eosio
# WEBAUTHN_KEY
cleos push action eosio activate '["4fca8bd82bbd181e714e283f83e1b45d95ca5af40fb89ad3977b653c448f78c2"]' -p eosio
# WTMSIG_BLOCK_SIGNATURES
cleos push action eosio activate '["299dcb6af692324b899b39f16d5a530a33062804e41f09dc97e9f156b4476707"]' -p eosio
- Deploy kontrak eosio.system. Hal ini akan mengaktifkan fitur lapisan kedua dan memungkinkan transisi dari blockchain satu node ke multi-node.
cleos set contract eosio ~/eosio.contracts/build/contracts/eosio.system/
Klik Periksa progres saya untuk memverifikasi tujuan.
Men-deploy kontrak eosio.boot dan eosio.system
Tugas 10. Membuat akun produsen blok
Dalam tugas ini, Anda akan membuat akun produsen yang pada akhirnya akan mengambil alih blockchain EOSIO dan menghasilkan blok. Langkah pertama adalah menetapkan eosio.msig sebagai akun dengan hak istimewa, sehingga dapat memberikan otorisasi atas nama akun eosio, yang selanjutnya akan memberikan otoritasnya dan membiarkan akun eosio.prods, yang mewakili grup produsen terpilih, mengambil alih tanggung jawab produksi dan validasi blok.
- Tetapkan eosio.msig sebagai akun dengan hak istimewa:
cleos push action eosio setpriv '["eosio.msig", 1]' -p eosio
Responsnya akan terlihat seperti ini:
executed transaction: 385f0eb3c169898cc7faae46bb4371dbbfc46c5d482249c9933c4f8627fb271c 104 bytes 208 us
# eosio <= eosio::setpriv {"account":"eosio.msig","is_priv":1}
- Inisialisasi token SYS ke versi 0 dan tetapkan 4 desimal untuk presisi:
cleos push action eosio init '["0", "4,SYS"]' -p eosio
Responsnya akan terlihat seperti ini:
executed transaction: c537fbd77983104d8dcb1c58b09b433f68a2dd12c876a27b7556d4a722d42939 104 bytes 3467 us
# eosio <= eosio::init {"version":0,"core":"4,SYS"}
# eosio.token <= eosio.token::open {"owner":"eosio.rex","symbol":"4,SYS","ram_payer":"eosio"}
- Mengimpor kunci yang akan digunakan oleh produsen untuk penandatanganan blok. Dalam deployment produksi, kunci ini harus dibuat terlebih dahulu, lalu diimpor.
cleos wallet import --private-key 5KLGj1HGRWbk5xNmoKfrcrQHXvcVJBPdAckoiJgFftXSJjLPp7b
cleos wallet import --private-key 5K6qk1KaCYYWX86UhAfUsbMwhGPUqrqHrZEQDjs9ekP5j6LgHUu
cleos wallet import --private-key 5JCStvbRgUZ6hjyfUiUaxt5iU3HP6zC1kwx3W7SweaEGvs4EPfQ
cleos wallet import --private-key 5JJjaKnAb9KM2vkkJDgrYXoeUEdGgWtB5WK1a38wrmKnS3KtkS6
Mengimpor kunci yang sudah ada ini akan menyederhanakan pengelolaan resource untuk lab ini. Namun, untuk deployment produksi, kunci baru harus dibuat.
Respons untuk setiap perintah akan terlihat seperti ini:
imported private key for: EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz
imported private key for: EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC
imported private key for: EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6
imported private key for: EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d
Jika node didistribusikan, setiap pasangan kunci akan disimpan secara independen di dompet setiap server. Di lab ini, Anda menyimpannya di dompet yang sama agar lebih mudah.
- Buat akun produsen blok dengan resource awal dan kunci publik:
cleos system newaccount --transfer eosio producer.one EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram-kbytes 8192
cleos system newaccount --transfer eosio producer.two EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram-kbytes 8192
cleos system newaccount --transfer eosio produc.three EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6 --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram-kbytes 8192
cleos system newaccount --transfer eosio produce.four EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d --stake-net "50000000.0000 SYS" --stake-cpu "50000000.0000 SYS" --buy-ram-kbytes 8192
Perintah di atas akan membuat akun baru producer.one, producer.two, produc.three, produce.four dan mengaitkan setiap kunci yang diimpor pada langkah sebelumnya ke setiap akun. Selain itu, perintah ini akan mengalokasikan dan melakukan staking 50 juta SYS untuk NET dan CPU serta 8 KB untuk RAM.
Responsnya akan terlihat seperti ini (untuk setiap akun baru):
executed transaction: 6164d2741433c68edf426d430cb0986b198a6f4c63e7f7a46bcf8343562eacc0 336 bytes 1029 us
# eosio <= eosio::newaccount {"creator":"eosio","name":"producer.one","owner":{"threshold":1,"keys":[{"key":"EOS8imf2TDq6FKtLZ8mv...
# eosio <= eosio::buyrambytes {"payer":"eosio","receiver":"producer.one","bytes":8388608}
# eosio <= eosio::delegatebw {"from":"eosio","receiver":"producer.one","stake_net_quantity":"50000000.0000 SYS","stake_cpu_quantity...
# eosio.token <= eosio.token::transfer {"from":"eosio","to":"eosio.ram","quantity":"122.0851 SYS","memo":"buy ram"}
# eosio.token <= eosio.token::transfer {"from":"eosio","to":"eosio.ramfee","quantity":"0.6135 SYS","memo":"ram fee"}
# eosio <= eosio.token::transfer {"from":"eosio","to":"eosio.ram","quantity":"122.0851 SYS","memo":"buy ram"}
# eosio.ram <= eosio.token::transfer {"from":"eosio","to":"eosio.ram","quantity":"122.0851 SYS","memo":"buy ram"}
# eosio <= eosio.token::transfer {"from":"eosio","to":"eosio.ramfee","quantity":"0.6135 SYS","memo":"ram fee"}
# eosio.ramfee <= eosio.token::transfer {"from":"eosio","to":"eosio.ramfee","quantity":"0.6135 SYS","memo":"ram fee"}
# eosio.token <= eosio.token::transfer {"from":"eosio","to":"eosio.stake","quantity":"100000000.0000 SYS","memo":"stake bandwidth"}
# eosio <= eosio.token::transfer {"from":"eosio","to":"eosio.stake","quantity":"100000000.0000 SYS","memo":"stake bandwidth"}
# eosio.stake <= eosio.token::transfer {"from":"eosio","to":"eosio.stake","quantity":"100000000.0000 SYS","memo":"stake bandwidth"}
- Daftarkan akun baru sebagai produsen. Perhatikan bahwa setiap perintah juga mengharapkan URL web produsen. URL palsu digunakan untuk ilustrasi.
cleos system regproducer producer.one EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz https://producer.one.com/EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz
cleos system regproducer producer.two EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC https://producer.two.com/EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC
cleos system regproducer produc.three EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6 https://produc.three.com/EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6
cleos system regproducer produce.four EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d https://produce.four.com/EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d
Respons untuk perintah di atas akan terlihat seperti ini:
executed transaction: 28ced4a34abd64fb2fc11fbb51d3e4e18d2933a9ab2560fc1c6fb80b0cfc336d 216 bytes 753 us
# eosio <= eosio::regproducer {"producer":"producer.one","producer_key":"EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz","u...
executed transaction: 06b8be4187c5fbabc3197064ae4c6d55ba553fdbcc8a560f060078e59d5dfc5e 216 bytes 306 us
# eosio <= eosio::regproducer {"producer":"producer.two","producer_key":"EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC","u...
executed transaction: c23a5164bf0cc1e35dfa3e55fed56e935ceb7d764dbe2e7a3bf4aee446e7d88d 216 bytes 270 us
# eosio <= eosio::regproducer {"producer":"produc.three","producer_key":"EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6","u...
executed transaction: 081aa8aca08b6d4e8e6bf576b2882f578faa7148e7c550196ff256ab0a9dcca3 216 bytes 224 us
# eosio <= eosio::regproducer {"producer":"produce.four","producer_key":"EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d","u...
- Cantumkan akun produsen saat ini. Totalnya harus ada empat.
cleos system listproducers
Responsnya akan terlihat seperti ini:
Producer Producer key Url Scaled votes`
**`produc.three`** `EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6 https://produc.three.com/EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNj` **`0.0000`**
**`produce.four`** `EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d https://produce.four.com/EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8` **`0.0000`**
**`producer.one`** `EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz https://producer.one.com/EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8` **`0.0000`**
**`producer.two`** `EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC https://producer.two.com/EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuE` **`0.0000`**
Perhatikan bahwa jumlah suara untuk setiap produsen masih nol karena belum ada produsen yang dipilih.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat akun produsen blok
Tugas 11. Beralih dari produsen satu node ke produsen multi-node
Dalam tugas ini, Anda akan beralih dari blockchain satu node ke blockchain multi-node. Saat ini, hanya akun eosio yang memiliki hak istimewa dan dapat menandatangani blok. Tujuannya adalah membuat blockchain EOSIO yang dikelola oleh sekumpulan produsen terpilih yang mencapai konsensus setelah mayoritas super 2/3 + 1 produsen mengonfirmasi blok. Kemudian, semua transaksi dalam blok tersebut akan bersifat final.
- Buat direktori node yang tersisa nodes/01-node, nodes/02-node, nodes/03-node, nodes/04-node untuk menyimpan semua data blockchain yang terkait dengan node produksi baru 1, 2, 3, 4:
mkdir nodes/01-node nodes/02-node nodes/03-node nodes/04-node
- Luncurkan node 1, dengan menjalankan daemon layanan nodeos sebagai tugas latar belakang, lalu mengalihkan stdout/stderr ke file 01-node/01.log:
nodeos \
--plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::chain_plugin --plugin eosio::producer_api_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::net_api_plugin \
--contracts-console \
--max-transaction-time=200 \
--chain-state-db-size-mb 1024 \
--enable-stale-production \
--producer-name producer.one \
--genesis-json ~/nodes/genesis.json \
--blocks-dir ~/nodes/01-node/blocks \
--config-dir ~/nodes/01-node \
--data-dir ~/nodes/01-node \
--http-server-address 127.0.0.1:8889 \
--p2p-listen-endpoint 127.0.0.1:9877 \
--signature-provider EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz=KEY:5KLGj1HGRWbk5xNmoKfrcrQHXvcVJBPdAckoiJgFftXSJjLPp7b \
--p2p-peer-address 127.0.0.1:9876 \
>>~/nodes/01-node/01.log 2>&1 &
Perintah ini akan meluncurkan node 1 dengan beberapa plugin, nama produsen producer.one, memproses di port http 8889, port p2p 9877, mengganti kunci pengembangan default dengan kuncinya sendiri EOS8imf..., 5KLGj1..., dan terhubung ke node p2p 9876 (node booting).
- Anda dapat memeriksa log node 1 untuk mengetahui pesan yang dipertukarkan dengan node booting (node p2p 9876) dengan menjalankan perintah berikut:
cat nodes/01-node/01.log | grep :9876 -C 3
Output-nya akan terlihat seperti berikut.
Output:
info 2021-10-22T21:56:43.161 nodeos producer_plugin.cpp:421 on_incoming_block ] Received block e79c2cc7df2bd7bc... #3040 @ 2021-10-22T21:56:41.500 signed by eosio [trxs: 0, lib: 3039, conf: 0, latency: 1661 ms]
...
info 2021-10-22T21:56:43.162 net-1 net_plugin.cpp:1604 set_state ] old state lib catchup becoming in sync
info 2021-10-22T21:56:43.162 net-1 net_plugin.cpp:1132 operator() ] Sending handshake generation 2 to 127.0.0.1:9876- 446609d, lib 3040, head 3041, id 5d69f1fa874933cf
info 2021-10-22T21:56:43.163 net-0 net_plugin.cpp:1947 sync_recv_notice ] notice_message, pending 3043, blk_num 3043, id b8f3389c52ff416c...
info 2021-10-22T21:56:43.163 net-0 net_plugin.cpp:1908 verify_catchup ] catch_up while in in sync, fork head num = 3043 target LIB = 3041 next_expected = 3042, id b8f3389c52ff416c..., peer 127.0.0.1:9876 - 446609d
info 2021-10-22T21:56:43.163 net-0 net_plugin.cpp:1604 set_state ] old state in sync becoming head catchup
info 2021-10-22T21:56:43.164 nodeos producer_plugin.cpp:421 on_incoming_block ] Received block 917275dee8c12e57... #3042 @ 2021-10-22T21:56:42.500 signed by eosio [trxs: 0, lib: 3041, conf: 0, latency: 664 ms]
...
Perhatikan bahwa node 1 belum menghasilkan blok, tetapi menerima/menyinkronkannya dari node lain, seperti node booting, untuk saat ini.
- Luncurkan node 2, dengan menjalankan daemon layanan nodeos sebagai tugas latar belakang, lalu mengalihkan stdout/stderr ke file 02-node/02.log:
nodeos \
--plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::chain_plugin --plugin eosio::producer_api_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::net_api_plugin \
--contracts-console \
--max-transaction-time=200 \
--chain-state-db-size-mb 1024 \
--enable-stale-production \
--producer-name producer.two \
--genesis-json ~/nodes/genesis.json \
--blocks-dir ~/nodes/02-node/blocks \
--config-dir ~/nodes/02-node \
--data-dir ~/nodes/02-node \
--http-server-address 127.0.0.1:8890 \
--p2p-listen-endpoint 127.0.0.1:9878 \
--signature-provider EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC=KEY:5K6qk1KaCYYWX86UhAfUsbMwhGPUqrqHrZEQDjs9ekP5j6LgHUu \
--p2p-peer-address 127.0.0.1:9876 \
--p2p-peer-address 127.0.0.1:9877 \
>>~/nodes/02-node/02.log 2>&1 &
Perintah ini akan meluncurkan node 2 dengan beberapa plugin, nama produsen producer.two, memproses di port http 8890, port p2p 9878, mengganti kunci pengembangan default dengan kuncinya sendiri EOS8imf..., 5KLGj1..., dan terhubung ke node p2p 9876 (node booting) dan node p2p 9877 (node 1).
- Anda dapat memeriksa log node 2 untuk mengetahui pesan yang dipertukarkan dengan node 1 (node p2p 9877) dengan menjalankan perintah berikut:
cat nodes/02-node/02.log | grep :9877 -C 3
Output-nya akan terlihat seperti berikut.
Output:
info 2021-10-22T22:28:31.496 net-1 net_plugin.cpp:1771 start_sync ] Catching up with chain, our last req is 6852, theirs is 6859 peer 127.0.0.1:9877 - 1a245d2
info 2021-10-22T22:28:31.496 net-1 net_plugin.cpp:1717 operator() ] requesting range 6853 to 6859, from 127.0.0.1:9877- 1a245d2
info 2021-10-22T22:28:31.497 nodeos producer_plugin.cpp:421 on_incoming_block ] Received block 3073fa4230d8d232... #6853 @ 2021-10-22T22:28:28.000 signed by eosio [trxs: 0, lib: 6852, conf: 0, latency: 3497 ms]
...
info 2021-10-22T22:28:31.501 net-0 net_plugin.cpp:1604 set_state ] old state lib catchup becoming in sync
info 2021-10-22T22:28:31.501 net-0 net_plugin.cpp:1132 operator() ] Sending handshake generation 3 to 127.0.0.1:9877- 1a245d2, lib 6858, head 6859, id 9a791a880b9b875e
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1947 sync_recv_notice ] notice_message, pending 6860, blk_num 6860, id 4dd2c7c8ae5301ed...
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1908 verify_catchup ] catch_up while in in sync, fork head num = 6860 target LIB = 6859 next_expected = 6860, id 4dd2c7c8ae5301ed..., peer 127.0.0.1:9877 - 1a245d2
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1604 set_state ] old state in sync becoming head catchup
...
Perhatikan bahwa node 2 belum menghasilkan blok, tetapi menerima/menyinkronkannya dari node lain, seperti node booting dan node 1, untuk saat ini.
- Luncurkan node 3, dengan menjalankan daemon layanan nodeos sebagai tugas latar belakang, lalu mengalihkan stdout/stderr ke file 03-node/03.log:
nodeos \
--plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::chain_plugin --plugin eosio::producer_api_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::net_api_plugin \
--contracts-console \
--max-transaction-time=200 \
--chain-state-db-size-mb 1024 \
--enable-stale-production \
--producer-name produc.three \
--genesis-json ~/nodes/genesis.json \
--blocks-dir ~/nodes/03-node/blocks \
--config-dir ~/nodes/03-node \
--data-dir ~/nodes/03-node \
--http-server-address 127.0.0.1:8891 \
--p2p-listen-endpoint 127.0.0.1:9879 \
--signature-provider EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6=KEY:5JCStvbRgUZ6hjyfUiUaxt5iU3HP6zC1kwx3W7SweaEGvs4EPfQ \
--p2p-peer-address 127.0.0.1:9876 \
--p2p-peer-address 127.0.0.1:9877 \
--p2p-peer-address 127.0.0.1:9878 \
>>~/nodes/03-node/03.log 2>&1 &
Perintah ini akan meluncurkan node 3 dengan beberapa plugin, nama produsen produc.three, memproses di port http 8891, port p2p 9879, mengganti kunci pengembangan default dengan kuncinya sendiri EOS5n44..., 5JCStv..., dan terhubung ke node p2p 9876 (node booting), node p2p 9877 (node 1), dan node p2p 9878 (node 2).
- Anda dapat memeriksa log node 3 untuk mengetahui pesan yang dipertukarkan dengan node 2 (node p2p 9878) dengan menjalankan perintah berikut:
cat nodes/03-node/03.log | grep :9878 -C 3
Output-nya akan terlihat seperti berikut.
Output:
info 2021-10-22T22:28:31.496 net-1 net_plugin.cpp:1771 start_sync ] Catching up with chain, our last req is 6852, theirs is 6859 peer 127.0.0.1:`**`9878`** `- 1a245d2`
info 2021-10-22T22:28:31.496 net-1 net_plugin.cpp:1717 operator() ] requesting range 6853 to 6859, from 127.0.0.1:`**`9878`** `- 1a245d2`
info 2021-10-22T22:28:31.497 nodeos producer_plugin.cpp:421 on_incoming_block ] Received block 3073fa4230d8d232... #6853 @ 2021-10-22T22:28:28.000 signed by eosio [trxs: 0, lib: 6852, conf: 0, latency: 3497 ms]
...
info 2021-10-22T22:28:31.501 net-0 net_plugin.cpp:1604 set_state ] old state lib catchup becoming in sync
info 2021-10-22T22:28:31.501 net-0 net_plugin.cpp:1132 operator() ] Sending handshake generation 3 to 127.0.0.1:`**`9878`** `- 1a245d2, lib 6858, head 6859, id 9a791a880b9b875e
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1947 sync_recv_notice ] notice_message, pending 6860, blk_num 6860, id 4dd2c7c8ae5301ed...
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1908 verify_catchup ] catch_up while in in sync, fork head num = 6860 target LIB = 6859 next_expected = 6860, id 4dd2c7c8ae5301ed..., peer 127.0.0.1:`**`9878`** `- 1a245d2
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1604 set_state ] old state in sync becoming head catchup
...
Perhatikan bahwa node 3 belum menghasilkan blok, tetapi menerima/menyinkronkannya dari node lain, seperti node booting, serta node 1 dan 2, untuk saat ini.
- Luncurkan node 4, dengan menjalankan daemon layanan nodeos sebagai tugas latar belakang, lalu mengalihkan stdout/stderr ke file 04-node/04.log:
nodeos \
--plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::chain_plugin --plugin eosio::producer_api_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::net_api_plugin \
--contracts-console \
--max-transaction-time=200 \
--chain-state-db-size-mb 1024 \
--enable-stale-production \
--producer-name produce.four \
--genesis-json ~/nodes/genesis.json \
--blocks-dir ~/nodes/04-node/blocks \
--config-dir ~/nodes/04-node \
--data-dir ~/nodes/04-node \
--http-server-address 127.0.0.1:8892 \
--p2p-listen-endpoint 127.0.0.1:9880 \
--signature-provider EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d=KEY:5JJjaKnAb9KM2vkkJDgrYXoeUEdGgWtB5WK1a38wrmKnS3KtkS6 \
--p2p-peer-address 127.0.0.1:9876 \
--p2p-peer-address 127.0.0.1:9877 \
--p2p-peer-address 127.0.0.1:9878 \
--p2p-peer-address 127.0.0.1:9879 \
>>~/nodes/04-node/04.log 2>&1 &
Perintah ini akan meluncurkan node 4 dengan beberapa plugin, nama produsen produce.four, memproses di port http 8892, port p2p 9880, mengganti kunci pengembangan default dengan kuncinya sendiri EOS5y3T..., 5JJjaK..., dan terhubung ke node p2p 9876 (node booting), node p2p 9877 (node 1), node p2p 9878 (node 2), dan node p2p 9879 (node 3).
- Anda dapat memeriksa log node 4 untuk mengetahui pesan yang dipertukarkan dengan node 3 (node p2p 9879) dengan menjalankan perintah berikut:
cat nodes/04-node/04.log | grep :9879 -C 3
Responsnya akan terlihat seperti ini:
info 2021-10-22T22:28:31.496 net-1 net_plugin.cpp:1771 start_sync ] Catching up with chain, our last req is 6852, theirs is 6859 peer 127.0.0.1:9879 - 1a245d2
info 2021-10-22T22:28:31.496 net-1 net_plugin.cpp:1717 operator() ] requesting range 6853 to 6859, from 127.0.0.1:9879 - 1a245d2
info 2021-10-22T22:28:31.497 nodeos producer_plugin.cpp:421 on_incoming_block ] Received block 3073fa4230d8d232... #6853 @ 2021-10-22T22:28:28.000 signed by eosio [trxs: 0, lib: 6852, conf: 0, latency: 3497 ms]
...
info 2021-10-22T22:28:31.501 net-0 net_plugin.cpp:1604 set_state ] old state lib catchup becoming in sync
info 2021-10-22T22:28:31.501 net-0 net_plugin.cpp:1132 operator() ] Sending handshake generation 3 to 127.0.0.1:9879 - 1a245d2, lib 6858, head 6859, id 9a791a880b9b875e
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1947 sync_recv_notice ] notice_message, pending 6860, blk_num 6860, id 4dd2c7c8ae5301ed...
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1908 verify_catchup ] catch_up while in in sync, fork head num = 6860 target LIB = 6859 next_expected = 6860, id 4dd2c7c8ae5301ed..., peer 127.0.0.1:9879 - 1a245d2
info 2021-10-22T22:28:31.501 net-1 net_plugin.cpp:1604 set_state ] old state in sync becoming head catchup
...
Perhatikan bahwa node 4 belum menghasilkan blok, tetapi menerima/menyinkronkannya dari node lain, seperti node booting, node 1, 2, dan 3, untuk saat ini.
Pada titik ini, semua node baru 1, 2, 3, 4 diluncurkan dan terhubung. Semua node tersebut menerima dan menyinkronkan blok yang dihasilkan oleh node booting, tetapi belum menghasilkan block. Untuk itu, produsen baru harus dipilih. Dalam deployment produksi, pengguna biasanya akan memilih hingga 30 produsen dari kumpulan calon produsen dalam perintah voting. 21 produsen teratas akan terpilih sebagai produsen blok.
Di sini, Anda akan menggunakan akun produsen yang ada untuk memilih empat produsen yang tersedia. Setelah 15% pasokan token SYS di-staking, produsen terpilih teratas kemudian diusulkan untuk produksi. Setelah blok yang berisi daftar produsen dikonfirmasi dan menjadi final, produsen baru mulai memproduksi blok pada putaran terjadwal berikutnya.
- Gunakan perintah cleos system voteproducer prods untuk memilih produsen tertentu. Akun producer.one memilih akun itu sendiri, produsen 2, 3, dan 4. producer.two memilih akun itu sendiri, produsen 3 dan 4. produc.three, dan produce.four; lalu produc.three memilih akun itu sendiri dan produce.four; lalu produce.four memilih akun itu sendiri.
cleos system voteproducer prods producer.one producer.one producer.two produc.three produce.four
cleos system voteproducer prods producer.two producer.two produc.three produce.four
cleos system voteproducer prods produc.three produc.three produce.four
cleos system voteproducer prods produce.four produce.four
Responsnya akan terlihat seperti ini:
executed transaction: 833178bdc9d5b8c86778fa2b2c0f20e976f4c253cb6ebcaa6ade8eb8bf3d0a4f 144 bytes 861 us
# eosio <= eosio::voteproducer {"voter":"producer.one","proxy":"","producers":["produc.three","produce.four","producer.one","produc...
executed transaction: 9c4961678017bfc2a7fd1398a2e4b33e472a6cadc0340400ebe9207e188d7692 136 bytes 379 us
# eosio <= eosio::voteproducer {"voter":"producer.two","proxy":"","producers":["produc.three","produce.four","producer.two"]}
executed transaction: d3d23bae8730f18e82da53defaff7184c49b83181bb9b6fa32096684e61ed74d 128 bytes 371 us`
# eosio <= eosio::voteproducer {"voter":"produc.three","proxy":"","producers":["produc.three","produce.four"]}
executed transaction: 95f63d46554dd436388e36b017b8e350514ef5b407b1c33c5779dc29c862cdb6 120 bytes 304 us`
# eosio <= eosio::voteproducer {"voter":"produce.four","proxy":"","producers":["produce.four"]}
- Periksa persentase suara yang diberikan untuk setiap produsen:
cleos system listproducers
Respons untuk perintah di atas akan terlihat seperti ini:
Producer Producer key Url Scaled votes
produce.four EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8qHjmRjFxTyhh2vxvF5d https://produce.four.com/EOS5y3Tm1czTCia3o3JidVKmC78J9gRQU8 0.4000
produc.three EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6 https://produc.three.com/EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNj 0.3000
producer.two EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC https://producer.two.com/EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuE 0.2000
producer.one EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz https://producer.one.com/EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8 0.1000
Perhatikan bahwa produsen 1 memperoleh 10% suara, lalu produsen 2 memperoleh 20%, produsen 3 memperoleh 30%, dan terakhir produsen 4 memperoleh 40%. Karena jumlah total token SYS yang di-staking oleh semua produsen lebih dari 15% dari pasokan token, 21 produsen teratas (secara default) akan diusulkan untuk produksi blok.
Produksi itu sendiri akan dimulai setelah blok yang berisi daftar produsen blok dikonfirmasi sebagai final. Karena hanya ada empat produsen, semuanya akan memproduksi, dan mayoritas super akan tercapai dengan tiga di antaranya.
- Periksa apakah produsen baru memang menghasilkan blok:
tail -f nodes/01-node/01.log | grep Produced
Perintah di atas akan menampilkan blok terakhir yang dihasilkan oleh Produsen 1. Jika Anda belum melihat output apa pun, tunggu beberapa detik. Ada empat produsen yang masing-masing menghasilkan 12 blok setiap 6 detik. Jadi, harus ada jeda 18 detik antara blok terakhir yang dihasilkan dan blok pertama untuk putaran berikutnya.
Responsnya akan terlihat seperti ini:
info 2021-10-28T15:31:47.904 nodeos producer_plugin.cpp:2333 produce_block ] Produced block adeb43a9249e0ef8...` **`#7035`** `@ 2021-10-28T15:31:48.000 signed by` **`producer.one`** `[trxs: 0, lib: 6998, confirmed: 36]
info 2021-10-28T15:31:48.400 nodeos producer_plugin.cpp:2333 produce_block ] Produced block 991c7f7addb6006e...` **`#7036`** `@ 2021-10-28T15:31:48.500 signed by` **`producer.one`** `[trxs: 0, lib: 6998, confirmed: 0]
...
info 2021-10-28T15:31:52.901 nodeos producer_plugin.cpp:2333 produce_block ] Produced block c947dfab144600f7...` **`#7045`** `@ 2021-10-28T15:31:53.000 signed by` **`producer.one`** `[trxs: 0, lib: 6998, confirmed: 0]
info 2021-10-28T15:31:53.300 nodeos producer_plugin.cpp:2333 produce_block ] Produced block c871f71b3ebe9151...` **`#7046`** `@ 2021-10-28T15:31:53.500 signed by` **`producer.one`** `[trxs: 0, lib: 6998, confirmed: 0]`
Jika Anda menunggu 18 detik lagi, Anda akan melihat 12 blok berikutnya dihasilkan, dan seterusnya. Anda juga dapat memeriksa apakah tiga node lainnya memang menghasilkan blok dengan mengganti 01 pada perintah di atas dengan 02, 03, 04.
-
Tekan Ctrl+C untuk keluar dari perintah tail.
-
Periksa apakah node booting tidak lagi menghasilkan blok:
tail -f nodes/00-boot/00.log | grep Produced
Perhatikan bahwa perintah di atas tidak akan menghasilkan output apa pun, yang menunjukkan bahwa node booting melepaskan produksi blok ke produsen baru yang terpilih.
Setelah memiliki blockchain yang berfungsi penuh dengan empat produsen, Anda harus mencabut semua kemampuan akun eosio default dan akun eosio.* terkait untuk menandatangani transaksi dan mengubah status di blockchain. Untuk itu, Anda harus melepaskan kunci yang digunakan oleh akun eosio dan eosio.* dengan meresetnya ke null.
- Dapatkan informasi akun eosio. Perhatikan kunci yang terkait dengan izin owner dan active:
cleos get account eosio
Responsnya akan terlihat seperti ini:
created: 2018-06-01T12:00:00.000
privileged: true
permissions:
owner 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
active 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
memory:
quota: unlimited used: 2.989 MiB
net bandwidth:
used: unlimited
available: unlimited
limit: unlimited
cpu bandwidth:
used: unlimited
available: unlimited
limit: unlimited
SYS balances:
liquid: 599999509.0258 SYS
staked: 0.0000 SYS
unstaking: 0.0000 SYS
total: 599999509.0258 SYS
- Lepaskan kunci yang digunakan oleh akun eosio dan tautkan izinnya ke akun eosio.prods:
cleos push action eosio updateauth '{"account": "eosio", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": "active"}}]}}' -p eosio@owner
cleos push action eosio updateauth '{"account": "eosio", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": "active"}}]}}' -p eosio@active
cleos get account eosio
Responsnya akan terlihat seperti ini:
created: 2018-06-01T12:00:00.000
privileged: true
permissions:
owner 1: 1 eosio.prods@active
active 1: 1 eosio.prods@active
`memory:
quota: unlimited used: 2.989 MiB
net bandwidth:
used: unlimited
available: unlimited
limit: unlimited
cpu bandwidth:
used: unlimited
available: unlimited
limit: unlimited
SYS balances:
liquid: 599999509.0258 SYS
staked: 0.0000 SYS
unstaking: 0.0000 SYS
total: 599999509.0258 SYS
Perhatikan bahwa akun eosio tidak lagi memiliki kunci pengembangan default yang terkait dengan izin owner dan active. Sebagai gantinya, izin tersebut kini menjadi izin turunan dari izin induk eosio.prods@active. Ini adalah grup akun yang sama yang merepresentasikan semua produsen blok aktif.
Oleh karena itu, akun eosio kini pada dasarnya dikontrol oleh akun eosio.prods.
- Lepaskan kunci yang digunakan oleh akun eosio.* dan tautkan izinnya ke akun eosio:
cleos push action eosio updateauth '{"account": "eosio.bpay", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.bpay@owner
cleos push action eosio updateauth '{"account": "eosio.bpay", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.bpay@active
cleos push action eosio updateauth '{"account": "eosio.msig", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.msig@owner
cleos push action eosio updateauth '{"account": "eosio.msig", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.msig@active
cleos push action eosio updateauth '{"account": "eosio.names", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.names@owner
cleos push action eosio updateauth '{"account": "eosio.names", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.names@active
cleos push action eosio updateauth '{"account": "eosio.ram", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.ram@owner
cleos push action eosio updateauth '{"account": "eosio.ram", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.ram@active
cleos push action eosio updateauth '{"account": "eosio.ramfee", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.ramfee@owner
cleos push action eosio updateauth '{"account": "eosio.ramfee", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.ramfee@active
cleos push action eosio updateauth '{"account": "eosio.saving", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.saving@owner
cleos push action eosio updateauth '{"account": "eosio.saving", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.saving@active
cleos push action eosio updateauth '{"account": "eosio.stake", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.stake@owner
cleos push action eosio updateauth '{"account": "eosio.stake", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.stake@active
cleos push action eosio updateauth '{"account": "eosio.token", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.token@owner
cleos push action eosio updateauth '{"account": "eosio.token", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.token@active
cleos push action eosio updateauth '{"account": "eosio.vpay", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.vpay@owner
cleos push action eosio updateauth '{"account": "eosio.vpay", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.vpay@active
cleos push action eosio updateauth '{"account": "eosio.rex", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.rex@owner
cleos push action eosio updateauth '{"account": "eosio.rex", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": "active"}}]}}' -p eosio.rex@active
Sekarang akun eosio.* tidak lagi memiliki kunci pengembangan default yang terkait dengan izin owner dan active. Sebagai gantinya, izin tersebut kini menjadi izin turunan dari izin induk eosio@active, yang pada gilirannya merupakan izin turunan dari akun eosio.prods@active.
Oleh karena itu, semua akun sistem, termasuk eosio, pada dasarnya dikontrol oleh akun eosio.prods, yang mewakili grup akun dari semua produsen blok aktif. Terakhir, Anda telah membangun blockchain EOSIO multi-node yang beroperasi sepenuhnya.
Klik Periksa progres saya untuk memverifikasi tujuan.
Beralih dari produsen satu node ke produsen multi-node
Selamat!
Dalam lab ini, Anda memperluas blockchain EOSIO satu node yang di-deploy sebelumnya ke jaringan multi-blockchain. Anda juga menginstal berbagai komponen software EOSIO untuk menyiapkan blockchain EOSIO multi-node. Terakhir, Anda melakukan beberapa tugas operator node di blockchain EOSIO baru Anda.
Langkah berikutnya/Pelajari lebih lanjut
Sertifikasi dan pelatihan Google Cloud
...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui pada 12 Desember 2024
Lab Terakhir Diuji pada 22 Oktober 2024
Hak cipta 2026 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.