いくつかの提案

27 件のメッセージ BitcoinTalk madhatter, サトシ・ナカモト, nanaimogold, The Madhatter, SmokeTooMuch, マルッティ・マルミ, The Doctor 2009年12月8日 — 2010年6月29日
madhatter 2009年12月8日 原文 · 個別ページ

やあ、

まず最初に言わせてほしいのは、これは素晴らしいコンセプトだということだ。P2Pの通貨システムは長い間ずっと夢見てきたものだ。

完全に敬服し、尊敬している。

いくつか提案がある:

  • ビットコインのソフトウェアがピアとの接続を確立する際(クライアントTCPソケット)、クライアント側からハンドシェイク文字列を送信するようにしてほしい。現在はサーバー側(サーバーTCPソケット)がハンドシェイクを送信している。理由はもちろん匿名性だ。ISPがクライアントをポートスキャンしてこのプログラムを実行していることを検出するのはあまりにも容易だ。

  • ハンドシェイク時に何らかの暗号化を使用し(上記の要望に関連する)、DPI(ディープパケットインスペクション)の際にソフトウェアの正体を難読化してほしい。中国やイランのような自由でない(自由という意味での)国の人々のことを本当に考えている。

  • このシステムをウェブサイトに統合してインスタントサービスを提供するためのAPIが必要だ。シンプルなHTTPSの受領メカニズムがあれば大きな効果がある。クライアントが受信した支払いをすべての関連情報とともにHTTPS URLにポストし、ステータス更新を提供するようにしてほしい。また、送金メカニズムもあると良い。これにより、送金(およびバッチ送金)を自動化できる。ステータスはHTTPSの受領インターフェースを通じて返すことができるだろう。

  • 固定ポート/ランダムポート。実行するポートをランダムに割り当てる設定を用意してほしい(非常に制限的なファイアウォールのために静的に設定できる機能も)。

  • UPnPサポート。クライアントが上流のルーターに自動的にポートフォワードを作成するようにしてほしい。デフォルトで有効にし、オプションメニューでオフにできるように。

  • *NIXシステム向けにヘッドレス(コンソールのみ)インストールをコンパイルできるようにしてほしい。また、ネットワークサービスとしてだけ実行できる機能も。制御用のtelnet接続可能なポート(あるいはUNIXソケットでも可)があれば良いだろう。

参考になる提案だ、ありがとう。

Quote from: madhatter on December 09, 2009, 05:34:46 AM

やあ、

まず最初に言わせてほしいのは、これは素晴らしいコンセプトだということだ。P2Pの通貨システムは長い間ずっと夢見てきたものだ。

完全に敬服し、尊敬している。

いくつか提案がある:

  • ビットコインのソフトウェアがピアとの接続を確立する際(クライアントTCPソケット)、クライアント側からハンドシェイク文字列を送信するようにしてほしい。現在はサーバー側(サーバーTCPソケット)がハンドシェイクを送信している。理由はもちろん匿名性だ。ISPがクライアントをポートスキャンしてこのプログラムを実行していることを検出するのはあまりにも容易だ。

  • ハンドシェイク時に何らかの暗号化を使用し(上記の要望に関連する)、DPI(ディープパケットインスペクション)の際にソフトウェアの正体を難読化してほしい。中国やイランのような自由でない(自由という意味での)国の人々のことを本当に考えている。

  • このシステムをウェブサイトに統合してインスタントサービスを提供するためのAPIが必要だ。シンプルなHTTPSの受領メカニズムがあれば大きな効果がある。クライアントが受信した支払いをすべての関連情報とともにHTTPS URLにポストし、ステータス更新を提供するようにしてほしい。また、送金メカニズムもあると良い。これにより、送金(およびバッチ送金)を自動化できる。ステータスはHTTPSの受領インターフェースを通じて返すことができるだろう。

  • 固定ポート/ランダムポート。実行するポートをランダムに割り当てる設定を用意してほしい(非常に制限的なファイアウォールのために静的に設定できる機能も)。

  • UPnPサポート。クライアントが上流のルーターに自動的にポートフォワードを作成するようにしてほしい。デフォルトで有効にし、オプションメニューでオフにできるように。

  • *NIXシステム向けにヘッドレス(コンソールのみ)インストールをコンパイルできるようにしてほしい。また、ネットワークサービスとしてだけ実行できる機能も。制御用のtelnet接続可能なポート(あるいはUNIXソケットでも可)があれば良いだろう。

