monacoind互換クライアント

その他 lnd monad rust golang にゃーん

59 Res. 5.954939 MONA 7 Fav.

何か質問あるならどうぞ

1 :脇P六段尊者男爵:2020/03/31 17:06:49  5.1894882MONA/4人

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

32 :脇P六段尊者男爵:2020/06/03 11:56:09  0MONA/0人

electrumのバグっぽいの修正中が続いててリリースしようとしてもできないぞい・・・・・・

33 :脇P六段尊者男爵:2020/06/05 19:30:01  0.0664114MONA/2人

LND、v0.10.1-betaリリースしました
https://github.com/monasuite/lnd/releases/tag/v0.10.1-beta

34 :脇P六段尊者男爵:2020/06/12 12:52:19  0MONA/0人

electrumの対応をしてました・・・・・・
segwit bugの件をどうするか検討中

内容的には使用者のパソコンにあやしぃソフトウェアが入ってない限りは問題ないんですが、
treozrのfirmwareアップデートをかけた場合electrumの方で反応しなくなる可能性ががが

問い合わせされたらそのたびに渡すとかは出来るけども、
俺の手が足りずに死ぬことが容易に想像できるのであんまりやりたくない上に
それで直るのかと言われると微妙とか何とか(electrumの方はまだ対応中


最悪blockbookがあるのでTrezorWebの方でURL入力してもらえれば資産の移動自体は出来るのでそれでとりあえず逃げるか検討

35 :脇P六段尊者男爵:2020/07/01 02:27:53  0MONA/0人

本家の方で4.0.0のベータが出たようですね

electrum-monaの方はLNDとのチャンネルオープンは問題ないのですが、payしようとするとエラーが出て送れない状態になっています

現在それを直そうと何とかしているのですが、なかなかうまく行かない・・・・・・

そもそもエラー内容が
I | lnworker.LNWallet | UPDATE_FAIL_HTLC <OnionFailureCode.INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS: 16399> b'\x00\x00\x00\x00\x05\xf5\xe1\x00\x00\x1f\x1a^'
なんで結局何なんだお前と言う感じです

REVOKEについてはログを見ている限りlnpeer.pyが何らかの原因でelectrum-mona側が送ってるっぽいです

どうでも良いですが、electrumのlightningはonionのプロトコルを流用してるんですね
と言う訳で一旦lightning封印してリリースするか悩んでいます

36 :脇P六段尊者男爵:2020/07/01 02:30:29  0MONA/0人

ちなみにtravis testがなぜ成功しているのかと言うとアレはelectrum-mona同士で通信しているからです。妥当

neutrino組み込んでやろうか・・・・・・

37 :脇P六段尊者男爵:2020/07/02 04:03:02  0MONA/0人

なんかmonacoinのlightning networkが貧弱なだけな気がしてきたぞ・・・・・・?

38 :脇P六段尊者男爵:2020/07/03 11:06:07  0MONA/0人

行けました。


原因はこいつです。
https://github.com/wakiyamap/electrum-mona/commit/3c02d298355f0e7f47c2eac61c46221c48f2c3f8

cltvの値がBTCだと144で恐らく255以上は取らないんですが、Mona君の場合だと960でintの限界を超えます。よってエラー吐いてた模様です。
cltvは目的のlightning Nodeまでのhopを計算するための物なのですがそれがマイナスの値を取っていたためこんなことになっていた模様

39 :脇P六段尊者男爵:2020/07/26 01:48:10  0.202MONA/1人

https://github.com/monasuite/monad
https://github.com/monasuite/monautil
https://github.com/monasuite/monawallet
https://github.com/monasuite/lnd
それぞれアップデート完了・・・・・・
amoutの最大値をBTCと同じにしていた・・・・・・
うぼあ

40 :脇P六段尊者男爵:2020/07/26 02:09:09  0.114114MONA/1人

そういやmonacoinの0.18のお話合いが始まってるので良ければ参加してくれ
https://github.com/monacoinproject/monacoin/pull/72

41 :脇P六段尊者男爵:2020/07/26 11:59:03  0MONA/0人

ちなみにですが、amountの最大値を変更した際にあることに気づいてそっちも修正を加えています。
こちらに関しては他のgolangを扱っているaltcoinに伝えてから詳細をお知らせします。

42 :脇P六段尊者男爵:2020/08/23 20:35:35  0MONA/0人

protobufにdecimalを渡す方法が良く分からない・・・・・・

43 :脇P六段尊者男爵:2020/08/23 21:25:51  0MONA/0人

stringか・・・・・・
https://stackoverflow.com/questions/50612028/go-protobuf-precision-decimals

44 :脇P六段尊者男爵:2020/09/01 03:39:50  0MONA/0人

もうDecimalで押し切ることにする

45 :脇P六段尊者男爵:2020/09/02 03:57:34  0MONA/0人

押し切った

46 :脇P六段尊者男爵:2020/09/12 05:00:22  0MONA/0人

手数料は問題ないのでfloat64で返すよう戻す・・・・・・
https://github.com/monasuite/monad/commit/acc0d3365f2c75e55b6594807ab1cd3e43c73752

decimalのRPCもfloat64とmonautil.Amount()で返した方が良いかな・・・・・・そうするか

47 :林屋本舗三段男爵:2020/09/12 14:37:34  0MONA/0人

えっげつな

48 :脇P六段尊者男爵:2020/09/12 19:32:13  0MONA/0人

>>47
altcoinの開発者は皆これやってるんだよ。

49 :脇P六段尊者男爵:2020/09/17 03:54:50  0MONA/0人

必要なのと必要じゃないのと編集が必要なのの選別なう
https://pastebin.pl/view/562d373b

50 :脇P六段尊者男爵:2020/09/19 05:27:58  0MONA/0人

sendシリーズとmoveをdecimalにするかを延々迷っているなう

51 :脇P六段尊者男爵:2020/10/01 12:53:22  0MONA/0人

monad v0.22.3-betaおよびlnd v0.10.6-beta(monacoin)をリリースしました。
https://github.com/monasuite/monad/releases/tag/v0.22.3-beta
https://github.com/monasuite/lnd/releases/tag/v0.10.6-beta

52 :いっとう二段:2020/10/01 21:10:49  0MONA/0人

goって一度も触った事ないなぁ。
いつも言語別年収で上にいるやつw

53 :脇P六段尊者男爵:2020/10/09 03:58:04  0.0114114MONA/1人

わいも今でこそなんとなく弄れるけど、職場でやれと言われたら死ねる自信がある()

54 :脇P六段尊者男爵:2020/10/10 05:43:31  0MONA/0人

しばらくmonapartyの方に集中しようと思ったらw
https://twitter.com/Cointelegraph/status/1314402720778838017

あぁめんどくさい(LNDアップデートします

55 :脇P六段尊者男爵:2020/10/13 09:13:54  0MONA/0人

しました
https://github.com/monasuite/lnd/releases/tag/v0.11.1-beta

56 :脇P六段尊者男爵:2020/10/20 08:19:53  0.114514MONA/1人

monadじゃ結局掘れねぇよと言われないように一応プールは作成しておきました
https://go-is-god.electrum-mona.org/

掘れた実績は・・・・・・まぁあります

57 :脇P六段尊者男爵:2020/10/22 00:25:11  0MONA/0人

satoshi単位で返ってくるgetbalanceが欲しい・・・・・・という事で
https://twitter.com/WakiyamaP/status/1318802199464579074

なんとなく聞いた感じだとgetbalancebysatoshiとかになりそうかなぁ
しかしgolang仕様のためにこれを生やすのか?と苦悶しているなう

58 :脇P六段尊者男爵:2020/10/22 06:02:57  0MONA/0人

いっそgetbalancebywatanabeとかにしてしまえば後腐れなく互換保てるのでは(おめめぐるぐる

59 :脇P六段尊者男爵:2020/10/22 06:46:27  0MONA/0人

実装については前にvalidatecheckpointやら実装した時に比べればはるかに楽ではあるのだがまぁ

お気に入り

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

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

ログイン