Universal Ledger mendukung kontrak yang dapat diprogram yang dapat di-deploy dalam jaringan untuk mengotomatiskan dan menegakkan perjanjian di antara peserta yang tertarik.
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, aktifkan Cloud Shell. Google Cloud
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 berupa akun yang sama dengan pemilik kontrak.Secara opsional, Siapkan Universal Ledger CLI agar dapat menandatangani dan mengirimkan transaksi atas nama akun pengguna ini.
Peran Universal Ledger dapat ditetapkan ke Akun Pengguna saat dibuat oleh Pengelola Akunnya, pada saat CreateAccount transaksi dikirimkan, atau diubah nanti melalui AddRoles transaksi jika akun sudah ada. Untuk tujuan eksperimen, Anda juga dapat menggunakan Universal Ledger CLI untuk Mengelola akun.
Menyiapkan lingkungan Anda
Untuk menyederhanakan penyiapan, tutorial ini 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 menarik image Docker gculpyc, menentukan alias untuk menjalankan program biner, dan mengonfirmasi bahwa program biner berfungsi.
docker pull us-docker.pkg.dev/gcul-artifacts/images/client/gculpyc:previewalias gculpyc="docker run --rm -i --user $(id -u):$(id -g) \ --volume .:/workspace --workdir /workspace \ us-docker.pkg.dev/gcul-artifacts/images/client/gculpyc:preview"gculpyc --help
Menulis kontrak
GCULpy adalah bahasa yang digunakan untuk menulis kontrak untuk Universal Ledger. GCULpy adalah subset Python yang diketik secara statis, yang dioptimalkan untuk logika kontrak yang jelas, dapat diaudit, dan mudah 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 Python yang ketat, 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 berikut:
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 mensimulasikan jaringan Universal Ledger secara native dalam lingkungan Python. Dengan demikian, Anda 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 ke dalam 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.
Saat 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 yang memiliki
ROLE_CONTRACT_PARTICIPANT dapat mengirimkan
InvokeContractMethod
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 membuat kueri dan mengambil detail akun Universal Ledger.
Dengan menggunakan Universal Ledger CLI, Anda dapat menjalankan:
ul-cli accounts describe --alias counter-contractTindakan ini akan mengonfirmasi bahwa nilai penghitung kini ditetapkan ke 1, sehingga 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.