paint-brush
Radix の資産指向トランザクション: トランザクションを有意義なものにする@RadixDLT
9,892 測定値
9,892 測定値

Radix の資産指向トランザクション: トランザクションを有意義なものにする

Radix Publishing12m2023/06/28
Read on Terminal Reader

長すぎる; 読むには

Radix のスマート コントラクト アーキテクチャは、プラットフォーム上のあらゆるものをあらゆるものに提供します。 Radix トランザクションには、トランザクションを理解しやすく、構成可能で、非常に強力にする資産指向の命令の「マニフェスト」が含まれています。 Radix のトランザクションの設計は、ユーザーの直感的な期待と制御という第一原則から始まりました。
featured image - Radix の資産指向トランザクション: トランザクションを有意義なものにする
Radix Publishing HackerNoon profile picture


前回の記事では、今日のブロックチェーントランザクションの概念によって、DeFiユーザーと開発者が遭遇するいくつかの深刻な問題、つまりDeFiとWeb3の主流の可能性をブロックする問題に対処することがどのように不可能になるかについて説明しました。


ほとんどのスマート コントラクト L-1 プラットフォームの設計では、トランザクションは単にブラック ボックス スマート コントラクトに送信されるメッセージに制限されており、その制限は、トランザクションが十分に柔軟、強力、または透明であることができないことを意味します。


この問題を真に解決する唯一の方法は、ブロックチェーン上のトランザクションの意味を再定義することですが、それがまさに Radix が行ったことです。 Radix トランザクション (以下を含む Babylon ネットワーク上) Radix 独自のスマート コントラクト機能) には、トランザクションを理解しやすく、構成可能で、信じられないほど強力にする資産指向の命令の「マニフェスト」が含まれています。


Radix トランザクションとは何か、また、Radix トランザクションによってユーザーと開発者に可能になる素晴らしい機能のいくつかについて話しましょう。

「トランザクション」の再定義

テクノロジーのことを少し忘れて、トランザクションはどのようなものであるべきでしょうか?


Web3 と DeFi をエキサイティングなものにし、ユーザーにとって理解しやすく安全なものにするために十分な柔軟性を持たせるためには、何を含めるべきでしょうか?


出発点として、何か役に立つことを実行し、すでに誰にとっても非常に理解できる現実世界のトランザクションを見てみましょう。現実世界の DEX である通貨交換キオスクを使用する例を考えてみましょう。


私が顧客で、通貨を両替するために空港の両替カウンターまで歩いているところを想像してみてください。このトランザクションを次のように説明します。


  • 私は財布から20ドルを取り出してカウンターに置きます。

  • 私はその20 USDGBPに交換したいことを両替窓口に伝えます。

  • 窓口係は私の米ドルを受け取り、コンピューターを少しタップして、カウンターに16.08 ポンドを置きました。

  • 得られた為替レートに満足し、 GBPを受け取り、財布に入れます。


この典型的な現実世界のシナリオでは、私は取引所が内部でどのようにビジネスを行っているかを制御できませんが、自分にとって重要なことは完全に制御しています。つまり、ウォレットから資産を取り出し、自分の指示に従って資産を取引所に渡します。欲しいと思って、彼らが私に返してくれるものを受け入れ(または拒否)、資産を私の財布に戻します。


私にとって重要なことを理解し、コントロールすることは、私が誰かとやり取りし、私の資産が関係しているときはいつでも、自然かつ明白な期待です。自分のウォレットからどの資産を残すかを管理し、誰に渡すか、何が欲しいかを指定し、何が自分に戻ってくるかを確認して承認することができます。それが私にとって現実世界で「トランザクション」という言葉が本質的に意味するものです。ブロックチェーントランザクションがそのように機能したら素晴らしいと思いませんか?


Radix ではそうなります。 Radix のトランザクションの設計は、直感的なユーザーの期待と制御の第一原則から始まり、まったく同じ方法で Radix ネットワーク上のトランザクションをモデル化しました。

トランザクションを有意義なものにする

上記の実際の取引について私にとって最も重要なことは、それが私のウォレットと取引所の間の資産の動きを直接記述しているということです。 Radix トランザクションをそのように機能させるには、プラットフォームの設計をアセットから始める必要があります。そして幸運なことに、Radix プラットフォーム設計の特徴の 1 つは ( Radix Engine 仮想マシン暗号化スマートコントラクト言語)ネットワークは資産と資産の動作をネイティブに理解しているということです。


この「資産指向」アーキテクチャにより、デジタル所有権に関して、プラットフォーム上のすべてのものが直感的に動作します。トークンと NFT はスマート コントラクトの残高ではありません。それらは、場所から場所へ移動する物理的なオブジェクトのように機能します。ユーザー アカウントは単なるキーペアではありません。これらは資産のコンテナであり、ユーザーは引き出したり、どの種類の預金を受け入れるかに関するルールを管理したりする権限を持っています。スマート コントラクトはメッセージを受け入れることに限定されません。彼らは、両替所にお金を押し込むような形で、資産の「バケツ」を入力として受け入れることができます。