良いアイデアだ。接続を受け入れる側は、有効なハンドシェイクを受信するまで何も送信しなければよい。どのようなポートスキャンでも、自発的に身元を明かさない無反応な接続しか得られないことになる。

すべての接続をSSL化することは考えた。DPIに対してはSSL以外のものは無意味だと思う。おそらくより良い直近の解決策は、TOR経由で接続することで、これは0.2で可能になる。

0.2以降の主な課題の一つだ。

ええ、常に同じポート番号だと、他のステルス機能もかなり無意味になる。

UPnPを試してみるのが楽しみだ。ほとんどのP2PクライアントはUPnPをデフォルトで有効にしているのだろうか?

管理インターフェースの最適な構成をまだ検討中だ。コマンドラインからバックグラウンドデーモンに通信して、受信トランザクションの照会や送金の開始を行う方法がよいかもしれない。その方が自動化に適している。あるいは80以外のポートでHTTPインターフェースを提供して、ブラウザで管理する方法はどうだろうか?

この取り組みに感謝する。P2P決済システムは長い間必要とされていた。

Shane

最近のP2PソフトウェアはほとんどがデフォルトでUPnPを試行する。もちろん、(通常は)オプションで無効にできる。

うーん、俺もそれについて考えていた。最初のアイデアがおそらく最善だろう。そうすればサーバーデーモンを「ヘッドレス」で動かし、フロントエンドを自由に選べる。(フロントエンドの一つは、好みのウェブサーバーで動くPHP [またはC++ CGI] プログラムにもできる)。

これにより、フロントエンドとバックエンドを別々のマシンで実行することも可能になる。(例:静的IPを持つLinuxサーバーでヘッドレスで動かして受け取りを容易にし [IPモードでの支払い]、管理用のフロントエンドクライアントはWindows/Mac/その他で実行する)。フロントエンドは携帯電話のようなCPUパワーの低いクライアントでも実行できる。nudge nudge Wink

もう一つ考えていることがある。シーディングだ。アプリはダウンロード前にプリシードしておくことができる。毎日プリシード済みの新しいアーカイブを準備できる。そうすればIRC接続は不要になる。(あるいはフォールバックとして使うこともできるだろう。IRC接続のコードはまだ監査していない。いくつかのエクスプロイトを思いついたが、実際に存在するか確認するまでは言及したくない。)プリシーディングはTOR+IRC問題も解決する。このシステムをI2P+TOR上で動かしたい人が出てくるのは分かっている。Tongue

また、ブロックもプリシードしておけば、初回起動時にダウンロードする必要がなくなる。(28,000ブロックを低速ADSLでダウンロードするのは永遠にかかる。数百万ブロックになったらどれほどの時間がかかるか想像もつかない――一生かかるだろう。)

CVSアクセスか何かをもらえないだろうか?(無理なら、パッチを送ることはできるか?)手伝いたい。俺は主にLinux/BSDの人間で、その分野の専門知識を提供したい。

Cheers! Smiley

Quote from: satoshi on December 09, 2009, 06:45:10 PM

参考になる提案だ、ありがとう。

Quote from: madhatter on December 09, 2009, 05:34:46 AM

  • Bitcoinソフトウェアがピア(クライアントTCPソケット)と接続を確立する際に、クライアントからハンドシェイク文字列を送信させるべきだ。現在はサーバー(サーバーTCPソケット)がハンドシェイクを送っている。理由はもちろん匿名性だ。ISPがクライアントをポートスキャンしてこのプログラムの実行を検知するのはあまりにも簡単だ。

良いアイデアだ。接続を受け入れる側は、有効なハンドシェイクを受信するまで何も送信しなければよい。どのようなポートスキャンでも、自発的に身元を明かさない無反応な接続しか得られないことになる。

