現行のmonapartyで、蛇口を作りたい

科学・IT 蛇口 monaparty 署名

30 Res. 32.9622442 MONA 4 Fav.

1 :名も無きふとん三段:2020/09/13 18:09:49  2.1577114MONA/4人

(こちらがあるのに気がつかず、古い方にもポストしてしまいました。ごめんなさい)
今更のようですが、monapartyのXMPを配るのに、蛇口を作ろうとしています。
現在、monaparty上でトークンを送るための未署名トランザクションまでは作れましたが、その先(署名と送信)に進めないでいます。

そこで質問ですが、

1.現行のmonapartyで[sign, send]_raw_transactionは使えますか?
2.もし使える場合、必要になるパラメータ名と各パラメータに何を書けばいいのか教えてください。
3.もし使えない場合、
3-1.webウォレットでAPI経由で署名する方法があるでしょうか。あるならその方法を教えてください。
3-2.electrum-monaでAPI経由で署名する方法があるでしょうか。あるならその方法を教えてください。
...webウォレットもelectrum-monaも使えない場合は、やっぱりフルノード立ててやるのが正しいのでしょうか…

以上わかる方どうぞよろしくお願いします。

2 :脇P六段尊者男爵:2020/09/14 03:58:22  3.9MONA/1人

1.無かったかと思います……
2.同上
3-1.それは秘密鍵をそのAPIの先に送るという事でしょうか?基本的には署名はローカルでおこないます
3-2.そのトークンをお持ちの秘密鍵を持ったウォレットをオープンした状態でなら行えます

#ディレクトリ指定
./run_electrum -D /tmp/alice
#daemon起動
./run_electrum daemon -d
./run_electrum load_wallet
./run_electrum signtransaction <未署名トランザクションhex>

3 :脇P六段尊者男爵:2020/09/14 03:58:26  0.39MONA/1人

or

./run_electrum signtransaction <未署名トランザクションhex> <privatekey>

で行けたかと思います。久しくリモートテスト上でしか動かして無いのでちょっと覚えてないですがこんな感じだったかと

4 :脇P六段尊者男爵:2020/09/14 04:01:32  3.9MONA/1人

broadcastは以下で行えます。
./run_electrum broadcast <署名済みトランザクションhex>

ただblockbookやinsightのapiにpostでも良いかなとは
https://blockbook.electrum-mona.org/api/v2/sendtx/<;署名済みトランザクションhex>

5 :unknown三段:2020/09/14 08:33:57  7.8MONA/1人

PHPで生トランザクション生成、署名、ブロードキャストする の自分の使ってるソース貼り付けておきます 自サーバー建てずに脇Pさんのサーバーに投げてます いつもお世話になっておりますm(_ _)m

余計なところ削って貼り付けたのでどこかコンパイルエラーがあったらゴメンなさい 大筋の流れは問題ないはず
久々にソース開いたらWarningいろいろ出てるけど気にせずにw
あとfee_per_kbって1000倍でいいのかな?1024倍のような気もするけど・・・・まぁ1円以下の話なので気にしない



あと以下のページ参考に署名処理作りました ビットコイン用の署名処理がほぼそのまま使えるのでサンプルをほぼコピペ
プレフィックスとか書き換え必要な部分は最初から用意されてたかmpurseかelectrum-monaかのソース見て数字変えたような覚えもうっすらと。
http://bitcoin.stackexchange.com/questions/46764/sign-transaction-hex-with-php-library

6 :名も無きふとん三段:2020/09/14 21:48:13  0MONA/0人

お二方、ありがとうございます。
署名する時に秘密鍵外に出したら意味ないですよね、よく考えれば。

参考にさせていただきます。

7 :今は亡き業者BOT名無し三段:2020/09/17 18:01:30  3.9MONA/1人

(おひさしブリーフ)

JavaScript (といくつかの npm パッケージ) で署名はできるっぽい。
たとえば https://github.com/monaparty/tokenswap-example/blob/d92a19472e7821e2c0ce954fa6223806015f1c41/burn.js#L88-L91
https://qiita.com/cryptcoin-junkey/items/f73163f57ad2b94b9152

