AOに適用される契約運営の仕組みを知りたいですか?それでは、契約コードを取得して調べてみましょう。 Python アプレットを使用すると、指定したプロセスのコントラクトを簡単に取得できます。
作者: チョヒヤ
によってレビューされました: outprog
出典: コンテンツ ギルド - ニュース
AOの紹介
AOとは何ですか?
AO テストネットがリリースされてからまだ半年も経っていないため、AO とは何か、プロセスとは何か、ライフスタイルなど、プロセスとスマート コントラクトを中心に、AO に関する内容が多くなっています。プロセスのサイクル。最後に、Process のコントラクト コードを表示する方法に焦点を当てます。
AO は、分散ストレージの改良に基づいて Arweave によってさらに開発されたコンピューティング機能であり、イーサリアムの計算が先でストレージが後という開発パスに対応する、包括的な分散アプリケーションのサポートを実現することを目的としています。簡単に言えば、AO は Arweave プラットフォーム上のスマート コントラクトまたはコンピューティング能力を表し、永続ストレージ ソリューション上の論理レイヤー拡張です。
AOはMU/SU/CUの3つのユニットで構成されています
MU: ユーザーが送信したメッセージを受信して、メッセージが署名されていることを確認します。
SU: メッセージにタイムスタンプを付けて並べ替えてから、バンドルして Arweave にパブリッシュします。 SUは今日使用する主人公でもあり、後で契約を見直すときに重要な役割を果たします。
CU: メッセージを処理し、結果を計算します。
AO で実行されているプロセスとは何ですか?
AO は本質的に、データ プロトコルに基づいて構築されたスーパー並列コンピュータであり、データは AO で定義された基本要素メッセージの形式で存在します。次に、プロセスはメッセージの処理において重要な役割を果たし、AO でメッセージを処理するための基本単位です。プロセスは CU 上で実行され、CU 上の仮想マシンとみなすことができます。したがって、Process には、ネットワーク内でメッセージを送受信する基本的な機能が含まれています。次に、開発者は、プロセスにハンドラーを追加することで、プロセスのメッセージ処理機能を構築します。後で説明するコントラクトは、Process にメッセージを送信し、組み込みの _eval ハンドラーを使用することによって実際にデプロイされます。追加されたハンドラーは、コントラクトのメッセージ処理関数として理解できます。
プロセスのライフサイクル
現在の世界に類似点を見つけたい場合は、docker のコンテナー (Container) がプロセスの良い比較と理解になると思います。次に、docker のコンテナーのライフ サイクルのアナロジーを使用して、プロセスのライフ サイクルを比較します。
Docker でのコンテナの作成はイメージ (イメージ) に依存していることは誰もが知っています。たとえば、MySQL イメージに基づいて MySQL コンテナを作成すると、このコンテナ上で MySQL サービスを呼び出すことができます。 AO のプロセスも同様で、プロセスの作成はモジュールによって異なり、最も単純なモジュール、スケジュールされたタスクをサポートするモジュール、および sqlite を含むモジュールもあります。現在、開発者が独自のプロセスを作成するために選択できるモジュールが数百あります。さらに、独自のカスタム モジュールを作成することもできます。近い将来、GPUをサポートするモジュールや、さまざまなAI機能をサポートするモジュールも登場すると思います。
AOでの処理もdockerでのコンテナとは異なります。 Docker のコンテナーは、開始、停止、削除などのさまざまなアクションをサポートします。現在、AO のプロセスにはそのような操作はありません。結局のところ、分散型アプリケーションの世界では、集中型の個人によって制御されるこれらの機能は非常に矛盾しています。 AO でのプロセスの実行は、プロセス自体の値に完全に依存します。プロセスに十分な価値がある場合、より多くの CU がそれを実行しようとします。逆に、プロセスに価値がない場合、実行しようとする CU は存在しません。その後、このプロセスは静かに消えます。
評価機能とAOコントラクトの展開
AO契約とは何ですか?イーサリアムのスマートコントラクトを比較します。 AO 上で実行されるプロセス中の Lua コードは、ほぼスマート コントラクトとみなすことができます。
プロセスを作成すると、ロードされた各モジュールには 2 つのデフォルト ハンドラー (ハンドラーは他のプロセスにオープンな関数として理解できます) があり、そのうちの 1 つは _eval ハンドラーです。このハンドラーの主な機能は、Lua コードを実行することです。たとえば、aos に 1+1 を入力すると、2 が返され、このハンドラーによって処理されます。次に、コントラクトをデプロイするとは、実際にはプロセスにメッセージを送信し、_eval ハンドラーを通じてビジネス ロジックを処理できるカスタム ハンドラーをプロセスに追加することを意味します。
注意すべき点が 1 つあります。以下のコードを参照してください。これは、公式のオープンソース AO プロジェクトの process.lua のコード セクションです。 _eval ハンドラーは、メッセージの送信者がプロセスの所有者と一致する場合にのみ実行できます (所有者はコントラクト作成時のウォレット アドレスです)。言い換えれば、Owner が nil に設定されている場合 (つまり、プロセスに所有者が存在しないように設定されている場合)、このプロセスのコントラクトは誰も変更できないコントラクトになります。
さらに、AO は実際にはストレージベースのコンセンサス パラダイム (SCP、ストレージベースのコンセンサス パラダイム) に基づいて構築されているため、実行中のコントラクトは「ストレージ コンセンサス」、つまり、プロセス内で実行されているすべてのメッセージ上で見つかる必要があります。 _eval ハンドラーによってデプロイされたコントラクト コードは Arweave に保存されます。したがって、この「ストレージコンセンサス」の契約コードは誰でも見つけることができます。
契約書を見る
さて、今日のテーマは、契約コードを見つける方法です。以下に 2 つの方法を紹介し、コントラクトをキャプチャする Python プログラムを示します。
アルウィーブ
最初の方法は、もちろん Arweave で直接クエリを実行することです (graphql https://arweave.net/graphql を使用できます)。このアプローチを使用するには、データを Arweave にパックする必要があります。
SU - ブラウザ
2つ目の方法は、今回主に紹介した方法です。すべてのデータは SU 経由でアップロードされるため、SU でクエリを実行することもできます。個人的には、各 SU には独自にアップロードされたデータのローカル キャッシュがあるため、SU にクエリを実行することで対応する契約コードを見つけることができると考えています。まず、ブラウザにアドレスを入力して直接クエリを実行できます。ただし、この方法には明らかな欠点もあります。 1. 一部のプロセスは大量のメッセージを送受信するため、チェーンにアップロードされるデータの量も膨大になります。ただし、ブラウザが読み込めるデータは限られており、ブラウザのクラッシュが頻繁に発生します。 2. 膨大なデータの中から必要な契約データを絞り出すことが難しい。
以下の図は、2 つのタイムスタンプ内のプロセス ID m3PaWzK4PTG9lAaqYQPaPdOcXdO8hYqi5Fe9NWqXd0w を持つプロセス (AO トークン プロセス) のすべてのメッセージを示しています。
SU-SDK
ここでは、業界リーダーが作成した Python ベースの ao SDK を使用して、Action が Eval であるメッセージをフィルターで除外する小さなプログラムを作成しました。 (アクションが Eval であるメッセージは、ロードされたコントラクト コードを含め、_eval ハンドラーによって処理されるすべてのメッセージです。) 次の図は、SU から取得したメッセージで、データ フィールドの内容が文字エスケープされています。もちろん、キャプチャされたメッセージには、1 + 1 の実行など、デプロイメント以外のコントラクト コードのコンテンツも含まれます。ただし、フィルタリング後のメッセージの数はそれほど多くなくなり、契約コードを手動で選択できるようになりました。
このプログラムはオープンソースです。Github アドレスは次のとおりです: https://github.com/txohyeah/ao-sc
AOトークンコントラクト
それでは、気合を入れてaoトークンのコントラクトコードを見てみましょう。 (キャプチャされたコントラクト コードもオープン ソース コード ウェアハウスに配置されます)
まず、状態を初期化する際に、ビットコインの発行と矛盾しないようにTotalSupply = "21000000000000000000"と定義します。
Demination = Demination または 12 は、小数点が 12 桁であることも定義します。
100,000ブロックが生成される前に転送関数が実行された場合は、直接「転送がロックされています」を返すように定義されています。
5分ごとにブロックが生成されるので、10万ブロックは来年の2月頃となります。
さらに関連する情報があるため、詳細は説明しません。誰もがこの古典的な AO 契約を楽しく閲覧できます。
プログラム命令
上でキャプチャしたコントラクトコードを紹介しました。次にこのプログラムを簡単に紹介します。とてもシンプルなので、コードを知らない人でも簡単に使えると思います。
最初のステップは、Python 3.12 バージョンをインストールすることです。プログラムはPythonで書かれており、Pythonのインストールが必要です。
2 番目のステップは、必要なパッケージをインストールすることです。このプログラムは、業界リーダーと everpay の SDK に依存しています。
3 番目のステップは、fetch_sc_record.py の start_time / end_time / process を変更することです。 fetch_sc_record.pyを実行します。
start_time と end_time は、キャプチャする必要がある期間です。 process は、コントラクトを取得するために必要なプロセスの ID です。
4 番目のステップでは、対応する Eval メッセージが msg_eval.json ファイルに表示されます。メッセージを参照すると、必要な契約コードが見つかります。
PS: aos の実行と同じである必要もあります。 HTTPS_PROXYを設定します。
🏆 「バグを捕まえた」場合の賞品: この記事内でタイプミス、間違った文章、または間違った説明を見つけた場合は、私をクリックして報告してください。インセンティブが与えられます。
免責事項: この記事は PermaDAO の見解や立場を表すものではありません。 PermaDAO は、投資アドバイスを提供したり、プロジェクトを推奨したりすることはありません。読者は、居住国の法律を遵守し、準拠して Web3 活動を行うことが求められます。
🔗 PermaDAO について:ウェブサイト | ツイッター | 電報 | 不和| 中 | YouTube