いくつかの提案

9 件のメッセージ サトシ・ナカモト 2009年12月10日 — 2009年12月18日

madhatter2の2009年12月10日 02:00:17 PMの投稿より引用フロントエンドは携帯電話のような非常にCPUパワーの低いクライアントでも動作させることができます。 これはモバイル向けの良いアプローチだ。PHP(任意の言語)が使用するプログラマティックAPIでWeb UIを提示すれば、リモート管理、モバイル、その他常時オンラインで静的IPを持てないあらゆるクライアントに対応できる。ウェブメールのようなものだ。ソフトウェアをインストールする必要がなく、ウェブサイトでアカウントを作成するだけで済むなら、新規ユーザーが始めやすくなるだろう。

引用:「アプリはダウンロード前にプリシードできます。プリシードすればTOR+IRC問題も解決します。人々がI2P+TOR上でこのシステムを使いたがることは分かっています。」 ええ、十分な数の静的ノードができてシードリストをプリプログラムできるようになれば、IRCを段階的に廃止できる。一度シードされれば、IRCは必要ない。

引用:「また、ブロックをプリシードしておけば、初回起動時にダウンロードする必要がなくなります。(遅いADSLで28,000ブロックをダウンロードするのは永遠にかかります。ブロックが数百万になったときにどれだけかかるか想像もできません──一生かかるでしょう)。」 0.1.5では初回ブロックダウンロードが停滞する問題がいくつかあった。0.2にはスムーズに進むようにするコードが含まれている。1時間もかからないはずだと思う。0.2のリリースを急がないといけない。

ブロックは線形的に増加するので、数百万になるのは数十年先だ。理論的には、ブロックダウンロード時間は今から8ヶ月後にピークに達するはずだ。その頃にはムーアの法則がブロックチェーンよりも速く成長しているだろう。

引用:「CVSアクセスか何かをいただけますか?(無理なら、パッチを送ってもいいですか?)お手伝いしたいです。」 SourceForge上のSVNだ。PMまたはメールでSourceForgeのアカウントを教えてもらえれば、アクセス権を付与する。

引用:「私は主にLinux/BSDの人間なので、その分野の専門知識を提供したいと思います。」 それは素晴らしい。私はその分野の専門知識が少ないからだ。例えば、Linuxで「システム起動時にBitcoinを開始する」機能を実装する最善の方法をまだ調べていない。Windowsでは、このオプションはスタートアップフォルダにアイコンを追加/削除する。

そうだ、SVNにはほぼリリース候補の0.2ソースがあり、Linux上でもビルド・実行が可能だ。FreeBSDではテストされていない。

madhatter2の2009年12月11日 04:59:19 AMの投稿より引用動作するバックエンドプロセスがFreeBSD上で実行できるようになれば、常時稼働のシードを運用できます。 それは大きな助けになるだろう。TORユーザーはシードの取得方法を心配する必要がなくなり、IRCに依存しなくてもよくなる。

UIにアクセスしなくても、デスクトップ上に最小化されたウィンドウがあることを気にしなければ、いくつかのシンプルなモードで実行できる。(0.1.5には-minオプションがないので、開いたウィンドウになる)

シードのみを実行する場合: bitcoin -min -gen=0

debug.logを見ることで、ある程度監視できる。停止するには、プロセスをkillしてほしい。データベースは問題ない。

生成する場合: bitcoin -min -gen

生成されたBitcoinを取得するには、wallet.dat(バージョン0.2の場合)をUI付きのマシンにコピーし、wallet.datを入れ替えて、Bitcoinを起動し、コインをメインアカウントに送金する必要がある。(バージョン0.1.5では、“%appdata%/Bitcoin”ディレクトリ全体をコピーする必要がある。)wallet.datのコピーに関して一つ注意点がある:コインを生成した瞬間や支払いを受け取った瞬間にプログラムをkillした場合、wallet.datだけでは機能しない可能性があり、ディレクトリ全体をコピーする必要がある。