すべての接続をSSL化することは考えた。DPIに対してはSSL以外のものは無意味だと思う。おそらくより良い直近の解決策は、TOR経由で接続することで、これは0.2で可能になる。

0.2以降の主な課題の一つだ。

ええ、常に同じポート番号だと、他のステルス機能もかなり無意味になる。

UPnPを試してみるのが楽しみだ。ほとんどのP2PクライアントはUPnPをデフォルトで有効にしているのだろうか?

管理インターフェースの最適な構成をまだ検討中だ。コマンドラインからバックグラウンドデーモンに通信して、受信トランザクションの照会や送金の開始を行う方法がよいかもしれない。その方が自動化に適している。あるいは80以外のポートでHTTPインターフェースを提供して、ブラウザで管理する方法はどうだろうか?

Quote from: madhatter2 on December 10, 2009, 02:00:17 PM

最近のP2PソフトウェアはほとんどがデフォルトでUPnPを試行する。もちろん、(通常は)オプションで無効にできる。

うーん、俺もそれについて考えていた。最初のアイデアがおそらく最善だろう。そうすればサーバーデーモンを「ヘッドレス」で動かし、フロントエンドを自由に選べる。(フロントエンドの一つは、好みのウェブサーバーで動くPHP [またはC++ CGI] プログラムにもできる)。

これにより、フロントエンドとバックエンドを別々のマシンで実行することも可能になる。(例:静的IPを持つLinuxサーバーでヘッドレスで動かして受け取りを容易にし [IPモードでの支払い]、管理用のフロントエンドクライアントはWindows/Mac/その他で実行する)。フロントエンドは携帯電話のようなCPUパワーの低いクライアントでも実行できる。nudge nudge Wink

もう一つ考えていることがある。シーディングだ。アプリはダウンロード前にプリシードしておくことができる。毎日プリシード済みの新しいアーカイブを準備できる。そうすればIRC接続は不要になる。(あるいはフォールバックとして使うこともできるだろう。IRC接続のコードはまだ監査していない。いくつかのエクスプロイトを思いついたが、実際に存在するか確認するまでは言及したくない。)プリシーディングはTOR+IRC問題も解決する。このシステムをI2P+TOR上で動かしたい人が出てくるのは分かっている。Tongue

また、ブロックもプリシードしておけば、初回起動時にダウンロードする必要がなくなる。(28,000ブロックを低速ADSLでダウンロードするのは永遠にかかる。数百万ブロックになったらどれほどの時間がかかるか想像もつかない――一生かかるだろう。)

CVSアクセスか何かをもらえないだろうか?(無理なら、パッチを送ることはできるか?)手伝いたい。俺は主にLinux/BSDの人間で、その分野の専門知識を提供したい。

Cheers! Smiley

Quote from: satoshi on December 09, 2009, 06:45:10 PM

参考になる提案だ、ありがとう。

Quote from: madhatter on December 09, 2009, 05:34:46 AM

  • Bitcoinソフトウェアがピア(クライアントTCPソケット)と接続を確立する際に、クライアントからハンドシェイク文字列を送信させるべきだ。現在はサーバー(サーバーTCPソケット)がハンドシェイクを送っている。理由はもちろん匿名性だ。ISPがクライアントをポートスキャンしてこのプログラムの実行を検知するのはあまりにも簡単だ。

良いアイデアだ。接続を受け入れる側は、有効なハンドシェイクを受信するまで何も送信しなければよい。どのようなポートスキャンでも、自発的に身元を明かさない無反応な接続しか得られないことになる。

すべての接続をSSL化することは考えた。DPIに対してはSSL以外のものは無意味だと思う。おそらくより良い直近の解決策は、TOR経由で接続することで、これは0.2で可能になる。

0.2以降の主な課題の一つだ。

ええ、常に同じポート番号だと、他のステルス機能もかなり無意味になる。

UPnPを試してみるのが楽しみだ。ほとんどのP2PクライアントはUPnPをデフォルトで有効にしているのだろうか?

