Ingin tahu mekanisme operasi kontrak yang diterapkan di AO? Jadi mari kita ambil kode kontraknya dan cari tahu. Gunakan applet python untuk dengan mudah mendapatkan kontrak Proses yang ditentukan.

Penulis: txohyeah

Diulas oleh: outprog

Sumber: Persatuan Konten - Berita

Pengantar AO

Apa itu AO?

Kurang dari setengah tahun telah berlalu sejak testnet AO dirilis, dan ada banyak konten tentang AO. Isi artikel ini terutama berfokus pada Proses dan kontrak pintar, termasuk apa itu AO, apa itu Proses, dan kehidupan siklus Proses. Terakhir, kami akan fokus pada cara melihat kode kontrak Proses.

AO adalah fungsi komputasi yang dikembangkan lebih lanjut oleh Arweave berdasarkan peningkatan penyimpanan terdistribusi. Hal ini bertujuan untuk mencapai dukungan aplikasi terdesentralisasi yang komprehensif, sesuai dengan jalur pengembangan perhitungan Ethereum terlebih dahulu dan penyimpanan kemudian. Sederhananya, AO mewakili kontrak pintar atau daya komputasi pada platform Arweave dan merupakan ekstensi lapisan logis di atas solusi penyimpanan permanennya.

AO terdiri dari tiga unit, MU/SU/CU

MU: Menerima pesan yang dikirim oleh pengguna untuk memastikan mereka ditandatangani.

SU: Stempel waktu dan urutkan pesan, lalu bundel dan publikasikan ke Arweave. SU juga merupakan protagonis yang akan kita gunakan hari ini, dan akan memainkan peran penting saat meninjau kontrak nanti.

CU: Memproses pesan dan menghitung hasilnya.

Apa Proses yang berjalan di AO?

AO pada dasarnya adalah komputer super paralel yang dibangun berdasarkan Protokol Data, di mana Data ada dalam bentuk elemen dasar Pesan yang didefinisikan dalam AO. Kemudian Proses berperan penting dalam memproses Pesan dan merupakan unit dasar untuk memproses pesan di AO. Proses berjalan di CU dan dapat dianggap sebagai mesin virtual di CU. Oleh karena itu, Proses berisi kemampuan dasar untuk menerima dan mengirim pesan dalam jaringan. Kemudian pengembang membangun kemampuan pemrosesan pesan untuk Proses dengan menambahkan penangan ke Proses. Kontrak yang akan dibahas nanti sebenarnya diterapkan dengan mengirimkan pesan ke Proses dan kemudian menggunakan handler _eval bawaan. Penangan yang ditambahkan dapat dipahami sebagai fungsi pemrosesan pesan dalam kontrak.

Siklus hidup proses

Jika kita ingin mencari analogi di dunia kita saat ini, maka menurut saya container (Container) di docker bisa menjadi perbandingan dan pemahaman yang baik tentang Proses. Selanjutnya, saya akan menggunakan analogi siklus hidup Container di buruh pelabuhan untuk membandingkan siklus hidup Proses.

Kita semua tahu bahwa pembuatan Container di docker bergantung pada sebuah image (Image). Misalnya, membuat Container MySQL berdasarkan Image MySQL, dan kemudian Anda dapat memanggil layanan MySQL pada container ini. Hal yang sama berlaku untuk Proses di AO. Pembuatan Proses bergantung pada Modul, dan juga akan ada Modul dengan fungsi berbeda. Ada Modul yang paling sederhana, Modul yang mendukung tugas terjadwal, dan Modul yang menyertakan sqlite. Saat ini terdapat ratusan Modul yang dapat dipilih oleh pengembang untuk membuat Proses mereka sendiri. Selain itu, Anda juga dapat membuat Modul kustom Anda sendiri. Saya yakin dalam waktu dekat juga akan ada modul yang mendukung GPU dan modul yang mendukung berbagai kemampuan AI.

Proses di AO juga berbeda dengan Container di buruh pelabuhan. Kontainer di Docker mendukung berbagai tindakan seperti memulai, menghentikan, dan menghapus. Saat ini, tidak ada operasi seperti itu dalam Proses AO. Lagi pula, dalam dunia aplikasi yang terdesentralisasi, fungsi-fungsi ini dikendalikan oleh individu yang terpusat sangat tidak konsisten. Berjalannya suatu Proses di AO bergantung sepenuhnya pada nilai dari Proses itu sendiri. Jika memiliki nilai yang cukup, maka pasti akan lebih banyak CU yang mau menjalankannya itu. Maka Proses ini akan hilang secara diam-diam.

Fungsi evaluasi dan penerapan kontrak AO

Apa itu kontrak AO? Bandingkan kontrak pintar Ethereum. Kode Lua dalam Proses yang berjalan di AO dapat dianggap sebagai kontrak pintar.

Saat kita membuat sebuah Proses, setiap Modul yang dimuat akan memiliki dua penangan default (penangan dapat dipahami sebagai fungsi yang terbuka untuk Proses lain), salah satunya adalah penangan _eval. Fungsi utama dari handler ini adalah untuk menjalankan kode Lua. Misalnya, jika Anda memasukkan 1+1 di aos, angka 2 akan dikembalikan, yang diproses oleh handler ini. Kemudian menerapkan kontrak sebenarnya berarti mengirimkan pesan ke Proses, dan menambahkan Handler khusus yang dapat menangani logika bisnis ke Proses melalui _eval handler.

Ada satu hal yang perlu diperhatikan, silakan lihat kode di bawah ini. Ini adalah bagian kode di process.lua dalam proyek AO sumber terbuka resmi. Handler _eval hanya dapat dijalankan jika pengirim pesan konsisten dengan Pemilik Proses (Pemilik adalah alamat dompet saat kontrak dibuat). Dengan kata lain, jika Pemilik disetel ke nihil (yaitu, Proses disetel tidak memiliki Pemilik), maka kontrak dalam Proses ini menjadi kontrak yang tidak dapat diubah oleh siapa pun.

