ブロックチェーンベースのプロジェクトが達成しようとしている主な目標のXNUMXつは、データの検証です。 実例については、デジタルIDとオンラインドキュメントの保存と小切手を見ることができます。 実際、これらのケースのいずれも、個人またはエンティティを確認するためにアクション/トランザクション開始者の検証を必要とします。 たとえば、その人がデジタル形式のIDドキュメントを持っている場合、所有権を確保することが重要になります。 したがって、これはデータの検証可能性の問題の優れた例です。 ソリューションの最も単純な形式であるデジタル署名を確認しましょう。デジタル署名のテストは、スマートコントラクトの開発における重要なポイントのXNUMXつです。
アプローチは簡単です:
1)システムはすべての人に知られているルールによってメッセージを生成します
2)署名者はメッセージを受け取り、特定の記号のセットを追加します—デジタル署名、秘密鍵によってメッセージから構築されたコード
3)生成された署名は契約に送信され、そこで分解されて署名者のアドレスが取得されます。
Solidityは、署名の生成とさらなる分解のためのECDSAアルゴリズムを提供します。 アルゴリズム自体を深く掘り下げる必要はありません(必要な情報を見つけることができます) 適切な情報源で)。 知っておく必要があるのは、ECDSAが非対称暗号化の例であり、最初のユーザーが秘密鍵を使用して署名を作成し、XNUMX番目のユーザーが標準アルゴリズムを適用して署名者の公開鍵を取得することだけです。 したがって、署名のソースを確認できます。 代わりに、実際の部分、つまり署名の使用とテストに焦点を当てましょう。
まず、問題を認識する必要があります。 たとえば、契約は何らかのアクションを実行する必要があります。たとえば、発信者のアドレスを保存します。 契約は発信者が確認された場合にのみ保存を実行する必要がありますが、許可なくアドレスを使用できないようにする必要があります。 本物の発信者を取得するには、メッセージを生成して署名し、コントラクト内で分解する必要があります。
見つけることができます Solidityドキュメントの標準ソリューション (例えば、 0.8.4で —記事の時点での最新の安定バージョン)。 ドキュメントは、次の組み込み機能を必要とするコントラクトを提供します:メッセージ生成、署名分割、および署名者を取得するためのアセンブリコード。 この例は、必要なすべての方法を示しており、非常に単純ですが、XNUMXつの短所があります。それは、普遍性に欠けていることと、ソリューションテストの良い例がないことです。 そのため、自分のバージョンのコードと(実際の目標)—契約のテスト戦略を提供します。
確かに、あなたは使用することができます 標準のOpenZeppelinライブラリ ECDSAの運用では、同じ問題が再び発生します。柔軟性とテストアプローチの欠如です。 それでは、署名ベースのロジックの例を詳しく見ていきましょう。 あなたは完全なを見つけることができます 私のGitHubでの作業例、でも十分に見せたいところは少ないです。
まず、メッセージを用意します。 ご覧のとおり、これはXNUMXつのパックおよびハッシュされたウォレットアドレスから形成されます。
XNUMX番目に重要なコードは、標準のイーサリアムメッセージと一緒にメッセージをハッシュすることです。
これは、メッセージがイーサリアムネットワーク内で送信され、32バイトの長さであり、乱数ではないことを示しています。 前の操作の後、32バイトの長さのハッシュがあります。 このような形式で追加のハッシュ関数を使用することが不可欠です。その理由については、後で説明します。
他のコード部分はかなり標準的です。 署名を分割する機能は次のとおりです。
署名者を取得する関数は次のとおりです。
外部インターフェイスには、署名と必要な引数を受け取り、ユーザーがすでに登録されているかどうかを確認し、メッセージを作成して、署名を検証するカスタム関数を使用します。
まず、署名が必要なメッセージを模倣します。 我々は使用するだろう ethers.js ライブラリ、これは(一緒に web3)最も使用されている便利なライブラリ。 オープンソースライブラリなので、自由に探索できます そのコードとドキュメント。 また、このライブラリは、次のメッセージを作成するための完璧なインターフェイスを提供します。
両方の短所のXNUMXつ web3 および エーテル ライブラリは、両方のライブラリが完全なEthererumノードで動作することを目的としているため、ローカルのGanache環境のすべての機能を備えているわけではありません。 それにもかかわらず、を使用してローカルテストのためのアプローチがあります web3-アカウント機能。 追加のアカウントを作成する必要がありますが、これは歌手の機能を実装し、現在のweb3プロバイダーへの接続を提供します。
これで、メッセージが生成され、署名されました。 しかし、それだけではありません。 話すべきことがいくつか残っています。 内部の両方のライブラリ(web3とethers)は、署名を作成する前にメッセージの追加のハッシュを提供します。 また、メッセージはハッシュされるだけでなく、前に見た標準のイーサリアムメッセージと組み合わされます。
そのため、契約にメソッドを追加しました。 したがって、カスタムメッセージを使用したり、追加のハッシュをスキップしたりする場合は、署名機能のカスタムバージョンを作成する必要があります。 上記の理由について説明しました。どちらの標準ライブラリも、メッセージに署名するための一般的なアプローチを実装しています。これは、機能をオーバーライドすることによってのみ変更できます。
最後のステップとして、テストを実行し、正しく機能するかどうかを確認しましょう。
署名の生成、生成されたメッセージ、署名の承認、および拒否をテストしました。 したがって、これは検証機能のテストのかなり完全なセットです。
- Action
- NEW
- アルゴリズム
- すべて
- 引数
- 記事
- 「鑑定済み」のチェックマークが付きます。
- ビット
- 例
- 小切手
- コード
- 縮小することはできません。
- 暗号
- 電流プローブ
- データ
- 開発
- デジタル
- デジタルアイデンティティ
- ドキュメント
- 環境
- イーサリアム
- エーテルネットワーク
- 顔
- 名
- 柔軟性
- フォーカス
- フォーム
- 無料版
- フル
- function
- 良い
- ハッシュ
- ハッシュ
- HTTPS
- ia
- アイデンティティ
- 情報
- IP
- IT
- キー
- 最新の
- 図書館
- ローカル
- ミディアム
- ネットワーク
- ノード
- 提供
- オファー
- オンライン
- 開いた
- オープンソース
- 業務執行統括
- プライベート
- 秘密鍵
- プロジェクト(実績作品)
- 公共
- 公開鍵
- レビュー
- ラン
- セッションに
- 簡単な拡張で
- So
- 固い
- split
- ストレージ利用料
- 店舗
- 戦略
- test
- テスト
- テスト
- ソース
- us
- Verification
- 財布
- Wikipedia
- 以内
- 仕事
- 作品