10. Coinstack Permission
๋นํธ์ฝ์ธ์ ๊ณต๊ฐ๋ ํ๊ฒฝ์ ์งํฅํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ตฌ๋ ํธ๋์ญ์ ์ ์ ์ก ํ ์ ์๊ณ ํ๋ ธ๋๋ฅผ ์ด์ํ๊ฑฐ๋ ๋ง์ด๋์ ์๋ํ ์ ์์ต๋๋ค. ํ์ง๋ง, ๊ธฐ์ ์ ํ๋ผ์ด๋น ๋คํธ์ํฌ ๋ฑ ๋น๊ณต๊ฐ ํ๊ฒฝ์์ ์ฌ์ฉํ ๋์๋ ์ ํ๋ ๊ถํ์ ํน์ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์๊ตฌ์ ๋ฐ๋ผ ์ฝ์ธ์คํ์์๋ ํน์ ๋นํธ์ฝ์ธ ์ฃผ์์ ์ญํ ์ ๋ถ์ฌํ์ฌ ๊ถํ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
1. ์ฌ์ ์๊ตฌ ์ฌํญ
์๋์ ๊ฐ์ ์ค์ ์ ์ฌ์ฉํ๋ ํ๋ผ์ด๋น ์ฝ์ธ์คํ์ ๊ฒฝ์ฐ์๋ง ๊ถํ ์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ์ธ์คํ ์๋ฒ์ ์์ธ ์ค์ ์ ๋ณด๋ ์ฝ์ธ์คํ ์ค์น ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
privnet=1: ํ๋ผ์ด๋น ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ํ๋ผ์ด๋น ๋คํธ์ํฌ์ธ ๊ฒฝ์ฐ์๋ง ์ญํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
privnetgenesis={serialized genesis block}: ์ฐธ์ฌํ๋ ค๋ ๋คํธ์ํฌ์ ์ง๋ ฌํ๋ ์ ๋ค์์ค ๋ธ๋ก(๋ธ๋ก ๋์ด๊ฐ 0์ธ ์ ์ผ ์ฒ์ ๋ธ๋ก)์ ๊ธฐ์ฌํฉ๋๋ค. ๋ณ๋๋ก ์ ๊ณตํ๋ gengenesis๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ต์ด์ admin์ผ๋ก ์ฌ์ฉํ ์ฃผ์์ ๊ฐ์ธํค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ค์์ค ๋ธ๋ก์ ์์ฑํ ์ ์์ต๋๋ค.
privnetnodekey={privatekeyWIF}: ๋ ธ๋์ ๋ถ์ฌํ ๊ฐ์ธํค๋ก ๋ ธ๋์ ๊ณ ์ ํ ID๋ฅผ ๋ถ์ฌํฉ๋๋ค. ๊ฐ ๋ ธ๋๋ง๋ค ๋ค๋ฅด๊ฒ ์ค์ ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
2. ๊ฐ์
ํ๋ผ์ด๋น ์ฝ์ธ์คํ์์๋ ํ๋์ ๋นํธ์ฝ์ธ ์ฃผ์์ ์ด 4๊ฐ์ง์ ์ญํ ์ ๋ถ์ฌ ํ ์ ์์ต๋๋ค. ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ฒด๊ฐ ์ฌ์ฉ์๋ ์ดํ๋ฆฌ์ผ์ด์
์ผ ๊ฒฝ์ฐ Admin๊ณผ Writer ์ญํ ์ ๋ถ์ฌํ์ฌ ๊ฐ๊ฐ ๊ณ์ ๊ด๋ฆฌ์ ํธ๋์ญ์
์ ์ฐ๊ธฐ ๊ถํ์ ์ค ์ ์์ต๋๋ค. ์ญํ ๋ณ ์์ธ ์ค๋ช
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Admin (Authority Manager): ์ญํ ์ ์ค์ /๊ด๋ฆฌํฉ๋๋ค. Admin์ ์ ์ธํ ๋ค๋ฅธ ๋ชจ๋ ์ญํ (Writer, Miner, Node)์ ํ์ฑํ/๋นํ์ฑํ ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ญํ ์ ๊ถํ๋ ๊ฐ์ง๋๋ค. ์ฆ, ํธ๋์ญ์ ์ ์ฐ๊ณ ๋ธ๋ก์ ์์ฑํ๊ณ ํ๋ผ์ด๋น ๋คํธ์ํฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
Writer (Transaction Writer): ํธ๋์ญ์ ์์ฑ ๋ฐ ์ ์กํ ์ ์์ต๋๋ค. ์ด ์ญํ ์ด ํ์ฑํ ๋์ด ์๋ ๊ฒฝ์ฐ์ ํธ๋์ญ์ ์ฐ๊ธฐ ์ญํ ์ด ์๋ ์ฃผ์์ ๊ฐ์ธํค๋ก ์๋ช ํ์ฌ ์ ์กํ ํธ๋์ญ์ ์ ์ฝ์ธ์คํ ๋ ธ๋์์ ์์ฉํ์ง ์์ต๋๋ค.
์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ฒด๊ฐ ๋
ธ๋์ธ ๊ฒฝ์ฐ Miner์ Node ์ญํ ์ ๋ถ์ฌํ์ฌ ๋
ธ๋์ ๊ถํ์ ์ ํํ ์ ์์ต๋๋ค. (์ฌ๊ธฐ์์ ์ฃผ์๋ ๋
ธ๋์ ์ค์ ํ์ผ์ privnetnodekey์ ๊ธฐ์ฌ๋์ด ์๋ ๊ฐ์ธํค์ ๋์ํ๋ ์ฃผ์๋ฅผ ์ง์นญํฉ๋๋ค.)
Miner (Block Miner): ๋ธ๋ก์ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์ญํ ์ด ํ์ฑํ ๋์ด ์๋ ๊ฒฝ์ฐ์ Miner ์ญํ ์ด ์๋ ๋ ธ๋๊ฐ ๋ง์ด๋ํ ๋ธ๋ก์ ๋ค๋ฅธ ์ฝ์ธ์คํ ๋ ธ๋๋ค์ด ์์ฉํ์ง ์์ต๋๋ค.
Node (Network Participant): ์ด ์ญํ ์ด ์๋ ๋ ธ๋๋ง ํ๋ผ์ด๋น ๋คํธ์ํฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค. ์ด ์ญํ ์ด ํ์ฑํ ๋์ด ์๋ ๊ฒฝ์ฐ์ Node ์ญํ ์ด ์๋ ๋ ธ๋๋ ์ฝ์ธ์คํ ๋ ธ๋์ ์ ์ ๋ฐ ๋๊ธฐํ๋ฅผ ํ ์ ์์ต๋๋ค.
์ญํ ์ ๋ถ์ฌํ๋ ๋ณด์์ ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ์ญํ ๋ณ๋ก ์ฃผ์๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํ์ฌ ํ๋์ ์ฃผ์์ ํ๋์ ์ญํ ๋ง ๋ถ์ฌํ๋ ๊ฒ์ด์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฃผ์ ํ๋์ ์ฌ๋ฌ๊ฐ์ ์ญํ ์ ๋ถ์ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด Node์ Miner ๊ถํ์ด ํ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ, ์ฃผ์ ํ๋์ Node ์ Miner ์ญํ ์ ๋์์ ๋ถ์ฌํด์ ์ฌ์ฉํด์ผ ํด๋น ๋ ธ๋๋ ํ๋ผ์ด๋น ๋คํธ์ํฌ์ ์ ์ํด์ฌ ์์ ์ด ์์ฑํ ๋ธ๋ก์ ์ ํํ ์ ์์ต๋๋ค. ๋ํ Admin ์ญํ ์ ๊ฐ์ง๋ ์ฃผ์๋ ํ๊ฒฝ ์ค์ ์ ํธ์์ฑ์ ์ํด ๋ชจ๋ ๊ถํ์ ๊ฐ์ง๋๋ค.
์ฐธ๊ณ ๋ก ์์ ์ค๋ช
ํ ์ค๋งํธ ์ปจํธ๋ํธ์์์ grant, revoke๋ฅผ ์ฌ์ฉํ ํจ์ ์ํ ๊ถํ๊ด๋ฆฌ๋ Admin์ด ์๋ ์ค๋งํธ ์ปจํธ๋ํธ๋ฅผ ์ ์ํ ์ฃผ์์ ์์ ์๊ฐ ์ค์ ๊ฐ๋ฅํจ์ผ๋ก ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
3. ์ญํ ํ์ฑํ / ๋นํ์ฑํ
๊ฐ์ฅ ์ฒ์ ์ฝ์ธ์คํ์ ๊ตฌ๋ํ์ฌ ์ ๋ค์์ค ๋ธ๋ก๋ง ์กด์ฌํ ๋๋ ์์ ์ญํ ๋ค ์ค Admin ์ญํ ๋ง ํ์ฑํ ๋์ด ์๊ณ ํ๋์ Admin ์ฃผ์๋ง ์กด์ฌํฉ๋๋ค. ์ฆ, ๋๋จธ์ง ์ญํ ๋ค(Writer, Miner, Node)์ ๋นํ์ฑํ๋์ด ์์ต๋๋ค. ์ด๋ ์ด๊ธฐ ํ๊ฒฝ ๊ตฌ์ฑ ์์ ํธ์์ฑ๊ณผ ํ์ํ ๊ธฐ๋ฅ๋ง ์ ํ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค.
3.1. ์ญํ ํ์ฑํ ํธ๋์ญ์
์์ฑ
์ญํ ์ ํ์ฑํ/๋นํ์ฑํ ํ๊ธฐ์ํด์๋ Admin ๊ถํ์ ๊ฐ์ง ๊ฐ์ธํค๋ก SDK์์ ์ ๊ณตํ๋ ์ญํ ํ์ฑํ์ฉ ํธ๋์ญ์ ๋น๋(EnableRoleBuilder)๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ ์์ฑ, ๋คํธ์ํฌ์ ์ ํํ๋ฉด ๋ฉ๋๋ค. ๋ค์์ ์์ ๋ java SDK๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ผ์ด๋น ๋คํธ์ํฌ์ Miner, Node ์ญํ ์ ํ์ฑํ, Writer๋ ๋นํ์ฑํ ์ํค๋ ์์ ์ ๋๋ค. ์ฐธ๊ณ ๋ก Admin ์ญํ ์ ํญ์ ํ์ฑํ ๋์ด ์์ต๋๋ค.
JAVA
์ผ๋ฐ์ ์ธ ํธ๋์ญ์ ๊ณผ๋ ๋ฌ๋ฆฐ ์ญํ ๊ด๋ฆฌ์ ์ฐ๊ด๋ ํธ๋์ญ์ ๋ค์ ํด๋น ํธ๋์ญ์ ์ด ๋ธ๋ก์ ํฌํจ ๋ ํ ์ ์ฉ๋ฉ๋๋ค. ๋ํ Admin ๊ถํ์ด ์๋ ๊ฐ์ธํค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฑ ์ญํ ์ค์ ํธ๋์ญ์ ์ ๋ฌธ์ ๊ฐ ์์ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ด ๋ธ๋ก์ ํฌํจ๋ฌ๋๋ผ๋ ์ค์ ์ด ๋ณ๊ฒฝ๋์ง ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง๊ฐ ์๋ฒ์ ๋ก๊ทธ์ ๊ธฐ๋ก๋ฉ๋๋ค.
3.2. ํ์ฑ๋ ์ญํ ์กฐํ
ํ์ฌ ํ์ฑํ ๋์ด ์๋ ์ญํ ๋ค์ ํ์ธํด ๋ณด๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์กฐํํฉ๋๋ค.
JAVA
์์ ์ญํ ํ์ฑํ ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์ํ๋ ๊ฒฝ์ฐ, ์ํ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
REST API
๊ฒฐ๊ณผ ๊ฐ์ JSON ํ์์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
REST API๋ก ์กฐํํ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ 4๊ฐ์ bit๋ก ํํ๋ฉ๋๋ค. 1(0001)์ Admin, 2(0010)๋ Writer, 4(0100)๋ Miner, 8(1000)์ Node ๊ถํ์ ์๋ฏธํฉ๋๋ค. bit์ ์กฐํฉ์ผ๋ก ์ฌ๋ฌ๊ถํ์ ์๋ฏธํ ์๋ ์๋๋ฐ ์๋ฅผ๋ค๋ฉด 12(1100)์ Miner์ Node์ ๊ถํ์ด ํ์ฑํ ๋์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค. ๋จ, Admin์ ํญ์ ํ์ฑํ ๋์ด ์๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ํ๊ธฐ๋ฉ๋๋ค.
4. ์ญํ ์ค์
SDK๋ฅผ ์ด์ฉํ์ฌ ํน์ ์ฃผ์์ ์ญํ ์ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
4.1. ์ญํ ์ค์ ํธ๋์ญ์
์์ฑ
ํน์ ์ฃผ์์ ์ญํ ์ ์ค์ ํ ๋๋ ์ญํ ์ ์ค์ ํ๋ ๋ง์ปค๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ ํธ๋์ญ์ ์ ์ด์ฉํฉ๋๋ค. ์ฝ์ธ์คํ SDK์์๋ ์ด๋ฅผ ์ฝ๊ฒ ์ง์ํ๊ธฐ ์ํ ์ญํ ์ค์ ํธ๋์ญ์ ๋น๋(SetRoleBuilder)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋๋ SDK๋ฅผ ์ด์ฉํด ํน์ ์ฃผ์์ Miner, Node ์ญํ ์ ๋ถ์ฌํ๊ณ Admin, Writer ์ญํ ์ ์ ๊ฑฐํ๋ ์์ ๋๋ค.
JAVA
๋จผ์ Role ํด๋์ค ์์ฑ์์ ๋ถ์ฌํ ์ญํ ์ ํ ๋นํฉ๋๋ค. ์ฌ๋ฌ๊ฐ์ ์ญํ ์ ๋ถ์ฌํ๋ ค๋ฉด OR ์ฐ์ฐ์๋ก ์ฌ๋ฌ ์ญํ ์ ์กฐํฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ SetRoleBuilder์ Role๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ ํด๋น Role์ ๋ถ์ฌํ ๋์ ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๊ทธ ํ Admin ์ญํ ์ ๊ฐ์ง ๊ฐ์ธํค๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ ์์ฑํ์ฌ ์ ์กํฉ๋๋ค. ํด๋น ์ญํ ์ ํธ๋์ญ์ ์ด ๋ธ๋ก์ ํฌํจ๋ ๋ค ๋ชจ๋ ๋ ธ๋์ ๋ฐ์๋ฉ๋๋ค.
Admin์ ๋ค๋ฅธ ์ฃผ์์ Admin ๊ถํ์ ๋ถ์ฌ/๋ฐํ ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์ง์ด ์๊ธฐ ์์ ์ ๊ถํ๋ ์์ ์ ์์ต๋๋ค. ๊ถํ ๋ถ์ฌ๋ Set ํ์์ผ๋ก ๊ธฐ์กด์ ๊ถํ์ ์ถ๊ฐ๊ฐ ์๋ ๋ฎ์ด์ฐ๋ ํํ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด์ Admin์ new Role(Role.WRITER) ๊ฐ์ด ์ญํ ์ ํ ๋นํ๋ฉด Admin ๊ถํ์ด ์ฌ๋ผ์ง๊ณ Writer ๊ถํ๋ง ๋จ๊ฒ ๋ฉ๋๋ค.
ํน์ ์ญํ ์ด ๋นํ์ฑํ ๋์ด ์์ด๋ ํน์ ์ฃผ์์ ํด๋น ์ญํ ์ ๋ฏธ๋ฆฌ ๋ถ์ฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด Node ์ญํ ์ด ๋นํ์ฑํ ๋์ด ์์ด๋ ๋ ธ๋๋ค์ ์ฃผ์์ ๋ฏธ๋ฆฌ Node ์ญํ ์ ๋ถ์ฌํ ์ ์์ต๋๋ค. Node ์ญํ ์ ๋ฏธ๋ฆฌ ๋ ธ๋๋ค์ ๋ถ์ฌํ์ง ์๊ณ Node ์ญํ ์ ํ์ฑํ ์ํฌ ๊ฒฝ์ฐ ์๋ก๊ฐ์ Node ๊ถํ์ด ์๋ค๊ณ ์๊ฐํ๊ณ ๋ ธ๋๋ค์ด ์๋ก ์ฐ๊ฒฐ์ ๋์ด ๋ธ๋ก์ด ์ ํ๊ฐ ์๋๋ฏ๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. Miner์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฏธ๋ฆฌ ์ญํ ์ ๋ถ์ฌํ๊ณ ํด๋น ๊ธฐ๋ฅ์ ํ์ฑํ ์์ผ์ผ ๋ง์ด๋๊ฐ ๊ถํ ์์ฑ ํธ๋์ญ์ ์ ๋ธ๋ก์ ํฌํจ, ์ ํ ์ํฌ ์ ์์ต๋๋ค.
4.2. ํน์ ์ฃผ์์ ์ญํ ์กฐํ
ํน์ ์ฃผ์์ ๋ถ์ฌ๋ ์ญํ ์ ์กฐํํ ๋๋ CoinStackClient์ getRole ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋๋ ๊ถํ ์กฐํฌ ์์ ๋๋ค.
JAVA
์์ ์ญํ ์ค์ ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์ํ๋ ๊ฒฝ์ฐ, ์ํ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
REST API
๊ฒฐ๊ณผ ๊ฐ์ JSON ํ์์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
permission ์ด๋ผ๋ ํค์ ์กฐํ๋ฅผ ์์ฒญํ ์ฃผ์์ ์ญํ ๊ฐ์ด ํ ๋น๋์ด ๋ฐํ๋ฉ๋๋ค.
4.3. ์ญํ ์ด ์ค์ ๋ ์ ์ฒด ์ฃผ์ ์กฐํ
ํ์ฌ ์ญํ ์ด ์ ์๋ ๋ชจ๋ ์ฃผ์์ ๊ฐ ์ฃผ์์ ์ญํ ์ ์กฐํํด ๋ณด๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์กฐํํด ๋ณผ ์ ์์ต๋๋ค.
JAVA
์ํ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
REST API
๊ฒฐ๊ณผ ๊ฐ์ JSON ํ์์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
ํ์ฌ ๋คํธ์ํฌ์ ๋ฑ๋ก๋์ด ์๋ ์ ์ฒด ์ญํ ์ ๋ชฉ๋ก์ด ์ฃผ์๋ฅผ ํค๋ก, ์ญํ ์ ๊ฐ์ผ๋ก ํ์ฌ ๋ฐํ๋ฉ๋๋ค.
Last updated