
著者:Nic Lin、Taipei Ethereum Meetupの担当者
オリジナルタイトル:「Rollupのフォースインクルージョンメカニズムの紹介」
ちょうど昨日、衝撃的なことがショックを受けました:Metamaskの親会社であるConsensysによって打ち上げられた2番目の層のLineaであるEthereum Lineaは、当局者がそうする目的はVelocoreハッキングイベントの影響を減らすことだと述べました。これは、ハッカーの喪失を減らすために、以前のBSCチェーン(BNBチェーン)を人々に思い出させずにはいられません。人々がこの種のことについて話すときはいつでも、彼らはWeb3によって提唱された分散型の価値について疑わしい。
確かに、上記のインシデントの核となる原因は、不完全なインフラストラクチャ自体、つまり十分な分散化についてです。:チェーンが十分に分散化されている場合、停止しても停止しないでください。イーサリアムの2階のユニークな構造のため、ほとんどのLayer2は、集中シーケンサーに依存します近年、分散型のソルターの理論がますます多く、2階の存在と構造の目的を考慮して、Layer2のソーターはそれほど分散化されていない可能性があり、BSCチェーンの分散化の程度に匹敵しない場合があります。これが本当なら、私たちは何をすべきですか?
実際、2階ではソーターによって引き起こされる最も直接的な害は、分散化されていないことです。抵抗と活動です。トランザクションを処理するエンティティがほとんどない場合、それがあなたに役立つなら、それは絶対的な力を持っています:あなたがあなたを拒否したいなら、あなたを拒否し、あなたはそれを助けないかもしれません。layer2の反レビューの問題を解決する方法は、明らかに重要なトピックです。
過去数年間、主要なイーサリアムの2階は、ループリングと脱退や脱出能力、arbitrumおよびその他の操作力の包含など、反センサーシップの問題に関するさまざまなソリューションを提案しています特定の条件下でシーケンサーでチェックとバランスを生成して、ユーザーのトランザクションリクエストの無料拒否を防ぐことができます。
今日の記事では、台北イーサリアム協会のニックリンが登場しました。私は個人的に、4つの主流ロールアップの反レビュー取引機能を実験し、ワークフローと動作方法の側面に力を包む力のメカニズム設計を分析しました。これは、イーサリアムコミュニティと大規模な資産が巨大な資産を保有するために特に価値があります。
トランザクションレビューと強制包含
検閲抵抗は、ブロックチェーンにとって非常に重要です。Ethereumの現在のトランザクションアンチレビュー機能は、多くの検証装置からのものであり、誰かが彼のトランザクションをチェーンしないようにしたり、ネットワーク内のバリデーターの大部分を購入しようとしない場合、ブロックスペースを押収するためにボブよりも継続的にハンドリング料金を送信しているジャンクトランザクション。どんな方法であっても、コストは非常に高くなります。
注:Ethereumの現在のPBSアーキテクチャでは、トランザクションのレビューコストが大幅に削減されますOFACとのTornado Cash Transactionのブロック比を参照できます。現在の反尋問能力は、独立した検証に依存し、OFACおよび政府の管轄外の外側の中継に依存しています。
しかし、ロールアップはどうですか?ロールアップは、セキュリティを確保するために多くのバリデーターを必要としません。しかし、セキュリティと反レビューの能力は2つの異なるものです。ロールアップとイーサリアムは同様に安全ですが、一元化されたシーケンサーは1つだけですが、ユーザーのトランザクションを確認する必要があります。
シーケンサーはユーザートランザクションへの対処を拒否し、ユーザーファンドを拘留し、ロールアップを離れることができません
強制包含メカニズム
ロールアップに多数の分散型シーケンサーを持つように依頼するよりも、L1の反レビュー機能を直接使用することをお勧めします。
もともと、シーケンサーは、トランザクションデータをL1のロールアップ契約に詰めることをお勧めします。ユーザーは、このメカニズムと呼ばれるロールアップ契約にトランザクションを挿入します。シーケンスがL1レベルでユーザーをレビューしない限り、ユーザーがL1でトランザクションを挿入することを余儀なくされるのを防ぐことはできません。このようにして、ロールアップはL1の抵抗を継承できます。
シーケンスは、高コストを支払わない限り、ユーザーのL1トランザクションを確認できません
強制取引はどのように施行されるべきですか?
トランザクションがロールアップ契約(つまり、すぐに効果的)に直接書き込まれる場合、ロールアップの状態はすぐに有効になります。最新の州は1,000ダイになり、キャロルは1000ダイになります。
フォースインクルージョンがロールアップ契約でトランザクションを直接書き込み、すぐに有効にすることができれば、州はすぐに変更されます
シーケンサーが現時点でチェーン内のトランザクションを収集し、次のトランザクションをロールアップ契約に送信している場合、BOBが強制的に挿入する可能性のあるトランザクションを統合する場合があります。この種の問題は避けるために試されるべきなので、ロールアップは、通常、Force Inclusionトランザクションがすぐに有効になることを許可していません。
シーケンサーがチェーントランザクションをロールアップ契約にパッケージ化する場合、トレーディングシーケンスの前述のトランザクションをプラグインするかどうかを選択します。Sequencerが常に「準備」状態でこれらのトランザクションを無視していた場合、ウィンドウ期間が終了した後、ユーザーはこれらのトランザクションをロールアップ契約に強制することができます。
シーケンスは、キューのキューで「収入」がいつ待っているかを決定できます
シーケンサーは、待機中のキューでの取引に対処することを拒否することができます
シーケンスが長い間拒否された場合、誰でも一定期間後にフォースインクルージョン関数を介してトランザクションをロールアップ契約に強制的に挿入できます
次に、楽観、arbitrum、starknet、zksyncなどの4つのよく知られているロールアップ力包含メカニズムを順番に導入します。
楽観主義の強制包含メカニズム
最初に楽観的なデポジットプロセスを導入します。新しく保存されたメッセージを受信した後、L2ノードはメッセージを実行のためにL2トランザクションに変換し、メッセージで指定されたレシーバーに送信します。
ユーザーは、L1堆積物からL2にL2を与えます
L1CrossDomainMessenger契約
ユーザーが楽観主義にETHまたはERC-20を預けたい場合、L1でフロントエンドのWebページとL1を使用しますl1standardbridge契約の相互作用、節約すべき金額、およびこれらの資産を受け取るためのどのL2アドレスがありますか。
L1StandardBridge契約はメッセージを次のレベルに渡しますL1CrossDomainMessenger契約、この契約は、主にL1とL2の間の通信のコンポーネントとして使用されますL1StandardBridgeは、この一般的な通信コンポーネントとL2のL2StandardBridgeを通じて通信して、L2で誰がトークンをキャストできるか、L1からトークンのロックを解除できる人を決定します。
開発者がL1とL2の間の契約を開発する必要がある場合、彼はL1Crossdomainmenger契約に基づいて構築できます。
ユーザーのメッセージは、CrossDomainMessenger契約を通じてL1からL2にL2に送信されます注:この記事のいくつかの写真で、CrossDomainmessagerをCrossChainMessagerに書き込みます
楽観的ポート契約
L1CrossDomainMessenger契約は、下層にメッセージを送信しますOptimismportal契約、楽観的ポート契約は、処理後に廃止されますTransactionDeposityインシデント、パラメーターには、「メッセージを送信する人」、「メッセージを受け取る人」、および関連する実行パラメーターが含まれます。
その後、L2Optimism Nodeは、OptimismPortal Contractによって投げられたトランザクションデポジットイベントを監視し、イベントのパラメーターをL2トランザクションに変換します。このトランザクションのイニシエーターは、トランザクションデポジットイベントパラメーターに記載されている「メッセージを送信する人」です。イベント。
L2ノードは、Optimismportalemitのトランザクション解除イベントパラメーターをL2トランザクションに変換します
たとえば、これはですL1StandardBridgeを介した0.01 ETHトランザクションのユーザーは、L1StandardBridgeを介して契約します。
メッセージのスポンサーは、L1CrossDomainmessenger契約です。その後、0.01 ETHをL2StandardBridgeに追加し、後者からBOBに転送するなど、一部のプロセスがトリガーされます。
トリガーする方法
トランザクションを楽観主義のロールアップ契約に強制したい場合、達成したい効果は、「L2と実行の実行」をスムーズに実装できる「トランザクション」を作成することです独自のL2アドレスを使用して、メッセージをOptimismportal契約に直接送信する必要があります(Optimismportal Contractは実際にはL1にありますが、OPのアドレス形式はL1アドレス形式と同じであることに注意してください。L2アカウントと同じアドレスのL1アカウントで上記の契約を直接呼び出すことができますに。
その後、契約によって変換されたトランザクションデポジットイベントの変換の「イニシエーター」は、この時点で、通常のL2トランザクションと一致します。
トランザクションデポシティイベントから変換されたL2トランザクションから、スポンサーはボブ自体です。
楽観主義のフォースインクルージョン関数を呼び出したい場合は、L2で実行するパラメーターを埋めるために、楽観契約の預金換算関数を直接呼び出す必要があります
私は単純な力を含む実験をしました、このトランザクションは、そのようなことを達成したいと考えています。L2(0XEDC1 … 6909)で私のアドレスを使用し、「強制包含」のテキストメッセージが付属しています。
これは、OptimismPortal契約を通じて預金輸送機能を実行するL1トランザクションです。
残りの不透明データ列の値は、「預金トランザクション関数を呼び出すETHの数」、「レシーバーにL2トランザクションを送信するETHの数」、レシーバーの「L2トランザクションガスリミット」、「L2を与える」データをエンコードします。 ” 等々。
上記の情報をデコードした後、次のようになります。
「預金取引を呼び出す人にどれだけのETHが追加されるか」: “:”0、私はL1からETHをL2に保存しないからです。
「L2トランザクションが受信機に送信するETHの数」:5566(wei)
「L2トランザクションのガスリミット」:50000
「L2レシーバーのデータ」:0x666F72636520696E636C7573696F6E、つまり
その後、変換後のL2取引の変換は長くはありませんでした。私は自分のL2トランザクションにお金を転送しました、量は5566 Weiで、データは「強制包含」文字列です。また、図の他の属性の最後から2番目の属性ラインのTXNTYPE(トランザクションタイプ)は、システムトランザクション126(システム)であることを示しています。 L1トランザクションによる取引。
変換されたL2トランザクション
Force Inclusionを使用してL2契約を呼び出し、異なるデータを送信する場合は、L2アカウントと同じL2アカウントのデポジットトランザクション関数を呼び出すことを忘れないでください。このようにして、あなた自身のL2アカウント。
SequencerWindow
前述の楽観的なL2ノードは、トランザクションデポジットイベントを実際に変換します前述のイベントをいつL2トランザクションに変換するかを決定できます。
TransactionDeposity Incidesを聞いたとき、シーケンサーはイベントをL2トランザクションに変換することはできません。この期間の最大値はSequenceWindowと呼ばれます。
現在、Optimism Main Networkのシーケンスウィンドウは24時間です。つまり、ユーザーがL1またはフォースインクルージョンから金額を預けている場合、最悪の場合は、24時間後のL2取引の歴史に含まれていたことです。 。
Arbitrumの力包含メカニズム
楽観的には、L1のデポジット操作は、トランザクションデポジットイベントを開催します。ただし、ArbitrumでL1で発生する操作(L2にお金やメッセージを節約するなど)は、L1のキューにあります。単に事件を投げる代わりに。
シーケンサーには、上記のキューのトランザクションをL2トランザクションの履歴に組み込むための期間が与えられます。
Arbitrumは、L1契約でキューを維持します。
Arbitrumの設計では、L1の堆積物などの操作は、名前が示唆するように、別の契約がシーケンサーの直接的な場所であるため、L2トランザクションをアップロードするための直接的な場所です。 L1へ。シーケンスがL2トランザクションをアップロードするたびに、遅延した受信トレイから遅延受信トレイからのトランザクションの履歴まで処理するトランザクションを使用することができます。
Sequencerが新しいトランザクションを書くと、DelayedInboxからトランザクションを取り出して一緒に書くことができます複雑なデザインとFanxiangyeの参照資料
読者がシーケンスとフォースインクルージョンに関する公式のArbitrumの章を直接参照する場合、力がどのように動作するか、およびいくつかのパラメーター名と関数名がわかります。
ユーザーは最初に行きますdelayedinbox契約コールsendunsignettransaction関数、シーケンサーが約24時間に含まれていない場合、ユーザーは呼び出すことができますSequencerinbox契約forceinclusion関数。その後、Arbitrumの役人は、機能のリンクを公式Webサイトドキュメントに添付せず、契約コードの対応する機能はそれ自体でしか表示されませんでした。
sendunsignedtransaction関数を見つけたら、nonce値とmaxfeepergas値に記入する必要があることがわかります。Nonceはどのアドレスですか?どのMaxFeepergasがインターネット上にありますか?それを記入する方法は?ファイルの参照はありません。NATPSECでさえありません。次に、Arbitrum契約に同様の機能がたくさんあります。
sendl1fundedunsignettransaction、sendunsignettractiontofork、sendcontr actttransaction、sendl1fundcontransaction、これらの機能の使用方法、パラメーター、パラメーター、パラメーター、パラメーター、パラメーターを均一にする方法を教えてください。
パラメーターを試してみて、試行錯誤で正しい使用法を見つけることができるかどうかを確認してください。トランザクションを開始するときに別のアドレスがあるため、L2は動かないアドレスを受けています。
sendl2message
その後、偶然にも偶然にGoogle検索をクリックしますが、代わりに元のArbitrum自体にチュートリアルプログラムライブラリがあることがわかりましたsendl2message関数、およびメッセージパラメーターは、L2アカウントでトランザクションに持ち込まれますか?
「フォースインクルージョンを介したL2へのメッセージ」が「名前付きL2トランザクション」になることを誰が知っていますか?また、この関数をいつ、どのように使用するかは、ファイルとNATSPECの説明がありません。
結論:Arbitrumの強制トランザクションを手動で生成する方が面倒です。公式チュートリアルでArbitrum SDKを実行することをお勧めします。Arbitrumには、他のロールアップのような明確な開発者ファイルとコードノートがありません。また、Arbitrumの不一致についてArbitrumに尋ねましたが、満足のいく答えは得られませんでした。
Discordで尋ねられた他の当事者は、Sendl2Messageを見るように私に言っただけで、他の機能(またはForce Inclusion Documentに記載されているSendunsignedtransaction)の機能を説明したくありませんでした。
StarknetのForceiClusionメカニズム
残念ながら、StarkNetには強制的なインクルージョンメカニズムがありません。公式フォーラムでは公式フォーラムで議論されている記事は2つしかありません。
失敗したトランザクションを証明することはできません
上記の理由は、実際には、Starknetのゼロ認識証明システムが失敗したトランザクションを証明できないため、力の包含を許可できないためです。なぜなら誰かが悪意のある(または意図的でない)力が失敗し、トランザクションを証明できない場合、starknetは直接行き詰まります:トランザクションが強制収入になった後、Proverは失敗取引を証明する必要がありますが、それを証明することはできません。
StarkNetは、バージョンV0.15.0で失敗したトランザクションの機能を導入することを期待しており、力包含メカニズムをさらに実現することをさらに実現する必要があります。
Zksyncの力が包むメカニズム
ZKSYNCのL1-> L2メッセージの送信メカニズムはすべて、メールボックス契約のrequestL2transaction関数を通じて実行されます、ユーザーは、L2アドレス、CallData、追加のETH数量、L2GASLIMIT値などを指定します。LequestL2Transactionは、これらのパラメーターをL2トランザクションに組み合わせて、トランザクションパッケージでL1にアップロードします。 (Commitbatches関数により)ところで、優先キューからいくつのトランザクションを取得し、L2トランザクションレコードに含まれるべきかを示しています。
ZKSYNCは、フォースインクルージョンの形での楽観主義に非常に似ています。(呼び出し、Calldataなど)、Arbitrumのようなデザインでは、L1のような署名付き名で埋める代わりに、キューキューを維持するためにすべてL1にあり、キューミルのキューからのシーケンサーはトランザクションに直接提出されたユーザーのうち、それをトランザクションの履歴に書き込みます。
Zksyncの公式ブリッジを通過すると、預金ETHにこのトランザクションのように、メールボックス契約のrequestl2transaction関数を呼び出すことです。このデポジットETH L2トランザクションを優先キューに入れて、NewPriorityRequestイベントを投げますエッセンス契約はL2トランザクションデータを一連のBYTES文字列にエンコードするため、このL1トランザクションのパラメーターを見ると、パラメーターのL2の受信機も表示されます。トランザクション(自分のためのデポジットであるため)しばらくすると、このL2トランザクションは、優先順位のキューからの優先順位のキューから除外され、ETHトランザクションの歴史に含まれていました。
L1DEPOSITトランザクションでは、トランザクションのスポンサーと受信者は0XEDC1 … 6909で、金額は0.030、CallDataは空です。
0xedc1 … 6909は、L2で独自のトランザクションに転送されます。
次に、前の実験opの強制取引機能と同様に、Zksyncのrequestl2transaction関数を呼び出して自己移動を送信しました。
次に、L2での独自のトランザクションでトランザクションに変換されました。
SequencerがPriorityQueueからトランザクションを取得して履歴に書き込むと
requestL2Transaction関数を介して、ユーザーはL2アドレスと同じL1アカウントでL1で情報を送信し、L2レシーバー、添付ETHのETH量、およびCallDataを指定できます。ユーザーが他の契約を呼び出して異なるデータで呼び出したい場合は、パラメーターを1つずつrequestL2Transaction関数に入力します。
ユーザーを含めることを許可していない機能
L2トランザクションは優先キューに配置されますが、L2トランザクションの待機期間はL2トランザクションによって計算されますが、現在、ユーザーがZKSYNC設計でユーザーを強制することを許可しないフォースインクルージョン関数は、ハーフセットのみに相当しますエッセンスつまり、「自由な待機期間」がありますが、実際には「シーケンスが収入であるかどうかを確認してください」:シーケンスは、有効期限が切れるまで待つことができ、優先キューで取引を獲得することはできません。
将来、ZKSYNCは、収入期間が終了したが、これが真に効果的な力包含メカニズムに含まれていないときに、トランザクションをL2トランザクションの履歴を強制するように強制することができるように、関連する関数を追加する必要があります。
要約します
L1は、インターネットの「セキュリティ」と「反レビュー機能」を確保するために多数の検証に依存しています。したがってロールアップには、ユーザーがシーケンサーをバイパスしてトランザクションを履歴に書き込むことができるように、強制包含メカニズムが必要です。使用できない、またはロールアップから資金を引き出すことができないシーケンサーによってレビューされることは避けてください。
強制包含により、ユーザーはユーザーにトランザクションを履歴に書き込むことを強制します、しかし、「トランザクションが履歴をすぐに挿入し、すぐに有効にすることができるかどうか」の設計。トランザクションがすぐに有効になることが許可されている場合、L2の収入を待つ取引がL1強制収入の交換の影響を受ける可能性があるため、シーケンサーに悪影響を及ぼします。
したがって現在、Rollupのフォースインクルージョンメカニズムにより、最初にL1に挿入されたトランザクションが待機状態に入ります。そして、シーケンサーにしばらく反応させて、収入を待つかどうかを待機する取引を選択します。
ZksyncとArbitrumはどちらもL1でキューキューを維持し、L1からユーザーが送信したL2トランザクションまたはL2にメッセージを管理します。Arbitrumはdelayedinboxと呼ばれます
しかしZksyncのL2トランザクションを送信する方法は、楽観主義に似ていますそれらはすべて、L2アドレスを使用してL1にメッセージを送信します。イニシアチブはL2アドレスになります。L2トランザクションが送信された楽観主義の機能は、desidlanscyncと呼ばれます。Arbitrumは、完全なL2トランザクションと署名を生成し、sendl2message関数を介して送信します。
Starknetには、Zksyncがまだ半分の力を含むようなものではありません– PriorityQueueと各キューのL2トランザクションには有効な期間がありますが、この妥当性期間は現在、装飾的なものです。