monacoind互換クライアント

その他 lnd monad rust golang にゃーん

31 Res. 1.5350768 MONA 4 Fav.

何か質問あるならどうぞ

1 :脇山P五段尊者男爵:2020/03/31 17:06:49  1.2780768MONA/3人

https://askmona.org/11333
https://askmona.org/11113

辺りの続き

monad,neutrino,lndとrust-monacoinの進捗について書いていきます。

2 :脇山P五段尊者男爵:2020/03/31 17:11:29  0MONA/0人

直近でとりあえずlndについてはtravisのチェックを通るように変更しました。
https://travis-ci.org/github/monasuite/lnd

今やっていることはrust-monacoinの開発とそれに伴うmonad(golangクライアント)のリファクタリングとです。
rust-monacoinについてはelectrumxサーバからデータを取得する際に、データ量が多いとエラーを返してしまうので、
blockstreamが出しているelectrsに移行させてしまうための第一歩です。

んでrust-monacoin(rust実装)をやってみると結構前にやったmonadの粗が目立ち始めた次第。
なのでちょっと書き直しをしてついでにテストが通るようにちゃんと作ってみようと思います。

3 :脇山P五段尊者男爵:2020/03/31 17:18:52  0MONA/0人

rust-monacoinの進捗についてこんな感じです。

去年12月から開発したlyra2をcrate.ioに登録して使える状態にしました
https://crates.io/crates/lyra2

rust-bitcoinのパラメータを変更して上記のlyra2をheader計算に用いるように変更しました
https://github.com/wakiyamap/rust-monacoin

あとはNetwork::Bitcoin辺りを全部書き換えかなーと言ったところです

4 :脇山P五段尊者男爵:2020/04/04 22:21:23  0MONA/0人

rust-bech32-bitcoinにmonacoinをサポートしてもらえるようにプルリクしました。
groestlがサポートしてもらえたから通してくれると良いな・・・・・・と思ってはいます。
https://github.com/rust-bitcoin/rust-bech32-bitcoin/pull/28

まぁ通してくれなかったらrust-bech32-altcoinが誕生してしまう訳で、出来ればそれで書き換えたくないのでそれで通してほしい・・・・・・
こちらはaltcoinでまとめて他のコインもガンガン登録していく方向で行きますがめんどい。

monadの方はとりあえずscrypt(450000blockまで)も計算するようにしました。
https://github.com/monasuite/monad/commit/ab374ffe4d2c04f31c9d1d24ff4d9831173e5d48

5 :脇山P五段尊者男爵:2020/04/04 23:06:01  0MONA/0人

monadのテストが通るようにscryptも計算するようにしたけども結構めんどくさい

6 :脇山P五段尊者男爵:2020/04/05 01:09:10  0MONA/0人

今更なんですが落ち着いたらある程度動いたらrust-monacoinのレポジトリをmonacoinprojectのほうに置かせてほしい……

7 :脇山P五段尊者男爵:2020/04/05 01:27:32  0MONA/0人

