最終更新: byteball_dev 2018年04月24日(火) 20:42:48履歴
このページではスマートコントラクトで出来る事や、実装に必要な情報を列挙する予定です。
現在調査中。調査時のメモなども混ざっています。
以下メモ。
思いついたままに書いただけなのでまだ間違いなどが含まれている可能性大です。
現在調査中。調査時のメモなども混ざっています。
以下メモ。
思いついたままに書いただけなのでまだ間違いなどが含まれている可能性大です。
Byteballに置けるスマートコントラクトとは、
「オラクルを使って人毎にロック解除の制御ができる特殊なウォレット」
です。
特殊なウォレットに入金したあと、オラクル(DAGに書き込まれたデータ)をトリガーにして誰がどの様な条件でロック解除できるかを制御できます。
オラクルとして利用する条件設定は自由で、単純な時間の経過から、サイコロの様なただの乱数、飛行機が遅延したかどうか、スポーツの試合の結果まで幅広く設定できます。
また、複数の条件を組み合わせて複雑な制御を行うことも可能ですが設定した条件のいずれかを満たさない限り誰にもロック解除できないので注意が必要です。
「オラクルを使って人毎にロック解除の制御ができる特殊なウォレット」
です。
特殊なウォレットに入金したあと、オラクル(DAGに書き込まれたデータ)をトリガーにして誰がどの様な条件でロック解除できるかを制御できます。
オラクルとして利用する条件設定は自由で、単純な時間の経過から、サイコロの様なただの乱数、飛行機が遅延したかどうか、スポーツの試合の結果まで幅広く設定できます。
また、複数の条件を組み合わせて複雑な制御を行うことも可能ですが設定した条件のいずれかを満たさない限り誰にもロック解除できないので注意が必要です。
スマートコントラクトを提供している(チャット)ボットに接続
↓
ボット側はユーザーのウォレットアドレスがわからないので確認を促す
↓
ユーザーは自分のウォレットアドレスをボットに教える
↓
ボットはもらったウォレットアドレスをもとにスマートコントラクトを作成。
支払いが必要ならユーザーに支払い請求のメッセージを送る
↓
ユーザーの支払いが終わったら、
スマートコントラクトで定義された契約が完結されるまで金額は保持される
↓
ボット側はユーザーのウォレットアドレスがわからないので確認を促す
↓
ユーザーは自分のウォレットアドレスをボットに教える
↓
ボットはもらったウォレットアドレスをもとにスマートコントラクトを作成。
支払いが必要ならユーザーに支払い請求のメッセージを送る
↓
ユーザーの支払いが終わったら、
スマートコントラクトで定義された契約が完結されるまで金額は保持される
・ボットがスマートコントラクトを発行するには、関係する相手のウォレットアドレスを知っている必要がある。
・受け取り条件に関与するユーザーであってもスマートコントラクト側に接続する必要はないと思われる。
・支払いを求めるメッセージ送信は一度に一人まで?
・スマートコントラクトに複数のユーザーに入金を募る場合は、スマートコントラクトのウォレットのアドレスを教えて入金してもらう様にお願いするのが簡単と思われます。
・受け取り条件に関与するユーザーであってもスマートコントラクト側に接続する必要はないと思われる。
・支払いを求めるメッセージ送信は一度に一人まで?
・スマートコントラクトに複数のユーザーに入金を募る場合は、スマートコントラクトのウォレットのアドレスを教えて入金してもらう様にお願いするのが簡単と思われます。
スマートコントラクトで契約を履行する際、まず誰かしらがスマートコントラクトが用意した専用ウォレットに金額を送付します。
このウォレットは設定した条件のどれかを満たさない限り誰にも開けられないようになっており、
例えば
「対象の航空機の発着時刻が遅れた」場合はユーザーがロックを解除して自分のウォレットに送金できる。
「対象の航空機の発着時刻が遅れなかった」場合はコントラクト提供側がロックを解除して自分のウォレットに送金できる。
「1ヶ月経過した」場合はユーザーがロックを解除して自分のウォレットに送金できる。
と言った感じの制御を行っています。
このウォレットは設定した条件のどれかを満たさない限り誰にも開けられないようになっており、
例えば
「対象の航空機の発着時刻が遅れた」場合はユーザーがロックを解除して自分のウォレットに送金できる。
「対象の航空機の発着時刻が遅れなかった」場合はコントラクト提供側がロックを解除して自分のウォレットに送金できる。
「1ヶ月経過した」場合はユーザーがロックを解除して自分のウォレットに送金できる。
と言った感じの制御を行っています。
スマートコントラクトを使って契約を結んだ後、
(おそらく)ウォレットからスマートコントラクトにアクセスして出金するタイミングで
オラクルに格納された値を参照して解錠条件を満たしているかどうかを確認する。
オラクルは同じフィード名のデータをいくつも持つことが出来るため
複数データが存在する場合、時系列によってどのように変化するのか以下の図のようになっています。
フィードの値に1が入っていれば解錠条件を満たしたものとします。
また空白はdata_feedのデータがないものとします。
上記の結果から、byteballのスマートコントラクトの解錠条件は以下の通りと考えられます。
例えばサイコロの目などランダムな値が繰り返し使われる場合、
スマートコントラクト作成者側は、時間毎に異なるdata_feedを作成してサイコロの値を記録していく必要があります。
同じdata_feed名で管理をしてしまうと、
スマートコントラクト作成後に長時間(data_feedに何度も値が書き込まれるまで)待つ事でいつかは自分が解錠出来る条件満たすことが出来てしまうため
スマートコントラクトとしては不適格です。
(おそらく)ウォレットからスマートコントラクトにアクセスして出金するタイミングで
オラクルに格納された値を参照して解錠条件を満たしているかどうかを確認する。
オラクルは同じフィード名のデータをいくつも持つことが出来るため
複数データが存在する場合、時系列によってどのように変化するのか以下の図のようになっています。
フィードの値に1が入っていれば解錠条件を満たしたものとします。
また空白はdata_feedのデータがないものとします。
<過去 | スマコン作成 | 未来> | 結果 | |||
パターン1 | 1 | 取り出せない | ||||
パターン2 | 1 | 0 | 取り出せない | |||
パターン3 | 1 | 0 | 1 | 取り出せる | ||
パターン3 | 1 | 0 | 1 | 0 | 取り出せる |
上記の結果から、byteballのスマートコントラクトの解錠条件は以下の通りと考えられます。
- スマートコントラクト作成以前のdata_feedは参照しない
- スマートコントラクト作成後に作成されたdata_feedは全て参照し、その中で条件を満たすデータが存在する場合、スマートコントラクトは解錠される
例えばサイコロの目などランダムな値が繰り返し使われる場合、
スマートコントラクト作成者側は、時間毎に異なるdata_feedを作成してサイコロの値を記録していく必要があります。
同じdata_feed名で管理をしてしまうと、
スマートコントラクト作成後に長時間(data_feedに何度も値が書き込まれるまで)待つ事でいつかは自分が解錠出来る条件満たすことが出来てしまうため
スマートコントラクトとしては不適格です。
Error message | 原因・対策など |
could not send payment: bad signature at path r | look under the table |
could not send payment: precommit callback failed | smart wallet containing committed funds that only the counter-party can now spend |
could not send payment: authentifier verification failed | スマートコントラクトの条件が満たされていないことが原因 |
could not send payment: known bad | if you try a bad send repeatedly |
could not create payment proposal: No bytes to pay fees | 手数料を支払えないため、ウォレットにbytesを送れば解決します。 |
connect to light vendor failed [socket closed] | firewall? turn off Tor? (light vendor = hub) |
??? | incoming payment not confirmed yet, so wait another 5 minutes or so |
[internal] connection closed | ネットワーク相違(メインネット用のウォレットでテストネット用コントラクトに繋いでるなど)。もしくは機能してないと思われるハブを変えてみる。 |
unable to verify the first certificate | ??? |
too many messages, try sending a smaller amount [of blackbytes] | 額を少なくしてみてください |
on login “Uncaught exception: Error: message encrypted to unknown key, device" | don't click ok; right click > "inspect" > delete the window in the html code ; restart |
unable to find parents; failed to find compatible parents: no deep units | witness error, such as (user) swapping out two at once |
Syncing -- 24 private payments left (Android) | try clearing out smart wallets; related to private assets? |
https://byteroll.com/oracle
こちらのページにスマートコントラクトの実装に役立ちそうな投稿があったので
コピーしておきます。
後ほど読んで必要なら翻訳予定
https://bitcointalk.org/index.php?topic=1617816.0
こちらのページにスマートコントラクトの実装に役立ちそうな投稿があったので
コピーしておきます。
後ほど読んで必要なら翻訳予定
https://bitcointalk.org/index.php?topic=1617816.0
コメントをかく