Selain itu, karena AO sebenarnya dibangun berdasarkan Paradigma Konsensus Berbasis Penyimpanan (SCP, Paradigma Konsensus Berbasis Penyimpanan), kontrak yang berjalan harus ditemukan pada "konsensus penyimpanan", yaitu semua pesan yang berjalan dalam Proses, termasuk melalui Kode kontrak yang digunakan oleh _eval handler disimpan di Arweave. Oleh karena itu, siapa pun dapat menemukan kode kontrak di "konsensus penyimpanan" ini.

Lihat kontrak

Jadi masuk ke topik hari ini, bagaimana cara menemukan kode kontrak? Di bawah ini saya akan memperkenalkan dua metode dan memberikan program Python untuk menangkap kontrak.

menenun

Cara pertama tentunya dengan query langsung di Arweave (bisa menggunakan graphql https://arweave.net/graphql). Pendekatan ini memerlukan data yang dikemas ke dalam Arweave agar berguna.

SU - Peramban

Metode kedua adalah metode yang banyak diperkenalkan saat ini. Karena semua data akan diunggah melalui SU, data tersebut juga dapat ditanyakan di SU. Menurut saya pribadi, setiap SU akan memiliki cache lokal dari data yang diunggahnya sendiri, sehingga kode kontrak yang sesuai dapat ditemukan dengan menanyakan SU. Pertama, Anda bisa query langsung dengan memasukkan alamat di browser. Namun, kekurangan dari metode ini juga jelas: 1. Beberapa Proses mengirim dan menerima pesan dalam jumlah besar, sehingga jumlah data yang diunggah ke rantai juga sangat besar. Namun, data yang dapat dimuat oleh browser terbatas, dan browser sering mengalami crash. 2. Sulit untuk menyaring data kontrak yang Anda inginkan dari data yang sangat besar.

Gambar di bawah menunjukkan semua pesan proses (proses token AO) dengan id proses m3PaWzK4PTG9lAaqYQPaPdOcXdO8hYqi5Fe9NWqXd0w dalam dua stempel waktu.

SU - SDK

Di sini saya menulis sebuah program kecil, menggunakan ao SDK yang ditulis oleh pemimpin industri berdasarkan python, untuk menyaring pesan-pesan yang Actionnya adalah Eval. (Pesan yang Aksinya adalah Eval adalah semua pesan yang diproses oleh _eval handler, termasuk kode kontrak yang dimuat.) Gambar berikut adalah pesan yang saya ambil dari SU, di mana konten di bidang data adalah karakter yang lolos dari kode kontrak. Tentu saja, pesan yang diambil juga akan berisi konten kode kontrak non-penerapan, seperti mengeksekusi 1+1, dll. Namun, jumlah pesan setelah pemfilteran tidak lagi banyak, dan kode kontrak dapat dipilih secara manual.

Programnya sudah open source, berikut alamat githubnya: https://github.com/txohyeah/ao-sc

Kontrak token AO

Jadi mari bersemangat dan lihat kode kontrak token ao. (Kode kontrak yang diambil juga akan ditempatkan di gudang kode sumber terbuka)

Pertama, saat menginisialisasi status, TotalSupply = "210000000000000000000" didefinisikan agar konsisten dengan penerbitan Bitcoin.

Denominasi = Pecahan atau 12 juga mendefinisikan koma desimal menjadi 12 digit.

Didefinisikan bahwa jika fungsi transfer dijalankan sebelum 100.000 blok dibuat, "Transfer terkunci" akan langsung dikembalikan.

Karena satu blok dihasilkan setiap lima menit, 100.000 blok akan dihasilkan sekitar bulan Februari tahun depan.

Ada informasi yang lebih relevan, jadi saya tidak akan menjelaskan secara detail. Semua orang dapat dengan senang hati menelusuri kontrak AO klasik ini.

Instruksi program

Saya memperkenalkan kode kontrak yang diambil di atas. Selanjutnya, saya akan memperkenalkan program ini secara singkat. Sederhana sekali, saya yakin orang yang tidak tahu kode bisa menggunakannya dengan mudah.

Langkah pertama adalah menginstal python versi 3.12. Program ini ditulis dengan python, dan instalasi python diperlukan.

Langkah kedua adalah menginstal paket yang diperlukan. Program ini mengandalkan SDK para pemimpin industri dan everpay.

Langkah ketiga adalah memodifikasi start_time/end_time/proses di Fetch_sc_record.py. dan jalankan Fetch_sc_record.py.

start_time dan end_time adalah periode waktu yang perlu Anda ambil. proses adalah ID Proses yang Anda perlukan untuk mengambil kontrak.

Pada langkah keempat, pesan Eval yang sesuai akan muncul di file msg_eval.json. Jelajahi pesan dan Anda dapat menemukan kode kontrak yang Anda butuhkan!

PS: Harus sama juga dengan menjalankan aos. Setel HTTPS_PROXY.

🏆 Hadiah untuk "menangkap bug": Jika Anda menemukan kesalahan ketik, kalimat salah, atau deskripsi salah dalam artikel ini, klik saya untuk melaporkannya dan Anda akan mendapatkan insentif.

Penafian: Artikel ini tidak mewakili pandangan atau posisi PermaDAO. PermaDAO tidak memberikan saran investasi atau mendukung proyek apa pun. Pembaca diminta untuk mematuhi hukum negara tempat mereka berada dan melakukan aktivitas Web3 dengan patuh.

🔗 关于 PermaDAO:Website | Twitter | Telegram | Discord | Medium | Youtube