๋ธ๋ก ์ฒด์ธ ์ธ๊ฐ ์ถ์ ๋ง์ ์์ญ์ ๊ฐ์ ํ ๊ฒ์ ์ฝ์ํ๋ ํ์ ์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์ค์ ํ๋ก์ธ์ค์ ์ ํ์ ๋์งํธ ๊ณต๊ฐ์ผ๋ก ์ ์กํ๊ณ , ๊ธ์ต ๊ฑฐ๋์ ์๋์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ณ , ๋น์ฉ์ ์ ๊ฐํ๋ฉฐ, ๋ถ์ฐ ๋คํธ์ํฌ์์ ์ค๋งํธ ๊ณ์ฝ์ ์ฌ์ฉํ์ฌ ํ๋์ ์ธ DAPP ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋ธ๋ก์ฒด์ธ์ ๋ง์ ์ด์ ๊ณผ ๋ค์ํ ์ ์ฉ์ ๊ณ ๋ คํ ๋, ์ด ์ ๋งํ ๊ธฐ์ ์ด ์์ง ๋ชจ๋ ์ฐ์ ์ ์ ์ฉ๋์ง ์์๋ค๋ ์ฌ์ค์ด ๋๋๊ฒ ๋ณด์ผ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ ํ๋์ ๋ถ์ฐํ ๋ธ๋ก์ฒด์ธ์๋ ํ์ฅ์ฑ์ด ๋ถ์กฑํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋๋ฆฌ์์ ์ด๋น ์ฝ 20๊ฐ์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๋๋ฐ ์ด๋ ์ค๋๋ ์ ์ญ๋์ ์ธ ๋น์ฆ๋์ค ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ์๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๋์์ ๋ธ๋ก์ฒด์ธ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ํดํน ๋ฐ ๋คํธ์ํฌ ์ฅ์ ๋ก๋ถํฐ ๋ณดํธ ์์ค์ด ๋๊ธฐ ๋๋ฌธ์ ์ด๋๋ฆฌ์์ ํฌ๊ธฐํ๋ ๊ฒ์ ์ฃผ์ ํฉ๋๋ค.
๋ธ๋ก์ฒด์ธ์ ๋ถ์ฐํ, ๋ณด์ ๋ฐ ํ์ฅ์ฑ์ ๋ณด์ฅํ์ฌ ํ์ฅ์ฑ ํธ๋ฆด๋ ๋ง๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐํ
ํ๋ผ์ฆ๋ง ์บ์์ ์ฃผ์ ํ๋ก์ธ์ค
1. ์ฌ์ฉ์๋ ์ค๋งํธ ๊ณ์ฝ ๊ธฐ๋ฅ '์๊ธ'์ ํธ์ถํ์ฌ ํ๋ผ์ฆ๋ง ์บ์ ํ ํฐ์ ์ ๊ธํ๋ ค๋ ETH ๊ธ์ก์ ์ ๋ฌํฉ๋๋ค. ์ค๋งํธ ๊ณ์ฝ ๊ธฐ๋ฅ์ ํ ํฐ์ ์์ฑํ๊ณ ์ด์ ๋ํ ์ด๋ฒคํธ๋ฅผ ์์ฑํฉ๋๋ค.
2. ์ค๋งํธ ๊ณ์ฝ ์ด๋ฒคํธ์ ๊ฐ์ ํ ํ๋ผ์ฆ๋ง ์บ์ ๋ ธ๋๋ ์๊ธ ์์ฑ์ ๋ํ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ํ ํฐ ์์ฑ์ ๋ํ ํธ๋์ญ์ ์ ํ์ ์ถ๊ฐํฉ๋๋ค.
3. ์ฃผ๊ธฐ์ ์ผ๋ก ํน์ ํ๋ผ์ฆ๋ง ์บ์ ๋ ธ๋๋ ํ์์ ๋ชจ๋ ๊ฑฐ๋(์ต๋ 1๋ง ๊ฐ)๋ฅผ ๊ฐ์ ธ์ ๋ธ๋ก์ ํ์ฑํ๊ณ ๋จธํด ํธ๋ฆฌ์ ๊ทธ์ ๋ฐ๋ฅธ ํด์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ๋ธ๋ก์ ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋ ธ๋๋ก ์ ์ก๋ฉ๋๋ค. ๋ ธ๋๋ Merkle ํด์๊ฐ ์ ํจํ์ง, ๊ฑฐ๋๊ฐ ์ ํจํ์ง(์: ํ ํฐ ๋ณด๋ธ ์ฌ๋์ด ์์ ์์ธ์ง ์ฌ๋ถ) ํ์ธํฉ๋๋ค. ๋ธ๋ก์ ํ์ธํ ํ ๋ ธ๋๋ ์ค๋งํธ ๊ณ์ฝ์ 'submitBlock' ๊ธฐ๋ฅ์ ํธ์ถํ์ฌ ๋ธ๋ก ๋ฒํธ์ Merkle ํด์๋ฅผ ์ฃ์ง ์ฒด์ธ์ ์ ์ฅํฉ๋๋ค. ์ค๋งํธ ๊ณ์ฝ์ ๋ธ๋ก ์ถ๊ฐ์ ์ฑ๊ณตํ์์ ๋ํ๋ด๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํฉ๋๋ค. ํธ๋์ญ์ ์ด ํ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
4. ๋ธ๋ก ์ ์ถ ์ด๋ฒคํธ๋ฅผ ์์ ํ ๋ ธ๋๋ ๋ธ๋ก์ ์ถ๊ฐ๋ ํธ๋์ญ์ ์ ์ ์ฉํ๊ธฐ ์์ํฉ๋๋ค.
5. ์ด๋ ์์ ์์ ํ ํฐ์ ์์ ์(๋๋ ๋น์์ ์)๊ฐ ํ๋ผ์ฆ๋ง ์บ์์์ ํ ํฐ์ ์ธ์ถํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๊ทธ๋ `startExit` ํจ์๋ฅผ ํธ์ถํ์ฌ ํ ํฐ์ ๋ง์ง๋ง 2๊ฐ ๊ฑฐ๋์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ์ฌ ์์ ์ด ํ ํฐ ์์ ์์์ ํ์ธํฉ๋๋ค. Merkle ํด์๋ฅผ ์ฌ์ฉํ๋ ์ค๋งํธ ๊ณ์ฝ์ ๋ธ๋ก์ ํธ๋์ญ์ ์ด ์๋์ง ํ์ธํ๊ณ XNUMX์ฃผ ํ์ ์ถ๊ธ์ ์ํด ํ ํฐ์ ๋ณด๋ ๋๋ค.
6. ํ ํฐ ์ถ๊ธ ์์ ์ด ์๋ฐ์ผ๋ก ๋ฐ์ํ ๊ฒฝ์ฐ(์ถ๊ธ ์ ์ฐจ๊ฐ ์์๋ ํ ํ ํฐ์ด ์ฌ์ฉ๋์๊ฑฐ๋ ์ถ๊ธ ์ ์ ์ด๋ฏธ ๋ค๋ฅธ ์ฌ๋์ ํ ํฐ์ด์๋ ๊ฒฝ์ฐ), ํ ํฐ ์์ ์๋ XNUMX์ฃผ ์ด๋ด์ ์ถ๊ธ์ ๋ฐ๋ฐํ ์ ์์ต๋๋ค.
๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฌ์ฑ๋ฉ๋๋ค.
1. ๋ฃจํธ ์ฒด์ธ์ ํ์ ์ฒด์ธ ๋ด์์ ์์ฑ๋๊ณ ์ ๋ฌ๋๋ ํธ๋์ญ์ ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ ๋๋ค. ํ๋ผ์ฆ๋ง ์บ์์ ETH๋ฅผ ์ ๊ธํ๊ณ ์ธ์ถํ ์ฌ๋์ ๋ํ ์ ๋ณด๋ ๊ณต๊ฐ๋ฉ๋๋ค.
2. ํ์ ์ฒด์ธ์ zk-SNARK๋ฅผ ์ฌ์ฉํ ์ต๋ช ๊ฑฐ๋๋ฅผ ํ์ฉํฉ๋๋ค.
๊ธฐ์ ์คํ
- NodeJS
- Redis
- ์๋จ ๋ฆฌ์
- ํ ์
ํ ์คํธ
ํ๋ผ์ฆ๋ง ์บ์๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ์์คํ ์๋๋ฅผ ํ ์คํธํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
- ์ด๋น ์ต๋ 35๊ฐ์ ํธ๋์ญ์ ์ด ํ์ ์ถ๊ฐ๋ฉ๋๋ค.
- ์ต๋ 1๊ฐ์ ํธ๋์ญ์ ์ ๋ธ๋ก์ ์ ์ฅํ ์ ์์ต๋๋ค.
ํ ์คํธ๋ ๋ค์ 3๊ฐ ์๋ฒ์์ ์ํ๋์์ต๋๋ค.
1. Intel Core i7-6700 ์ฟผ๋ ์ฝ์ด Skylake ํฌํจ NVMe SSD โ 512GB, 64GB DDR4 RAM
3๊ฐ์ ๊ฒ์ฆ ํ๋ผ์ฆ๋ง ์บ์ ๋
ธ๋๊ฐ ์์ฑ๋์์ต๋๋ค.
2. AMD Ryzen 7 1700X ์ฅํ ์ฝ์ด โSummit Ridgeโ(Zen), SATA SSD โ 500GB, 64GB DDR4 RAM
Ropsten ํ
์คํธ๋ท ETH ๋
ธ๋๊ฐ ์์นํ์ต๋๋ค.
3๊ฐ์ ๊ฒ์ฆ ํ๋ผ์ฆ๋ง ์บ์ ๋
ธ๋๊ฐ ์์ฑ๋์์ต๋๋ค.
3. Intel Core i9-9900K Octa-Core ํฌํจ. NVMe SSD โ 1TB, 64GB DDR4 RAM
ํ๋ผ์ฆ๋ง ์บ์ ์ ์ถ ๋
ธ๋ 1๊ฐ๋ฅผ ์ฌ๋ ธ์ต๋๋ค.
3๊ฐ์ ๊ฒ์ฆ ํ๋ผ์ฆ๋ง ์บ์ ๋
ธ๋๊ฐ ์์ฑ๋์์ต๋๋ค.
ํ๋ผ์ฆ๋ง ์บ์ ๋คํธ์ํฌ์ ๊ฑฐ๋๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ํ
์คํธ๊ฐ ์์๋์์ต๋๋ค.
์ด๊ณ : ๊ฐ์ธ ๋คํธ์ํฌ์ 10๊ฐ์ ํ๋ผ์ฆ๋ง ์บ์ ๋ ธ๋๊ฐ ์์ต๋๋ค.
ํ ์คํธ 1
๋ธ๋ก๋น ๊ฑฐ๋ ํ๋๋ 1๋ง ๊ฐ์ ๋๋ค. ๋ฐ๋ผ์ 1๋ง ๊ฐ์ ํธ๋์ญ์ ์ด 2๊ฐ์ ๋ธ๋ก์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค(์์คํ ์ด ํธ๋์ญ์ ์ ์ผ๋ถ๋ฅผ ๊ด๋ฆฌํ๊ณ ํธ๋์ญ์ ์ด ์ ์ก๋๋ ๋์ ์ ์ถํ๊ธฐ ๋๋ฌธ์).
์ด๊ธฐ ์ํ: ๋ง์ง๋ง ๋ธ๋ก #7; 1๋ฐฑ๋ง ๊ฐ์ ๊ฑฐ๋์ ํ ํฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
00:00 โ ํธ๋์ญ์
์์ฑ ์คํฌ๋ฆฝํธ ์์
01:37 - 1๋ง ๊ฑด์ ํธ๋์ญ์
์ด ์์ฑ๋๊ณ ๋
ธ๋๋ก ์ ์ก์ด ์์๋์์ต๋๋ค.
01:46 โ ์ ์ถ ๋
ธ๋๋ ํ์์ 240๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #8์ ํ์ฑํฉ๋๋ค. ๋ํ 320์ด ์์ 10๊ฐ์ ํธ๋์ญ์
์ด ํ์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
01:58 โ ๋ธ๋ก #8์ด ์๋ช
๋๊ณ ๊ฒ์ฆ์ ์ํด ์ ์ก๋ฉ๋๋ค.
02:03 โ ๋ธ๋ก #8์ด ๊ฒ์ฆ๋๊ณ ์ค๋งํธ ๊ณ์ฝ์ 'submitBlock' ๊ธฐ๋ฅ์ด Merkle ํด์ ๋ฐ ๋ธ๋ก ๋ฒํธ๋ก ํธ์ถ๋ฉ๋๋ค.
02:10 โ ๋ฐ๋ชจ ์คํฌ๋ฆฝํธ ์์
์ด ์๋ฃ๋์ด 1์ด ๋ง์ 32๋ง ๊ฑด์ ๊ฑฐ๋๊ฐ ์ ์ก๋์์ต๋๋ค.
02:33 - ๋
ธ๋๋ ๋ธ๋ก #8์ด ๋ฃจํธ ์ฒด์ธ์ ์ถ๊ฐ๋์๋ค๋ ์ ๋ณด๋ฅผ ์์ ํ๊ธฐ ์์ํ์ผ๋ฉฐ 240๊ฐ์ ํธ๋์ญ์
์ ์ํํ๊ธฐ ์์ํ์ต๋๋ค.
02:40 - ์ด๋ฏธ ๋ธ๋ก #240์ ์๋ 8๊ฐ์ ํธ๋์ญ์
์ด ํ์์ ์ ๊ฑฐ๋์์ต๋๋ค.
02:56 โ ์ ์ถ ๋
ธ๋๋ ํ์์ ๋๋จธ์ง 760๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ Merkle ํด์ ๊ณ์ฐ ๋ฐ ์๋ช
๋ธ๋ก #9๋ฅผ ์์ํ์ต๋๋ค.
03:20 - ๋ชจ๋ ๋
ธ๋์๋ 1๋ง ๊ฐ์ 240๊ฐ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
03:35 โ ๋ธ๋ก #9๊ฐ ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
03:41 - ๋คํธ์ํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
04:40 โ ๋ธ๋ก #9 ๊ฒ์ฆ ๋๊ธฐ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค.
04:54 โ ์ ์ถ ๋
ธ๋๋ ํ์์ ๋๋จธ์ง 760๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ Merkle ํด์ ๊ณ์ฐ ๋ฐ ์๋ช
๋ธ๋ก #9๋ฅผ ์์ํ์ต๋๋ค.
05:32 โ ๋ธ๋ก #9๊ฐ ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
05:53 โ ๋ธ๋ก #9๊ฐ ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
06:17 - ๋
ธ๋๋ ๋ธ๋ก #9๊ฐ ๋ฃจํธ ์ฒด์ธ์ ์ถ๊ฐ๋์๋ค๋ ์ ๋ณด๋ฅผ ์์ ํ๊ธฐ ์์ํ์ผ๋ฉฐ 760๊ฑด์ ํธ๋์ญ์
์ ์ํํ๊ธฐ ์์ํ์ต๋๋ค.
06:47 โ ํ์์ ๋ธ๋ก #9์ ์๋ ํธ๋์ญ์
์ด ์ง์์ก์ต๋๋ค.
09:06 - ๋ชจ๋ ๋
ธ๋์๋ 2๋ฐฑ๋ง ๊ฐ์ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
ํ ์คํธ 2
๋ธ๋ก๋น 350๊ฐ์ ์ ํ์ด ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก 3๊ฐ์ ๋ธ๋ก์ด ์๊ฒผ์ต๋๋ค.
์ด๊ธฐ ์ํ: ๋ง์ง๋ง ๋ธ๋ก #9; 2๋ฐฑ๋ง ๊ฐ์ ๊ฑฐ๋์ ํ ํฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
00:00 โ ํธ๋์ญ์
์์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ฏธ ์์๋์์ต๋๋ค.
00:44 - 1๋ง ๊ฑด์ ํธ๋์ญ์
์ด ์์ฑ๋๊ณ ๋
ธ๋๋ก ์ ์ก์ด ์์๋์์ต๋๋ค.
00:56 โ ์ ์ถ ๋
ธ๋๋ ํ์์ 320๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #10์ ํ์ฑํฉ๋๋ค. ๋ํ 320์ด ์์ 10๊ฐ์ ํธ๋์ญ์
์ด ํ์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
01:12 โ ๋ธ๋ก #10์ด ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
01:18 โ ๋ฐ๋ชจ ์คํฌ๋ฆฝํธ ์์
์ด ์๋ฃ๋์ด 1์ด ๋ง์ 34๋ง ๊ฑด์ ๊ฑฐ๋๊ฐ ์ ์ก๋์์ต๋๋ค.
01:20 โ ๋ธ๋ก #10์ด ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
01:51 - ๋ชจ๋ ๋
ธ๋๋ ๋ฃจํธ ์ฒด์ธ์ผ๋ก๋ถํฐ ๋ธ๋ก #10์ด ์ถ๊ฐ๋์๋ค๋ ์ ๋ณด๋ฅผ ์์ ํ๊ณ 320๊ฐ์ ํธ๋์ญ์
์ ์ ์ฉํ๊ธฐ ์์ํฉ๋๋ค.
02:01 - ๋ธ๋ก #320์ ์ถ๊ฐ๋ 10๊ฐ์ ํธ๋์ญ์
์ ๋ํ ํ์ด ์ง์์ก์ต๋๋ค.
02:15 โ ์ ์ถ ๋
ธ๋๊ฐ ํ์์ 350๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #11์ ํ์ฑํ์ต๋๋ค.
02:34 โ ๋ธ๋ก #11์ด ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
02:51 โ ๋ธ๋ก #11์ด ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
02:55 โ ๋ง์ง๋ง ๋
ธ๋๊ฐ ๋ธ๋ก #10์์ ํธ๋์ญ์
์ ์๋ฃํ์ต๋๋ค.
10:59 โ ๋ธ๋ก #9 ์ ์ถ์ ๋ํ ํธ๋์ญ์
์ ๋ฃจํธ ์ฒด์ธ์์ ๋งค์ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ง๋ง ์๋ฃ๋์์ผ๋ฉฐ ๋ชจ๋ ๋
ธ๋๊ฐ ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ๊ณ 350๊ฐ์ ํธ๋์ญ์
์ ์ํํ๊ธฐ ์์ํ์ต๋๋ค.
11:05 - ๋ธ๋ก #320์ ์ถ๊ฐ๋ 11๊ฐ์ ํธ๋์ญ์
์ ๋ํ ํ์ด ์ง์์ก์ต๋๋ค.
12:10 - ๋ชจ๋ ๋
ธ๋์๋ 1๋ฐฑ๋ง ๊ฐ์ 670๊ฐ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
12:17 โ ์ ์ถ ๋
ธ๋๊ฐ ํ์์ 330๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #12๋ฅผ ํ์ฑํ์ต๋๋ค.
12:32 โ ๋ธ๋ก #12์ด ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
12:39 โ ๋ธ๋ก #12์ด ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
13:44 - ๋ชจ๋ ๋
ธ๋๋ ๋ฃจํธ ์ฒด์ธ์ผ๋ก๋ถํฐ ๋ธ๋ก #12๊ฐ ์ถ๊ฐ๋์๋ค๋ ์ ๋ณด๋ฅผ ์์ ํ๊ณ 330๊ฐ์ ํธ๋์ญ์
์ ์ ์ฉํ๊ธฐ ์์ํฉ๋๋ค.
14:50 - ๋ชจ๋ ๋
ธ๋์๋ 2๋ฐฑ๋ง ๊ฐ์ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
ํ ์คํธ 3
์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ์๋ฒ์์๋ ํ๋์ ๊ฒ์ฆ ๋ ธ๋๊ฐ ์ ์ถ ๋ ธ๋๋ก ๋์ฒด๋์์ต๋๋ค.
์ด๊ธฐ ์ํ: ๋ง์ง๋ง ๋ธ๋ก #84; ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ํธ๋์ญ์ ๋ฐ ํ ํฐ 0๊ฐ
00:00 โ ๊ฐ๊ฐ 3๋ง ๊ฑด์ ๊ฑฐ๋๋ฅผ ์์ฑํ๊ณ ๋ณด๋ด๋ 1๊ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์์๋์์ต๋๋ค.
01:38 โ 1๋ฐฑ๋ง ๊ฐ์ ํธ๋์ญ์
์ด ์์ฑ๋์์ผ๋ฉฐ ์ ์ถ ๋
ธ๋ #3์ผ๋ก ์ ์ก์ด ์์๋์์ต๋๋ค.
01:50 โ ์ ์ถ ๋
ธ๋ #3์ด ํ์์ 330๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #85(f21)๋ฅผ ํ์ฑํ์ต๋๋ค. ๋ํ 350์ด ๋ง์ 10๊ฐ์ ํธ๋์ญ์
์ด ํ์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
01:53 โ 1๋ฐฑ๋ง ๊ฐ์ ํธ๋์ญ์
์ด ์์ฑ๋์์ผ๋ฉฐ ์ ์ถ ๋
ธ๋ #1์ผ๋ก ์ ์ก์ด ์์๋์์ต๋๋ค.
01:50 โ ์ ์ถ ๋
ธ๋ #3์ด ํ์์ 330๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #85(f21)๋ฅผ ํ์ฑํ์ต๋๋ค. ๋ํ 350์ด ๋ง์ 10๊ฐ์ ํธ๋์ญ์
์ด ํ์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
02:01 โ ์ ์ถ ๋
ธ๋ #1์ด ํ์์ 250๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #85๋ฅผ ํ์ฑํ์ต๋๋ค(65e)
02:06 โ ๋ธ๋ก #85(f21)๊ฐ ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
02:08 โ 3์ด ์์ 1๋ง ๊ฑด์ ํธ๋์ญ์
์ ์ ์กํ ์๋ฒ #30์ ๋ฐ๋ชจ ์คํฌ๋ฆฝํธ๊ฐ ์์
์ ์๋ฃํ์ต๋๋ค.
02:14 โ ๋ธ๋ก #85(f21)๊ฐ ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
02:19 โ ๋ธ๋ก #85(65e)๊ฐ ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
02:22 โ 1๋ฐฑ๋ง ๊ฐ์ ํธ๋์ญ์
์ด ์์ฑ๋์์ผ๋ฉฐ ์ ์ถ ๋
ธ๋ #2์ผ๋ก ์ ์ก์ด ์์๋์์ต๋๋ค.
02:27 โ ๋ธ๋ก #85(65e)๊ฐ ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋์์ต๋๋ค.
02:29 โ ์ ์ถ ๋
ธ๋ #2๋ ํ์์ 111855๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #85(256)๋ฅผ ํ์ฑํ์ต๋๋ค.
02:36 โ ๋ธ๋ก #85(256)๊ฐ ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
02:36 โ 1์ด ์์ 1๋ง ๊ฑด์ ํธ๋์ญ์
์ ์ ์กํ ์๋ฒ #42.5์ ๋ฐ๋ชจ ์คํฌ๋ฆฝํธ๊ฐ ์์
์ ์๋ฃํ์ต๋๋ค.
02:38 โ ๋ธ๋ก #85(256)๊ฐ ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
03:08 โ ์๋ฒ #2 ์คํฌ๋ฆฝํธ ์์
์ด ์๋ฃ๋์ด 1์ด ๋ง์ 47๋ง ๊ฑด์ ํธ๋์ญ์
์ด ์ ์ก๋์์ต๋๋ค.
03:38 - ๋ชจ๋ ๋
ธ๋๋ ๋ฃจํธ์ฒด์ธ์ผ๋ก๋ถํฐ ๋ธ๋ก #85(f21), #86(65e), #87(256)์ด ์ถ๊ฐ๋์๋ค๋ ์ ๋ณด๋ฅผ ๋ฐ์ 330k, 250k, 111855 ํธ๋์ญ์
์ ์ ์ฉํ๊ธฐ ์์ํ์ต๋๋ค.
03:49 - ๋ธ๋ก #330(f250), #111855(85e), #21(86)์ ์ถ๊ฐ๋ 65k, 87k, 256๊ฐ์ ํธ๋์ญ์
์์ ํ์ด ์ง์์ก์ต๋๋ค.
03:59 โ ์ ์ถ ๋
ธ๋ #1์ ํ์์ 888145๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #88(214)์ ํ์ฑํ๊ณ , ์ ์ถ ๋
ธ๋ #2๋ ํ์์ 750๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #88(50a)์ ํ์ฑํ์ผ๋ฉฐ, ์ ์ถ ๋
ธ๋ #3์ ํ์์ 670๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์์ต๋๋ค. ํ ๋ฐ ์์ ๋ธ๋ก #88(d3b)
04:44 โ ๋ธ๋ก #88(d3b)์ด ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
04:58 โ ๋ธ๋ก #88(214)๊ฐ ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
05:11 โ ๋ธ๋ก #88(50a)์ด ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
05:11 โ ๋ธ๋ก #85(d3b)๊ฐ ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
05:36 โ ๋ธ๋ก #85(214)๊ฐ ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
05:43 - ๋ชจ๋ ๋
ธ๋๋ ๋ฃจํธ ์ฒด์ธ์ผ๋ก๋ถํฐ ๋ธ๋ก #88(d3b), #89(214)์ด ์ถ๊ฐ๋์๋ค๋ ์ ๋ณด๋ฅผ ์์ ํ๊ณ 670k, 750k ํธ๋์ญ์
์ ์ ์ฉํ๊ธฐ ์์ํฉ๋๋ค.
06:50 โ ํต์ ์คํจ๋ก ์ธํด ๋ธ๋ก #85(50a)๊ฐ ๊ฒ์ฆ๋์ง ์์์ต๋๋ค.
06:55 โ ์ ์ถ ๋
ธ๋ #2๋ ํ์์ 888145๊ฐ์ ํธ๋์ญ์
์ ๊ฐ์ ธ์ ๋ธ๋ก #90(50a)์ ํ์ฑํ์ต๋๋ค.
08:14 โ ๋ธ๋ก #90(50a)์ด ์๋ช
๋์ด ๊ฒ์ฆ์ ์ํด ๋ค๋ฅธ ๋
ธ๋๋ก ์ ์ก๋ฉ๋๋ค.
09:04 โ ๋ธ๋ก #90(50a)์ด ๊ฒ์ฆ๋์ด ๋ฃจํธ ์ฒด์ธ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
11:23 - ๋ชจ๋ ๋
ธ๋๋ ๋ธ๋ก #90(50a)์ด ์ถ๊ฐ๋ ๋ฃจํธ ์ฒด์ธ์ผ๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์์ ํ๊ณ 888145๊ฐ์ ํธ๋์ญ์
์ ์ ์ฉํ๊ธฐ ์์ํฉ๋๋ค. ๋์์ ์๋ฒ #3์ ์ด๋ฏธ ๋ธ๋ก #88(d3b), #89(214)์ ํธ๋์ญ์
์ ์ ์ฉํ์ต๋๋ค.
12:11 - ๋ชจ๋ ํ์ด ๋น์ด ์์
13:41 โ ์๋ฒ #3์ ๋ชจ๋ ๋
ธ๋์๋ 3๋ง ๊ฐ์ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
14:35 โ ์๋ฒ #1์ ๋ชจ๋ ๋
ธ๋์๋ 3๋ง ๊ฐ์ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
19:24 โ ์๋ฒ #2์ ๋ชจ๋ ๋
ธ๋์๋ 3๋ง ๊ฐ์ ํธ๋์ญ์
๊ณผ ํ ํฐ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ฅ์ ๋ฌผ
ํ๋ผ์ฆ๋ง ์บ์๋ฅผ ๊ฐ๋ฐํ๋ ๋์ ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ์ผ๋ฉฐ, ์ด๋ฅผ ์ ์ฐจ ํด๊ฒฐํ๊ณ ํด๊ฒฐ ์ค์ ๋๋ค.
1. ๋ค์ํ ์์คํ ๊ธฐ๋ฅ์ ์ํธ ์์ฉ์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ ํธ๋์ญ์ ์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ด ๋ธ๋ก ์ ์ถ ๋ฐ ๊ฒ์ฆ ์์ ์ ์ฐจ๋จํ๊ณ , ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ์ ํ๋์์ต๋๋ค.
2. ๋ฐ์ดํฐ ์ ์ก ๋น์ฉ์ ์ต์ํํ๋ฉด์ ์์ฒญ๋ ์์ ํธ๋์ญ์ ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์ฆ์ ๋ช ํํ์ง ์์์ต๋๋ค.
3. ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์ด๋ป๊ฒ ์ ์ฅํด์ผ ํ๋์ง ๋ช ํํ์ง ์์์ต๋๋ค.
4. 1๋ง ๊ฑด์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๋ ๋ธ๋ก์ ํฌ๊ธฐ๊ฐ ์ฝ 100MB๋ฅผ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ๋ ธ๋ ๊ฐ ๋คํธ์ํฌ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง ๋ช ํํ์ง ์์์ต๋๋ค.
5. ๋จ์ผ ์ค๋ ๋ ๋ชจ๋์์ ์์ ํ๋ฉด ๊ธด ๊ณ์ฐ์ด ๋ฐ์ํ ๋(์: Merkle ํธ๋ฆฌ ๊ตฌ์ถ ๋ฐ ํด๋น ํด์ ๊ณ์ฐ) ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ๊ฒ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ์ต๋๊น?
ํ๋ผ์ฆ๋ง ์บ์ ๋ ธ๋์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ํธ๋์ญ์ ์๋ฝ, ๋ธ๋ก ์ ์ถ ๋ฐ ๊ฒ์ฆ, ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ์ํ API ์ ๊ณต ๋ฑ ๋ชจ๋ ์์ ์ ๋์์ ์ํํ ์ ์๋ ์ผ์ข ์ ๊ฒฐํฉ์ด์์ต๋๋ค. NodeJS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ผ ์ค๋ ๋์ด๋ฏ๋ก ๋ฌด๊ฑฐ์ด Merkle ํธ๋ฆฌ ๊ณ์ฐ ๊ธฐ๋ฅ์ผ๋ก ์ธํด ํธ๋์ญ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์ฐจ๋จ๋์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ ๊ฐ์ง ์ต์ ์ ์ดํด๋ณด์์ต๋๋ค.
1. ๊ฐ๊ฐ ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฌ๋ฌ NodeJS ํ๋ก์ธ์ค๋ฅผ ์์ํฉ๋๋ค.
2. Worker_threads๋ฅผ ์ฌ์ฉํ๊ณ ์ฝ๋ ์ผ๋ถ ์คํ์ ์ค๋ ๋๋ก ์ด๋ํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ ์ต์ ์ ๋์์ ์ฌ์ฉํ์ต๋๋ค. ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋์ ๋ ธ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์๋ํ ์ ์๋ 3๊ฐ์ ๋ถ๋ถ์ผ๋ก ๋๋์์ง๋ง ๋์์ ๋๊ธฐ์ ์ผ๋ก
1. ํ์ ํธ๋์ญ์ ์ ๋ฐ์๋ค์ด๊ณ ๋ธ๋ก์ ์์ฑํ๋ ์ ์ถ ๋ ธ๋์ ๋๋ค.
2. ๋ ธ๋์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๊ฒ์ฆ ๋ ธ๋์ ๋๋ค.
3. API ๋ ธ๋ - ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ์ํ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ๊ฒฝ์ฐ cli๋ฅผ ์ฌ์ฉํ์ฌ Unix ์์ผ์ ํตํด ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋จธํด ํธ๋ฆฌ ๊ณ์ฐ๊ณผ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์์ ์ ๋ณ๋์ ์ค๋ ๋๋ก ์ฎ๊ฒผ์ต๋๋ค.
์ด๋ก์จ ๋ชจ๋ ํ๋ผ์ฆ๋ง ์บ์ ๊ธฐ๋ฅ์ด ๋์์ ์ฅ์ ์์ด ์ ์ ์๋ํ๋ ๊ฒ์ ๋ฌ์ฑํ์ต๋๋ค.
์์คํ ์ด ์๋ํ์ ์ฐ๋ฆฌ๋ ์๋ ํ ์คํธ๋ฅผ ์์ํ์ง๋ง ๋ถํํ๊ฒ๋ ์ด๋น 5๊ฑด์ ํธ๋์ญ์ ๊ณผ ๋ธ๋ก๋น ์ต๋ 000๊ฑด์ ํธ๋์ญ์ ์ด๋ผ๋ ๋ง์กฑ์ค๋ฝ์ง ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ต๋๋ค. ๋ฌด์์ด ์๋ชป ๊ตฌํ๋์๋์ง ์์๋ด์ผ ํ์ต๋๋ค.
์ฐ์ , ์์คํ ์ ์ต๋ ์ฑ๋ฅ์ ํ์ ํ๊ธฐ ์ํด ํ๋ผ์ฆ๋ง ์บ์์์ ํต์ ๋ฉ์ปค๋์ฆ์ ํ ์คํธํ๊ธฐ ์์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์ ์ Plasma Cash ๋ ธ๋๊ฐ ์ ๋์ค ์์ผ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค๊ณ ์ผ์ต๋๋ค. ์ฒ์์๋ ํ ์คํธ ๊ธฐ๋ฐ์ด์์ต๋๋ค. JSON ๊ฐ์ฒด๋ `JSON.parse()` ๋ฐ `JSON.stringify()`๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ก๋์์ต๋๋ค.
```json
{
"action": "sendTransaction",
"payload":{
"prevHash": "0x8a88cc4217745fd0b4eb161f6923235da10593be66b841d47da86b9cd95d93e0",
"prevBlock": 41,
"tokenId": "57570139642005649136210751546585740989890521125187435281313126554130572876445",
"newOwner": "0x200eabe5b26e547446ae5821622892291632d4f4",
"type": "pay",
"data": "",
"signature": "0xd1107d0c6df15e01e168e631a386363c72206cb75b233f8f3cf883134854967e1cd9b3306cc5c0ce58f0a7397ae9b2487501b56695fe3a3c90ec0f61c7ea4a721c"
}
}
```
์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ฐ์ฒด์ ์ ์ก ์๋๋ฅผ ์ธก์ ํ ๊ฒฐ๊ณผ ์ด๋น ~ 130k๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. json ์์ ์ ์ํ ํ์ค ํจ์๋ฅผ ๊ต์ฒดํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฑ๋ฅ์ด ํฅ์๋์ง ์์์ต๋๋ค. V8 ์์ง์ ์ด๋ฌํ ์์ ์ ์ต์ ํ๋์ด ์์ด์ผ ํฉ๋๋ค.
ํด๋์ค๋ฅผ ํตํด ํธ๋์ญ์ , ํ ํฐ, ๋ธ๋ก์ ๋ค๋ฃจ์์ต๋๋ค. ์ด๋ฌํ ํด๋์ค๋ฅผ ๋ง๋ค ๋ ์ฑ๋ฅ์ด 2๋ฐฐ๋ ๋จ์ด์ก๋๋ฐ, ์ด๋ OOP๊ฐ ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ง ์์์ ๋ํ๋ ๋๋ค. ๋๋ ์์ ํ ๊ธฐ๋ฅ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๊ฒ์ ๋ค์ ์์ฑํด์ผ ํ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ น์
์ฒ์์ Redis๋ ํค-๊ฐ ์ ์ฅ์, ํด์ ํ ์ด๋ธ ์์ , ์ธํธ ๋ฑ ์ฐ๋ฆฌ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๊ฐ์ฅ ์์ฐ์ ์ธ ์๋ฃจ์ ์ค ํ๋๋ก ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ ํ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ redis-benchmark๋ฅผ ์์ํ๊ณ 80๊ฐ์ ํ์ดํ๋ผ์ด๋ ๋ชจ๋์์ ์ด๋น ์ต๋ 1๊ฐ์ ์์ ์ ์ํํ์ต๋๋ค.
๊ณ ์ฑ๋ฅ์ ์ํด Redis๋ฅผ ๋์ฑ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ์ต๋๋ค.
- Unix ์์ผ ์ฐ๊ฒฐ์ด ์ค์ ๋์์ต๋๋ค.
- ์ํ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ์ต๋๋ค. ์์ ์ฑ์ ์ํด ๋ณต์ ๋ณธ์ ์ค์ ํ๊ณ ๋ณ๋์ Redis์์ ๋์คํฌ์ ์ ์ฅํ ์ ์์ต๋๋ค.
Redis์์ ํ์ ํ๋์ ์ฟผ๋ฆฌ๋ก ๋ชจ๋ ํธ๋์ญ์ ์ ๊ฒ์ํ๊ณ ํธ๋์ญ์ ์ ํ๋์ฉ ์ญ์ ํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํด์ ํ ์ด๋ธ์ ๋๋ค. ์ผ๋ฐ ๋ชฉ๋ก์ ์ฌ์ฉํด ๋ณด์์ผ๋ ์ ์ฒด ๋ชฉ๋ก์ ์ธ๋ก๋ํ ๋ ์๋๊ฐ ๋๋ ค์ก์ต๋๋ค.
ํ์ค NodeJS๋ฅผ ์ฌ์ฉํ ๋ Redis ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋น 18๊ฐ์ ํธ๋์ญ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ์ต๋๋ค. ์๋๊ฐ 9๋ฐฐ๋ ๋จ์ด์ก์ต๋๋ค.
๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ ๊ฐ๋ฅ์ฑ์ด ํ์คํ 5๋ฐฐ ๋ ํฌ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ต์ ํ๋ฅผ ์์ํ์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ioredis๋ก ๋ณ๊ฒฝํ๊ณ ์ด๋น 25k์ ์ฑ๋ฅ์ ์ป์์ต๋๋ค. `hset` ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ ํ๋์ฉ ์ถ๊ฐํ์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ Redis์์ ๋ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์์์ต๋๋ค. ํธ๋์ญ์ ์ ์ผ๊ด ์ฒ๋ฆฌ๋ก ๊ฒฐํฉํ๊ณ `hmset` ๋ช ๋ น ํ๋๋ก ์ ์กํ๋ ์์ด๋์ด๊ฐ ํ์ํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ด๋น 32k์ ๋๋ค.
์๋์ ์ค๋ช ํ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ฐ๋ฆฌ๋ `Buffer`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ , ์๊ณ ๋ณด๋ ์ฐ๊ธฐ ์ ์ ์ด๋ฅผ ํ ์คํธ(`buffer.toString('hex')`)๋ก ๋ณํํ๋ฉด ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ฑ๋ฅ. ๋ฐ๋ผ์ ์๋๋ ์ด๋น 35k๋ก ์ฆ๊ฐํ์ต๋๋ค. ํ์ฌ๋ก์๋ ์ถ๊ฐ ์ต์ ํ๋ฅผ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ๋ก ์ ํํด์ผ ํ์ต๋๋ค.
1. ์์คํ ์ ํด์, ์๋ช ๋ฑ์ ๊ณ์ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ ์ด๋ฅผ ์ํด์๋ '๋ฒํผ'์ ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค.
2. ์๋น์ค ๊ฐ์ ์ ์ก๋ ๋ ์ด์ง ๋ฐ์ดํฐ์ ๋ฌด๊ฒ๋ ํ ์คํธ๋ณด๋ค ๊ฐ๋ณ์ต๋๋ค. ์๋ฅผ ๋ค์ด, 1๋ง ๊ฑด์ ํธ๋์ญ์ ์ด ํฌํจ๋ ๋ธ๋ก์ ๋ณด๋ผ ๋ ํ ์คํธ์ ๋ฐ์ดํฐ๋ 300MB ์ด์์ ์ฐจ์งํ ์ ์์ต๋๋ค.
3. ๋์์์ด ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋๋ผ์ด '๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ' ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ์ก์ ์ํ ์์ฒด ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ์ผ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ป์์ต๋๋ค.
-๊ฑฐ๋
```json
{
prevHash: BD.types.buffer(20),
prevBlock: BD.types.uint24le,
tokenId: BD.types.string(null),
type: BD.types.uint8,
newOwner: BD.types.buffer(20),
dataLength: BD.types.uint24le,
data: BD.types.buffer(({current}) => current.dataLength),
signature: BD.types.buffer(65),
hash: BD.types.buffer(32),
blockNumber: BD.types.uint24le,
timestamp: BD.types.uint48le,
}
```
โ ํ ํฐ
```json
{
id: BD.types.string(null),
owner: BD.types.buffer(20),
block: BD.types.uint24le,
amount: BD.types.string(null),
}
```
-์ฐจ๋จํ๋ค
```json
{
number: BD.types.uint24le,
merkleRootHash: BD.types.buffer(32),
signature: BD.types.buffer(65),
countTx: BD.types.uint24le,
transactions: BD.types.array(Transaction.Protocol, ({current}) => current.countTx),
timestamp: BD.types.uint48le,
}
```
์ผ๋ฐ์ ์ธ ๋ช ๋ น `BD.encode(block, Protocol).slice();` ๋ฐ `BD.decode(buffer, Protocol)`์ ์ฌ์ฉํ์ฌ Redis์ ์ ์ฅํ๊ฑฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ก ์ ๋ฌํ๊ณ ๊ฒ์ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ `Buffer`๋ก ๋ณํํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ค์.
๋ํ ์๋น์ค ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ํ 2๊ฐ์ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ด ์์ต๋๋ค.
โ Unix ์์ผ์ ํตํ ํ๋ผ์ฆ๋ง ๋ ธ๋์์ ์ํธ ์์ฉ์ ์ํ ํ๋กํ ์ฝ
```json
{
type: BD.types.uint8,
messageId: BD.types.uint24le,
error: BD.types.uint8,
length: BD.types.uint24le,
payload: BD.types.buffer(({node}) => node.length)
}
```
์ง์ญ :
- `์ ํ` โ ์ํํ ์์ (์: 1) โ sendTransaction, 2 โ getTransaction;
- 'ํ์ด๋ก๋' โ ์ ์ ํ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ฌ๋์ด์ผ ํ๋ ๋ฐ์ดํฐ
- `๋ฉ์์ง ID` โ ์๋ต์ ์๋ณํ ์ ์๋ ๋ฉ์์ง ID์ ๋๋ค.
โ ๋ ธ๋ ๊ฐ ์ํธ์์ฉ์ ์ํ ํ๋กํ ์ฝ
```json
{
code: BD.types.uint8,
versionProtocol: BD.types.uint24le,
seq: BD.types.uint8,
countChunk: BD.types.uint24le,
chunkNumber: BD.types.uint24le,
length: BD.types.uint24le,
payload: BD.types.buffer(({node}) => node.length)
}
```
์ง์ญ :
- '์ฝ๋' โ ๋ฉ์์ง ์ฝ๋(์: 6) โ PREPARE_NEW_BLOCK, 7 โ BLOCK_VALID, 8 โ BLOCK_COMMIT;
- `๋ฒ์ ํ๋กํ ์ฝ` โ ํ๋กํ ์ฝ ๋ฒ์ . ๋ค๋ฅธ ๋ฒ์ ์ ๋ ธ๋๊ฐ ๋คํธ์ํฌ์์ ์์ฑ๋ ์ ์๊ณ ๋ค๋ฅด๊ฒ ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- `์ํ์ค` - ๋ฉ์์ง ์๋ณ์
- `countChunk` ะธ `์ฒญํฌ๋ฒํธ` ๋์ฉ๋ ๋ฉ์์ง๋ฅผ ๋ถํ ํ๋ ๋ฐ ํ์ํฉ๋๋ค.
- '๊ธธ์ด' ะธ 'ํ์ด๋ก๋' ๊ธธ์ด์ ๋ฐ์ดํฐ ์์ฒด.
๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ๋ ฅํ๊ธฐ ๋๋ฌธ์ ์ต์ข ์์คํ ์ Ethereum์ 'rlp' ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค. ๋ถํํ๊ฒ๋ ์ฐ๋ฆฌ๋ ์์ผ๋ก ํ ๊ณํ์ธ ์ค๋งํธ ๊ณ์ฝ์ ๋ง๋ฌด๋ฆฌํ๋ ๊ฒ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์์ง ์ด๋ฅผ ๊ฑฐ๋ถํ ์ ์์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๋์ ๋๋ฌํ๋ค๋ฉด 35 000 ์ด๋น ํธ๋์ญ์ ์ ์ต์ ์ ์๊ฐ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋๋ต์ ์ธ ๋ธ๋ก ํ์ฑ ์๊ฐ์ 30์ด ์ ๋ ์์๋๋ฏ๋ก ๋ธ๋ก์ ํฌํจ์์ผ์ผ ํฉ๋๋ค. + 1 000 000 ๊ฑฐ๋๋ ๋ ๋ง์ด ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. 100 MB์ ๋ฐ์ดํฐ.
์ฒ์์๋ `ethereumjs-devp2p` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋ ๊ฐ ํต์ ์ ํ์ง๋ง ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ `ws` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์น์์ผ์ ํตํด ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค. ๋ฌผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ ํจํท์ ๋ณด๋ผ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด์ ์ง๊ธ์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ก์ต๋๋ค.
๋ํ Merkle ํธ๋ฆฌ๋ฅผ ํ์ฑํ๊ณ ํด์๋ฅผ ๊ณ์ฐํฉ๋๋ค. + 1 000 000 ๊ฑฐ๋์ ํ์ํ ์ฌํญ 10 ์ด ์ฐ์ ๊ณ์ฐ. ์ด ์๊ฐ ๋์ ๋ชจ๋ ๋ ธ๋์์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค. ์ด ๊ณ์ฐ์ ๋ณ๋์ ์ค๋ ๋๋ก ์ฎ๊ธฐ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ฒฐ๋ก :
์ฌ์ค, ์ฐ๋ฆฌ์ ์ฐ๊ตฌ ๊ฒฐ๊ณผ๋ ์๋ก์ด ๊ฒ์ด ์๋์ง๋ง, ์ด๋ค ์ด์ ์์์ธ์ง ๋ง์ ์ ๋ฌธ๊ฐ๋ค์ ๊ฐ๋ฐํ ๋ ์ด๋ฅผ ์์ด๋ฒ๋ฆฝ๋๋ค.
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ฉด ์์ฐ์ฑ์ด ํฅ์๋ฉ๋๋ค.
- ๋ชจ๋๋ฆฌ์ค๋ ์์ฐ์ ์ธ NodeJS ์์คํ ์ ์๋น์ค ์ํคํ ์ฒ๋ณด๋ค ๋์ฉ๋๋ค.
- ๊ณผ๋ํ ๊ณ์ฐ์ `worker_threads`๋ฅผ ์ฌ์ฉํ๋ฉด ํนํ i/o ์์ ์ ์ฒ๋ฆฌํ ๋ ์์คํ ์๋ต์ฑ์ด ํฅ์๋ฉ๋๋ค.
- ์ ๋์ค ์์ผ์ http ์์ฒญ๋ณด๋ค ๋ ์์ ์ ์ด๊ณ ๋น ๋ฆ ๋๋ค.
- ๋คํธ์ํฌ๋ฅผ ํตํด ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ ์ ์กํด์ผ ํ๋ ๊ฒฝ์ฐ ์น์์ผ์ ์ฌ์ฉํ์ฌ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ๋ก ๋๋์ด ์ ์กํ๊ณ , ๋์ฐฉํ์ง ์์ผ๋ฉด ์ ๋ฌํ ์ ์๋ ๋ค์ ํ๋์ ๋ฉ์์ง๋ก ๊ฒฐํฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋น์ ์ ๋ฐฉ๋ฌธํ๋๋ก ์ด๋ํฉ๋๋ค GitHub์ ํ๋ก์ ํธ:
ํด๋น ๊ธฐ์ฌ๋ ๊ณต๋ ์งํ๋์์ต๋๋ค. ์๋ ์ฐ๋ ๋์๋ฐ, ์์ ๊ฐ๋ฐ์
์ถ์ฒ : habr.com