btcは2016block毎にtargetが変更だからテストの途中でtargetが切り替わるわけないよなと気づいたのでregtestとsimnetについてはtarget全部powlimitbit返すように変更
2016block以降も掘るtestは見たことが無いので意図的に無視する(仕様です(ドヤァ
https://github.com/monasuite/monad/commit/ce0cac004bee0f3dbcb28e0ca42ba0c7e9901044

8 :脇山P五段尊者男爵:2020/04/06 03:00:05  0MONA/0人

txscriptのテストはmonacoinprojectの方から引っ張ってくるようにしました。
https://github.com/monasuite/monad/commit/9f952ce6c2c6b86f788cea105f2503719343d2eb

残るは、以下の項目だけですが、テスト用のデータを用意するのが面倒・・・・・・
FAIL github.com/monasuite/monad/blockchain 1.041s

9 :脇山P五段尊者男爵:2020/04/06 03:10:18  0MONA/0人

なんでよりによって用意するのがmainnet何ですかね・・・・・・
とりあえずmonacoindのソースを以下のように書き換えてブロックデータを作成
・dnsseed接続消す
・ハードコーディングしてるピアを消す
・無効化しているgenerateを有効化

とりあえずこれで0-4block及び3Aは出来た
(genesis block) -> 1 -> 2 -> 3 -> 4
      \-> 3a

が、このデータに載ってるblk_3A.datのデータが明らかに大きいのでreorg用のデータが入ってる?っぽいのでデータとしてこれで良いか不安
https://github.com/btcsuite/btcd/blob/master/blockchain/testdata/reorgtest.hex

10 :脇山P五段尊者男爵:2020/04/06 05:34:32  0MONA/0人

・・・・・・なんかエラー内容良く見てみると、volatilecheckpointとかmonad独自で追加している部分が引っ掛かってないか?

恐らくだけどテストだとinitのOpenDBが回らないからこんなことになっているような?

https://gist.github.com/wakiyamap/edf1a0e7eb4bde2dbc415fa9cc31d345

11 :脇山P五段尊者男爵:2020/04/06 05:50:13  0MONA/0人

ちゃんとエラーハンドリングしような!

12 :脇山P五段尊者男爵:2020/04/07 04:09:10  0MONA/0人

とりあえず今日考えてみた結果として、DBをopenしていない場合そのまま通す方向で行くことにした。monadで起動している場合はinit(btcd.go)から走るのでちゃんとopenされる。しかしながらvalidate.goを直接起動された場合、open対象のdbは存在しない。しかし今後neutrino辺りから直で呼び出しされる可能性がある。

なんでとりあえずinstanceを呼び出した時点(getする前段階)でopen出来ているか否かを判断する物が必要かな……と

13 :脇山P五段尊者男爵:2020/04/07 08:04:08  0MONA/0人

良さげなのが見つからないのでどうしようかと考える
とりあえず第一候補は今のところこいつ
https://pkg.go.dev/github.com/syndtr/goleveldb/leveldb?tab=doc#DB.GetProperty

14 :脇山P五段尊者男爵:2020/04/09 04:16:08  0MONA/0人

uc := checkpoint.GetUserCheckpointDbInstance()
の結果がopendbしていない場合、nilのみであることに着目してnilの場合は
usercheckpoint及びvolatilecheckpointを通過させるようにしました。

https://travis-ci.org/github/monasuite/monad

・・・・・・よし!先に進んだな!

15 :脇山P五段尊者男爵:2020/04/10 01:08:03  0MONA/0人

とりあえずexampleblockchain辺りのテストを直しました。

https://travis-ci.org/github/monasuite/monad

ちょっとelectrum-monaの方の最新をマージしたら面倒になったので先にそっちを修正しますん

16 :脇山P五段尊者男爵:2020/04/10 01:10:27  0MONA/0人

validate_test.go辺りは明らかにBTCのtargetを拾ってきているのでどっかに定義してあるんだろうなぁと予想

17 :脇山P五段尊者男爵:2020/04/11 04:16:30  0MONA/0人

electrum-monaのlightningテストに引っかかりだしたので調べてみたところBOLT #11の新しいのが入ったっぽい・・・・・・のでmonacoin版のテストコードを作成するためにpython実装を見つけたのでそれをmonacoin版にしていく作業をしています

https://github.com/wakiyamap/lightning-payencode

しかしこれも微妙に古いので最新版に今持って行く作業をやっています

18 :脇山P五段尊者男爵:2020/04/13 05:33:39  0MONA/0人

とりあえずこれに基づいて動かすようにしていますが、
paymentsecretについては対応出来ました。
https://github.com/lightningnetwork/lightning-rfc/blob/master/11-payment-encoding.md

ただまだfeaturesタグが失敗するようです。うがー
https://github.com/wakiyamap/lightning-payencode/commit/fa3fcbfabb7b0ab8f8a6fed0b22560939de11065

19 :脇山P五段尊者男爵:2020/04/13 05:36:46  0MONA/0人

### Please send $30 for coffee beans to the same peer, which supports features 9, 15 and 99, using secret 0x1111111111111111111111111111111111111111111111111111111111111111
Traceback (most recent call last):
File "./lightning-address.py", line 137, in <module>
options.func(options)
File "./lightning-address.py", line 50, in encode
print(lnencode(addr, options.privkey))
File "/home/wakiyamap/lightning-payencode/lnaddr.py", line 373, in lnencode
feature_bits = bitstring.BitArray(uint=v, length=v.bit_length())
AttributeError: 'bytes' object has no attribute 'bit_length'


まぁバイト列じゃないもんなぁ・・・・・・bitにしないといけないっぽいがpythonでそれは面倒だぞ?
sqqqqqqqqqqqqqqqpqsqをbitにしたらb1000....00001000001000000000になるらしいが、全部出しておいてくれよ・・・・・・

20 :脇山P五段尊者男爵:2020/04/17 02:48:00  0MONA/0人

lightning-payencodeを弄ってテスト用のlightningの方も無事に成功しました。
https://travis-ci.org/github/wakiyamap/electrum-mona/builds/675598570

ただCLTVのminimumの値が960->144になっているので注意
後で直す

21 :脇山P五段尊者男爵:2020/04/17 02:49:11  0MONA/0人

とりあえずlnd0.10RC2が出てるので恐らくかなり早めに0.10が出そう・・・・・・
なのでmonawallet,neutrino辺りを追いつかせます

22 :脇山P五段尊者男爵:2020/04/17 18:37:01  0MONA/0人

LNDを最新まで追いつかせました。
travis testも通ってるので多分大丈夫でしょう・・・・・・
https://travis-ci.org/github/monasuite/lnd

23 :脇山P五段尊者男爵:2020/04/19 04:39:32  0MONA/0人

rust-bech32-bitcoinからお返事がないので作成しました
https://crates.io/crates/altcoin-bech32

24 :脇山P五段尊者男爵:2020/04/19 06:37:16  0MONA/0人

network周辺をbech32で使用するであろう値に変更しました・・・・・・
https://github.com/wakiyamap/rust-monacoin/commit/99bb04098aba0a72b94e08fa59cb6833c4421f0e

25 :脇山P五段尊者男爵:2020/04/29 09:08:05  0MONA/0人

先んじてcrate.ioに登録しておきました
https://crates.io/crates/monacoin

大体は動くかとは思いますが、target辺りは素通しさせてるのでここは後で直します

26 :脇山P五段尊者男爵:2020/04/29 09:12:16  0MONA/0人

Litecoinさんがアレなことになってるのでちょっと急ぎました
https://crates.io/crates/litecoin

27 :脇山P五段尊者男爵:2020/05/01 18:24:52  0MONA/0人

rust-monacoinを使用した、electrsを使ってesploraと言うブロックエクスプローラを建てました。

https://esplora.electrum-mona.org/

28 :脇山P五段尊者男爵:2020/05/26 23:40:00  0MONA/0人

test失敗が2個まで減りました・・・・・・
https://github.com/monasuite/monad/runs/709165004

29 :脇山P五段尊者男爵:2020/05/28 03:14:18  0.202MONA/1人

残り1個!
https://github.com/monasuite/monad/runs/711981124

は良いんだけどutxostoreとやらが何をやっているのかが良く分からない。
これmonawallet側のテストならわかるんだけども・・・・・・

テスト見てる限りはBIP0016のテストなんでまぁ・・・・・・と言った感じ

データ見てみたけども確かに最初はtx hash(littleEndian)ではあるんだけど、それ以降が謎
どうやってテストデータを作るべきか・・・・・・

30 :脇山P五段尊者男爵:2020/06/02 17:01:53  0.055MONA/1人

test全部通りました!
やったぜ

https://github.com/monasuite/monad/actions/runs/120146160

31 :脇山P五段尊者男爵:2020/06/02 17:04:39  0MONA/0人

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

次はelectrum-monaのリリースを考えつつrust-monacoinの続きやりながらmonadにdandelion実装できるか試してみたいと思います。

まぁその前にこちらが課題になりそうなんですが、どうするのかな
https://github.com/monacoinproject/monacoin/issues/71

お気に入り

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

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

ログイン