私はブロックチェーンを研究しており、非常に単純な「作業証明」を実装しています。
作業証明:
export function mineBlock(difficulty: number, block) {
const prefix = Array(difficulty + 1).join("0");
function mine(block, difficulty) {
const nonce = block.nonce + 1;
const newBlock = {...block, nonce};
const hash = calculateHash(newBlock);
return hash.substring(0, difficulty) === prefix
? {...newBlock, hash}
: mine({...newBlock, hash}, difficulty);
}
return trampoline(mine(block, difficulty));
}
トランポリン:
export function trampoline(func) {
let result = func;
while(result && typeof(result) === "function") {
result = result();
}
return result;
}
関数をトランポリンしても、「最大コールスタックサイズを超えました」というエラーが引き続き表示されmine
ます。
StackOverflow に関する他の多くの質問やさまざまなブログの記事を読みましたが、それらの多くは、トランポリンまたは TCE が問題を解決する「階乗」または「フィボナッチ」の例にのみ焦点を当てていますが、そうではありません。
私は Node 10 で作業しているので、これがブラウザーで機能しなくてもかまいません。