モナパレット給付金プロジェクト始動!
腕に覚えのある方はぜひこちらのイラストオダイに参加してください。
新しいオダイ! @anipopina から
— オダイロイド1号 (@odairoid_001) February 3, 2022
賞金 150MONA→100人
期限 2/27 20:01 #オダイS7JTUB号
モナパレット給付金モナカード用のイラストをお願いします!
詳細はこちらの記事をみてね:https://t.co/ADQyLWFrIW
ところでアドレスのMonaparty利用実績に基づいて給付金トークンを配布するのはサービス運営者の特権でもなんでもなく誰にでもできることなので、今回はその手順をご紹介します。
※ 一般人向けに書きます。一般人でない人はこんな記事を読まなくても勝手にやってください。
うれしいこと
- Monaparty組込みのdividend(モナパレットの「くばる」機能)とは違って配布方法を好きなだけカスタマイズできる。
- 好きなだけカスタマイズできるということは、自分がお世話になったアドレスへのお礼とか、ヘビーユーザを狙い撃ちする的確なプロモーションとか、いろいろなことに活用できる。
- たまに給付金があるとMonaparty利用のモチベーションになるかもしれないので、Monaparty利用者が増えるかもしれない。
- Monapartyの仕組みに疎い人はこの手順をやることでMonapartyの仕組みがそこそこわかる。
あらまし
- Monapartyサーバから必要なデータをもらう
- データから宛先アドレスと数量のリストを作る
- 再びMonapartyサーバに頼んで給付用のtxHexを作ってもらう
- ウォレットで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
には給付金の送信元となる自分のアドレスを指定します。
※ たとえasset
やquantity
が全て同じでも、destination
asset
quantity
は同じ個数にする必要があります。
※ 同じdestination
とasset
のペアが複数あるとエラーになるので、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などで絞りましょう。
以上