これらのプラットフォーム機能は、現実世界のトランザクションと同様に、Radix 上のトランザクションの定義を再定式化するために必要なツールを提供し、トランザクションが直感的かつ予測可能に機能するようにします。


Radix トランザクションは、アカウントとコンポーネント間の資産の移動を直接記述する命令の「マニフェスト」です (Radix のスマート コントラクト形式)。


以下は、実際の取引所の例のような取引を説明する実際のトランザクション マニフェスト (わかりやすくするためにアドレスなし) です。



概要を見ているわけではないことに注意してください。これが実際の Radix トランザクションの内容です。ユーザーが現実世界のトランザクションを説明する方法と同様に、マニフェストはユーザーにとって重要な資産の移動の観点からトランザクションを説明します。


このマニフェストの 4 つの命令で何が起こっているかを次に示します。


  1. 私は自分のアカウントの 1 つに 20 米ドルのトークンを引き出すように指示します。 (20 USD のトークンは「トランザクション ワークトップ」と呼ばれるものに返されると思います。これは交換カウンターと考えることができます。これは、トランザクション中に資産が移動されるときに資産を置くための一時的な場所にすぎません。)
  2. 私はその 20 ドルをワークトップから掃いて「バケツ」に入れます。 (バケットは、他のものに渡すことができる単なるアセット コンテナです。)
  3. USD のバケットを取引コンポーネントの「トレード」メソッドに直接渡します。 (取引所が為替レートを計算し、一部の GBP トークンをワークトップに戻すことを期待しています。)
  4. 私はワークトップの中身を財布に戻します。


私はこのトランザクションに署名し、これにより私のアカウントは 20 米ドルのトークンを引き出すことが許可されていることを認識し、ネットワークに送信します。


現実世界のシナリオと同様に、私は取引所の内部の仕組みを制御できないかもしれませんが、私にとって重要なこと、つまり私のアカウントに出入りするトークン、そして私が対話したいものについては直接制御できます。


これは、スマート コントラクトにメッセージを送信するだけのトランザクションに比べて、すでに大幅な改善です。しかし、何かが足りない…

ユーザーがコントロールできるようにする

実際の例では、取引を受け入れる前に、 20 USDに対して16.08 GBP (おそらく現在の為替レートと予想される手数料に基づく) が得られることを確認しました。署名して送信する前に、Radix トランザクションでも同じようなことができると期待すべきではないでしょうか?


実際、私は(ウォレット ソフトウェアの助けを借りて)トランザクション マニフェストに命令を追加することで同じことを行うことができます。これは最後から 2 番目の「ASSERT_WORKTOP_CONTAINS_BY_AMOUNT」命令です。



マニフェストの指示では、アカウントにデポジットを戻す前にワークトップに少なくとも16.08 ポンドのトークンが含まれていることを「表明」しています。これは、このトランザクションがネットワークによって処理されるときに、そのアサーションが true でない場合 (たとえば、取引所が15 GBPのみを返した場合、または完全に間違った種類のトークンを返した場合)、トランザクションはネットワークによって拒否されることを意味します。期待していたものが得られなかったため、すべてが起こるわけではありません。


これが機能するのは、トランザクション マニフェストがアトミックであるためです。これは、トランザクション マニフェスト内のすべてが問題なく正常に実行される必要があり、そうでない場合はも起こらないと言う、派手な方法です。


これは信じられないほど強力です。現実世界の取引所と同様に、内部取引所のロジックをまったく気にする必要はありません。スマート コントラクトのロジックに依存することなく、完全に制御できる方法で、スリッページや望ましくない結果に直面するなどの事態から保護されます。


Radix ウォレットは、ユーザーとしての私の期待をトランザクション マニフェストに直接追加することができ、ネットワークはそれらの期待がすべて尊重されることを保証します。そうしないと、私の資金がポケットから出ることはありません。

トランザクションのユーザー エクスペリエンスを修正する

このようにトランザクションを構造化することは、Web3 アセット トランザクションが主流に対応するために必要な種類の UX を Radix Wallet がユーザーに提供できるようにするためにまさに必要なことでもあります。


これが何を意味するかを確認するために、為替トランザクションが Radix ウォレットでユーザーにどのように表示されるかを次に示します。



