Algorandにおけるスマートコントラクトのベストプラクティス - Part 1 by ULAM LABS



Algorandにおけるスマートコントラクトのベストプラクティス - Part 1

by ULAM LABS


スマートコントラクトは、関数とコード行を接続し、両者の間で契約を成立させるものです。現在では、分散型アプリケーション/金融の一定の基準となっています。さらに、基礎となるブロックチェーンに結果を不変に記録することで、セキュリティを強化します。


私たちのチームは、スマートコントラクトの構築と監査に注力しています。そのため、スマートコントラクト作成のベストプラクティスをまとめた、私たちの知識のまとめを作成することにしました。スマートコントラクトに焦点を当てることとは別に、別の角度からAlgorandブロックチェーン上のスマートコントラクトにスポットを当てています。Algorandの公式パートナーとして、私たちはAlgorandプロジェクトの最高品質を信じ、Algorandの高度なオープンソース技術が、誰もが参加できるボーダレス経済を生み出すのに適していることを保証します。このブログ記事は、Ulam Labsブロックチェーン開発者のŁukasz Ptakと共同で執筆されました。



Algorandスマートコントラクトの利点


Algorandは、ブロックチェーン上でアプリを作成したい企業に強いメリットを提供します。主に、Algorandブロックチェーンはスケーラビリティを考慮したスマートコントラクト・プラットフォームとして設計されています。各ブロックに何千ものトランザクションを含めることができます。取引はそこに含まれた後すぐに確定されるため、確認のための待ち時間は5秒未満です。さらに、そこでの取引は非常に安価(〜0.001ドル)です。



この数ヶ月で開発者の体験はより良いものになり、ドキュメントは改善され、情報が不足している場合は、Discordチャンネルと公式フォーラムがあり、非常にアクティブなAlgorand開発者が質問に答えています。



セキュリティに関する主な戦略


  1. 多くの場合、アプリケーションのエンドポイントのいくつかは、特定の順序でしか呼び出すことができません。例えば、初期化ステップがあり、そのために特別な「initialize」エンドポイントが、他のインタラクションが起こる前に呼び出されなければなりません。同様に、特定のエンドポイントにのみアクセスできるようにする非推奨のステップがあるかもしれません。このような場合、アプリの現在の「フェーズ」を決定する特別なグローバルステート変数を用意し、各メソッドは、そのフェーズで実行されているかどうかをチェックするのがよいでしょう。マジックナンバーや暗示的な状態に依存しないようにしましょう。

  2. TEALv5のリリース以降、自分のアカウントから直接取引を行うことができるスマートコントラクトを作成することができるようになりました。このアプローチは、レガシーのSSC + エスクロー・ソリューションよりもはるかに安全です。

  3. トランザクションを検証する際には、特定のトランザクション・タイプに表示されるフィールドに細心の注意を払うこと。例えば、Algo転送の送り手と受け手のフィールドは、それぞれ「sender」「receiver」と呼ばれます。しかし、アセット転送の送り手と受け手は、それぞれ「sender」と 「assetreceiver」となります。「assetsender」フィールドは、標準的なASA転送とは全く無関係です。

  4. NoOpとは異なるOnCompleteを設定した名前付きメソッドを呼び出すことはできないはずです。 スマートコントラクトのエントリポイントを作成する場合、通常はまずOnCompleteコードに基づいて分岐し、NoOpの場合にのみ特定のメソッドに分岐するようにするのがよい方法でしょう。この例は、公式のPyTEALの紹介で見ることができます。

  5. エンドポイントの数は最小限にします。一般的に、公開するエンドポイントが少ないスマートコントラクトの方がテストしやすいです。

  6. スマートコントラクトの設計プロセスでは、状態遷移中に実行される計算の不変量について考えてください。その不変量が実際に保持されているかどうかをテストしてください。



スマートコントラクトのコードを高速に実行するための戦略


コントラクトのコードに関しては、コントラクトのサイズと実行コストという、注意すべき2つの重要な制約があります。デフォルトで700のオペコード・バジェットがあり、コントラクトは限られた量の操作しか行えません。このような小さな上限は意図的なもので、Algorandブロックチェーンが各ブロックで多くのアプリケーション・コールを処理できるようにするためです。スマートコントラクトの開発においても、多くの一般的なコード最適化技術が適用されます。



ここでは、Algorandに適用される最適化の例をいくつか紹介します。


  • 特定の操作のオペコード・コストに注意を払う。

  • ほぼすべてのBytes演算は一桁高いので、不要な場合はByte演算を使わないようにする。

  • 高価な計算をオフチェーンに移動させる。時には、複雑な式の結果をオフチェーンで計算し、その結果をオンチェーンで検証することが可能な場合があります(この方が、計算量を大幅に削減できる可能性があります)。


もし、オペコードの割り当てを越えてしまい、ワーストケースのパスに対して良い最適化ができない状況に陥った場合、単純に割り当てを増やした方が良い場合もあります。ただ、「早すぎる最適化は諸悪の根源である」ということは覚えておいてください。



TealとPyTeal言語に関する覚えておくべき重要な事実


PyTEALはアプリケーションに有用な抽象化をたくさん提供します。しかし、コンパイルされたコードで何が起こるのか、AVMがどのように動作するのかを知っておくことは重要です。PyTEALを直接デバッグすることはなかなかできないので、TEALの知識はデバッグ時にとても役に立ちます。各ブロックチェーンには、注意しなければならない多くの微妙な違いがあります。作成したソリューションごとに、一連のオンチェーンテストでアイデアを検証するのが最善です。


この記事は、Algorand上のスマートコントラクトに関する私たちの知識集の最初の部分に過ぎません。さらなる部分はすぐに続くでしょう。


あなたのアイデアを実現し、Algorand上でスマートコントラクトを作成することに興味があれば、ぜひ私たちにお知らせください。私たちは、クリプト関連のプロジェクトのあらゆる機会を受け入れます。



元記事:https://www.ulam.io/blog/smart-contracts-on-algorand-best-practises-part-1/