もちろんクライアントサイドでやると秘密鍵ダダ漏れになるのでサーバサイドで実行のこと #っぽいではない
いわゆるサーバレスをうまく使うと維持費もオトクっぽい
署名済みトランザクションの送出はウォレットバックエンドとかエクスプローラとか Monaparty ノードとかを使えばおk #っぽい

8 :名も無きふとん三段:2020/09/18 23:25:54  0MONA/0人

ありがとうございます。
Rubyで挑戦しましたが、わからないところが多すぎたので、unknwonさんのPHPコードを写経しています。
MonaPartyって、現状ではJSかPHPくらいなんでしょうかね…

9 :脇P六段尊者男爵:2020/09/19 05:29:37  0MONA/0人

Rubyと言いますとどのライブラリを使っていますかね?

10 :名も無きふとん三段:2020/09/19 17:25:05  0MONA/0人

https://github.com/lian/bitcoin-ruby

これを使っています。

11 :今は亡き業者BOT名無し三段:2020/09/22 14:36:02  0MONA/0人

bitcoin-ruby で Monacoin のチェーンを弄るなら、このコードなどを参考にして lib/bitcoin/monacoin.rb を書かないと…っぽい https://github.com/lian/bitcoin-ruby/blob/master/lib/bitcoin/litecoin.rb

12 :今は亡き業者BOT名無し三段:2020/09/22 15:47:18  0MONA/0人

Monaparty ノードは Python で書かれている #っぽいではない
(GitHub の monaparty/counterparty-lib などにコードがある)

…だが、Python でアプリを組んでいるという人の話は
本家 Counterparty 方面でも見かけない #っぽい

13 :名も無きふとん三段:2020/09/22 22:07:57  0MONA/0人

litecoin.rbをコピーしてmonacoin.rb作りました。
…しかしパラメータをどういじればいいのかわからないのでそこで放置しています。
今は動作の理解のために、bitwasp/bitcoin-phpを使って、monacoin対応してた人のリポジトリからコピーさせてもらってbitwasp/bitcoin-phpの新バージョンに対応させたものを使って学習中です。
https://github.com/fuyuton/bitcoin-php
39 unknownさん。
privateKeyFactoryの使い方が微妙に変わってたところをクリアしたのですが、
$signer->sign($idx, $priv, $transactionOutput);
で、
Invalid script signature - must be PUSHONLY.
が出ていてこちらも止まっています。

14 :名も無きふとん三段:2020/09/22 22:11:14  0MONA/0人

unsigned_tx = ...
signed_tx = sign(unsigned_tx, priv_key)
tx_id = broadcast(signed_tx)

みたいな流れでさくっといけると思ったら、署名の前にごにょごにょしないといけないことを知って、そのあたりでくじけそうになってます。

15 :unknown三段:2020/09/24 12:44:24  3.9MONA/1人

今も動いてるソースからコピペですが↓でいけてますよ
上でコピペしたクラス使って。
$monaparty = new MonaParty();
$unsighed_tx = $monaparty->createTx($addr_to, ASSET_NAME, $amount, ADDR_MONYA, $memo);
$signed_tx = $monaparty->sign($unsighed_tx);
$result = $monaparty->broadcast($signed_tx);

記憶違いかもしれないけど「Invalid script signature - must be PUSHONLY.」は自分も見たような覚えがあって ただ対処方法思い出せず申し訳ない。
がりがりコード書いて対処したのではなく パラメータの型を間違えたとかちょっとした修正で行けたような記憶がうっすらと。
気づいたら単純だったのに気づかずにライブラリのソース読み漁って無駄に時間使ってしまったような覚えが。
署名成功する前のコミットが残ってないので(署名成功した時点が初コミット)何を修正して解決したのかがわからなくて申し訳ない
Monacoinのプレフィックスの誤りかとgithubみたけどうちと全く同じだったので問題ないし・・・