管理インターフェースの最適な構成をまだ検討中だ。コマンドラインからバックグラウンドデーモンに通信して、受信トランザクションの照会や送金の開始を行う方法がよいかもしれない。その方が自動化に適している。あるいは80以外のポートでHTTPインターフェースを提供して、ブラウザで管理する方法はどうだろうか?

これはモバイル向けの良いアプローチだ。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では、このオプションはスタートアップフォルダにアイコンを追加/削除する。

了解、SFに登録してユーザー名を伝える。もう何年もSFを使っていないので慣れ直す必要がある。これで君たちが現在作業しているブランチ(0.2)にアクセスできるようになるのか?

バックエンドプロセスに必要なオプションについて考えていた。長いコマンドラインスイッチのセットと設定ファイル、どちらが良いだろうか。うーん…

世界中にたくさんのサーバーを持っている。FreeBSDで動作するバックエンドプロセスが完成すれば、常時稼働のシードを動かせる。

ダウンロードパッケージに日次のシードスナップショットを含めれば、ブートストラップが改善されると本当に思う。新規テストインストールで、アプリケーションが0接続/1ブロックのまま動かなくなるケースを見たことがある。debug.logを調べると、IRCサーバー(確かfreenode)が既に接続済みだと主張して、アプリケーションのシーディングを拒否していた。(一例にすぎないが。)

Nagios用のシンプルなネットワークモニタープラグインも有用だと思う。接続クライアントをエミュレートし、バックエンドプロセスから有効なステータスコードを取得できるものだ。アイデアはたくさんある。Smiley

いずれにしても、手伝いたい。時間は十分にあるし、こういうプロジェクトはとてもワクワクする。

参加させてくれてありがとう。Smiley

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

Quote from: madhatter2 on December 11, 2009, 04:59:19 AM

了解、SFに登録してユーザー名を伝える。もう何年もSFを使っていないので慣れ直す必要がある。これで君たちが現在作業しているブランチ(0.2)にアクセスできるようになるのか?

バックエンドプロセスに必要なオプションについて考えていた。長いコマンドラインスイッチのセットと設定ファイル、どちらが良いだろうか。うーん…

世界中にたくさんのサーバーを持っている。FreeBSDで動作するバックエンドプロセスが完成すれば、常時稼働のシードを動かせる。

ダウンロードパッケージに日次のシードスナップショットを含めれば、ブートストラップが改善されると本当に思う。新規テストインストールで、アプリケーションが0接続/1ブロックのまま動かなくなるケースを見たことがある。debug.logを調べると、IRCサーバー(確かfreenode)が既に接続済みだと主張して、アプリケーションのシーディングを拒否していた。(一例にすぎないが。)

Nagios用のシンプルなネットワークモニタープラグインも有用だと思う。接続クライアントをエミュレートし、バックエンドプロセスから有効なステータスコードを取得できるものだ。アイデアはたくさんある。Smiley

いずれにしても、手伝いたい。時間は十分にあるし、こういうプロジェクトはとてもワクワクする。

参加させてくれてありがとう。Smiley

それは大きな助けになるだろう。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だったよね?)を受け取った場合、アドレスではないランダムなユーザー名でリトライする。

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

Mac OS X 10.4.11/Intel上でsvn 0.2のコンパイルがほぼ完了した(PPC970マシンもあるのでPPCビルドも可能だ)。ウィンドウ表示はwxwidgets経由のネイティブCarbonだ!速い! Wink 新しいmakefile(makefile.osx、もちろんmakefile.unixベース……autoconfの使用は検討した?)を作成し、header.hにいくつかifdefを入れた。パッチがある。引き続きいじってみる。次はFreeBSDで試すかもしれない。

TORとI2Pのノードを大量に運用しているので、このアプリを同じサーバーに追加するのは簡単だ。Smiley

Bitcoinを2つのアプリに分割するのが理想的だと思う。wxwidgetsフロントエンド(大部分はすでにある)と、制御用TCPソケットにバインドするバックエンドだ。ソースコードを読んで分割がどれだけ難しいか検討しているが、かなり簡単にできると思う。もちろんAPIの開発が必要になるが。

ソースコードをいじり続けて、何ができるか見てみる。

Smiley

提案:

