みなさんこんにちは!
最近、Waves Labs は、 Ride4Dappsの分散型アプリケーションのテストネットワークへのRIDEスマートコントラクト言語拡張機能のリリースに特化した開発者向けの競争を発表しました 。
Ventuaryは、投票、資金調達、信頼管理などの社会的機能を備えたdAppの開発を計画しているため、DAOケースを選択しました。
Q&AセッションとRIDE IDEの簡単な例から始めました- 共通のウォレットを使用した例です。
この例を見て、仮説をテストし、いくつかの奇妙な点を考えてみましょう。
アリス-dAppオーナー
ブーブとクーパーはアリスのパートナーであり、アリス-BC DAOの共同設立者です
ネリは資金調達が必要な事業主です
銀行-トークンを配布する銀行
ステージ1.バランスシートの初期化
ウェーブテストネットワークでトークンを受信するには、 蛇口に連絡して、トークンの送信先アドレスを指定する必要があります。
アドレスは、アカウント情報を公開することでIDEで見つけることができます。
Bank 10 WAVESを選択します。 ブロックおよびトランザクションエクスプローラー: ブラウザーを通過したことを確認した後、 ブラウザー
次に、銀行から他の参加者にトークンを配布しましょう。 (注:ウェーブネットワーク内のすべてのトランザクションは無料ではないため、すべての参加者がトランザクションを完了するには、最低のプラス残高が必要です)。
1 WAVES = 100,000,000単位(ウェーブレット)、量は整数のみであるため
0.01 WAVES(取引手数料)= 1000000
銀行-> [3 WAVES]-> Alice、TransferTransaction経由(タイプ:4)。
トランザクションの署名元のenv.SEEDが銀行に対応していることを確認します。

一致するシードフレーズがない場合は、[アカウント]タブでそのフレーズに切り替えて、もう一度確認してください。
その後、3 WAVES Aliceの転送に関するトランザクションを作成、発表、署名します。
env.accounts変数を使用して、アリスのデータを調べることもできます。 番号は0から始まり、それぞれアリスはenv.accounts [1]です。
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
結果はブラウザでも確認でき、 トランザクションへのリンクがトランザクションの直後に返されます。
アリスの残高が3ウェーブ分補充され、銀行残高に10-3-0.01 = 0.699が残っていることを確認します。
BoobとCooperは3 WAVESで、Neli、XenaとMarkは0.2 WAVESで同じ方法で送信します。
(注:1文字のエラーを作成し、Neli 0.02 WAVESを送信しました。注意してください!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
すべての参加者の残高を補充すると、次のことがわかります。
ステージ2. dAppアカウントの作成
分散アプリケーションの作成者と所有者がアリスになることに同意しました。
[アカウント]でSEEDとしてインストールし、env.SEEDがAliceと一致することを確認します。
Aliceアカウントに可能な限り簡単なスクリプト(契約)をインストールしてみましょう。
Wavesのスマートコンタクトは、特定の条件下で実行されるあらゆる種類の発信トランザクションを禁止または許可する述語です。 この場合、この状態は常にです。 契約コードは真実です。 deploy()と呼びます。
setScriptトランザクションの料金1400000/100000000 = 0.014 WAVES。 アリスのバランスは2.986 WAVESです。
例で説明したより複雑なスマートコントラクトロジックをAliceアカウントにインストールしてみましょう
Ride4Dappsには、2つの新しいタイプの注釈が含まれるようになりました。
- @Callable(i) -パラメーターiとして、トランザクションを引き起こした/署名したアカウントに関するデータを受け取ります。 この関数の結果により、dAppアカウントのステータスの変化が決まります。 他のアカウントはトランザクションを作成し、このアノテーションを使用して機能を実行し、dAppアカウントのステータスを変更できます。
- @Verifier(tx) -トランザクションtxパラメーターを使用したトランザクション検証。 RIDEの述語ロジックに対応します。 この式では、dAppアカウントのスマートコントラクトのロジックに対する追加の変更を有効または無効にできます。
注意してください! 重要な点は、デフォルトではアカウントのスクリプトはtrueではないが、署名の比較を使用し、署名の所有者のみがトランザクションを実行できるようにすることです。
sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPk)
そのような検証がなければ、誰でもアカウントから取引を行うことができます!
すべての参加者に共通のウォレットとしてdAppアカウントを作成しましょう。
アカウントで現在有効な契約を確認するには、ブロックブラウザーでスマート契約のbase64コードをコピーし、逆コンパイラー( たとえば )で認識できます。
スマートコントラクトのロジックが期待どおりであることを確認します。
アリスのバランスは2.972 WAVESです。
このdAppは、 データトランザクションメカニズム-DataEntry(currentKey、newAmount)を介して各参加者が共通基金にどれだけ貢献したかを追跡します。currentKeyは預金機能を呼び出すアカウントで、newAmountは補充された残高の値です。
BoobとCooperは、それぞれ1 WAVESでdAppアカウントに入金します。
私たちは間違いを犯し、取引は成功しません。 私たちは、ボブに代わって取引を行っていると確信していたという事実にもかかわらず、インデックスに間違いを犯し、スマート契約を持たない銀行口座を示しました。 ここで重要な点に注意する価値があります-トランザクションを開始する試みが失敗した場合、手数料は撤回されません! アリスのバランスは2.972 WAVESです。 Bob 3にはWAVESがあります。
ボブはdAppアカウントに1 WAVESを送信しました。
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
ボブには1.99 WAVESが残っています。 つまり、Bobは0.01 WAVESのコミッションを支払いました
アリスは彼女のバランスシートに2.972 WAVESがあり、それは3.972になりました。 トランザクションもAliceアカウントに登録されましたが、dAppアカウント(Alice)から手数料は差し引かれませんでした。
CooperがAliceのアカウントを補充した後、4.972 WAVESが貸借対照表に追加されました。
[データ]タブのブロックエクスプローラーで、一般的なウォレット内のWAVEの数を確認できます。
クーパーは、共通の財布に1 WAVESの金額を残すことについて考えを変え、アフィニティの半分を撤回することにしました。 これを行うには、withdraw関数を呼び出す必要があります。
ただし、withdraw関数には完全に異なるパラメーター、異なる署名があるため、再び誤解されました。 RIDE4DAPPSでスマートコントラクトを設計するときは、この瞬間に注意を払う必要があります。
Cooperのバランスシートには2.48 WAVESがあります。 したがって、3波-1-0.01、その後+ 0.5-0.01です。 したがって、入金と引き出しの各呼び出しには0.01ウェーブがかかります。 その結果、dApps所有権テーブルのエントリは次のように変更されました。
ボブはまた、合計ウォレットから一定の金額を引き出すことにしましたが、間違っていて1.5 WAVESを抽出しようとしました。
ただし、スマート契約にはこのような状況のチェックがありました。
Xenaは詐欺師で、一般口座から1 WAVESを取り消そうとしました。
彼女も失敗しました。
次のパートでは、Alice dAppアカウントの不完全性に関連するより複雑な問題を検討します。