読書環境
- Kindle(白黒)
- iPad Pro 10.5 + Kindle(カラー)
- 紙
開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
Programming Bitcoin: Learn How to Program Bitcoin from Scratch (Jimmy Song(著)、O'Reilly Media)を入手した理由、そしてChapter 1(Finite Fields)、Constructing a Finite Field in Python、Exercises 1の解答を求めてみる。
過去に読んだ、ブロックチェーン 相互不信が実現する新しいセキュリティがきっかけで、ブロックチェーンという技術の使い道等の具体的なことを知ったから、次は技術そのものを知ってみたいと思って本書を入手。Bitcoinの技術に関する本は他にもあるけど、本著のプログラムのコードは普段使っているPythonで書かれているみたいだったから、それも本著を選択した理由の一つだったり。
また、過去に読んだ本とは関係なく新技術を知ること、触れることは楽しい。さらに技術を知ることで、ブロックチェーン 相互不信が実現する新しいセキュリティの内容をより深く知ることが出来て、2冊の本で相乗効果が生まれればいいなぁという期待も。両方達成できれば一石二鳥でもあるかなと。
Exercises 1の解答を求めてみる。
コード
Python 3
ecc_test.py
#!/usr/bin/env python3
from unittest import TestCase, main
from ecc import FieldElement
class FieldElementTest(TestCase):
def setUp(self):
self.a = FieldElement(6, 13)
self.b = FieldElement(7, 13)
self.c = FieldElement(6, 17)
def tearDown(self):
pass
def test_ne_1(self):
self.assertNotEqual(self.a, None)
def test_ne_2(self):
self.assertNotEqual(self.a, self.b)
def test_ne_3(self):
self.assertNotEqual(self.a, self.c)
if __name__ == '__main__':
main()
ecc.py
#!/usr/bin/env python3
class FieldElement:
def __init__(self, num: int, prime: int):
if num < 0 or prime <= num:
raise ValueError(f'Num {num} not in field range 0 to {prime - 1}')
self.num = num
self.prime = prime
def __repr__(self):
return f'FieldElement_{self.prime}({self.num})'
def __eq__(self, other) -> bool:
if other is None:
return False
return self.num == other.num and self.prime == other.prime
def __ne__(self, other) -> bool:
if other is None:
return True
return not self == other
入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))
C:\Users\...>py -3 ecc_test.py -v test_ne_1 (__main__.FieldElementTest) ... ok test_ne_2 (__main__.FieldElementTest) ... ok test_ne_3 (__main__.FieldElementTest) ... ok ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK C:\Users\...>
0 コメント:
コメントを投稿