コインは高速なマシンほど速く生成されるので、多くの人がGPUの演算能力も活用したくなるだろう。

そこで提案だが、ATI StreamとNvidia CUDAを使ったGPUコンピューティングサポートを実装してはどうか。

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

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

Quote from: madhatter2 on December 12, 2009, 06:34:21 AM

Mac OS X 10.4.11/Intel上でsvn 0.2のコンパイルがほぼ完了した(PPC970マシンもあるのでPPCビルドも可能だ)。ウィンドウ表示はwxwidgets経由のネイティブCarbonだ!速い! Wink 新しいmakefile(makefile.osx、もちろんmakefile.unixベース……autoconfの使用は検討した?)を作成し、header.hにいくつかifdefを入れた。パッチがある。引き続きいじってみる。次はFreeBSDで試すかもしれない。

TORとI2Pのノードを大量に運用しているので、このアプリを同じサーバーに追加するのは簡単だ。Smiley

Bitcoinを2つのアプリに分割するのが理想的だと思う。wxwidgetsフロントエンド(大部分はすでにある)と、制御用TCPソケットにバインドするバックエンドだ。ソースコードを読んで分割がどれだけ難しいか検討しているが、かなり簡単にできると思う。もちろんAPIの開発が必要になるが。

ソースコードをいじり続けて、何ができるか見てみる。

Smiley

Macサポートは良いな。wxWidgetsはクロスプラットフォームで本当に効果を発揮している。

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

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

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

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

えーと、コマンドラインオンリーモードはコンパイル時に選択できるということか? defineで? それでグラフィカルUIの部分がオフになるのか?

認識を合わせておきたいだけだ。Smiley

「自然デフレーション」(俺はそう呼んでいる)について一つ質問がある。もう機能していない古いアドレスに送金できることに気づいた。要するに、そのコインは誰も請求できない。これによって自然なデフレ効果が生じないだろうか? つまり、コインの上限が21,000,000なら、送金ミスによってコインの数は徐々に減少していくのではないか?

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

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

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

FreeBSDで動くようになった! 近いうちにここに成果を投稿する。

$gmake -f makefile.fbsd
g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o headers.h.gch headers.h g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/util.o util.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/script.o script.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/db.o db.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/net.o net.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/main.o main.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/market.o market.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/ui.o ui.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/uibase.o uibase.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -O3 -o obj/sha.o sha.cpp g++ -c -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o obj/irc.o irc.cpp g++ -O0 -Wno-invalid-offsetof -Wformat -D__WXGTK__ -DNOPCH -DBUILD_FREEBSD -I”/usr/include” -I”/usr/local/include” -I”/usr/local/include/db47” -I”/usr/local/include/wx-2.8” -I”/usr/local/lib/wx/include/gtk2-ansi-release-2.8” -o bitcoin -L”/usr/lib” -L”/usr/local/lib” -L”/usr/local/lib/db47” obj/util.o obj/script.o obj/db.o obj/net.o obj/main.o obj/market.o obj/ui.o obj/uibase.o obj/sha.o obj/irc.o -Wl,-Bstatic -l boost_system -l boost_filesystem -l db_cxx -Wl,-Bdynamic -l wx_base-2.8 -l wx_gtk2_core-2.8 -l wx_gtk2_html-2.8 -l wx_gtk2_richtext-2.8 -l crypto -l gtk-x11-2.0 -l gthread-2.0 -l SM $ file ./bitcoin ./bitcoin: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, not stripped

誰かここについて教えてくれないか?

