๋น ๋ฅด๊ณ ํธ๋ฆฌํ Explorer, ์ฝ๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ Wallet์ด ์ง๊ธ ๋ค๊ฐ์ค ๋ค์ค!!
โBithumb Dagao Neoโ ๋ Neo Private Node๋ฅผ ํ์ฉํ Exlorer, Wallet ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋๋ค. ๋น์ธ์ด ๋ค๊ฐ์ค๋ค์ค Explorer๋ ํ๋ผ์ด๋น ๋ ธ๋์ ๋ํ ํธ๋์ญ์ , ๋ธ๋ก, ๊ณ์ ๋ค์ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ํ์ธ ๊ฐ๋ฅํ๋ฉฐ, ๊ฒ์์ฐฝ์ ์ด์ฉํ ๊ฒ์๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Wallet์ ๋๋ชจ๋ ์ฝ๋๋ฅผ ํ์ฉํ ๊ณ์ ๋ณต๊ตฌ๋ฅผ ์ง์ํ๋ฉฐ, NEP17 ํ ํฐ์ธ ๋ค์ค, ๊ฐ์ค์ ์ ์ก๊ณผ ๋ฉํฐ์๊ทธ ๊ณ์ ์ ์์ฑ ๋ฐ ์ก๊ธ์ ์ง์ํ๊ณ ๋์ค์ฝ๋ ์ฑ๋๋ก์ ์๋ฆผ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ ธ๋ ๋ฐ API: Docker, Mongo DB, Python
Wallet : MUI, NeonJs, CSS, React, Crypto, Ethers, Chrome Extension, Axios
Explorer : Axios, AntDesign, React, NeonJs, NodeJs
- clone this repository
https://github.com/codestates/BTAFinalProject-01.git
- change directory
Explorer
cd BTAFinalProject-01/Explorer/client
Wallet
cd BTAFinalProject-01/Wallet
- install dependencies
npm install
npm run build
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ > ์๋จ ์ฐ์ธก ํฌ๋กฌ ํ์ฅํ๋ก๊ทธ๋จ ๊ด๋ฆฌ > ์๋จ ์ข์ธก "์์ถํด์ ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ก๋ํฉ๋๋ค" ํด๋ฆญ > Wallet์ build ํด๋ ์ ๋ก๋ ํฌ๋กฌ ์๋จ ์ฐ์ธก ํฌ๋กฌ ํ์ฅํ๋ก๊ทธ๋จ์์ Neo Wallet ํด๋ฆญ
npm run start
(https://github.com/codestates/BTAFinalProject-01/tree/main/Node)
(https://github.com/codestates/BTAFinalProject-01/tree/main/Daemon)
์ค๋งํธ ์ด์ฝ๋ ธ๋ฏธ๋ฅผ ์ํ ๋ถ์ฐ ๋คํธ์ํฌ
๋ชฉํ : Neo๋ ๋ธ๋ก์ฒด์ธ ๊ธฐ์ ๊ณผ ๋์งํธ ID๋ฅผ ์ฌ์ฉํ์ฌ ์์ฐ์ ๋์งํธํํ๊ณ , ๋์งํธ ์์ฐ์ ๋ํ ์ค๋งํธ ๊ณ์ฝ์ ์ฌ์ฉํ์ฌ ์์ฒด ๊ด๋ฆฌํ๊ณ , ๋ถ์ฐ ๋คํธ์ํฌ๋ฅผ ํตํด "์ค๋งํธ ๊ฒฝ์ "๋ฅผ ๋ฌ์ฑ
โ ย ํฉ์ ๋ฉ์ปค๋์ฆ : dBFT
์์๋ ๋น์ํด ์ฅ์ ํ์ฉ(Delegated Byzantine Fault Tolerant)๋ ๋๋ฆฌ ํฌํ๋ฅผ ํตํด ๋๊ท๋ชจ ํฉ์ ์ฐธ์ฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋น์ํด ์ฅ์ ํ์ฉ ํฉ์ ๋ฉ์ปค๋์ฆ.ย
NEO ํ ํฐ ๋ณด์ ์๋ ํฌํ๋ฅผ ํตํด ์ง์งํ๋ ํฉ์ ๋ ธ๋๋ฅผ ์ ํํ ์ ์์.ย ์ ํ๋ ํฉ์ ๋ ธ๋ ๊ทธ๋ฃน์ BFT ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํฉ์์ ๋๋ฌํ๊ณ ์๋ก์ด ๋ธ๋ก์ ์์ฑ.ย ํฌํ๋ ์ ํด์ง ๊ธฐ๊ฐ์ด ์๋ ์ค์๊ฐ์ผ๋ก ์งํ.
dBFT๋ n๊ฐ์ ํฉ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํฉ์ ์์คํ ์ ๋ํด f = โ(n-1) / 3 โ์ ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณต.ย ์ด ๋ด๊ฒฐํจ์ฑ์๋ ๋ณด์๊ณผ ๊ฐ์ฉ์ฑ์ด ๋ชจ๋ ํฌํจ๋๋ฉฐ ์ผ๋ฐ ๋ฐ ๋น์ํด ์ฅ์ ์ ๋ํ ๋ด์ฑ์ด ์์ผ๋ฉฐ ๋ชจ๋ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ ํฉ.ย dBFT๋ ์ต์ข ํ์ธ์ด ์๋ฃ๋๋ฉด ๋ธ๋ก์ ๋ถ๊ธฐํ ์ ์์ผ๋ฉฐ ํธ๋์ญ์ ์ด ์ทจ์๋๊ฑฐ๋ ๋กค๋ฐฑ๋์ง ์์.
๋ธ๋ก ์์ฑ์๋ ์ฝ 15~20์ด๊ฐ ์์๋๋ฉฐ ํธ๋์ญ์ ์ฒ๋ฆฌ๋์ ์ต๋ ์ฝ 1,000TPS๊น์ง ์ธก์ ๋๋ฉฐ, ์ด๋ ํผ๋ธ๋ฆญ ์ฒด์ธ ์ค ์ฐ์ํ ์ฑ๋ฅ.ย ์ ์ ํ ์ต์ ํ๋ฅผ ํตํด 10,000TPS์ ๋๋ฌํ ๊ฐ๋ฅ์ฑ ์์.
dBFT๋ ๋์งํธ ์ ์ ๊ธฐ์ ์ ๊ฒฐํฉํ์ฌ ํฉ์ ๋ ธ๋๊ฐ ๊ฐ์ธ ๋๋ ๊ธฐ๊ด์ ์ค๋ช ์ด ๋ ์ ์์์ ์๋ฏธ.ย ๋ฐ๋ผ์ ๋ฒ์์ ๊ฒฐ์ ์ ๋ฐ๋ผ ๋๊ฒฐ, ์ทจ์, ์์, ํ์ ๋ฐ ์์ ๊ถ ์ด์ ์ด ๊ฐ๋ฅ.ย ์ด๋ฅผ ํตํด Neo ๋คํธ์ํฌ์ ๊ท์ ์ค์ ๊ธ์ต ์์ฐ์ ์ฝ๊ฒ ๋ฑ๋กํ ์ ์์.
+ย ๋ ธ๋๋ฅผ ์ด์ํ๋ย ๋ถํคํผ(Book Keeper)์ 60% ์ด์์ด ๋์ํ ๊ฒฝ์ฐ์๋ง ํฉ์๊ฐ ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ด๋ค. ์ด๋ฅผ ์ํด ๋จผ์ ๋ค์ค ์ฝ์ธ ์ฌ์ฉ์๋ค์ ํฌํ๋ฅผ ํตํด์ ๋ํ์์ธ ๋ถํคํผ๋ฅผ ์ ์ถํ๋ค. ์์ ํ๋ํฐ์ปฌ ๋น์ํด ์ฅ์ ํ์ฉ(dPBFT) ๋ฐฉ์์ ํตํด ์ ์ถ๋ ๋ถํคํผ๋ค์ย ๋ธ๋ก์ ๊ฒ์ฆํ ๋๋ง๋คย ๋๋ค์ผ๋ก ๊ทธ ์ค์์ ๋ค์ ๋ธ๋ก ์์ฑ์(BP)๋ค์ด ๊ฒฐ์ ๋๊ณ , ์ด ์ค 3๋ถ์ 2 ์ด์์ ๋ถํคํผ๋ค์ด ๊ฒ์ฆ์ ๋์ํ์ฌ ํฉ์๊ฐ ์ด๋ฃจ์ด์ง๋ฉด, ์๋ก์ด ๋ธ๋ก์ด ์์ฑ๋๋ค.
๋ค์ค๋ 2015๋ ์ถ์๋ ์ค๊ตญ ์ต์ด์ ๋ธ๋ก์ฒด์ธ์ผ๋ก, ๋ ์์ ์ธ ์ค๋งํธ ์ปจํธ๋ํธ ๊ธฐ์ ์ธ ๋ค์ค ์ปจํธ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ตญ์ ์ด๋๋ฆฌ์์ด๋ผ ๋ถ๋ฆด๋งํผ ์ด๋๋ฆฌ์๊ณผ ๋น์ทํ ๊ฐ๋ฅ(SC, Dapp๋ฑ)์ ์ ๊ณตํฉ๋๋ค. ํฅํ ์ค๊ตญ์ ์ํธํํ์ ๋ํ ๊ท์ ๊ฐ ํ๋ฆฌ๊ฒ๋๋ฉด ๋์ฑ ๊ฐ๊ด๋ฐ์ ์ํธํํ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ, ์ด๋๋ฆฌ์ ์ฒ๋ผ ๊ฐ์ ๋จธ์ (VM)์์ ์คํ๋์ง๋ง ๊ฐ๋ฐ์๋ค์ด ์ฝ๊ฒ ๊ฐ๋ฐ ํ๊ธฐ ์ํด ๋ ์์ ์ธ VM์ ํตํด C, Java, Go, Python, JS๋ฑ ๋ค์ํ ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ค์ํ ๊ฐ๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฐ๋ฆฌ ํ์ด ๊ฐ๋ฐ์ ์งํํ๊ธฐ์ ์ธ์ด ์ ํ์ ํญ์ด ๋์ ๊ฒ์ด๋ผ ์๊ฐํ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก Neo์์๋ ๊ณ์ ์ ์ข ๋ฅ๋ก normal ๋ฟ์๋๋ผ ๋ค์ค์๋ช ๊ณ์ (multisig) ๋ํ ์ ๊ณตํ์ฌ ์ด๋ก ์ผ๋ก๋ง ์ ํ๋ multisig account๋ฅผ ํตํ ํธ๋์ญ์ ์์ฑ ๋ฐ ์๋ช , ์ ์ก๋ฑ์ enhancement ๊ธฐ๋ฅ์ ์ ํฌ ํ๋ก์ ํธ์ ๋ น์ฌ๋ผ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํ์ฌ ์ ํ ํ๊ฒ ๋์์ต๋๋ค.
ํ๋ช : (๋น)์ธ ํ๊ณ ์ถ๋ค.
๊ฐ๋ฐ ํ๋ก์ ํธ๋ช : ๋น์ธ์ด ๋ค๊ฐ์ค๋ค์ค (bithumb Dagao Neo)
๋น์ธ์ด ๋ค๊ฐ์ค๋ค์ค(bithumb Dagao Neo) ํ๋ก์ ํธ๋ ๋ค์ค(NEO) ๋ธ๋ก์ฒด์ธ์ ๋ํ 1.ํ๋ผ์ด๋น ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ๊ณ ์ด ๋คํธ์ํฌ ์์ 2.Block, Tx, Acccount ๊ธฐ๋ก์ ํ์ ํ ์ ์๋ ์น๊ธฐ๋ฐ ์ต์คํ๋ก์ด, 3. normal, multisig ๊ณ์ ์ ์์ฑํ๊ณ ํ๋ผ์ด๋น ๋คํธ์ํฌ์ ํธ๋์ญ์ ์ ์ ์กํ ์ ์๋ ํฌ๋กฌ ์ต์คํ ์ ๊ธฐ๋ฐ์ ์ง๊ฐ์ ์ ๊ณต ํฉ๋๋ค.
-
๋ ธ๋, Daemon, API
Docker, Mongo DB, Python
-
Wallet
MUI, NeonJs, CSS, React, Crypto, Ethers, Chrome Extension, Axios
-
Explorer
Axios, AntDesign, React, NeonJs, NodeJs
[ ์ง๊ฐ ]
- ์ง๊ฐ ์์ฑ
- ๋ก๊ทธ์ธ
- ํ ํฐ ์ ์ก
- MultiSig Account ์์ฑ
- MultiSig Account๋ฅผ ํตํ ํธ๋์ญ์ ์์ฑ, ์๋ช , ์ ์ก ๋ฐ ๋์ค์ฝ๋ ๋ฉ์์ง ์ ์ก
[ ์ต์คํ๋ก์ด ]
- ํ์ฌ ๋ ธ๋์ ์ํ๋ฅผ ํตํฉํ์ฌ ๋ณด์ฌ์ฃผ๋ Overview
- ํธ๋์ญ์ ์กฐํ
- ๋ธ๋ก ์กฐํ
- Address ์กฐํ (์๊ณ , NEP17 ํ ํฐ ๊ฑฐ๋ ๋ด์ญ ๋ฆฌ์คํธ ์กฐํ)
- ๊ฒ์์ฐฝ์์ Tx, Block number, Addres ๊ฒ์ ๊ธฐ๋ฅ
[ ๋ ธ๋ ]
- ๋ธ๋ก ์์ฑ์ฉ(1Consensus) + ๋ธ๋ก ๊ฒ์ฆ์ฉ (2 Client) (dBFT) ๊ตฌ์ฑ
- RPC ํธ์ถ, DB๋๊ธฐํ
- Rest API ์ ๊ณต
- [Wallet] ํฌ๋กฌ ์ต์คํ ์ ๊ฐ๋ฐ , ์ค์ ์ ํ๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ
- [Wallet] ๋๋ชจ๋ ์ฝ๋๋ก ๊ณ์ ๋ณต๊ตฌ
- [Wallet] MultiSig Account ์์ฑ, Tx์์ฑ, ์๋ช , ์ ์ก๊ณผ ๋์ค์ฝ๋ ๋ฉ์์ง ์ ์ก ๊ธฐ๋ฅ
- [Explorer] Tx, Block number, address๋ก ๊ฒ์ํ ์ ์๋ Search Box
- [Explorer] Restfull API๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅธ ๋ฐ์์ฑ
๋น์ธ์ด ๋ค๊ฐ์ค๋ค์ค
์ง๊ฐ์ ํ๋ผ์ด๋น ๋
ธ๋์ ๋ํ ์ง๊ฐ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ ํฌ๋กฌ ์ต์คํ
์
๊ธฐ๋ฐ ์ํํธ์จ์ด ์ง๊ฐ์
๋๋ค. ์ด ์ง๊ฐ์ ์ค์ ์๋ฒ์ ํต์ ์์ด ์ฌ์ฉ์ ์ง๊ฐ ์ ๋ณด๋ฅผ ๋ก์ปฌ์์ ๊ด๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์ด ์ค์ํ๋ ์๋ฒ์ ๋ํ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ์์ ๋กญ๊ณ , ๋ค์ค ์๋ช
๊ณ์ ์ ์ง์ํ๋ฉฐ ๋ค์ค ์๋ช
๊ณ์ ์ ๋ํ ๋ชจ๋ ๋์์ ๋์ค์ฝ๋ ๋ฉ์์ง๋ก ๋ค๋ฅธ ์์ ์๋ค๊ณผ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ๋ณด์
์ง๊ฐ ์์ฑ์ ๋๋ชจ๋ ๊ตฌ๋ฌธ์ด ๋ฐ๊ธ๋๊ณ ํด๋น ๋๋ชจ๋ ๊ตฌ๋ฌธ์ผ๋ก ์ง๊ฐ์ ๋ณต๊ตฌ ํ ์ ์์ต๋๋ค. Neo์ ๊ณ์ ์ ๋ํ ๋ค์ํ ํค๋ค์ ๋ํ ์ํธ๊ด๊ณ์ Hierarchy๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค. โย ๋ ์๋ก๋ฅผ ์ ๋ํด ๋ผ์ ์๋ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ฉฐ(๋๋ฑํ ๊ณ๊ธ์ ์๋ฏธ), โฌ๏ธ๋ ๋จ๋ฐฉํฅ์ผ๋ก์ย ์ ๋๋ ๊ฐ๋ฅํ๋ ๊ทธ ์ญ์ผ๋ก ์ ๋ํ๋๊ฒ์ ๋ถ๊ฐํ ๊ด๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค.
(NEP2*๋ NEP2 standard์์ ์ ์๋ NEO๋ง์ ์๋ก์ด Key๋ก ๊ทธ ์ง์๋ ๋ค๋ฅธ ์ํธํํ์๋ ํํ ์ฌ์ฉ๋๋ WIF, PrivateKey์ ๋๋ฑํ ์์น๋ฅผ ๊ฐ์ง๋๋ค.)
์ ํฌ ์ง๊ฐ์ ์ด์นด์ดํธ์ ๋ค์ํ ํค ๋ค์ ๋ก์ปฌ์ ์ง์ ์ ์ผ๋ก ์ ์ฅํ์ง ์๊ณ encrypt๋ ํํ๋ก ์ ์ฅํ์ฌ ๋ณด์์ ์ธก๋ฉด์ ๊ฐํ ํ์์ต๋๋ค.
**๋ค์ค ์๋ช ๊ณ์ (multi-signature account)**๋ **์ฌ๋ฌ๊ฐ์ ๊ณต๊ฐํค (Pubkey)**๋ก ๊ตฌ์ฑ๋ ์ฃผ์๋ก, ์ด ์ฃผ์์์ ์์ฐ์ ์ด์ ํ๋ ค๋ฉด ํ๋ช ์ด์์ ๋น์ฌ์๊ฐ ์๋ช ํด์ผํฉ๋๋ค. ์๋ ๊ทธ๋ฆผ์ m / n ๋ค์ค ์๋ช ์ฃผ์์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค.
์ด๋ฌํ ๋ค์ค์๋ช ๋ฐฉ์์ ํ๋ช ์ด ๋น๋ฐํค ๋ณด๊ด์ ์คํจํ๊ฒ ๋์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ์๋ช ์ด ์์ผ๋ฉด ์์ฐ์ ์ฎ๊ธธ ์ ์๊ฒ ํ์ฌ ์์ฐ์ ์์ ํ ๋ณด๊ด์ ์ฉ์ดํ๋ฉฐ, ๊ณต๋์ ์ฌ์ฐ์ ๊ด๋ฆฌ ํ ๋ ํ์ฌ๋์ด ํก๋ นํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ ์ ์๊ณ , 2๋ช ๊ฐ์ ๊ฑฐ๋ ์ฌ์ด์ ์ค์ฌ์๋ก ์ 3์์ธ ์๋น์ค ์ ๊ณต์๊ฐ ํจ๊ป ๋ค์ค ์๋ช ๊ณ์ ์ ๋ง๋ฌ์ผ๋ก์ ๋ธ๋ก์ฒด์ธ์ ํ์ฉํ ์์ ๊ฑฐ๋์๋ ํ์ฉ ๋ ์ ์์ต๋๋ค.
(๋ง์ ํฌ์์๋ค์ ๊ฑฐ๊ธ์ด ์ด์ฉ๋๋ ์ํธํํ ๊ฑฐ๋์์์์ ํ์ฉ์ ๋๋ง ํ ๊ฒ๋ ์๊ฒ ์ฅฌ๐คฃ)
๋ค์ค์ ๋ค์ค ์๋ช ๊ณ์ ๋ 2~16๋ช ์ pubkey๋ฅผ ์ด์ฉํ์ฌ ์์ฑ ํ ์ ์์ผ๋ฉฐ, ์๋ช ์์๋ ๋ค์ค ์๋ช ๊ณ์ ์ ๋ง๋ค๋ ๊ณต๊ฐํค์ ์ ๋ ฅ ์์์๋ ๋ฌด๊ดํ์ฌ๋ ๋ฉ๋๋ค.
(๋ค์ค ์๋ช ๊ณ์ ์ ๋ํ ์ถ๊ฐ ์ด๋ก ์ ์คํฐ๋๋ ๋ค์ ๋งํฌ์์ ์ฐพ์ ๋ณด์ค ์ ์์ต๋๋ค.)
์ ํฌ ๋น์ธ์ด ๋ค๊ฐ์ค๋ค์ค
์ง๊ฐ์์๋ ๋
ธ๋ฉ ๊ณ์ ๋ฟ์๋๋ผ ๋ค์ค ์๋ช
๊ณ์ ๋ํ ์ฝ๊ฒ ์์ฑ ํ ์ ์๊ณ , ์์ฑ ์ฌ์ค์ ๊ณต๊ฐํค์ ์ฃผ์ธ๋ค๊ณผ ๋์ค์ฝ๋ ์ฑ๋ ๋ฉ์์ง๋ฅผ ํตํด ๋ฐ๋ก ๊ณต์ ํ ์ ์์ต๋๋ค.
๋ํ ๋ค์ค ์๋ช ๊ณ์ ์ ํตํ ์ก๊ธ ํธ๋์ญ์ ์์ฑ๋ ์ผ๋ฐ ๊ณ์ ์ ์ก๊ธ ํธ๋์ญ์ ์์ฑ๋งํผ ๊ฐํธํ๋ฉฐ, ์ด ๋ํ ๋์ค์ฝ๋ ์ฑ๋์ ํตํด ๊ณต์ ๋ฉ๋๋ค. ํด๋น ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ค๋ฅธ ๋ฉค๋ฒ๋ค๋ ๋ฉ์์ง์ ํฌํจ๋ ์ธ์ฝ๋ฉ๋ Tx์ ์ ๋ ฅํ์ฌ ์์ ์ ์๋ช ์ ์ถ๊ฐ ํ ์ ์๊ณ , ์๋ช ์ฌ๋ถ๋ฅผ ๋์ค์ฝ๋ ์ฑ๋์ ํตํด ๊ณต์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ m ๋ช ์ค n๋ช ์ ์๋ช ์ด ์๋ฃ ๋๋ฉด ์ง๊ฐ์ ํตํด ํด๋น ํธ๋์ญ์ ์ sendํ ์ ์์ต๋๋ค.
-
์ง๊ฐ ์์ฑ ๋ฐ ๋๋ชจ๋ ๊ตฌ๋ฌธ ๋ฐ๊ธ
- ์ง๊ฐ ์์ฑ
-
๋๋ชจ๋ ๊ตฌ๋ฌธ
์ ํตํ HDWallet ์์ฑ๋๋ชจ๋ ๊ตฌ๋ฌธ
์ ์ฌ์ฉํ์ฌprivate key
์์ฑ
const ethers = require('ethers'); const mnemonicCode = ethers.utils.entropyToMnemonic(ethers.utils.randomBytes(16));
-
Neo Account ์์ฑ
๋๋ชจ๋ ๊ตฌ๋ฌธ
์ผ๋ก ์์ฑ๋private key
๋ฅผ ์ฌ์ฉํ์ฌ Neo ๊ณ์ ์ ์์ฑํ๋ค. (์ฃผ์๋ฅผ ๋ฐ๊ธ)
import wallet from "@cityofzion/neon-js"; const ethers = require('ethers'); export const getPrivateKeyFromMnemonic = (mnemonicCode) => { const mnemonicWallet = ethers.utils.HDNode.fromMnemonic(mnemonicCode); const privateKey = mnemonicWallet.privateKey.substring(2); return privateKey; } const privateKey = getPrivateKeyFromMnemonic(mnemonicCode); const userAccount = new wallet.Account(privateKey);
-
์์ฑ๋ ๊ณ์ ์
encryption
ํ์ฌlocal storage
์ ์ ์ฅprivate key
๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํpassword
๋ฅผ ์ฌ์ฉํ์ฌencryption
๋๋ค.
[๋ก๊ทธ์ธ ๋ฐฉ์ ์์ ํ]
-
๋ก๊ทธ์ธ
- ์ฌ์ฉ์๊ฐ
password
๋ฅผ ์ ๋ ฅํ์ฌ ๋ก๊ทธ์ธ- ์
๋ ฅ๋
password
๋ ์ํธํ๋private key
๋ฅผdecryption
ํ๋ ๋ฐ์ ์ฌ์ฉ๋๋ค.
- ์
๋ ฅ๋
[๋ก๊ทธ์ธ ๋ฐฉ์ ์์ ํ]
- ์ฌ์ฉ์๊ฐ
-
์ง๊ฐ ๋ณต๊ตฌ
๋๋ชจ๋ ๊ตฌ๋ฌธ
์ ์ฌ์ฉํ์ฌprivate key
๋ฅผ ์์ฑํ ๋ ๊ฒฐ๊ณผ๋deterministic
ํ๋ค. ์ฆ, ๋์ผํ๋๋ชจ๋ ๊ตฌ๋ฌธ
์ ์ ๋ ฅ๊ฐ์ผ๋ก ๋ฐ์ ์, ๋งค๋ฒ ๋์ผํprivate key
๊ฐ ์์ฑ๋๋ค.- ๋ฐ๋ผ์, ์ํธ์ ๊น๋จน์ด ๋ ์ด์
private key
๋ฅผdecrypt
ํ ์ ์๋ ๊ฒฝ์ฐ, ์ด๊ธฐ ์ง๊ฐ ์์ฑ์์ ๋ฐ๊ธ๋ฐ์๋๋ชจ๋ ๊ตฌ๋ฌธ
์ ์ฌ์ฉํ์ฌ ๋์ผํprivate key
๋ฅผ ๋ฐ์ ์ ์๋ค. - ๋ค์ ๋ฐ๊ธ ๋ฐ์
private key
๋ฅผ์๋ก์ด ๋น๋ฐ๋ฒํธ
๋กencryption
ํ๋ค. - ์ถํ, ์ด
์๋ก์ด ๋น๋ฐ๋ฒํธ
๋ฅผ ์ฌ์ฉํ์ฌdecrpyion
ํ ์ ์๋ค.
export const restoreAccount = async(encryptedAccount, mnemonicCode, newPassword) => { const privateKey = getPrivateKeyFromMnemonic(mnemonicCode); return { "address": encryptedAccount.address, "publicKey": encryptedAccount.publicKey, "privateKey": await CryptoJS.AES.encrypt(privateKey, newPassword), "scriptHash": encryptedAccount.scriptHash }; }
-
์ง๊ฐ ๋ก๊ทธ์์ ๋ฐ ์ด๊ธฐํ
-
๊ณ์ NEO, GAS ํ ํฐ ๋ฐธ๋ฐ์ค ํ์ธ
-
ํ ํฐ ์ ์ก
-
๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์ ์์ ์ Transfer
-
script
๋ ์ด๋ค์ฃผ์
(toAddress)๋ก์ด๋ค ํ ํฐ
(tokenHash)์ด์ผ๋ง ๋งํผ
(tokenAmount) ๋ณด๋ด์ง์ง ์ ์๋์ด ์๋ค. -
๋ก๊ทธ์ธ ๊ณผ์ ์ ๊ฑฐ์ณ
userAccount
์๋decrpytion
๋private key
์ ๋ณด๊ฐ ๋ค์ด๊ฐ ์๋ค. -
script
์ ์ฌ์ฉ์์sign
์ด ๋ค์ด๊ฐtransaction
์ ์์ฑ์ํฌ ์ ์๋ค.
const script = sc.createScript({ scriptHash: tokenHash, operation: "transfer", args: [sc.ContractParam.hash160(userAccount.address), sc.ContractParam.hash160(toAddress), sc.ContractParam.integer(tokenAmount), sc.ContractParam.any()], }); const myTx = new tx.Transaction({ signers: [ { account: userAccount.scriptHash, scopes: tx.WitnessScope.CalledByEntry, }, ], validUntilBlock: currentHeight + heightIncrease, systemFee: systemFee, networkFee: networkFee, script, }).sign(userAccount, networkMagic, 1024);
-
-
๋ฉํฐ์๊ทธ ์ด์นด์ดํธ ์์ฑ
๋ค์ค ์๋ช ๊ณ์ ์ ๋ง๋ค๊ณ ์ ํ๋ ์ฌ๋๋ค์ Pubkey๋ฅผ ์ ๋ ฅํ๊ณ , ํด๋น ๊ณ์ ์์ ๋ฐ์ํ ํธ๋์ญ์ ์ ๋ช๋ช ์ด์ ์๋ช ์ ํด์ผ ํธ๋์ญ์ ์ด ์ ์ก๋ ์ง ๊ฒฐ์ ํ๋ sining threshold์๋ฅผ ์ ํํฉ๋๋ค. ์๋ช ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋์ค์ฝ๋ webHook ๋งํฌ๋ฅผ ์ ๋ ฅํฉ๋๋ค. +,- ๋ฒํผ์ ๋๋ฌ ์ ๋ ฅ๋์ ๋๋ฆฌ๊ณ ์ญ์ ํ ์ ์์ต๋๋ค. ๋ค์ค ์๋ช ๊ณ์ ์ ๋ง๋ค์ ์๋ ์ต์ ๊ณต๊ฐํค ๊ฐฏ์๋ 2๋ช ์ ๋๋ค.
๊ฒฐ๊ณผ ๋์ค์ฝ๋ ๋ฉ์์ง
-
๋ฉํฐ์๊ทธ ํธ๋์ญ์ ์์ฑ
๋ค์ค ์๋ช ๊ณ์ ์ ํตํ ํธ๋์ญ์ ์์ ์ MultiSig Transfer๋ฒํผ์ ๋๋ฅด๊ณ ์ผ๋ฐ ์ก๊ธ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํฉ๋๋ค. ์ง๊ฐ UI์์ ๋ณด์ด๋ ๋์์ ์ผ๋ฐ ์ ์ก๊ณผ ๋น์ทํด ๋ณด์ด๋, ๋ค์์๋ ๋ค์ค ์๋ช ๊ณ์ ์ผ๋ก ์์ฑ๋ ํธ๋์ญ์ ์ ํธ๋์ญ์ ์์ฑํ ์ฌ๋์ ์๋ช ์ด ๋ค์ด๊ฐ๊ณ ์ด๊ฒ์ serializeํ bs58๋ก ์ธ์ฝ๋ฉํ์ฌ ๊ธธ์ด๋ฅผ ์ต๋ํ ์ค์ ๋๋ค. ๊ทธํ ์ด ๊ฐ์ ์ ๋ ฅํ webHook link์ ํด๋นํ๋ ์ฑ๋๋ก ํธ๋์ญ์ ์ ๋ณด์ ๋ฉ์์ง๋ก ์ ์กํฉ๋๋ค.
-
๋ฉํฐ์๊ทธ ํธ๋์ญ์ ์๋ช
๋ฉ์์ง๋ฅผ ๋ฐ์ ์ฌ๋์ ์์ฑ๋ ํธ๋์ญ์ ์ ์์ ์ ์๋ช ์ ์ถ๊ฐํ๊ธฐ ์ํด get multisig tx๋ฒํผ์ ๋๋ฌ ์๋ช ์ ์ถ๊ฐํ๋ ํ์ด์ง๋ก ์ด๋ ํฉ๋๋ค. ์ฒซ๋ฒ์งธ ์ ๋ ฅ๋์ encoding๋ Tx์ ์ ๋ ฅํ๊ณ ๋๋ฒ์งธ ์ ๋ ฅ๋์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋์ค์ฝ๋ ์ฑ๋์ URL์ ์ ๋ ฅํ๋ค ์๋ช ํ๊ธฐ ๋ฒํผ์ ๋๋ฆ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ธ์ฝ๋ฉ๋ ํธ๋์ญ์ ์ ๋์ฝ๋ฉ โ deserialize๋ฅผ ๊ฑฐ์ณ ๋ค์ ์๋ช ํ ์ ์๋ ํธ๋์ญ์ class๋ก ๋ณต์ํ๊ณ ์ฌ๊ธฐ์ ํด๋น ๊ณ์ ์ ์๋ช ์ ๋ํํ ๋ค์ ์ธ์ฝ๋ฉ โ serialize ๊ณผ์ ์ ๊ฑฐ์ณ ์ด๊ฐ์ ๋ฉ์์ง๋ก ๋ณด๋ ๋๋ค.
-
๋ฉํฐ์๊ทธ ํธ๋์ญ์ ์ ์ก
threshold ์ด์์ ์ฐธ๊ฐ์๊ฐ ์๋ช ํ ํธ๋์ญ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก get Multisig Tx ํ์ด์ง์์ ์ ์กํ ์ ์์ต๋๋ค.
๋น์ธ์ด ๋ค๊ฐ์ค๋ค์ค
ํ์๊ธฐ๋ ํ๋ผ์ด๋น ๋
ธ๋์ ๋ํ Block, Tx, Address ์กฐํ๋ฅผ ์ง์ํ๋ ์น ํ์ด์ง ๊ธฐ๋ฐ ํ์๊ธฐ ์
๋๋ค. ํ๋ผ์ด๋น ๋
ธ๋์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ทผํ์ฌ ์
๋ฐ์ดํธ ๋๋ DB๋ก ๋ถํฐ Rest API๋ฅผ ํตํด ์ ๋ณด๋ค์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ฉฐ ๋๊ตฌ๋ ์ฝ๊ฒ ์กฐํ ํ ์ ์๋๋ก ์ค๊ณ ๋์์ต๋๋ค.
- Search Box : Neon Js์ Verify ๊ธฐ๋ฅ๊ณผ ์์ฒด์ ์ผ๋ก ๊ตฌ์ถํ verify๊ธฐ๋ฅ์ผ๋ก ์ ๋ ฅ๊ฐ์ format์ด ์ ํจํ์ง ํ์ธํ๊ณ ํด๋น ์ ๋ ฅ๊ฐ์ด Tx hash, Block number, Neo Address์ธ์ง ๊ตฌ๋ถํ์ฌ ์์ธํ์ด์ง๋ก ์ด๋ํ๊ฒ ํด์ค๋๋ค. ์ ํจํ์ง ์์ ์ ๋ ฅ๊ฐ์ Alert๋ก ์๋ ค์ค๋๋ค.
- Address Detail : ์๊ณ ์กฐํ ๋ฟ ์๋๋ผ, ํด๋น Address์ ๋ชจ๋ NEP17 ํ ํฐ(๋ค์ค, ๊ฐ์ค ํฌํจ)์ ๊ฑฐ๋ ๋ด์ญ์ ์ก์ , ๋ฐ์ ๊ตฌ๋ถํ์ฌ ๋ฆฌ์คํธ๋ก ํ์ธ ํ ์ ์์ต๋๋ค.
-
๋ธ๋ก ์กฐํ
-
ํธ๋์ญ์ ์กฐํ
-
๊ณ์ ์กฐํ
private network์ ์ ์์ ์ผ๋ก ํธ๋์ญ์ ์ sendํ์ ์๋ ๋ชจ๋ ๊ณ์ ์ฃผ์๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค. ๋ฟ๋ง์๋๋ผ ์์ธ ํ์ด์ง์์ ํด๋น ๊ณ์ ์ ํตํด ์ฃผ๊ณ ๋ฐ์ neo์ gas์ ๊ฑฐ๋ ๊ธฐ๋ก์ ํ์ธ ํ ์ ์์ต๋๋ค.
-
๊ฒ์
Neon Js์ Verify ๊ธฐ๋ฅ๊ณผ ์์ฒด์ ์ผ๋ก ๊ตฌ์ถํ verify๊ธฐ๋ฅ์ผ๋ก ์ ๋ ฅ๊ฐ์ format์ด ์ ํจํ์ง ํ์ธํ๊ณ ํด๋น ์ ๋ ฅ๊ฐ์ด Tx hash, Block number, Neo Address์ธ์ง ๊ตฌ๋ถํ์ฌ ์์ธํ์ด์ง๋ก ์ด๋ํ๊ฒ ํด์ค๋๋ค.
Neo Private Node๋ Legacy๋ค์์ ์๋ก ์ ๋ฐ์ดํธ๋ ์ต์ ๋ฒ์ ์ธ NEO3์ ๋ํ ๊ฒ์ผ๋ก, dPBFTํฉ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ Neo์ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ๋ธ๋ก์ ์์ฑํ๋ 1๊ฐ์ Consenses ๋ ธ๋์ ๋ธ๋ก์ ๊ฒ์ฆ ํ๋ 2๊ฐ์ Client ๋ ธ๋๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๋ํ ์ธ๋ถ์ ์ํ ํ RPC ์ํต์ ํ๊ธฐ์ํ RPC ํ๋ฌ๊ทธ์ธ๊ณผ NEP17, NEP11 ํ ํฐ์ ์ถ์ ํ๊ธฐ ์ํด ํ์ฉ๋๋ ํ๋ฌ๊ทธ์ธ์ด ์ค์น ๋์ด์์ต๋๋ค.
๋ฐ๋ชฌ ํ๋ก๊ทธ๋จ์ JSON-RPC ๊ธฐ๋ฐ์ API๋ฅผ ํตํด์ ๋ธ๋ก๊ณผ ํธ๋์ญ์ ์ ๋ณด๋ค์ DB์ ๋๊ธฐํ ํ๋ ํ๋ก๊ทธ๋จ ์ ๋๋ค. Python + MongoDB๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ Docker Runtime์ผ๋ก ๊ตฌ๋ํฉ๋๋ค. ๋ฐ๋ชฌ ๊ตฌํ์ Python์ ์ค์ผ์ฅด๋ฌ๋ฅผ ํ์ฉํ์๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก Block ์์ฑ์ ๋ด๋นํ๋ Consensus ๋ ธ๋์ ๋ธ๋ก์ 15์ด (1 ๋ธ๋ก์ด ์์ฑ๋๋ ํ๊ท ์๊ฐ)๋ง๋ค ํ์ธํ์ฌ ๋ธ๋ก์ ๋ณด,ํธ๋์ญ์ , ๊ณ์ข์๊ณ , ์ด์ฒด ์ด๋ ฅ์ MongoDB์ ๋๊ธฐํ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ๊ฐ๊ณตํ์ฌ ๋ธ๋กํ์๊ธฐ์์ ๋ธ๋ก์ฒด์ธ ์ ๋ณด๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์กฐํ ํ ์ ์๋๋ก ๋ธ๋ก์ ๋ณด,ํธ๋์ญ์ ์ ๋ณด ๋ฐ ์ด์ฒด๊ธฐ๋ก์ ๊ดํ REST API๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
Multisig
๋ฉํฐ์๊ทธ์ ์๋ฆฌ๋ฅผ ์ดํด ํ๊ณ , neon js๋ฅผ ํตํด ๋ฉํฐ์๊ทธ ๊ณ์ ์ ์์ฑํ๊ณ ํธ๋์ญ์ ์ ๋ณด๋ด๋๋ฐ๊น์ง๋ ์ด๋ ค์์ด ์์์ง๋ง, ์ค์ ์๋ฒ๊ฐ ์๋ ์ ํฌ ์ง๊ฐ์ด ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ค์ค ์๋ช ์ ํ๊ธฐ์ํด ๋ค๋ฅธ ์ฌ์ฉ์์ ์ฐ๋ฝ์ ํ ์ ์์์ง์ ๋ํด ์์ด๋์ด ์ ์ธ ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํธ๋์ญ์ ์ serialize โ bs58์ ํตํ encoding์ ์๊ฐํ๊ฒ ๋์๊ณ , ์ด๊ฒ์ผ๋ก๋ถํฐ ์๋ช , ํธ๋์ญ์ ์ ์ก์ ํ๊ธฐ์ํด ์ญ๊ณผ์ ์ ๊ฑฐ์ณ ํธ๋์ญ์ ์ neon js์ transaction class๋ก ๋ณต์ํ๋๋ฐ ์ฑ๊ณต ํ์์ต๋๋ค. ๋ํ ๋ธ๋ก์ฒด์ธ์ ํ์ฉํ๋ ์ฌ๋๋ค์ด ์์ฃผ ์ฌ์ฉํ๋ ์ฐ๋ฝ ๋ฐฉ๋ฒ์ธ ๋์ค์ฝ๋๋ฅผ ํตํด ์ด๋ฅผ ์ ์กํ๊ณ , ์ง๊ฐ ์ฌ์ฉ์๋ค์ด ์ด๋ ต์ง ์๊ฒ ๋ค์ค์๋ช ๊ณ์ ์ ์ด์ฉํ ์ ์๋๋ก UI๋ฅผ ๊ฐ์ํ ์์ผ ํด๋น ๊ธฐ๋ฅ์ ์์ฑ ํ ์ ์์์ต๋๋ค.
-
NODE
Neo ํ์ฌ Neo Legacy์ Neo N3 ๋ก ์ด๋ฆ์ Neo ์ง๋ง ํธํ๋์ง ์์ ํ๋กํ ์ฝ์ ๊ฐ์ง๊ณ ์์ด ์คํฐ๋ ์ด๋ฐ ๊ฒ์๋์ด ์ง๋ ์์ค ๋ฐ ๋ฌธ์๊ฐ ์ด๋ค๊ฒ์ธ Legacy ์ด๋ฉฐ N3์ธ์ง ์ํ์ฐฉ์ค๋ฅผ ๊ฑฐ์ณ์ผ ํ์ต๋๋ค. ๋คํ์ด ๊ฐ๊ฐ ๋ฒ์ ๋ณ๋ก ๋ค๋ฅธ ์ง๊ฐ์ฃผ์๋ฅผ ์์ฑํ๊ฒ์ ์๊ฒ ๋์ด ์ต์ N3 ํ๋กํ ์ฝ์ ๋ง์ถฐ ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์์์ต๋๋ค.
-
OS/Package dependency
- Problem: Private node ๋์ปค ํ๊ฒฝ ๋ฐ ๊ฐ๋ฐ ํด์ด ํน์ OS์ ํน์ ๋ฒ์ ์์๋ง ์ง์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. Neo๋ ์ ์ด์ ์๋์ฐ/C#์ ์นํ์ ์ผ๋ก ๋ง๋ค์ด์ก๊ณ , ๊ฐ๋ฐ์ ํ์ํ ํด๋ค ๋ฐ ํจํค์ง๋ค์ด ํน์ OS์ ์์กด์ฑ์ด ์์ด ์ํ์ฐฉ์ค๊ฐ ๋ง์์ต๋๋ค.
- Solution: Private Node๋ฅผ Ubuntu ํ๊ฒฝ์์ ๋ฌธ์ ์์ด ๋๋ฆฌ๋๋ก ํ์๊ณ , ์๋์ฐ์์๋ง ๋์๊ฐ๋ Neo-GUI๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋น ๋ฅด๊ฒ ํ ์คํธ ํด๋ณผ ์ ์๋๋ก, ํ ์คํธ ์ผ์ด์ค๋ค์ ์ฐ์ ์ ์ผ๋ก ์์ฑํ๊ณ ์ ๋ฆฌํ๋ ์์ ์ ๊ฑฐ์ณค์ต๋๋ค. ์ฒซ ํ ์ฃผ์ ํธํ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํ ๋ฆฌ์์น์ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๋ฐ์ ๋ง์ ์๊ฐ์ ์๋ชจํ์์ง๋ง, ์ฌ์ ์ ์ด๋ฌํ ์ด๋ ค์ด ์์ ๋ค์ ๋ฏธ๋ฆฌ ์ค๋นํ๊ณ ๋๋ด๋์ ๋๋ถ์ ์ ๋ง๋ฌด๋ฆฌ ํ ์ ์์์ต๋๋ค.
-
Encryption, decryption, ๊ทธ๋ฆฌ๊ณ ๋๋ชจ๋
- โ
๋๋ชจ๋ ๊ตฌ๋ฌธ
์ผ๋ก๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์
ํ ์ ์๋ค.โ ์ผ๋ฐ ์๋ ํด๋ง์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ ์ฅ์์ ๋ํ ์ธํฐ๋ท ์์ ๊ธ์ ํตํด์ ์ค์ ๋ก ์ ๋ฐ ๊ฒ์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์ดํดํ๋ ๋ฐ์ ์ด๋ ค์์ด ์์๊ณ , ์๋ฒฝํ ์ดํดํ๊ธฐ๊น์ง ๊ฝค ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ์ง๊ฐ ์์ฑ์ ์ํ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ๊ณ ์ฐ๊ตฌํ๊ณ ํ ์คํธํด๋ณด๋ฉฐ, ์ด๋ค ๊ฒ์ดencryption
๋๊ณdecryption
๋์ด์ผ ํ๋์ง, ๋ ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ์ ์ด๋ฃจ์ด ์ง๋์ง, ์ด๋ฌํ ๊ณผ์ ๋ค์ด ๋ฌผ ํ๋ฅด๋ฏ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฃจ์ด ์ง๋ ค๋ฉด ๊ฐ ๊ธฐ๋ฅ์ input๊ณผ output์ ์ด๋ป๊ฒ ๋์ด์ผ๋์ง์ ๋ํ ๊ณ ๋ฏผ์ ๋ง์ด ํด๋ณผ ์ ์์์ต๋๋ค.private key
๋ฐprivate key
๋ฅผ ์์๋ผ ์ ์๋ ๋ชจ๋ ์ ๋ณด(๋๋ชจ๋ ์ฝ๋
)๋ ์ํธํ๋์ง ์์ (decrypted
) ์ํ์์ local storage์์ ์ฅํด์๋ ์๋๋ค
.๋์ผํ ๋๋ชจ๋ ๊ตฌ๋ฌธ
์ ์ฌ์ฉํ๋ฉด๋งค๋ฒ ๊ฐ์ private key
๋ฅผ ์์ฑํ ์ ์๋ค.๋น๋ฐ๋ฒํธ
๋ฅผ ํตํดprivate key
๋ฅผencryption
/decryption
ํ ์ ์๋ค.
- ์ด ์ธ ๊ฐ์ง๊ฐ ์ดํด๋ ๋ค, ๋ ๊ฐ๋จํ๊ณ ์์๋ณด๊ธฐ ์ฌ์ด ์ฝ๋๋ก ๊ตฌํํ ์ ์์๊ณ , ๋ด๊ฐ ํท๊ฐ๋ฆฌ๊ณ ํค๋งจ ๋ถ๋ถ์ ๋ ์ง์คํ์ฌ ๋ฌธ์๋ฅผ ์์ฑํ์์ต๋๋ค.
- โ
๋๋ชจ๋ ๊ตฌ๋ฌธ
์ผ๋ก๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์
ํ ์ ์๋ค.โ โ โ๋์ผํ ๋๋ชจ๋ ์ฝ๋
๋ก๋์ผํ private key๋ฅผ ์์ฑ
ํ ์ ์๊ณ , ๋ด๊ฐ ์ ๋ ฅํ๋น๋ฐ๋ฒํธ
๋กencryption
๋private key
๋ ๋๊ฐ์ด๋น๋ฐ๋ฒํธ
๋กdecryption
ํ ์ ์๋ค.โ
- โ
-
Wallet User Data ์ ์ฅ
- ์ฌ์ฉ์๊ฐ ๋ณธ์ธ ์์ ์ ์์ฐ์ ์ง์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์ง๊ฐ์ด ์ต์คํ ์ wallet์ ๋ชฉํ์ด๊ธฐ ๋๋ฌธ์, ๋ก์ปฌ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ผ๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ ์ง ํ์๋ค๊ณผ ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค.
- ๊ตฌํ ์ด๊ธฐ์๋ Create Wallet ์ดํ ์์ฑ๋ ์ฌ์ฉ์์ Wallet password, Mnemonic, Privatekey, Publickey, Address ๋ฑ์ ์ ๋ณด๋ฅผ ๋ชจ๋ Chrome Storage์ ์ ์ฅํ์๊ณ , ์ดํ ์์ ์ ๊ฑธ์ณ ์ํธํ๋ ์์์ ์ ๋ณด๋ค๋ง ์ ์ฅ์ ํ์๋ค.
NEO ๊ณต์ ๋ฌธ์
Neon js ๊ณต์ ๋ฌธ์
Neon js ๊นํ๋ธ
neon-js/transfer.md at master ยท CityOfZion/neon-js
์ด๋ฆ | ์ญํ | Github |
---|---|---|
์คํ์ | Explorer ๊ตฌํ, Wallet multisig account, tx๊ตฌํ, NEP17 ํ ํฐ ์ ์ก ํ ์คํธ | https://github.com/Hayoung5 |
์ด์ข ํ | Node Setup, Daemon API, Rest API ๊ฐ๋ฐ, RPC Test | https://github.com/novela77 |
์ ์ ์ญ | Wallet BE: ์๋ ์์ฑ, ๋๋ชจ๋ ์ฝ๋ ์์ฑ, ์ํธ ์ฌ์ค์ , ํ ํฐ ์ ์ก | https://github.com/woongsup123 |
ํ์ ์ง | NEO Wallet Extension ๊ตฌํ, Wallet FE ๊ธฐ๋ฅ | https://github.com/yu-uj |