私は、単純な実証的なノンファインダをPythonで記述しようとしています。Pythonは結果を返すときに複数のプロセスを停止しますか?
def proof_of_work(b, nBytes):
nonce = 0
# while the first nBytes of hash(b + nonce) are not 0
while sha256(b + uint2bytes(nonce))[:nBytes] != bytes(nBytes):
nonce = nonce + 1
return nonce
今私は、この多重処理を行うにしようとしていますので、すべてのCPUコアを使用し、より高速なnonceを見つけることができます。 4コアがある場合は、一人一人がこのようなナンスを計算しますので、
def proof_of_work(b, nBytes, num_of_cpus_running, this_cpu_id):
nonce = this_cpu_id
while sha256(b + uint2bytes(nonce))[:nBytes] != bytes(nBytes):
nonce = nonce + num_of_cpus_running
return nonce
:
core 0: 0, 4, 8, 16, 32 ...
core 1: 1, 5, 9, 17, 33 ...
core 2: 2, 6, 10, 18, 34 ...
core 3: 3, 7, 15, 31, 38 ...
私の考えはそうのような2つのparams
num_of_cpus_running
と
this_cpu_id
を渡して、複数回proof_of_work
multiprocessing.Pool
を使用して機能を実行することです
したがって、プロセスの誰かがノンスを見つけたら、見つかったノンスは必要なバイトが0になる可能性のある最も低い値でなければならないという点を考慮して、ナンスの検索を中止します。何らかの理由でCPUがスピードアップし、有効なn最も低い有効ナンスよりも一度高い場合、作業証明は有効ではありません。
唯一のことは、プロセスAがプロセスAによって計算されているノンスよりも低いノンスを見つけた場合にプロセスAが停止する部分だけです。 Bが提供するノンスに到着するまで計算しています。
私は自分自身を正しく説明してくれることを願っています。また、私が書いたものの速い実装があれば、それについて聞いてみたいと思います。どうもありがとうございました!
@MaartenBodewes私はあなたのことを理解していないのでしょうか、多分私はまだネイビープログラマーxDです。 cpu_idは、すべてのプロセスに割り当てる番号です。最初に、CPUコアの数x = multiprocessing.cpu_count()を取得し、それぞれが異なるIDを持つxプロセスを1回だけ起動します。 – mesafria
申し訳ありません、それは私の誤解でした。私はこれらの作業証明書を深く検討したことはありません。私はビットコインのようなものを軽蔑する - 私はお金のエネルギーを変換するプロトコルが好きではない、私はそれを他の方法で好む。 –
@MaartenBodewes作業証明はビットコインでのみ使用されるのではありません。私はそれを使ってDDoS攻撃を防ぎます。 –