g++ -c -O0 -Wno-invalid-offsetof -Wformat -g -D__WXMAC__ -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: In constructor ‘CGetTextFromUserDialog::CGetTextFromUserDialog(wxWindow*, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&)’: ui.h:421: error: no matching function for call to ‘CGetTextFromUserDialogBase::CGetTextFromUserDialogBase(wxWindow*&, , const std::basic_string<char, std::char_traits, std::allocator >&)’ uibase.h:673: note: candidates are: CGetTextFromUserDialogBase::CGetTextFromUserDialogBase(wxWindow*, wxWindowID, const wxString&, const wxPoint&, const wxSize&, long int) uibase.h:651: note: CGetTextFromUserDialogBase::CGetTextFromUserDialogBase(const CGetTextFromUserDialogBase&) ui.h:423: error: no matching function for call to ‘wxStaticText::SetLabel(const std::basic_string<char, std::char_traits, std::allocator >&)’ /usr/local/include/wx-2.8/wx/mac/carbon/stattext.h:38: note: candidates are: virtual void wxStaticText::SetLabel(const wxString&) ui.h:424: 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&) ui.h:428: error: no matching function for call to ‘wxStaticText::SetLabel(const std::basic_string<char, std::char_traits, std::allocator >&)’ /usr/local/include/wx-2.8/wx/mac/carbon/stattext.h:38: note: candidates are: virtual void wxStaticText::SetLabel(const wxString&) 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&) make: *** [headers.h.gch] Error 1

Quote from: madhatter2 on December 14, 2009, 03:01:39 PM

誰かここについて教えてくれないか?

g++ -c -O0 -Wno-invalid-offsetof -Wformat -g -D__WXMAC__ -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: In constructor ‘CGetTextFromUserDialog::CGetTextFromUserDialog(wxWindow*, const std::string&, const std::string&, const std::string&, const std::string&, const std::string&)’: ui.h:421: error: no matching function for call to ‘CGetTextFromUserDialogBase::CGetTextFromUserDialogBase(wxWindow*&, , const std::basic_string<char, std::char_traits, std::allocator >&)’ uibase.h:673: note: candidates are: CGetTextFromUserDialogBase::CGetTextFromUserDialogBase(wxWindow*, wxWindowID, const wxString&, const wxPoint&, const wxSize&, long int) uibase.h:651: note: CGetTextFromUserDialogBase::CGetTextFromUserDialogBase(const CGetTextFromUserDialogBase&) ui.h:423: error: no matching function for call to ‘wxStaticText::SetLabel(const std::basic_string<char, std::char_traits, std::allocator >&)’ /usr/local/include/wx-2.8/wx/mac/carbon/stattext.h:38: note: candidates are: virtual void wxStaticText::SetLabel(const wxString&) ui.h:424: 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&) ui.h:428: error: no matching function for call to ‘wxStaticText::SetLabel(const std::basic_string<char, std::char_traits, std::allocator >&)’ /usr/local/include/wx-2.8/wx/mac/carbon/stattext.h:38: note: candidates are: virtual void wxStaticText::SetLabel(const wxString&) 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&) make: *** [headers.h.gch] Error 1

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__を使用してください」

了解、std::stringの問題を調べてみる。最新バージョンのUbuntu Linuxでも同じstd::stringの問題が出ている。だからこれはOSXだけの問題ではない。俺の本来のバックグラウンドはCであってC++ではないので、C++のデータ型やヘッダーなどの詳細についてはまだ「やりながら」学んでいるところだ。Smiley

wx/defs.hには__WXCOCOA__と__WXMAC__のdefineしかない(何か見落としているに違いない…wxwidgetsをリビルドする必要があるかもしれない――試してみよう)。既存のdefineの組み合わせを試したが成功していない。もう一つの選択肢はOSX上でgtkを使うことだが、ウィンドウ処理が遅くなるし、(個人的には)「見た目が悪い」。CarbonがOSXには最適だろう。動くまでハックし続ける。Smiley

FreeBSD用の起動スクリプトも完成した。xorgの仮想フレームバッファをlocalhostで起動し、bitcoinを立ち上げて、X11の画面出力を(モニターではなく)メモリに格納するものだ。かなりの力技だが、bitcoinを擬似的なUnixデーモンとして実行できるようになる。このコードを12時間以上動かしているが、メモリリークやその他の異常は検出されていない。

また、bitcoinがクラッシュしたりポート8333で応答しなくなったりしたことを検出し、ページを送信して、デーモンを再起動するシンプルなネットワークモニターも用意した。この構成は理想的だ。世界中の自分が管理するサーバーにシードのデプロイを始めた。Smiley

