モナパレット給付金プロジェクト始動!
腕に覚えのある方はぜひこちらのイラストオダイに参加してください。

ところでアドレスのMonaparty利用実績に基づいて給付金トークンを配布するのはサービス運営者の特権でもなんでもなく誰にでもできることなので、今回はその手順をご紹介します。

※ 一般人向けに書きます。一般人でない人はこんな記事を読まなくても勝手にやってください。

うれしいこと

  • Monaparty組込みのdividend(モナパレットの「くばる」機能)とは違って配布方法を好きなだけカスタマイズできる。
  • 好きなだけカスタマイズできるということは、自分がお世話になったアドレスへのお礼とか、ヘビーユーザを狙い撃ちする的確なプロモーションとか、いろいろなことに活用できる。
  • たまに給付金があるとMonaparty利用のモチベーションになるかもしれないので、Monaparty利用者が増えるかもしれない。
  • Monapartyの仕組みに疎い人はこの手順をやることでMonapartyの仕組みがそこそこわかる。

あらまし

  1. Monapartyサーバから必要なデータをもらう
  2. データから宛先アドレスと数量のリストを作る
  3. 再びMonapartyサーバに頼んで給付用のtxHexを作ってもらう
  4. ウォレットでtxHexを署名&送信

手順

1. Monapartyサーバから必要なデータをもらう

どういう利用実績のあるアドレスに給付するかを決めたら、Monaparty API リクエストツールで必要なデータを取得しましょう。

利用できるコマンドとパラメータについてはCounterpartyAPIのドキュメントで確認してください。

例として「モナパレット寄付アドレスM8pCS86ufakMYWetAJWDv8FjF9mD9eZ3Hnにトークンを送ってくれたことのあるアドレス」に給付金を出す場合は、宛先がM8pCS86ufakMYWetAJWDv8FjF9mD9eZ3HnになっているSendトランザクションの履歴を分析すればよいので、次の設定でデータをリクエストするとよいでしょう。

Command: get_sends
Parameters JSON:

{
  "limit": 1000,
  "offset": 0,
  "filters": [
    { "field": "destination", "op": "==", "value": "M8pCS86ufakMYWetAJWDv8FjF9mD9eZ3Hn" }
  ]
}

このリクエストでは0~1000件目を取得しています。もし該当する履歴が1000件以上ある場合は"offset": 1000とすれば1001~2000件目、"offset": 2000とすれば2001~3000件目、... を取得できます。

2. データから宛先アドレスと数量のリストを作る

取得したデータを整理分析して、給付金の宛先と数量のリストを作成しましょう。

どういう方法で整理してもよいですが、とりあえずJSONのままでは不便なのでまずはこういうサイトに結果を貼り付けてCSVに変換したら捗るかなと思います。

CSVに変換すればExcelとかで好きにいじれるので、アドレスの重複を排除したり給付する数量を計算したりしましょう。

例で取得したget_sendsのデータはsourceが送り主のアドレスなので、それを重複排除して次のように整理してみました。

申し訳ないことに給付用の素敵トークンは用意していないので、今回はSPACEMONAを1枚ずつ給付します。

3. 再びMonapartyサーバに頼んで給付用のtxHexを作ってもらう

給付内容が決まったので、トランザクションのデータ(txHex)をMonapartyサーバに作ってもらいます。

再びMonaparty API リクエストツールを使って、今度はcreate_sendコマンドを利用します。複数の宛先にまとめて送信する場合はcreate_sendのパラメータを次の形式で指定します。

{
  "source": "FROM_ADDRESS",
  "destination": ["TO_ADDRESS1", "TO_ADDRESS2", ...],
  "asset": ["TOKEN_NAME", "TOKEN_NAME", ...],
  "quantity": [1, 1, ...]
}

sourceには給付金の送信元となる自分のアドレスを指定します。
※ たとえassetquantityが全て同じでも、destination asset quantity は同じ個数にする必要があります。
※ 同じdestinationassetのペアが複数あるとエラーになるので、assetが1種類ならdestinationの重複はなくしましょう。
※ 小数で扱えるトークンを送る場合はquantityには1e8倍の整数値を指定する必要があります。

整理したアドレスなどを"で囲んだり,区切りで並べたりするのはExcel上でやってもよいですし、こういうサイトを使ってもいいでしょう。とにかく上記のフォーマットに整形しましょう。

フォーマットがおかしいとか給付するトークンの残高が足りないとかの不備がなければ、resultにtxHexが返ってきます。

4. ウォレットでtxHexを署名&送信

sourceに指定したアドレスをモナパレットで開いて、取得したtxHexに署名して送信します。

給付先がべらぼうに多くない限りは問題にならない額ですが、宛先が多ければ多いほどそれに比例して手数料(+dust)のモナコインが多くなります。宛先55件で試したところ約0.032MONA減りました。

署名&送信の機能では手数料などの表示はされないので、念のため減った額は確認しておきましょう。給付先の数が多くて心配であれば、何回かに分割して様子を見ながら送るといいかもしれません。

まとめ

みんなでこれ見よがしにMonaparty給付金を配りあって給付金クレクレのケチで薄汚いDeFi民たちをモナカード沼に誘い込もう!

※ 自分がDeFi給付金を貰えていない僻み

Tips

CounterpartyAPIのドキュメントをしっかり読めばわかる話ではありますが、給付金のためだけにしっかり読むのも大変かろということでいくつか例とかヒントを書いておきます。

Dispenser購入者に給付する場合

ディスペンサー自体の情報を取得できるget_dispensersとディスペンサー販売の履歴を取得できるget_dispensesがあるので戸惑う人がいそうですが、購入者に給付するならget_dispensesのほうを使うとよいです。

例えば私のアドレスM8fut3m6PVvbUQth5w91R3tCAQwwcuKgMMからDEVILROIDが購入された履歴は、次のパラメータで取得できます。

Command: get_dispenses
Parameters JSON:

{
  "limit": 1000,
  "offset": 0,
  "filters": [
    { "field": "destination", "op": "==", "value": "M8fut3m6PVvbUQth5w91R3tCAQwwcuKgMM" },
    { "field": "asset", "op": "==", "value": "DEVILROID" }
  ]
}

get_dispensesで取得したデータはdispensesというテーブル名に反してsourceフィールドのほうに購入者のアドレスが入っているので注意しましょう。

D-Board利用者に給付する場合

D-Boardへの書き込みはprefixとして@b.mを含むので、次のようにLIKEで前方一致検索をするとよいです。

Command: get_broadcasts
Parameters JSON:

{
  "limit": 1000,
  "offset": 0,
  "filters": [
    { "field": "text", "op": "LIKE", "value": "@b.m %" }
  ]
}

最新100件の取得

get_{table}シリーズのAPIは基本的に古いほうから順にデータが返ってきます。新しいほうからデータがほしい場合はorder_by order_dirなどを指定しましょう。

例えば最新100件のデータは次のパラメータで取得できます。

{
  "limit": 100,
  "offset": 0,
  "order_by": "block_index",
  "order_dir": "DESC"
}

より複雑な条件

filtersには複数の条件を指定できるし"filterop": "OR"とすればOR検索もできますが、それでもあんまり複雑な条件は設定できません。より複雑なことをしたい場合は、多めに引っかけてからExcelなどで絞りましょう。

以上