引用:「初回ダウンロードパッケージに日次のシードスナップショットを含めることで、ブートストラッピングが改善されると本当に思います。ここでの新規テストインストールで、アプリケーションが0接続/1ブロックの状態で停止する事例を見ました。debug.logを調べると、IRCサーバー(freenodeだと思います)が既に接続されていると言って、アプリケーションのシードを拒否していることがわかりました。(一例です)。」 なるほど、同じNATやVPN、またはISPが全員を数台のプロキシサーバー経由で接続している場合にそうなるだろう。これに対する修正をSVNにコミットした。「433」の名前が既に使用中エラー(エラー433だったよね?)を受け取った場合、アドレスではないランダムなユーザー名でリトライする。

引用:「いずれにせよ、お手伝いしたいです。時間はたくさんありますし、このようなプロジェクトはとても刺激的です。」 ありがとう、どんな助けも本当にありがたい!

ネットワーク全体で1日に生成される平均総コイン数は変わらない。速いマシンは遅いマシンよりも大きなシェアを得るだけだ。全員がより速いマシンを購入しても、以前より多くのコインを得ることはできない。

ネットワークのために、できるだけ長くGPU軍拡競争を延期するという紳士協定を結ぶべきだ。GPUドライバーや互換性を心配する必要がなければ、新規ユーザーが始めるのがずっと簡単になる。今はCPUだけの人が誰でもかなり公平に競争できるのが良いところだ。

madhatter2の2009年12月12日 06:34:21 AMの投稿より引用SVN 0.2をMac OS X 10.4.11/Intelでほぼコンパイルできるようになりました(PPC970マシンもあるのでPPCビルドも可能です)。ウィンドウシステムはwxwidgets経由のネイティブCarbonです!高速です!新しいmakefile(makefile.osx、もちろんmakefile.unixベース… autoconfの使用を検討したことはありますか?)を作成し、header.hにいくつかのifdefを追加しなければなりませんでした。パッチがあります。引き続きいじってみます。次はFreeBSDで試すかもしれません。 Macサポートは良いな。wxWidgetsはクロスプラットフォームで本当に効果を発揮している。

PPCは試さないでほしい。PPCはビッグエンディアンで、Bitcoinはリトルエンディアンだ。バイトスワップの可能性があるノードが存在すると、ネットワークのデバッグが困難になる無限のエンディアンバグが発生する。いずれにせよPPCは衰退途上だ。

autoconfは検討した。autoconfは、makefileが泥沼化した大規模プロジェクトには必要だが、私たちはまだ十分に小さいので、なしの方が最適だと思う。できるだけ長くmakefileをシンプルに保ちたいと思っている。

引用:「Bitcoinを2つのアプリに分割するのが理想的だと思います。wxwidgetsのフロントエンド(ほとんど出来上がっているので)と、制御用TCPソケットにバインドするバックエンドです。ソースを読んで分離がどれくらい難しいか確認していますが、かなり簡単なはずだと思います。もちろんAPIの開発が必要になりますが。」 考えただけで頭が痛くなる。すべてのUIバックエンドをTCP接続経由にすると、すべてが2倍難しくなる。リストビューコントロールの動作方法のため、リストビューコントロールを更新し続けるためにUIと内部データ構造の間には非常に大きな帯域幅が必要だ。

コマンドラインでの制御の方が好ましい。それでリモート管理とバッチ自動化が実現できる。

実行時にUIなしで動作させるためのコマンドラインスイッチがある。メインウィンドウを作成しないだけだ。簡単な方法としては、ui.cppの「pframeMain->Show」と「ptaskbaricon->Show」を無効にすることだ。ネットワークスレッドはUIが存在しなくても気にしない。他のUIはCheckDiskSpaceでディスク容量が不足した場合のメッセージボックスだけだ。

次に、操作を行うために通信する別のコマンドラインユーティリティを用意する。名前を何にすべきかはまだわからない。

「自然デフレーション」… 良い名前だな。はい、支払いのミスやデータの紛失により自然デフレーションが発生する。コインの生成は最終的に自然デフレーションを下回るほど遅くなり、純デフレーションが起こることになる。

madhatter2の2009年12月14日 03:01:39 PMの投稿より引用誰かここを解説してくれませんか?

