import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%0A%0A%20%20%20%20Bitcoin%20%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E3%80%81%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%A7%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%0A%20%20%20%20%E3%83%98%E3%83%83%E3%83%80%E6%83%85%E5%A0%B1%E3%81%A0%E3%81%91%E3%81%8B%E3%82%89%E5%86%8D%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E3%80%82%E5%AE%9F%E9%9A%9B%E3%81%AB%E6%8E%A1%E6%8E%98%E3%81%95%E3%82%8C%E3%81%9F%0A%20%20%20%20%5BBlock%20395791%5D(https%3A%2F%2Fexplorer.btc.com%2Fbtc%2Fblock%2F395791)%0A%20%20%20%20%EF%BC%88%E7%9B%B4%E5%89%8D%E3%81%AF%0A%20%20%20%20%5BBlock%20395790%5D(https%3A%2F%2Fexplorer.btc.com%2Fbtc%2Fblock%2F395790)%EF%BC%89%0A%20%20%20%20%E3%82%92%E9%A1%8C%E6%9D%90%E3%81%AB%E3%80%81%E6%AC%A1%E3%81%AE%203%20%E7%82%B9%E3%82%92%E9%A0%86%E3%81%AB%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%80%82%0A%0A%20%20%20%201.%20%E3%83%98%E3%83%83%E3%83%80%206%20%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E9%80%A3%E7%B5%90%E3%81%97%E3%81%A6%E3%83%80%E3%83%96%E3%83%AB%20SHA-256%20%E3%82%92%E5%8F%96%E3%82%8B%E3%81%A8%E3%80%81%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%0A%20%20%20%20%20%20%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%0A%20%20%20%202.%20%E3%81%9D%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%8C%20%60bits%60%20%E3%81%8B%E3%82%89%E5%BE%A9%E5%85%83%E3%81%95%E3%82%8C%E3%82%8B%E7%9B%AE%E6%A8%99%E5%80%A4%E3%82%92%E4%B8%8B%E5%9B%9E%E3%81%A3%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%0A%20%20%20%20%20%20%20%E3%83%97%E3%83%AB%E3%83%BC%E3%83%95%E3%83%BB%E3%82%AA%E3%83%96%E3%83%BB%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%0A%20%20%20%203.%20%E6%8E%A1%E6%8E%98%E3%81%A8%E3%81%AF%E3%80%81%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%20%60nonce%60%20%E3%82%92%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%A7%E6%8E%A2%E3%81%99%E4%BD%9C%E6%A5%AD%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%0A%0A%20%20%20%20%E5%8F%82%E8%80%83%3A%0A%20%20%20%20%5BBlock%20hashing%20algorithm%5D(https%3A%2F%2Fen.bitcoin.it%2Fwiki%2FBlock_hashing_algorithm)%20%2F%0A%20%20%20%20%5B%E3%83%93%E3%83%83%E3%83%88%E3%82%B3%E3%82%A4%E3%83%B3%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%5D(https%3A%2F%2Fqiita.com%2Fryskchy%2Fitems%2Fa862139e9521942248fa%23%25E5%258F%2582%25E8%2580%2583%25E6%2596%2587%25E7%258C%25AE)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%98%E3%83%83%E3%83%80%E3%81%AE%E6%A7%8B%E9%80%A0%0A%0A%20%20%20%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%98%E3%83%83%E3%83%80%E3%81%AF%E6%AC%A1%E3%81%AE%206%20%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E9%80%A3%E7%B5%90%E3%81%97%E3%81%9F%E5%9B%BA%E5%AE%9A%E9%95%B7%2080%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E6%9C%AC%E4%BD%93%EF%BC%88%E5%8F%96%E5%BC%95%E3%81%AE%E9%9B%86%E5%90%88%EF%BC%89%E3%81%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%AB%E7%9B%B4%E6%8E%A5%E3%81%AF%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%9A%E3%80%81%0A%20%20%20%20%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AB%E3%83%AB%E3%83%BC%E3%83%88%E3%82%92%E7%B5%8C%E7%94%B1%E3%81%97%E3%81%A6%E5%8F%8D%E6%98%A0%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%7C%20%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%20%7C%20%E3%82%B5%E3%82%A4%E3%82%BA%20%7C%20%E5%86%85%E5%AE%B9%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%20%60version%60%20%7C%204%20%E3%83%90%E3%82%A4%E3%83%88%20%7C%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%95%AA%E5%8F%B7%20%7C%0A%20%20%20%20%7C%20%60prev_block%60%20%7C%2032%20%E3%83%90%E3%82%A4%E3%83%88%20%7C%20%E7%9B%B4%E5%89%8D%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4%20%7C%0A%20%20%20%20%7C%20%60merkle_root%60%20%7C%2032%20%E3%83%90%E3%82%A4%E3%83%88%20%7C%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E5%86%85%E3%81%AE%E5%85%A8%E5%8F%96%E5%BC%95%E3%82%92%E4%BA%8C%E5%88%86%E6%9C%A8%E3%81%A7%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E6%A0%B9%20%7C%0A%20%20%20%20%7C%20%60timestamp%60%20%7C%204%20%E3%83%90%E3%82%A4%E3%83%88%20%7C%20%E6%8E%A1%E6%8E%98%E6%99%82%E5%88%BB%EF%BC%88UTC%20%E3%81%AE%20Unix%20%E7%A7%92%EF%BC%89%20%7C%0A%20%20%20%20%7C%20%60bits%60%20%7C%204%20%E3%83%90%E3%82%A4%E3%83%88%20%7C%20%E7%9B%AE%E6%A8%99%E5%80%A4%E3%81%AE%E5%9C%A7%E7%B8%AE%E8%A1%A8%E7%8F%BE%20%7C%0A%20%20%20%20%7C%20%60nonce%60%20%7C%204%20%E3%83%90%E3%82%A4%E3%83%88%20%7C%20%E6%8E%A1%E6%8E%98%E8%80%85%E3%81%8C%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E3%81%A7%E6%8E%A2%E3%81%97%E3%81%9F%E5%80%A4%20%7C%0A%0A%20%20%20%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AF%E3%80%81%E3%81%93%E3%81%AE%E3%83%98%E3%83%83%E3%83%80%E3%81%AB%20SHA-256%20%E3%82%92%202%20%E5%9B%9E%E9%81%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%80%A4%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20H%20%3D%20%5Cmathrm%7BSHA256%7D(%5Cmathrm%7BSHA256%7D(%5Ctext%7Bheader%7D))%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%60prev_block%60%20%E3%81%8C%E3%83%98%E3%83%83%E3%83%80%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E9%81%8E%E5%8E%BB%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%201%20%E3%81%A4%E3%81%A7%E3%82%82%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%A8%0A%20%20%20%20%E3%81%9D%E3%82%8C%E4%BB%A5%E9%99%8D%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%8C%E3%81%99%E3%81%B9%E3%81%A6%E5%A4%89%E3%82%8F%E3%82%8B%E3%80%82%E3%81%93%E3%82%8C%E3%81%8C%E9%80%A3%E9%8E%96%E3%81%AE%E6%94%B9%E7%AB%84%E8%80%90%E6%80%A7%E3%81%AE%E6%A0%B9%E6%8B%A0%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%85%A5%E5%8A%9B%E3%83%87%E3%83%BC%E3%82%BF%0A%0A%20%20%20%20Block%20395791%20%E3%81%AE%E3%83%98%E3%83%83%E3%83%80%206%20%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E3%80%81%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%A9%E3%81%8A%E3%82%8A%E3%81%AB%E6%9B%B8%E3%81%8D%E5%86%99%E3%81%99%E3%80%82%0A%20%20%20%20%E6%95%B4%E6%95%B0%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6%E4%BA%BA%E9%96%93%E3%81%8C%E8%AA%AD%E3%82%80%E5%90%91%E3%81%8D%EF%BC%88%E3%83%93%E3%83%83%E3%82%B0%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%EF%BC%89%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%0A%20%20%20%20%E3%83%98%E3%83%83%E3%83%80%E3%81%AE%E3%83%90%E3%82%A4%E3%83%88%E5%88%97%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%80%82%60timestamp%60%20%E3%81%A0%E3%81%91%E3%81%AF%E5%8F%AF%E8%AA%AD%E6%80%A7%E3%81%AE%E3%81%9F%E3%82%81%E6%96%87%E5%AD%97%E5%88%97%E3%81%A7%0A%20%20%20%20%E4%BF%9D%E6%8C%81%E3%81%97%E3%80%81%E5%BE%8C%E6%AE%B5%E3%81%A7%20Unix%20%E7%A7%92%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20version%20%3D%200x4%0A%20%20%20%20prev_block%20%3D%200x0000000000000000005629EF6B683F8F6301C7E6F8E796E7C58702A079DB14E8%0A%20%20%20%20merkle_root%20%3D%200xEFB8011CB97B5F1599B2E18F200188F1B8207DA2884392672F92AC7985534EEB%0A%20%20%20%20timestamp%20%3D%20%222016-01-30%2013%3A23%3A09%22%0A%20%20%20%20bits%20%3D%200x180928F0%0A%20%20%20%20nonce%20%3D%200x56591FC2%0A%0A%20%20%20%20print(f%22version%3D%7Bversion%7D%22)%0A%20%20%20%20print(f%22timestamp%3D%7Btimestamp%7D%20(UTC)%22)%0A%20%20%20%20print(f%22bits%3D0x%7Bbits%3A08x%7D%2C%20nonce%3D0x%7Bnonce%3A08x%7D%20(%7Bnonce%7D)%22)%0A%20%20%20%20return%20bits%2C%20merkle_root%2C%20nonce%2C%20prev_block%2C%20timestamp%2C%20version%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AE%E8%AA%BF%E6%95%B4%0A%0A%20%20%20%20%23%23%23%20%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%AE%E5%8F%8D%E8%BB%A2%0A%0A%20%20%20%20%E3%83%98%E3%83%83%E3%83%80%E3%81%AE%E5%90%84%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AF%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%AE%E3%83%90%E3%82%A4%E3%83%88%E5%88%97%E3%81%A8%E3%81%97%E3%81%A6%E9%80%A3%E7%B5%90%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82%0A%20%20%20%20%E4%B8%80%E6%96%B9%E3%80%81%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4%E3%81%AF%E3%83%93%E3%83%83%E3%82%B0%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%60int.to_bytes(%E3%82%B5%E3%82%A4%E3%82%BA%2C%20%22little%22)%60%20%E3%81%A7%E3%83%90%E3%82%A4%E3%83%88%E9%A0%86%E3%82%92%E5%8F%8D%E8%BB%A2%E3%81%95%E3%81%9B%E3%81%A6%E3%81%8B%E3%82%89%2016%20%E9%80%B2%E6%96%87%E5%AD%97%E5%88%97%E3%81%AB%0A%20%20%20%20%E7%9B%B4%E3%81%99%E3%80%82%60version%60%20%E3%81%AF%204%20%E3%83%90%E3%82%A4%E3%83%88%E3%80%81%60prev_block%60%20%E3%81%A8%20%60merkle_root%60%20%E3%81%AF%2032%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(merkle_root%2C%20prev_block%2C%20version)%3A%0A%20%20%20%20version_h%20%3D%20version.to_bytes(4%2C%20%22little%22).hex()%0A%20%20%20%20prev_block_h%20%3D%20prev_block.to_bytes(32%2C%20%22little%22).hex()%0A%20%20%20%20merkle_root_h%20%3D%20merkle_root.to_bytes(32%2C%20%22little%22).hex()%0A%0A%20%20%20%20print(f%22version_h%3D%7Bversion_h%7D%22)%0A%20%20%20%20print(f%22prev_block_h%3D%7Bprev_block_h%7D%22)%0A%20%20%20%20print(f%22merkle_root_h%3D%7Bmerkle_root_h%7D%22)%0A%20%20%20%20return%20merkle_root_h%2C%20prev_block_h%2C%20version_h%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%97%E3%81%AE%E6%95%B0%E5%80%A4%E5%8C%96%0A%0A%20%20%20%20%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E8%A1%A8%E7%A4%BA%E6%99%82%E5%88%BB%E3%81%AF%20UTC%20%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%60strptime%60%20%E3%81%8C%E8%BF%94%E3%81%99%E3%81%AE%E3%81%AF%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E6%83%85%E5%A0%B1%E3%82%92%0A%20%20%20%20%E6%8C%81%E3%81%9F%E3%81%AA%E3%81%84%20naive%20%E3%81%AA%20%60datetime%60%20%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%60datetime(1970%2C%201%2C%201)%60%20%E3%81%A8%E3%81%AE%E5%B7%AE%E3%82%92%E5%8F%96%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%0A%20%20%20%20%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20UTC%20%E5%9F%BA%E6%BA%96%E3%81%AE%20Unix%20%E7%A7%92%E3%81%A8%E3%81%97%E3%81%A6%E8%A7%A3%E9%87%88%E3%81%99%E3%82%8B%E3%80%82%E5%BE%97%E3%82%89%E3%82%8C%E3%81%9F%E7%A7%92%E6%95%B0%E3%82%92%204%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%AE%0A%20%20%20%20%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%AB%E7%9B%B4%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(timestamp)%3A%0A%20%20%20%20from%20datetime%20import%20datetime%0A%0A%20%20%20%20timestamp_s%20%3D%20int(%0A%20%20%20%20%20%20%20%20(datetime.strptime(timestamp%2C%20%22%25Y-%25m-%25d%20%25H%3A%25M%3A%25S%22)%20-%20datetime(1970%2C%201%2C%201)).total_seconds()%0A%20%20%20%20)%0A%20%20%20%20timestamp_h%20%3D%20timestamp_s.to_bytes(4%2C%20%22little%22).hex()%0A%0A%20%20%20%20print(f%22timestamp_s%3D%7Btimestamp_s%7D%22)%0A%20%20%20%20print(f%22timestamp_h%3D%7Btimestamp_h%7D%22)%0A%20%20%20%20return%20(timestamp_h%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20bits%20%E3%81%A8%20nonce%0A%0A%20%20%20%20%60bits%60%20%E3%81%A8%20%60nonce%60%20%E3%81%AF%E3%81%84%E3%81%9A%E3%82%8C%E3%82%82%204%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%E4%BB%96%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%A8%E5%90%8C%E6%A7%98%E3%81%AB%0A%20%20%20%20%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%B8%E5%8F%8D%E8%BB%A2%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bits%2C%20nonce)%3A%0A%20%20%20%20bits_h%20%3D%20bits.to_bytes(4%2C%20%22little%22).hex()%0A%20%20%20%20nonce_h%20%3D%20nonce.to_bytes(4%2C%20%22little%22).hex()%0A%0A%20%20%20%20print(f%22bits_h%3D%7Bbits_h%7D%22)%0A%20%20%20%20print(f%22nonce_h%3D%7Bnonce_h%7D%22)%0A%20%20%20%20return%20bits_h%2C%20nonce_h%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E5%86%8D%E8%A8%88%E7%AE%97%0A%0A%20%20%20%206%20%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E5%AE%9A%E7%BE%A9%E9%A0%86%E3%81%AB%E9%80%A3%E7%B5%90%E3%81%99%E3%82%8B%E3%81%A8%E3%80%8180%20%E3%83%90%E3%82%A4%E3%83%88%EF%BC%8816%20%E9%80%B2%E3%81%A7%20160%20%E6%96%87%E5%AD%97%EF%BC%89%E3%81%AE%E3%83%98%E3%83%83%E3%83%80%E3%81%8C%0A%20%20%20%20%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%E3%81%93%E3%82%8C%E3%82%92%E3%83%90%E3%82%A4%E3%83%88%E5%88%97%E3%81%B8%E6%88%BB%E3%81%97%E3%81%A6%E3%83%80%E3%83%96%E3%83%AB%20SHA-256%20%E3%82%92%E5%8F%96%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E3%81%AF%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%A7%E4%B8%A6%E3%82%93%E3%81%A7%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E8%A1%A8%E7%A4%BA%E3%81%A8%0A%20%20%20%20%E6%AF%94%E3%81%B9%E3%82%8B%E3%81%AB%E3%81%AF%E3%83%90%E3%82%A4%E3%83%88%E9%A0%86%E3%82%92%E5%8F%8D%E8%BB%A2%EF%BC%88%60%5B%3A%3A-1%5D%60%EF%BC%89%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bits_h%2C%20merkle_root_h%2C%20nonce_h%2C%20prev_block_h%2C%20timestamp_h%2C%20version_h)%3A%0A%20%20%20%20from%20hashlib%20import%20sha256%0A%0A%20%20%20%20header_hex%20%3D%20version_h%20%2B%20prev_block_h%20%2B%20merkle_root_h%20%2B%20timestamp_h%20%2B%20bits_h%20%2B%20nonce_h%0A%20%20%20%20header_bin%20%3D%20bytes.fromhex(header_hex)%0A%0A%20%20%20%20digest%20%3D%20sha256(sha256(header_bin).digest()).digest()%0A%20%20%20%20block_hash%20%3D%20digest%5B%3A%3A-1%5D.hex()%0A%0A%20%20%20%20print(f%22header_hex%3D%7Bheader_hex%7D%22)%0A%20%20%20%20print(f%22header%20size%3D%7Blen(header_bin)%7D%20bytes%22)%0A%20%20%20%20print(f%22digest%20(little%20endian)%3D%7Bdigest.hex()%7D%22)%0A%20%20%20%20print(f%22block%20hash%20(big%20endian)%3D%7Bblock_hash%7D%22)%0A%20%20%20%20return%20block_hash%2C%20header_bin%2C%20sha256%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%20Block%20395791%20%E3%81%AE%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%80%A4%E3%81%A8%E7%AA%81%E3%81%8D%E5%90%88%E3%82%8F%E3%81%9B%E3%80%81%0A%20%20%20%20%E4%B8%80%E8%87%B4%E3%82%92%E6%A9%9F%E6%A2%B0%E7%9A%84%E3%81%AB%E7%A2%BA%E3%81%8B%E3%82%81%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(block_hash)%3A%0A%20%20%20%20expected_hash%20%3D%20%22000000000000000003a0343cc001d21b97d15e97e665b68c790b98c871cf0731%22%0A%0A%20%20%20%20print(f%22expected%3D%7Bexpected_hash%7D%22)%0A%20%20%20%20print(f%22computed%3D%7Bblock_hash%7D%22)%0A%20%20%20%20print(f%22match%3D%7Bblock_hash%20%3D%3D%20expected_hash%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E7%9B%AE%E6%A8%99%E5%80%A4%E3%81%A8%E9%9B%A3%E6%98%93%E5%BA%A6%0A%0A%20%20%20%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E5%85%88%E9%A0%AD%E3%81%AB%200%20%E3%81%8C%E4%B8%A6%E3%81%B6%E3%81%AE%E3%81%AF%E5%81%B6%E7%84%B6%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E7%9B%AE%E6%A8%99%E5%80%A4%EF%BC%88target%EF%BC%89%E3%82%92%0A%20%20%20%20%E4%B8%8B%E5%9B%9E%E3%82%8B%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8B%E3%81%BE%E3%81%A7%20%60nonce%60%20%E3%82%92%E8%A9%A6%E3%81%97%E7%B6%9A%E3%81%91%E3%81%9F%E7%B5%90%E6%9E%9C%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%E7%9B%AE%E6%A8%99%E5%80%A4%E3%81%AF%0A%20%20%20%20%60bits%60%20%E3%81%AB%E5%9C%A7%E7%B8%AE%E3%81%95%E3%82%8C%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E4%B8%8A%E4%BD%8D%201%20%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E6%8C%87%E6%95%B0%20%24e%24%E3%80%81%E4%B8%8B%E4%BD%8D%203%20%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E4%BF%82%E6%95%B0%20%24c%24%0A%20%20%20%20%E3%81%A8%E3%81%97%E3%81%A6%E6%AC%A1%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%BE%A9%E5%85%83%E3%81%99%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Ctext%7Btarget%7D%20%3D%20c%20%5Ctimes%20256%5E%7Be%20-%203%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E6%8E%A1%E6%8E%98%E3%81%AE%E6%88%90%E5%8A%9F%E6%9D%A1%E4%BB%B6%E3%81%AF%E3%80%81%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E3%83%93%E3%83%83%E3%82%B0%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3%E3%81%AE%E6%95%B4%E6%95%B0%E3%81%A8%E8%A6%8B%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%0A%20%20%20%20%E6%AC%A1%E3%81%8C%E6%88%90%E3%82%8A%E7%AB%8B%E3%81%A4%E3%81%93%E3%81%A8%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cmathrm%7Bint%7D(H)%20%3C%20%5Ctext%7Btarget%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E9%9B%A3%E6%98%93%E5%BA%A6%E3%81%AF%E3%80%81Bitcoin%20%E3%81%A7%E8%A8%B1%E3%81%95%E3%82%8C%E3%82%8B%E6%9C%80%E3%82%82%E7%B7%A9%E3%81%84%E7%9B%AE%E6%A8%99%E5%80%A4%0A%20%20%20%20%24%5Ctext%7Btarget%7D_1%20%3D%20%5Cmathtt%7B0xffff%7D%20%5Ctimes%20256%5E%7B%5Cmathtt%7B0x1d%7D%20-%203%7D%24%0A%20%20%20%20%E3%81%A8%E3%81%AE%E6%AF%94%E3%81%A7%E8%A1%A8%E3%81%99%E3%80%82%0A%0A%20%20%20%20%24%24%0A%20%20%20%20%5Ctext%7Bdifficulty%7D%20%3D%20%5Cfrac%7B%5Ctext%7Btarget%7D_1%7D%7B%5Ctext%7Btarget%7D%7D%0A%20%20%20%20%24%24%0A%0A%20%20%20%20%E5%80%A4%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E3%81%BB%E3%81%A9%E6%9D%A1%E4%BB%B6%E3%81%8C%E5%8E%B3%E3%81%97%E3%81%8F%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AA%E8%A9%A6%E8%A1%8C%E5%9B%9E%E6%95%B0%E3%81%AE%E6%9C%9F%E5%BE%85%E5%80%A4%E3%82%82%E6%AF%94%E4%BE%8B%E3%81%97%E3%81%A6%E5%A2%97%E3%81%88%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(bits%2C%20block_hash)%3A%0A%20%20%20%20exponent%20%3D%20bits%20%3E%3E%2024%0A%20%20%20%20coefficient%20%3D%20bits%20%26%200xFFFFFF%0A%20%20%20%20target%20%3D%20coefficient%20*%20256%20**%20(exponent%20-%203)%0A%20%20%20%20target_1%20%3D%200xFFFF%20*%20256%20**%20(0x1D%20-%203)%0A%0A%20%20%20%20print(f%22exponent%3D0x%7Bexponent%3A02x%7D%2C%20coefficient%3D0x%7Bcoefficient%3A06x%7D%22)%0A%20%20%20%20print(f%22target%20%3D%7Btarget%3A064x%7D%22)%0A%20%20%20%20print(f%22hash%20%20%20%3D%7Bblock_hash%7D%22)%0A%20%20%20%20print(f%22hash%20%3C%20target%3A%20%7Bint(block_hash%2C%2016)%20%3C%20target%7D%22)%0A%20%20%20%20print(f%22difficulty%3D%7Btarget_1%20%2F%20target%3A%2C.2f%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E6%8E%A1%E6%8E%98%E3%81%AE%E5%AE%9F%E6%BC%94%0A%0A%20%20%20%20%E6%8E%A1%E6%8E%98%E3%81%AF%E3%80%81%E3%83%98%E3%83%83%E3%83%80%E3%81%AE%E5%85%88%E9%A0%AD%2076%20%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%97%E3%81%9F%E3%81%BE%E3%81%BE%E6%9C%AB%E5%B0%BE%204%20%E3%83%90%E3%82%A4%E3%83%88%E3%81%AE%20%60nonce%60%20%E3%82%92%0A%20%20%20%20%E5%A4%89%E3%81%88%E3%81%AA%E3%81%8C%E3%82%89%E3%83%80%E3%83%96%E3%83%AB%20SHA-256%20%E3%82%92%E8%A8%88%E7%AE%97%E3%81%97%E3%80%81%E7%9B%AE%E6%A8%99%E5%80%A4%E3%82%92%E4%B8%8B%E5%9B%9E%E3%82%8B%E5%80%A4%E3%82%92%E6%8E%A2%E3%81%99%E4%BD%9C%E6%A5%AD%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20Block%20395791%20%E3%81%AE%E9%9B%A3%E6%98%93%E5%BA%A6%E3%81%A7%E3%81%AF%E6%9C%9F%E5%BE%85%E8%A9%A6%E8%A1%8C%E5%9B%9E%E6%95%B0%E3%81%8C%E6%A1%81%E9%81%95%E3%81%84%E3%81%AB%E5%A4%A7%E3%81%8D%E3%81%8F%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A7%E3%81%AF%0A%20%20%20%20%E5%86%8D%E7%8F%BE%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E6%9D%A1%E4%BB%B6%E3%82%92%E3%80%8C%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E5%85%88%E9%A0%AD%2022%20%E3%83%93%E3%83%83%E3%83%88%E3%81%8C%200%E3%80%8D%E3%81%BE%E3%81%A7%E7%B7%A9%E3%82%81%E3%81%A6%0A%20%20%20%20%E6%8E%A2%E7%B4%A2%E3%81%AE%E9%81%8E%E7%A8%8B%E3%81%A0%E3%81%91%E3%82%92%E5%86%8D%E7%8F%BE%E3%81%99%E3%82%8B%E3%80%82%E6%9C%9F%E5%BE%85%E8%A9%A6%E8%A1%8C%E5%9B%9E%E6%95%B0%E3%81%AF%20%242%5E%7B22%7D%20%5Csimeq%204.2%20%5Ctimes%2010%5E6%24%20%E5%9B%9E%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E5%AE%9F%E7%89%A9%E3%81%AE%E6%8E%A1%E6%8E%98%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%E6%9D%A1%E4%BB%B6%E3%81%AE%E5%8E%B3%E3%81%97%E3%81%95%E3%81%A0%E3%81%91%E3%81%A7%E3%80%81%E6%89%8B%E7%B6%9A%E3%81%8D%E3%81%AF%E5%90%8C%E3%81%98%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%60nonce%60%20%E3%81%AE%0A%20%20%20%204%20%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E4%BD%BF%E3%81%84%E5%88%87%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%60timestamp%60%20%E3%82%84%E3%82%B3%E3%82%A4%E3%83%B3%E3%83%99%E3%83%BC%E3%82%B9%E5%8F%96%E5%BC%95%E3%82%92%E5%A4%89%E3%81%88%E3%81%A6%0A%20%20%20%20%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AB%E3%83%AB%E3%83%BC%E3%83%88%E3%82%92%E6%9B%B4%E6%96%B0%E3%81%97%E3%80%81%E5%88%A5%E3%81%AE%E6%8E%A2%E7%B4%A2%E7%A9%BA%E9%96%93%E3%82%92%E3%82%84%E3%82%8A%E7%9B%B4%E3%81%99%E3%81%93%E3%81%A8%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(header_bin%2C%20sha256)%3A%0A%20%20%20%20demo_bits%20%3D%2022%0A%20%20%20%20demo_target%20%3D%201%20%3C%3C%20(256%20-%20demo_bits)%0A%20%20%20%20demo_prefix%20%3D%20header_bin%5B%3A76%5D%0A%0A%20%20%20%20demo_nonce%20%3D%20None%0A%20%20%20%20demo_hash%20%3D%20None%0A%20%20%20%20for%20candidate%20in%20range(1%20%3C%3C%2025)%3A%0A%20%20%20%20%20%20%20%20candidate_digest%20%3D%20sha256(%0A%20%20%20%20%20%20%20%20%20%20%20%20sha256(demo_prefix%20%2B%20candidate.to_bytes(4%2C%20%22little%22)).digest()%0A%20%20%20%20%20%20%20%20).digest()%0A%20%20%20%20%20%20%20%20if%20int.from_bytes(candidate_digest%5B%3A%3A-1%5D%2C%20%22big%22)%20%3C%20demo_target%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20demo_nonce%20%3D%20candidate%0A%20%20%20%20%20%20%20%20%20%20%20%20demo_hash%20%3D%20candidate_digest%5B%3A%3A-1%5D.hex()%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%0A%20%20%20%20print(f%22required%20leading%20zero%20bits%3D%7Bdemo_bits%7D%22)%0A%20%20%20%20if%20demo_nonce%20is%20None%3A%0A%20%20%20%20%20%20%20%20print(%22not%20found%20within%20the%20search%20range%22)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print(f%22found%20nonce%3D%7Bdemo_nonce%7D%20(0x%7Bdemo_nonce%3A08x%7D)%22)%0A%20%20%20%20%20%20%20%20print(f%22hash%3D%7Bdemo_hash%7D%22)%0A%20%20%20%20%20%20%20%20print(f%22trials%3D%7Bdemo_nonce%20%2B%201%3A%2C%7D%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
4b1cfe5fa463e58db148b5e4dc1a5cdc