16 :unknown三段:2020/09/24 12:52:15  4.39MONA/1人

PUSHONLYでgrepかけてみたら力技で対処してたみたいw
関数しょっぱなにreturn trueを挿入してチェックをスキップしてたwww

MonaPartyだからかCounterPartyだからかこのチェックはしなくていい(絶対に通らない)、って結論になったような記憶をうっすら思い出したけどもはっきりとは覚えてない
とりあえず自分はこのPUSHONLYのチェック外してもう1,2年使っていてエラー起きてないからたぶん大丈夫(自己責任でw

bitwasp\bitcoin\src\Script\Script.php line 226

17 :unknown三段:2020/09/24 13:12:13  0.0114114MONA/1人

だんだん思い出してきたけど bitwaspって本来はbitcoin用のライブラリであってcounterparty用ではない ただ署名する処理はbitcoinもcounterpartyも同じでしょ、って発想で使い始めた
普通のbitcoinのトランザクションだとOP_CODEを特定のいくつかしか使わないからこのisPushOnlyのチェックが入っていたけど CounterPartyではそれ以外のOP_CODEも使うからひっかかってしまう
なのでCounterPartyのトランザクションではこのチェックは意味がないのでチェック外しても問題ない、という結論に

OP_CODEのこと全くわかってないので自信はないけど 1年前の自分はたぶんそんなことを考えてこのチェックを外した気がする

18 :名も無きふとん三段:2020/09/25 00:24:11  0MONA/0人

ありがとうありがとう!
ございますございます!

動かせました!
https://mona.chainsight.info/tx/9fabccd823ba7e6a1f98679d1fb7f34dddb53c93d09ff59f6374242d3bf52e47

次はRubyで動かしたい…

19 :名も無きふとん三段:2020/09/25 00:29:05  0MONA/0人

isPushOnlyを飛ばしてもいいと思った理由を教えていただきたい…
自分はそう言う発想が出来なかったので

20 :unknown三段:2020/09/25 09:48:03  0.39MONA/1人

動いたようでおめでとう よかった。

飛ばした理由、、、そんなたいそうな何かがあったわけじゃなくて地道に原因突き詰めていった結果かなぁ
まずエラーメッセージでググったけど解決しなかったので、仕方ないライブラリのソース読むか・・・
ソースからエラーメッセージでgrepかけて場所を特定してprint文いろいろ仕込んでエラーの原因探るとどうもOP_CODEが範囲外だかららしい
で、OP_CODEについてググってみるとビットコイン用の範囲外でもCounterPartyでは使うようなことがわかったので
じゃあ飛ばそう、、、と。
本当はCounterParty向けに修正した方がよりいいんだろうけど内輪でしか使わないシステムだしOP_CODEのこと一から調べる気もならなかったのでいいかなぁ?っと。

だいぶ前だから想像も入ってるけどだいたいこんな感じだったかと。

21 :名も無きふとん三段:2020/09/25 17:21:23  0MONA/0人

ありがとうございます。
やっぱり地道にprintfデバッグなんですねー

22 :名も無きふとん三段:2020/09/29 00:25:46  0.055MONA/1人

楽しみにしてくれてる人が居るみたいなので、ちょこっと進捗を書きます。

PHPでトークンの送信には成功しました。
今はRubyで送れないか実験中です(自分が一番使える言語のため)
そして数時間前に署名してようやく送れたと思ったのですが、サーバーから返ってきたTXIDをinsightなどで検索するも現れず。
どうもどこかでミスってるっぽいです。
そのうえ、MONAの残高があるにもかかわらず、Insufficient MONAと言われる始末。
すべてのUTXOがロックされたような状態に陥っているようです。

ここからはわかる方に質問なんですが、
…1度送信したトランザクションがネットワークに取り込まれない状態でいる時って手数料の関係で使われるUTXOってどんな状態なんでしょう?
ブロードキャストのキャンセルってできないと思ったし、ネットワークで処理(OK/NG)されない限り延々とロックされているのでしょうか…

23 :名も無きふとん三段:2020/09/29 00:42:10  0MONA/0人

とりあえず追加のMONAを送って、手数料引き上げてRubyで送信したら、うまく行きました!
https://mona.chainsight.info/tx/9e523f0b32c0155861f3e96375537743ff4f6d75f965b2d535263028ef5743cf
https://mpchain.info/tx/9e523f0b32c0155861f3e96375537743ff4f6d75f965b2d535263028ef5743cf

ただ先ほどの質問、
>…1度送信したトランザクションがネットワークに取り込まれない状態でいる時って手数料の関係で使われるUTXOってどんな状態なんでしょう?
ブロードキャストのキャンセルってできないと思ったし、ネットワークで処理(OK/NG)されない限り延々とロックされているのでしょうか…
はまだ受付中です。

24 :unknown三段:2020/09/29 09:59:37  0.39MONA/1人

counterblock API(上のソースで使ってるやつ)だとブロードキャスト済みのUXTOも考慮して生トランザクション作るから2つめを作れないけど ライブラリによってはチェックせずに作るので それを使って同じUXTO使った別のトランザクション作ってブロードキャストすればOK
同じUXTOは1回しか使えないので 2つ以上ブロードキャストされた場合は(厳密にはマイナー次第だけど)手数料高い方が取り込まれてその時点でもう一方は無効になる

同じようなことをやらかしたときは同じ秘密鍵を使っているもにゃから自分自身に全額送金して解決した気がする

25 :名も無きふとん三段:2020/09/30 01:37:24  0MONA/0人

うぅ…UTXOの扱い方勉強します。
ありがとうございます。

26 :名も無きふとん三段:2020/09/30 01:53:15  0MONA/0人

これ使えば出来そうですね。
MonapartyアドレスのUTXOをお手入れしましょう - Qiita https://qiita.com/anipopina/items/90c1eb3ac1f07082df55

JSかぁ…

27 :名も無きふとん三段:2020/09/30 23:07:17  0.114114MONA/1人

進捗です。

bitcoin-rubyを改造してmonacoinでも使えるようにしました。
https://github.com/fuyuton/bitcoin-ruby

使い方は大体こんな感じです。
https://gist.github.com/fuyuton/87b5f4d2d9cd9e8801b3cc265c1ed925

これでrubyからでもmonapartyのトークンを送れるようになりました。
でも、dust monaが宛先に送られてしまうので、その辺を出来るようにしないといけません。

28 :名も無きふとん三段:2020/10/02 01:57:27  0MONA/0人

bitcoin-php v1.0.xに対応したmonacoinバージョンをupしました。
行きがけの駄賃的に改造したものなので、自己責任でお願いします。
これはdust monaが流れずトークンだけ送ることが出来ます。

https://github.com/fuyuton/bitcoin-php

monaparty用のサンプル(thank you, unknownさん)
https://gist.github.com/fuyuton/79f782dfc247c756a107d4dd3cd2df48

composer.jsonのサンプル
https://gist.github.com/fuyuton/e72ac9fe07b809262027493cb4e64085

29 :名も無きふとん三段:2020/10/03 21:18:25  1.4948934MONA/5人

進捗です。

本日無事にトークンのみを送ったり、ダストの量を指定して送ったりすることに成功しました!
助けてくださった皆さんありがとうございました。
蛇口の仕様を決めて早いうちに開始したいと思います。

30 :名も無きふとん三段:2020/11/08 00:07:29  0.169114MONA/2人

1ヶ月空いてしまいました。
以前作った蛇口を改造しています。11月中に動かしはじめられたらいいなという状況です。
カンパ送ってくださった方たちに感謝します。モチベーションの維持に役立っています。手数料やボーナスに使わせていただきます。

お気に入り

ログインしてMONAをもらおう

ログインすると、投稿したり、MONAをもらったりすることができます。質問したり、答えたりしてMONAを手に入れてください。

ログイン