g++ -c -O0 -Wno-invalid-offsetof -Wformat -g -DWXMAC -DNOPCH -DBUILD_MACOSX -I”/usr/include” -I”/usr/local/include/wx-2.8” -I”/usr/local/include” -I”/usr/local/boost_1_41_0” -I”/sw/include/db4” -I”/usr/local/ssl/include” -I”/usr/local/lib/wx/include/mac-ansi-release-2.8” -o headers.h.gch headers.h … ui.h:430: error: no matching function for call to ‘wxTextCtrl::SetValue(const std::basic_string<char, std::char_traits, std::allocator >&)’ /usr/local/include/wx-2.8/wx/textctrl.h:303: note: candidates are: virtual void wxTextCtrlBase::SetValue(const wxString&)

std::stringからwxStringへの暗黙の変換が機能していないようだ。これはあらゆるところで使用されており、変換が動作する必要がある。

wxStringはwin32の16ビットwcharと8ビットansiのデュアルコンパイルをサポートするため複雑だ。Windowsでは「unicode」(つまりwchar)ビルドを使用した場合にこの問題が発生する可能性があり、その場合wxStringはwcharでstd::stringはcharになる。

おそらくwxWidgetsのコンパイル定義やビルド設定の問題だろう。「configure」でどのオプションを使用したか?

__WXMAC__が正しい定義かわからない。wxStringを複雑にしているのはMac Classicサポートかもしれないが、私たちはOSXだけが必要だ。__WXOSX__を試してみてほしい(または以下を参照)

http://docs.wxwidgets.org/stable/wx_cppconst.html 「wxWidgetsにはMac OSへの2つの移植があります。そのうちの1つ、wxMacにはClassicとCarbonの2つのバージョンがあります。ClassicバージョンはMac OSバージョン8で動作する唯一のものです。CarbonバージョンはCFMまたはMach-O(ELFのようなバイナリフォーマット)としてビルドでき、前者はOS 9で動作し、後者はOS Xでのみ動作します。最後に、OS Xでのみ使用できる新しいCocoaポートがあります。まとめると:

* ClassicとOS Xを含むすべてのMacプラットフォームをテストしたい場合は、__WXMAC__と__WXCOCOA__の両方をテストしてください。
* OS X上の任意のGUI Macポートをテストしたい場合は、__WXOSX__を使用してください。
* wxGTKやwxBaseを含むMac OS X上の任意のポートをテストしたい場合は、__DARWIN__を使用してください」

madhatter2の2009年12月15日 05:21:09 AMの投稿より引用最新バージョンのUbuntu Linuxでも同じstd::stringの問題が発生しています。 それなら、wxWidgetsのビルドまたは設定で何か異なることをしているはずだ。

wxWidgetsの「configure」スクリプトでどのオプションを使用したか?私が使用したオプションはbuild-unix.txtに記載されている。

引用:「一つ質問:debug.logを有効にするにはどうすればいいですか?Bitcoinを停止して~/.bitcoin/debug.logをtouchして、再度Bitcoinを起動してみましたが、ファイルに書き込まれることはありません。何か見落としていますか?」 そのようなことは聞いたことがない。debug.logに何か入っているか?ファイルをtouchしたなら、何か入っているはずだ。プログラムにファイルへの書き込みアクセス権はあるか?

良いな、FreeBSDで正常に動作しているか?

headers.hへの変更をコミットした。一貫性のため、__BSD__を使用した。定義の完全なリストはhttp://docs.wxwidgets.org/stable/wx_cppconst.htmlにある。 #ifdef BSD #include <netinet/in.h> #endif

malloc.hはWindowsでのみ必要なので、これ以上問題を起こさないように__WXMSW__セクションに移動する。

現在可能なのは、オプションで「トレイに最小化」を設定し、「bitcoin -min」で起動して最小化状態で開始することだ。表示されるのはトレイ上の小さな(20x20)アイコンだけで、UIにアクセスしたい場合はダブルクリックできる。注意:64ビットKarmic Koalaでトレイアイコンが消えることがあるバグがある。64ビットのせいかKarmicのせいかはわからないが、32ビットJauntyでは問題なかった。

0.2のリリースに間に合うようにLinuxの「システム起動時にBitcoinを開始」機能を実装する時間がなかったため、グレーアウトされている。Linuxユーザーならとにかく手動で設定することを気にしないだろうと思った。正しく行うには-minスイッチを知る必要があるだろう。

「-datadir=<ディレクトリ>」スイッチでデータディレクトリの場所を指定できる。TrueCrypt USBドライブに置くために既にそうしている人がいるのは知っている。