一つ質問:debug.logを有効にするにはどうすればいい? bitcoinを停止して~/.bitcoin/debug.logをtouchしてからbitcoinを再起動してみたが、ファイルに書き込まれないようだ。何か見落としているだろうか?

SFのセットアップが完了したら、これらのツールを含める予定だ。

Cheers!

了解、SFに登録した。ユーザー名は「madhatter2」だ。

Smiley

Quote from: madhatter2 on December 15, 2009, 05:21:09 AM

了解、std::stringの問題を調べてみる。最新バージョンのUbuntu Linuxでも同じstd::stringの問題が出ている。だからこれはOSXだけの問題ではない。俺の本来のバックグラウンドはCであってC++ではないので、C++のデータ型やヘッダーなどの詳細についてはまだ「やりながら」学んでいるところだ。Smiley

wx/defs.hには__WXCOCOA__と__WXMAC__のdefineしかない(何か見落としているに違いない…wxwidgetsをリビルドする必要があるかもしれない――試してみよう)。既存のdefineの組み合わせを試したが成功していない。もう一つの選択肢はOSX上でgtkを使うことだが、ウィンドウ処理が遅くなるし、(個人的には)「見た目が悪い」。CarbonがOSXには最適だろう。動くまでハックし続ける。Smiley

FreeBSD用の起動スクリプトも完成した。xorgの仮想フレームバッファをlocalhostで起動し、bitcoinを立ち上げて、X11の画面出力を(モニターではなく)メモリに格納するものだ。かなりの力技だが、bitcoinを擬似的なUnixデーモンとして実行できるようになる。このコードを12時間以上動かしているが、メモリリークやその他の異常は検出されていない。

また、bitcoinがクラッシュしたりポート8333で応答しなくなったりしたことを検出し、ページを送信して、デーモンを再起動するシンプルなネットワークモニターも用意した。この構成は理想的だ。世界中の自分が管理するサーバーにシードのデプロイを始めた。Smiley

一つ質問:debug.logを有効にするにはどうすればいい? bitcoinを停止して~/.bitcoin/debug.logをtouchしてからbitcoinを再起動してみたが、ファイルに書き込まれないようだ。何か見落としているだろうか?

SFのセットアップが完了したら、これらのツールを含める予定だ。

Cheers!

それなら、wxWidgetsのビルドまたは設定で何か異なることをしているはずだ。

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

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

wxWidgets 2.9を使ってstringの問題を回避した。デフォルト設定で動作した。

[madhatter@10 /home/madhatter/src/bitcoin]# diff -u headers.h.orig headers.h      
--- headers.h.orig      2009-12-14 12:29:39.000000000 +0000
+++ headers.h   2009-12-14 12:41:08.000000000 +0000
@@ -35,7 +35,12 @@
 #include <limits.h>
 #include <float.h>
 #include <assert.h>
+#ifndef BUILD_FREEBSD //malloc.h is part of stdlib.h on FreeBSD
 #include <malloc.h>
+#endif
+#ifdef BUILD_FREEBSD
+#include <netinet/in.h>
+#endif
 #include <memory>
 #define BOUNDSCHECK 1
 #include <sstream>
[madhatter@10 /home/madhatter/src/bitcoin]# cat makefile.fbsd 
# Copyright (c) 2009 Satoshi Nakamoto
# Distributed under the MIT/X11 software license, see the accompanying
# file license.txt or http://www.opensource.org/licenses/mit-license.php.

ifneq "$(BUILD)" "debug"
ifneq "$(BUILD)" "release"
BUILD=debug
endif
endif
ifeq "$(BUILD)" "debug"
D=d
DEBUGFLAGS=-g
endif

INCLUDEPATHS= \
 -I"/usr/include" \
 -I"/usr/local/include" \
 -I"/usr/local/include/db47" \
 -I"/usr/local/include/wx-2.8" \
 -I"/usr/local/lib/wx/include/gtk2-ansi-release-2.8"

LIBPATHS= \
 -L"/usr/lib" \
 -L"/usr/local/lib" \
 -L"/usr/local/lib/db47"