このビューは取引所 dApp によって作成されたものではありません。これは、トランザクション自体の内容を直接読み取ることによって、私にとって重要なことを安全に要約した Radix ウォレットそのものです。上記のトランザクション マニフェストをもう一度見てみると、Radix Wallet がそれをユーザーの概要 UI にどのように自動的に変換できるかがわかるでしょう。


  • 引き出し:アカウントからの引き出しが直接表示され、ウォレットはどのアカウントがウォレット ユーザーによって所有されているかを確認できます。
  • dApp の使用:トランザクションに関係する他のコンポーネントは、ユーザーが理解できる dApp としてリストされます。 (Radix Wallet がこれをどのように行うかについては、Radix のdApp定義システムこれにより、開発者はコンポーネントを dApp の台帳上の明確な説明に関連付けることができます。)
  • 入金:ユーザーのアカウントへの入金も直接表示されます。トランザクションマニフェストに指定数量がないデポジットは、トランザクションのプレビュー実行によって「推定」され、ユーザーの設定に従って「保証」(前述の「アサート」命令)が自動的に追加されます。
  • 取引手数料:そしてもちろん、ウォレットには必要な取引手数料が表示されます (詳細は下記を参照)。


その結果、意味があり、ユーザーにとって関連性があり、正確であることが保証され完全にトラストレスなトランザクション概要が得られます。ユーザーは、予想どおり、署名すると自分のアカウントと資産に何が起こるかを正確に知っています。スタックのすべての部分が連携してメインストリーム対応の製品を実現できるように設計されている場合、分散化するために優れた UX を放棄する必要はありません。

明確で柔軟な認証

Radix トランザクション ツールボックスの別のツールについて話しましょう。


Radix Engine 仮想マシンには、「バッジ」を使用するコンポーネント用の強力な認証システムが組み込まれています。財布の中の会員カードと同じように、バッジはあなたが所有する資産であり、取引の際にその証拠を「提示」できます。コンポーネントは、何かを行うための前提条件として、指定された証明を提示したかどうかを確認できます。


バッジの証明の提示は、バッジを保持しているアカウントにその証明を要求するトランザクション マニフェスト内の単なる指示です。本物の財布から会員カードを取り出して誰かに見せるようなものです。


これは、Radix Wallet が再びユーザーに何が起こっているかを正確に示すことができることを意味します。私たちの交換 dApp が、私がサードパーティからの KYC チェックを完了したことを示すバッジを保持しているという証拠を確認する必要があると想像してください。結果は次のようなトランザクションになります。



もう一度言いますが、特定のバッジが提示されるという明確なプレゼンテーションが得られるので、署名する前にそれに満足するかどうかを判断できます。

コード不要のオンデマンドのアトミック コンポーザビリティ

ここで、Radix トランザクションの柔軟性と能力について話しましょう。トランザクション マニフェストのスーパーパワーの 1 つは、スマート コントラクト コードを使用せずに、単一のアトミック トランザクションで複数の dApp を「構成」できる機能です。


融資 dApp スマート コントラクトからローンを受け取り、そのローンを使用して DEX スマート コントラクトから特定の取引を行いたいと想像してください。実際にその取引ができる場合にのみローンを組むようにしたいと思うかもしれません。


他のネットワークでは、このロジックを組み込む呼び出し可能な特別なスマート コントラクトを作成してデプロイするという 1 つのオプションしかありません。デプロイ後、そのスマート コントラクトはトランザクションでリクエストを受け取り、ローン スマート コントラクトを呼び出し、DEX の呼び出しを試み (ローン資金を受け取ったと仮定して)、DEX スワップが成功したことを確認します。これは複数のステップからなるプロセスであり、スマート コントラクトの専門知識が必要で、時間がかかり、単一目的であり、ネットワーク料金が非常に高額になることがよくあります。


Radix では、これはいくつかの命令のトランザクション マニフェストにすぎません


  • ローンコンポーネントを呼び出してローンを借りる
  • 貸し出されたトークンをバケットに入れてDEXに渡します
  • DEX が期待どおりの結果を返したことをアサートします(これが true でない場合、トランザクションは失敗します)。
  • 結果をアカウントに入金する


この単純なトランザクション マニフェストは、単純な Web フロントエンドでオンデマンドで構築できます。スマート コントラクト コードや事前の展開、スマート コントラクトの結果に対する入念なチェックは必要ありません。アセットをアカウントと dApp コンポーネント間で移動する方法を記述して送信するだけです。


これにより、さまざまな新しい可能性が開かれます。ユーザーが取引に最適なルートを見つけるのに役立つ DeFi dApps のセグメント全体は、スマート コントラクト コードにはまったく触れない開発者によって、純粋に Web サイトのフロントエンドとして構築できます。金融プロトコルの非常に複雑な組み合わせをリアルタイムでつなぎ合わせて、一時的な機会を活用できます。また、トランザクションで「アサーション」ガードレールを使用すると、呼び出されるコンポーネントの内部動作を気にせずに、望ましい最終結果に明確かつ直接的な制限を設けることができます。

