Bitcoin Programming ์ฑ ์ ์ฝ์ผ๋ฉฐ ์ดํดํ ๋ด์ฉ์ ๋ํด ์ ๋ฆฌํ๋ค. ์ฒซ๋ฒ์งธ๋ ์ ํ์ฒด์ด๋ค.
ํ๊ฒฝ ์ค์น
// ํ์ด์ฌ 3.5 ์ด์ ๋ฒ์ ์ค์น
// pip ์ค์น
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
// ์คํฌ๋ฆฝํธ ์คํ
python3 get-pip.py
// Git ์ค์น
// https://git-scm.com/downloads
// ์ฑ
์์ค์ฝ๋ ๋ฐ๊ธฐ
git clone https://github.com/jimmysong/programmingbitcoin
cd programmingbitcoin
// virtualenv ์ค์น
pip install virtualenv --user
// ๊ฐ์ ํ๊ฒฝ ๋ง๋ค๊ธฐ
python3 -m virtualenv venv
// ๊ฐ์ ํ๊ฒฝ venv ์์ฑ ํ, ๋ด๋ถ activate ์คํ (๊ฐ์ ํ๊ฒฝ ๋ง๋ค๋ฉด ํด๋น ํด๋์ ์ด๋ฆ ์ ์ ํด๋๊ฐ ์๊ธด๋ค.)
source venv/bin/activate
// ์๊ตฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pip install -r requirements.txt
// jupyter notebook ์คํ
jupyter notebook
์ฒด (Field)
์ฌ์น ์ฐ์ฐ์ ์งํฉ ์์์ ์ํํ ์ ์๋ ์งํฉ
- ์ฆ, ์ฐ์ฐ์ ํตํด ๋์จ ๊ฐ ๋ํ ํด๋น ์งํฉ์ ์์์ฌ์ผ ํ๋ค.
- ์ ๋ฆฌ์, ์ค์, ๋ณต์์์ ๊ฒฝ์ฐ ์ฒด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ์ ์๋ ์๋๋ค. (๋๋์ โ ์ ๋ฆฌ์)
- ์ฌ๊ธฐ์ ์๋ฐํ ์ฆ๋ช ์ ํ์๋ ๊ฒ์ ์๋๋ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ณ ๋์ด๊ฐ์.
์ ํ์ฒด (Finite field)
- ์ ๋ฆฌ์์ฒด, ์ค์์ฒด, ๋ณต์์์ฒด์ ํน์ง์ ๋ฌดํ ์งํฉ์ด๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ ํ์งํฉ์ธ ์ฒด๋ ์๋๊ฐ?
- ๊ทธ ๋ฐฉ๋ฒ์ค ํ๋๊ฐ ์ ํ์ฒด์ด๋ค.
- ์ ํ์ฒด์์๋ ์ ์์ฒด(Z)์์ ์์๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ด์ฐฐํ๋ ๊ฒ์ ํตํด ์ ํ์งํฉ์ฒด๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
- ์์ปจ๋ฐ, 7๊ณผ ๊ฐ์ ์์๋ก ๋๋ ๋๋จธ์ง๊ฐ ๊ฐ์ ์์๋ค์ ๋ชจ๋ ๊ฐ์ ๊ฒ์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ์ด๋ค.
- ์ฆ, ์์๋ก ๋๋ ๋๋จธ์ง๋ค์ ์์๋ก ํ๋ ์งํฉ ๋ฅผ ์ ์ ํ์.
- ์ฌ๊ธฐ์ p๋ฅผ ์์(order)๋ผ ํ๋ค.
์ฒด์ ์ฆ๋ช
- ์ฒด ์ธ์ง ํ์ธํ๊ธฐ ์ํด์๋ ๊ฐ๋จํ ์๊ฐํ์ ๋ ์ฌ์น ์ฐ์ฐ์ ๋ํด ๋ซํ์๋์ง ํ์ธํ๋ฉด ๋๋ค.
- ๋ง์ , ๊ณฑ์ , ๋บ์ ์ ๋ํด์๋ ์๋ช ํ๋ค.
- ๋๋์ ์ด ๋ฌธ์ ๋ค.
๋๋์
- ์ ํ์ฒด ์์๋ค ๊ฐ์ ๋๋์ ๊ฒฐ๊ณผ๋ ์ด๋ป๊ฒ ๋ ๊น? ์ฝ๊ฒ ์์ํ๊ธฐ ์ด๋ ต๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ณฑ์ ์ผ๋ก ๋ถํฐ ๋๋์ ์ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํด๋ณด๋ ๊ฒ์ด ๋์์ด ๋๋ค.
- ์ ์ํ ์์(0~18)์ ๋ํด ํ์ธํด๋ณด์.
- , ์ฆ
- ๊ทธ๋ผ ๋๋์ ์ ํ ๋๋ง๋ค ์ด๋ ๊ฒ ๊ณ์ฐํด์ผ ํ ๊น?
- ์ฌ๊ธฐ์ ํ๋ฅด๋ง์ ์์ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฆ๋ช
- ์ฌ๊ธฐ์ ์ฌ์น ์ฐ์ฐ์ ๋ชจ๋๋ฌ ์ฐ์ฐ์ ๋งํจ
๊ทธ๋ฐ๋ฐ,
์ฆ,
- ์ด๋ ๊ฒ ๋๋ฉด ๋๋๊ธฐ๋ฅผ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก ๋ณ๊ฒฝํด์ ๊ตฌํ ์ ์๋ค๋ ๋ง์ด๋๋ค.
- ์ฌ๊ธฐ์ ์ง์๊ฐ ์ปค์ง๊ฒ ๋๋ฉด ๊ณ์ฐ์๊ฐ์ ๋ ๊ธธ์ด์ง ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- python์์ pow ์ฐ์ฐ์ ๋ด๋ถ์ ์ผ๋ก ๋ ๋น ๋ฅธ ์ฐ์ฐ์ ์ง์ํ๋ค.
pow(7, 17)
: ์ผ๋ฐ ์๋ (7**17)pow(7, 17, 19)
: ๋น ๋ฅธ ์๋ (7**17%19)- ๋ชจ๋๋ฌ ์ฐ์ฐ ํน์ง์ ์ฌ์ฉํ์ฌ ๊ฐ ๊ณฑ์ ๋ง๋ค ๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ ๊ณ์ฐ
- ๋ชจ๋๋ฌ๋ ์์์ ์ ์ฉํ์ ์ ๋ณด์์ ๋ชจ๋๋ฌ๊ฐ ์ ์ฉ๋์ด ์์๋ก ๋จ์ด์ง๋ค.
์์๊ฐ ์์์ธ ์ ํ์ฒด๊ฐ ์ ์ฉํ ์ด์
- ์์๊ฐ ์์์ธ ์ ํ์ฒด์ ๊ฒฝ์ฐ, ์ ํ์ฒด์ 0์ด ์๋ ์์ k๋ก ์ ์ฒด ์งํฉ์ ๊ณฑํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ ๋ค์ ์๋ ์งํฉ์ด ๋๋ค.
- ์์์ ๋ฐฐ์ด ์์๋ ๋ฌ๋ผ์ง๋, ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ์์๋ ์๊ด ์๋ค.
- ๋ง์ฝ ์์๊ฐ ํฉ์ฑ์๋ผ๋ฉด, ๊ณฑํ๋ ์์ ๋ฐ๋ผ ์งํฉ์ด ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
- ๋ ๋๋์ด ๋จ์ด์ ธ ์ค๋ณต๋๋ ์์๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ
- ๊ฐ์๊ฐ ๋ ์์์ง๋ค.
- ์์์ ํน์ง๋๋ฌธ์ ๋ํ๋๋ ์ฑ์ง์ด๋ค.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
ํ๋ฅด๋ง์ ์์ ๋ฆฌ
p๊ฐ ์์์ด๋ฉด, ๋ชจ๋ ์ ์ ์ ๋ํด ์ด๋ค.
ํน์ ๊ฐ ์์์ด๊ณ ๊ฐ ์ ๋ฐฐ์๊ฐ ์๋๋ฉด, ์ด๋ค.
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]