LIBS= \
 -Wl,-Bstatic \
   -l boost_system -l boost_filesystem \
   -l db_cxx \
 -Wl,-Bdynamic \
   -l wx_base-2.8 \
   -l wx_gtk2_core-2.8 \
   -l wx_gtk2_html-2.8 \
   -l wx_gtk2_richtext-2.8 \
   -l crypto \
   -l gtk-x11-2.0 -l gthread-2.0 -l SM

WXDEFS=-D__WXGTK__ -DNOPCH -DBUILD_FREEBSD
CFLAGS=-O0 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(WXDEFS) $(INCLUDEPATHS)
HEADERS=headers.h util.h main.h serialize.h uint256.h key.h bignum.h script.h db.h base58.h

all: bitcoin

headers.h.gch: headers.h $(HEADERS) net.h irc.h market.h uibase.h ui.h
        g++ -c $(CFLAGS) -o $@ $<

obj/util.o: util.cpp                $(HEADERS)
        g++ -c $(CFLAGS) -o $@ $<

obj/script.o: script.cpp            $(HEADERS)
        g++ -c $(CFLAGS) -o $@ $<

obj/db.o: db.cpp                    $(HEADERS) market.h
        g++ -c $(CFLAGS) -o $@ $<

obj/net.o: net.cpp                  $(HEADERS) net.h
        g++ -c $(CFLAGS) -o $@ $<

obj/main.o: main.cpp                $(HEADERS) net.h market.h sha.h
        g++ -c $(CFLAGS) -o $@ $<

obj/market.o: market.cpp            $(HEADERS) market.h
        g++ -c $(CFLAGS) -o $@ $<

obj/ui.o: ui.cpp                    $(HEADERS) net.h uibase.h ui.h market.h
        g++ -c $(CFLAGS) -o $@ $<

obj/uibase.o: uibase.cpp            uibase.h
        g++ -c $(CFLAGS) -o $@ $<

obj/sha.o: sha.cpp                  sha.h
        g++ -c $(CFLAGS) -O3 -o $@ $<

obj/irc.o: irc.cpp                  $(HEADERS)
        g++ -c $(CFLAGS) -o $@ $<

OBJS=obj/util.o obj/script.o obj/db.o obj/net.o obj/main.o obj/market.o \
        obj/ui.o obj/uibase.o obj/sha.o obj/irc.o

bitcoin: headers.h.gch $(OBJS)
        g++ $(CFLAGS) -o $@ $(LIBPATHS) $(OBJS) $(LIBS)

clean:
        -rm obj/*
        -rm headers.h.gch

FreeBSDでビルドするには:

/usr/portsから必要なソフトウェアをすべてインストールし、makefile.fbsdを使ってコンパイルする。

「そのまま動く」。Smiley

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

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

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

The Doctor 2009年12月18日 原文 · 個別ページ

こんにちは。/*nix/iシステム向けのヘッドレス/非GUIモードの要望に賛同する。initscriptや~/.bashrc(または同等のファイル)からBitcoinソフトウェアを起動し、バックグラウンドで静かに動作させることができると便利だ。

また、Win32クライアントでwallet.datファイルの保存場所を変更する可能性はどうだろうか? 昨日、ZIP圧縮されたWindows版Bitcoinクライアントをいじっていて、これはポータブルアプリケーションとして使えるのではないかと思った。USBドライブ上のTrueCryptボリュームに展開して、例えば外出先で数時間動かし、ボリュームをアンマウントする直前にシャットダウンするというアイデアを検討していたのだが、wallet.datファイルがC:\Documents and Settings\username\Application Data\Bitcoinディレクトリに作成されてしまう。要するに、ポータブル版のBitcoinを使って、ポータブルなウォレットを育てていくということだ。

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

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

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

ネットワーク全体で1日に生成されるコインの平均合計は同じままだ。速いマシンは遅いマシンより大きなシェアを得るだけだ。全員がより速いマシンを買っても、以前よりも多くのコインを得ることはない。

ネットワークのために、できるだけ長くGPU軍拡競争を延期する紳士協定を結ぶべきだ。新規ユーザーがGPUドライバーや互換性を心配する必要がなければ、参加のハードルがずっと低くなる。