Skip to content

Instantly share code, notes, and snippets.

@cryptcoin-junkey
Last active October 15, 2020 07:44
Show Gist options
  • Save cryptcoin-junkey/8173b8b537c5c2523ec16d946abf0b99 to your computer and use it in GitHub Desktop.
Save cryptcoin-junkey/8173b8b537c5c2523ec16d946abf0b99 to your computer and use it in GitHub Desktop.
[draft] Monaparty への dispenser 機能有効化後の、上場不可または再移転禁止アセットへの対応

dispenser が有効になると、アセットの $MONA 建てでの販売が可能となる。

しかし、あえて(デフォルトではない)上場不可または再移転禁止フラグを有効化しているアセットの所有者は、販売も望まない可能性がある。 アセットを日本の資金決済法での前払式支払手段として利用している場合、販売可能となった時点で前提が崩れる可能性がある。 (日本国外の決済諸法は未調査だが、似たような法令になっている可能性は低くない) 利用者の法的リスクを避ける必要がある。

そこで、dispenser 有効化に際し、2段階のフェーズを設ける。

有効化フェーズ

フェーズ1

issuance に、販売禁止フラグを追加する。 名前の通り、このフラグが有効なアセットを対象とする dispenser メッセージは invalid となる。

加えて、下記の全てを満たすアセットを対象にする dispenser メッセージも、フェーズ1 の期間では invalid となる。

  • 上場不可または再移転禁止となっている。
  • 該当するアセットの最終 issuance メッセージが持つ block_index がフェーズ1開始以前である。

販売禁止フラグが無効となっているアセットを、下記条件をすべて満たす場合にのみ、販売禁止と設定できる。

  • dispenser メッセージの処理がフェーズ1の期間内である。
  • アセットの issuer からの指示である。
  • 該当するアセットが販売中ではない。

販売禁止フラグの設定は、ロックされているアセットに対しても行える。(アセットのロックは、供給量のロックである。よってフラグ設定は可能、という解釈)

フェーズ2

十分な期間(1ヶ月程度?)のフェーズ1を経て、販売禁止フラグが有効になっていない全てのアセットを販売可能(dispenserメッセージはvalid)とする。 (上場不可または再移転不可のフラグは、販売可能性について無関係となる)

フェーズ2以降、販売禁止フラグは、アセット生成時にのみ設定できる。

補足

フェーズ1の期間内で、上場不可や再移転禁止をしつつ販売可能にするには、下記の方法がある。ともに「該当するアセットの最終 issuance メッセージが持つ block_index がフェーズ1開始以前である。」が偽となるので、フェーズ1 内の invalid 特例から外れる。

  • 新規に販売可能なアセットを作る。
  • アセットの issuer を、自分自身が秘密鍵を所有する別のアドレスに対して、譲渡する。

ここで、sweep メッセージも、内部でアセットの所有権譲渡が発生することに留意がが必要である。 フェーズ1 の期間内に sweep されたアセットは、直後から、販売禁止フラグが無効(販売可能)となる。

フェーズ2以降、アセット生成時のみしか販売禁止フラグを有効にしないのは、下記の理由による。

  • アセットの holder が取得時に期待した性質を、issuer が事後に変更できるのは、契約の観点で好ましくない。
  • フラグの解釈を単純にしたい。複雑な挙動はユーザビリティを下げる。

全てのフェーズにおいて、販売禁止フラグが有効になったアセットを、再び販売可能にする方法は無い。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment