-
[SmartContract] Ethereum Smart Contract ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ: solidity, intellij, truffleSECURITY/Blockchain 2022. 1. 11. 13:28
๋ณธ๊ฒฉ์ ์ธ Smart Contract ์์ฑ์ ์์ ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถ์ ์งํํ์ต๋๋ค.
Smart Contract ์์ฑ์ ํ์ํ ํด์ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ๊ฐ๋จํ๊ฒ ์ง์ด๋ณด๊ณ , ๊ทธ ์ค์์ ํน์ ํ๊ฒฝ์ ๊ฐ์ ํ๊ณ ์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ์ต๋๋ค.
Solidity ์ปดํ์ผ๋ฌ
- Remix: ์
๋ฌธํ๊ธฐ๋ก ์ต๊ณ ์ธ ์น ์ปดํ์ผ ํด. ๋ฐฐํฌ๊น์ง ๊ฐ๋ฅ!
์ข์ธก ๋ฉ๋ด๋ฅผ ํตํด ๋ฐฐํฌ, ์คํ ๋ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
- Truffle: ์ปดํ์ผ, ํ
์คํธ, ๋ฐฐํฌ ์๋ํ ๋๊ตฌ
Remix ๋ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ์ง๋ง, ๊ฒฐ๊ตญ ๋ฐฐํฌ ๋ฐ ์๋น์ค ์ฌ์ฉ์ ์ํด์๋ Truffle ์ด ํ์ํด์ง๋๋ค.
๋จ์ ๊ฒฝํ ํน์ ๊ฐ๋จํ ๊ธฐ๋ฅ๋ง ํ ๊ฒ์ด๋ฉด Remix ๋ก ํ๊ณ , ํ ์คํธ ๋ฐ ๋ฐฐํฌ ์๋ํ๋ฅผ ์ํ๋ค๋ฉด Truffle ์ ๊ถ์ฅํฉ๋๋ค.
๋จ, ์ฒ์์ Smart contract ๋ฅผ ๊ฒฝํํ๊ธฐ ์ํด์ ๋จผ์ Remix ๋ก ์ง์ ํด๋ณด๋ ๊ฒ์ ๊ฐ๋ ฅ ์ถ์ฒํฉ๋๋ค.
Solidity ํธ์ง๊ธฐ
๋ค์ํ ํธ์ง๊ธฐ์์ solidity ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๊ณ ์๋๋ฐ, ๋ํ์ ์ธ 3๊ฐ์ง๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- Eclipse: ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๋ฉฐ, ๋ฐ๋ก Yakindu ๋ผ๋ solidity ์ ์ฉ ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Atom: ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ ํธ์ง๊ธฐ๋ก, solidity ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํฉ๋๋ค.
(linter-solidity ๊ฐ ๊ณต์ ํํ์ด์ง์์ ์ ๊ณตํ๋ ํ๋ฌ๊ทธ์ธ์ด๋ผ๊ณ ํฉ๋๋ค.)
- Intellij: ์ญ์ solidity ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํฉ๋๋ค.
์์ ํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ
Smart Contract ์์ฑ ๋ฐ ์ปดํ์ผ, ๋ฐฐํฌ๋ฅผ ์ํด ๋ค์์ ์์ ํ๊ฒฝ์ ๊ตฌ์ถํ๋๋ก ํ๊ฒ ์ต๋๋ค.
- Windows10
- Intellij Solidity Plugin (2.3.6)
- Ganache 2.5.4
- Truffle 5.4.26
Intellij Solidity Plugin
์ ๋ ์ด๋ฏธ Intellij ๊ฐ ์ค์น๋ ์ํฉ์ด๋ผ ํ๋ฌ๊ทธ์ธ๋ง ์ถ๊ฐ ์ค์นํ์ต๋๋ค.
(Intellij ๋ ํ์์ธ ๊ฒฝ์ฐ ๋ฌด๋ฃ ๋ผ์ด์ผ์ค๋ฅผ ํ์ฉํ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค)
๋ค์์ฒ๋ผ Plugins ์์ solidity ๋ฅผ ๊ฒ์ํ๋ฉด ๋ฐ๋ก ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Plugins ๋, ์ ์ ๊ฒฝ์ฐ File -> Settings ๋ก ๋ค์ด๊ฐ์ Plugins ์ ์ฐพ์์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด ์ ํ์ผ๋ก solidity ํ์ผ์ ๋ง๋ค ์ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. (ํ์ฅ์ .sol)
Ganache
๋ก์ปฌ ๊ฐ์ ์ด๋๋ฆฌ์์ผ๋ก, ํ ์คํธ๋ฅผ ์ํ ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์คํํ ์ ์์ต๋๋ค.
https://trufflesuite.com/ganache/ ์์ ํ์ผ์ ๋ค์ด๋ฐ๊ณ ์ค์นํด์ค๋๋ค.
๋ค์ด๋ฐ์ ์คํ ํ์ผ์ ์คํ์ํค๊ณ ์ค์นํ๋ฉด ๋ฉ๋๋ค.
์ค์นํ Ganache ๋ฅผ ์คํ์ํค๋ฉด, ๊ทธ ์ด๋ฆ๋ต๊ฒ ๊ท์ฌ์ด UI ๋ฅผ ๋ณผ ์ ์์ต๋๋ค!
Truffle
Truffle ์ ๋ค์์ฒ๋ผ ๊ณต์ ํํ์ด์ง์์ ์ค๋ช ํ ๊ฒ๊ณผ ๊ฐ์ด ์ค์นํ ์ ์์ต๋๋ค. (trufflesuite.com)
Turffle ์ด ์๋ฐ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ฏ๋ก, npm ์ผ๋ก ์ค์นํฉ๋๋ค.
์ ๋ Node.js ๊ฐ ์ด๋ฏธ ์ค์น๋ ์ํฉ์ด๋ผ, PowerShell ์ ์ด์ด์ ๋ค์์ ์ ๋ ฅํด์ฃผ์์ต๋๋ค.
npm install truffle -g
์ค์น ํ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ด๋ฉด ์ค์น๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ Truffle ํ๋ก์ ํธ ์์ฑํ๊ธฐ
PowerShell ์ ์ด์ด์, ํด๋ ํ๋๋ฅผ ์์ฑํ๊ณ truffle ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.
mkdir FOLDER_NAME cd FOLDER_NAME truffle init
ํน์ ์ด ๊ณผ์ ์์ ๋ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด, ์ด๋ Powershell์ ์คํํ๋ ์ ์ฑ ์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
truffle : ์ด ์์คํ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ผ๋ฏ๋ก \AppData\Roaming\npm\truffle.ps1 ํ์ผ์ ๋ก๋ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์์น ์ค:1 ๋ฌธ์:1 + CategoryInfo : ๋ณด์ ์ค๋ฅ: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
์ด๋ ๋ค์๊ณผ ๊ฐ์ด Unrestricted, ์ฆ ์๋ช ๋์ง ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ค๋ ์กฐ๊ฑด์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค.
Set-ExecutionPolicy Unrestricted
์ด ํ์๋ PowerShell ์ ๋ณด์ ์ ์ฑ ์ ๋ณ๊ฒฝํ๋ ํ์๋ก, ๊ตฌ์ฒด์ ์ผ๋ก Unrestricted ๊ฐ ์ด๋ค ์ต์ ์ธ์ง๋ https://docs.microsoft.com/ko-kr/powershell/module/microsoft.powershell.core/about/about_execution_policies ์ ์ฐธ๊ณ ํ์๋ฉด ๋ฉ๋๋ค.
๋ค์ truffle init ์ ์คํ์ํค๋ฉด, ๋ค์์ฒ๋ผ init ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ฉ๋๋ค.
ls ๋ก ํด๋์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด, truffle ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ก์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด์์ผ๋ก Smart Contract ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ณ , ์ Truffle ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด ๋ณด์์ต๋๋ค.
'SECURITY > Blockchain' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Remix: ์
๋ฌธํ๊ธฐ๋ก ์ต๊ณ ์ธ ์น ์ปดํ์ผ ํด. ๋ฐฐํฌ๊น์ง ๊ฐ๋ฅ!