dApp支払いのネットワーク料金

開発者にとって Radix トランザクションのもう 1 つの重要な機能は次のとおりです。多くの dApp 開発者は、ネットワーク料金をユーザーのために負担するインフラストラクチャ コストであると考え、ユーザーがネットワーク料金について考える必要がないようにしたいと考えています。たとえば、ユーザーは USDC でのみ取引したいと考えており、ETH には触れたくないかもしれません。あるいは、顧客のデビット カードを使用するときに販売者が Visa 取引手数料を支払うように、これを目に見えないメリットとしてユーザーに提供したいだけかもしれません。


現在の取引ではこれは不可能です。署名者が手数料の支払い者でなければなりません。 Radix では、手数料の支払いがはるかに柔軟です。取引中に何でも支払うことができます。


実際、以前に取引マニフェストを示したとき、私は少しズルをしていました。ユーザーが取引手数料を支払う典型的なケースでは、取引のネットワーク手数料を「ロック」するための追加のマニフェスト命令がユーザーのアカウントの 1 つにあります。ただし、トランザクション中に他の何かがその手数料をロックしたい場合は、ユーザーがその手数料をロックする必要はありません。


例: 私が取引所 dApp の既知の登録ユーザーで、私がそのシステムを使用するときに彼らが私に代わってネットワーク料金を支払いたいと考えていると想像してください。彼らは私に、私の登録を表すユーザー バッジ アセットを発行し、それを私のアカウントの 1 つに保持しています。これで、トランザクションでそのバッジを取引所コンポーネントに提示できるようになり (KYC バッジで前に見たのと同じように)、取引所はその証拠を確認して、取引の手数料をロックすることができます。そうすれば、私の Radix ウォレットは追加料金のロックが必要ないと認識し、あたかもネットワーク料金が魔法のようにゼロになったかのようです。

シャーディングに関する最後の注意事項

このテクノロジーを深く掘り下げるのが好きな人にとって、Radix のトランザクション モデルにはもう 1 つの素晴らしい利点があります。それは、シャーディングが優れているということです。


Radix の超並列化された Cerberus コンセンサス プロトコルが導入されたときの西安ネットワークのアップグレードを見据えて (最近査読が行われた) は無制限のスケーラビリティを実現するために展開されるため、トランザクション モデルが適合することが重要です。


大規模な並列処理を可能にするには、 Cerberus は、アカウントとコンポーネントの状態を分離できることに依存しています。事実上無制限の数のシャード (「スレッド」という方がわかりやすいかもしれません) にわたって、トランザクションごとにコンセンサスを得るためにどのシャードをまとめる必要があるかを具体的に知ることができます。


これは、表面的には、「eUTXO」と呼ばれる状態のビット全体に状態を断片化する Cardano のように聞こえるかもしれません。 Cardano トランザクションには、(ビットコインと同様に) 特定のトランザクションの結果を作成するためにどの eUTXO が使用されるかの直接仕様が含まれます。これの問題は、競合が発生することです。特定のスマート コントラクト (DEX など) には、多くの人が同時に操作しようとしているトークンのプールが含まれている場合があります。トランザクションがそのプール内から使用する個々のトークン eUTXO を選択している場合、たとえ全員の要望を満たすためにプール内に十分なトークンがあったとしても、クライアントが同じ eUTXO を選択することが多くなり、多くのトランザクションが失敗することはほぼ確実です


代わりに、Radix では、トランザクション マニフェスト内の命令のリストが意図の表現になります。使用する個々の状態を指定する必要はありません。とにかく対話したいアカウントとコンポーネントを指定するだけで済みます。これは自然なことです。


その後、トランザクションが Radix ネットワークによって実際に処理されると、その意図は、どの状態を更新する必要があるか、そしてどのシャードがコンセンサスに関与する必要があるかの定義に決定論的に変換できます。つまり、同じスマート コントラクトと対話する 2 つのトランザクションによって、一方だけが成功できる競争が自動的に発生することはありません。 10 人が同時に 50 個のトークンを引き出すトランザクションを確実に送信でき、それらはすべて問題なく次々と完了します。

結論

Radix 上ですべてのトランザクションがどのように動作するかを再定義し、Radix のネイティブな資産指向機能を利用することで、開発者とユーザーの複数の問題が解消されます。この種のソリューションは、既存のネットワークにパッチ適用することはできません。スマート コントラクト、資産、トランザクションがどのように機能するかに関する前提条件はすべて、プロトコルと仮想マシンの設計にすでに組み込まれています。


Radix の新しい形式のトランザクションは、Scrypto スマート コントラクト機能とまったく新しい Radix Wallet とともに、「Babylon」リリースで Radix メインネットに導入されます。