Universal Ledger mendukung kontrak yang dapat diprogram yang dapat di-deploy dalam jaringan untuk mengotomatiskan dan menerapkan perjanjian di antara peserta yang berkepentingan.
Tutorial ini menunjukkan kepada developer langkah-langkah yang diperlukan untuk mengembangkan, men-deploy, dan berinteraksi dengan kontrak yang dapat diprogram di jaringan Universal Ledger.
Sebelum memulai
Untuk menyelesaikan tutorial ini, Anda memerlukan:
-
Di konsol Google Cloud , aktifkan Cloud Shell.
Akun pengguna Universal Ledger dengan
ROLE_CONTRACT_CREATOR. Akun ini akan menjadi pemilik kontrak.Satu atau beberapa akun pengguna Universal Ledger dengan
ROLE_CONTRACT_PARTICIPANT. Akun ini dapat sama dengan akun pemilik kontrak.Secara opsional, Siapkan CLI Universal Ledger agar dapat menandatangani dan mengirimkan transaksi atas nama akun pengguna ini.
Peran Universal Ledger dapat ditetapkan ke Akun Pengguna saat dibuat oleh Pengelola Akun, pada saat transaksi CreateAccount-nya dikirimkan, atau diubah nanti melalui transaksi AddRoles jika akun sudah ada. Untuk tujuan eksperimen, Anda juga dapat menggunakan CLI Universal Ledger untuk Mengelola akun.
Menyiapkan lingkungan Anda
Untuk menyederhanakan penyiapan, tutorial ini telah ditulis untuk lingkungan default yang disediakan dalam sesi Cloud Shell. Anda mungkin perlu mengubah perintah ini jika menggunakan lingkungan yang berbeda.
Compiler gculpyc mengambil kode sumber yang ditulis dalam bahasa GCULpy dan menghasilkan bytecode untuk Universal Ledger.
Jalankan setiap perintah berikut untuk mengambil image Docker gculpyc, menentukan
alias untuk menjalankan biner, dan mengonfirmasi bahwa biner berfungsi.
docker pull us-docker.pkg.dev/gcul-artifacts/images/client/gculpyc:stablealias gculpyc="docker run --rm -i --user $(id -u):$(id -g) \ --volume .:/workspace --workdir /workspace \ us-docker.pkg.dev/gcul-artifacts/images/client/gculpyc:stable"gculpyc --help
Tulis kontrak Anda
GCULpy adalah bahasa yang digunakan untuk menulis kontrak untuk Universal Ledger. Vyper adalah subset Python yang diketik secara statis, dioptimalkan untuk logika kontrak yang jelas, dapat diaudit, dan dapat dipahami. Desain ini memprioritaskan penulisan kode yang aman dan membatasi perilaku yang tidak terduga atau tidak aman. Untuk mengetahui detail selengkapnya, lihat referensi Bahasa GCULpy.
Karena GCULpy adalah subset ketat Python, Anda dapat terus menggunakan lingkungan pengembangan terintegrasi (IDE) pilihan Anda bersama dengan alur kerja dan praktik pengembangan yang ada.
Sebagai contoh, kode Anda dapat terlihat seperti:
import gcul
class Counter(gcul.Contract):
"""Example contract implementing a counter."""
value: int
def increment(self) -> None:
"""Increments the counter value by 1."""
self.value += 1
Salin kode contoh ini dan simpan ke dalam file bernama counter.py.
Menguji secara lokal
Dalam waktu dekat, developer akan memiliki akses ke lingkungan simulasi lokal. Disediakan sebagai bagian dari modul Python gcul, modul ini dirancang untuk
menyediakan fungsi yang diperlukan untuk menyimulasikan jaringan Universal Ledger
secara native dalam lingkungan Python. Dengan demikian, Anda akan dapat menjalankan kontrak
secara lokal dan menulis pengujian unit menggunakan framework pengujian pilihan Anda, sehingga memastikan
keandalan dan kebenaran kontrak Anda sebelum deployment.
Mengompilasi kontrak
Kompilasi kode sumber kontrak sebelumnya menjadi bytecode menggunakan perintah gculpyc berikut:
gculpyc --source_file counter.py --output_file counter.binMen-deploy kontrak
Deploy kontrak ke jaringan Universal Ledger dengan mengirimkan transaksi CreateContract yang ditandatangani oleh akun pengguna yang memiliki ROLE_CONTRACT_CREATOR.
Jika menggunakan Universal Ledger CLI, Anda dapat melakukannya dengan menjalankan perintah:
ul-cli contracts create \
--alias counter-contract \
--sender OWNER_ALIAS \
counter.binGanti kode berikut:
OWNER_ALIAS: alias akun pengguna denganROLE_CONTRACT_CREATOR.
Setelah transaksi diselesaikan, output perintah ini akan menyertakan ID kontrak yang baru di-deploy. Contoh:
Contract created: 1:CTR:005XvYfiSm3913Jwv4y8HVQucStJ2Ev15Sar6A1kNNX10
Memanggil metode kontrak
Setelah kontrak di-deploy, akun pengguna mana pun dengan
ROLE_CONTRACT_PARTICIPANT dapat mengirimkan
transaksi InvokeContractMethod
untuk memanggil salah satu metode publik dalam kontrak.
Jika menggunakan Universal Ledger CLI, Anda dapat melakukannya dengan menjalankan perintah:
ul-cli contracts invoke \
--alias counter-contract \
--method-name increment \
--sender PARTICIPANT_ALIASGanti kode berikut:
PARTICIPANT_ALIAS: alias akun pengguna denganROLE_CONTRACT_PARTICIPANT.
Membaca status kontrak
Untuk mengakhiri tutorial ini, Anda dapat mengirimkan permintaan QueryAccount untuk membaca dan memverifikasi status kontrak yang disimpan di ledger. Ini adalah metode API yang sama yang digunakan untuk mengkueri dan mengambil detail akun Universal Ledger apa pun.
Dengan menggunakan Universal Ledger CLI, Anda dapat menjalankan:
ul-cli accounts describe --alias counter-contractTindakan ini akan mengonfirmasi bahwa nilai penghitung sekarang ditetapkan ke 1, yang menghasilkan output seperti:
Account: 1:CTR:005XvYfiSm3913Jwv4y8HVQucStJ2Ev15Sar6A1kNNX10
Contract account details:
Owner: 1:USR:XCL:022uF6cVkTJBaa6pViqTuYqP4455jnRbRc4bWannZGg0b
Contract fields:
value: int64_value:1
Balances:
None
Langkah berikutnya
- Pelajari referensi bahasa GCULpy.
- Pelajari transaksi lain yang dapat Anda kirimkan ke jaringan.