少し前に、私たちはTONの特徴とユーザーの資産のセキュリティについて、「TONの初見:アカウント、トークン、取引、資産のセキュリティ」で説明しました。Suiは、様々なアプリケーションシナリオに適した高速で安全な取引体験を提供することに焦点を当てています。この記事では、Suiのアカウントモデル、トークン管理、トランザクションメカニズム、資産セキュリティについて説明することで、読者がSuiを知る手助けをする。
32バイトのSuiアドレスを導き出すために。SuiはBLAKE2b(256ビット出力)ハッシュ関数を使用して、署名スキームフラグ(1バイト)と公開鍵バイトを連結します。 Suiアドレスは現在、純粋なEd25519、Secp256k1、Secp256r1、MultiSigをサポートしており、対応するフラグバイトはそれぞれ0x00、0x01、0x02、0x03です
Suiではすべてがオブジェクトです。転送処理中、オブジェクトに含まれる残高が希望する値と等しくない場合、オブジェクトを分割または統合する必要があります。例えば、100SUIを含むオブジェクトがあり、30SUIのみを譲渡したい場合、システムはオブジェクトを2つのオブジェクトに分割します:1つは30SUIを含み、もう1つは70SUIを含みます。逆に、より大きな金額が必要な場合は、複数の残高オブジェクトを組み合わせて、より大きな金額のオブジェクトを1つにすることができます。
Suiは公式にCoinの標準コードを実装しており、開発者はCoinを発行する際にコントラクトで`use sui::coin;`を呼び出すだけで、標準ライブラリのすべての機能を利用することができます。
Move言語を使用しており、ブロックチェーンで一般的に使用されている他のプログラミング言語(Solidityなど)とは異なるため、開発者が使用する際に理解し、注意する必要がある独自の特徴や機能がいくつかあります。center">
これは完全なCoin発行コントラクトです。Suiのスマートコントラクトの設計は、EtherやSolanaのようなブロックチェーンプラットフォームとは異なっており、ソースコードにはパーミッションの管理が見当たりません。この関数(coin::create_regulated_currency)を使ってCoinを作成すると、契約の作成者はTreasuryCapオブジェクトを受け取ります。このオブジェクトは新しいCoinを鋳造したり、既存のCoinを破棄したりするのに必要です。このオブジェクトにアクセスできるアドレスのみが、コインの発行を維持することができます。Coinを受け取ったユーザーにとって、彼のアカウントはトークンの所有権を管理し、トークンを使用するためにスマートコントラクトを呼び出すときに、これらのオブジェクトを渡してトランザクションに署名する必要があります。
トランザクションの仕組み
トランザクションはブロックチェーンの世界の基本的な概念で、ブロックチェーンと相互作用する方法です。取引はブロックチェーンの状態を変更するために使用され、そのための唯一の方法です。Suiが使用するプログラミング言語Moveでは、トランザクションはパッケージ内の関数を呼び出したり、新しいパッケージをデプロイしたり、既存のパッケージをアップグレードしたりするために使用されます。
トランザクションを構築する際に重要なのは、各トランザクションが誰を操作するのかを明示的に指定することである!これは、アカウント番号を渡す必要があるSolanaのトランザクションと多少似ている。
トランザクションの内容:
送信者 - トランザクションに署名したアカウント
送信者 - トランザクションに署名したアカウント
.li>コマンドのリスト(またはコマンドのチェーン) - 実行されるアクション
コマンドの入力 - コマンドのパラメータ:プレーンテキスト - 数値や文字列などの単純な値。Object -- トランザクションがアクセスするオブジェクト
Gas object -- トランザクションの支払いに使用されるCoinオブジェクト
Gas価格と予算 - 取引コスト
契約のセキュリティ
Suiはスマートコントラクトのプログラミング言語としてMoveを使用しています。スマートコントラクトのプログラミング言語としてMoveを使用することで、リエントリー攻撃、整数オーバーフロー、ダブルスペンド、DoS攻撃、コンパイラの問題など、Solidityの脆弱性の問題は解決されますが、開発者がコードにバグを持ち込むことを防ぐことはできません。
1.特権チェック:外部関数が受け取るオブジェクトのタイプを分析し、機密操作を伴う特権関数については、受け取るオブジェクトが特権オブジェクトであることを確認します。関数が特権オブジェクトを受け取って使用する場合、関数の呼び出し元がそのオブジェクトの正当な所有者でなければなりません。
2.外部関数のチェック:一部の関数自体は外部から直接呼び出すべきではありませんし、外部化すべきではない関数へのインターフェースがある場合、開発者はその関数を公開すべきではないことを提案する必要があります。
3.オブジェクトの解析チェック:Suiのオブジェクトは共有オブジェクトに変換することができるので、開発者は使用しているすべてのオブジェクトの型を整理し、それらがstaticかpublicかを確認し、エラーがないかチェックする必要があります。というエラーがあります。プライベートであるべきオブジェクトがパブリック・オブジェクトに変換されると、誰でもそのオブジェクトを使うことができるようになり、セキュリティ・リスクになります。
4.コインの枯渇チェック:Suiのトークン・モデルは他のチェーンとは異なり、トークン・オブジェクトが他のオブジェクトに含まれたり保持されたり、分割されたりするように設計されています。class=" list-paddingleft-2">
トークン・オブジェクトを直接別のオブジェクトに転送する。
トークン・オブジェクトを転送して、新しいオブジェクトを生成する。
トークン・オブジェクトを分割し、分割された部分を新しいオブジェクトに転送します。
そのため、トークンを消費する場合、開発者は以下をチェックする必要があります:
消費された量が正しいかどうか;
オブジェクトが転送されたかどうか;
分割があった場合、分割の量が正しいかどうか。
5.予言マシンによる価格操作攻撃:Suiの契約が予言マシンを使って価格を取得する場合、価格操作の可能性に注意することも重要です。開発者は、複数のデータソースとコンセンサスメカニズムを導入することで、単一のデータソースの操作リスクから保護することができます。さらに、時間加重平均価格は、予測マシンによる操作のリスクから保護するために使用することができます。
6.ガバナンス攻撃:ガバナンストークンの議決権がSuiのコントラクトでうまく設計されていない場合、ガバナンス攻撃のリスクもあり、この点では、いくつかの成熟した分散型組織のコミュニティガバナンスロジックを参考にすることができます。
7.裁定攻撃:ロジックがうまく設計されていない場合、Sui上のDeFi契約にも裁定攻撃のリスクがあります。開発者は、攻撃者に悪用されないように、開発中にコントラクトのロジックを注意深く見直す必要があります。
8.偽リチャージ攻撃:取引所や開発者がSuiトークンのリチャージを処理する際には、偽リチャージ攻撃を防ぐために、トランザクションのステータスが成功しているかどうか、トークンのパッケージIDが正しいかどうかをチェックすることにも注意を払う必要があります。
まとめ
本稿では、アカウントモデル、トークン管理、トランザクションメカニズム、コントラクトセキュリティを含むSuiの設計機能を簡単に説明した。Moveプログラミング言語を活用することで、Suiは革新的なデータモデルとオブジェクトストレージ手法を導入し、高いパフォーマンスと低いレイテンシを確保しながら、セキュリティと柔軟性を大幅に向上させている。他のブロックチェーンプラットフォームと比較して、Move言語は一般的なスマートコントラクトの脆弱性(オーバーフロー、リエントリー攻撃など)の防止に優れているため、Suiは技術的により堅牢で信頼性の高いものとなっている。しかし、開発者は、コードのエラーや不適切な設計による資産の損失を防ぐために、ビジネスロジックレベルのセキュリティ、特に権限管理、オブジェクトタイプの使用、トークンの消費に重点を置く必要があります。
参考文献:
https://docs.sui.io/
https://docs.sui.io/
https://docs.sui.io/standards/coin
https://move-book.com/