Solidity - YooByWk/YooByWk.github.io GitHub Wiki
Solidity
Solidity๋ ์ด๋๋ฆฌ์ ๋ธ๋ก์ฒด์ธ์ EVM ์์ ์คํ๋๋ ์ค๋งํธ ์ปจํธ๋ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ ์ ํ์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด.
Solidity๋ ์์ ์ฑ, Gas ํจ์จ์ฑ, ๋ณด์์ฑ์ ์ต์ฐ์ ์ผ๋ก ์ค๊ณ๋๋ค.
ํน์ง
์ ์ ํ์ ์์คํ
- ์ ์ ํ์
: ๋ชจ๋ ๋ณ์์ ํ์
์ด ์ปดํ์ผ ์์ ์ ์ ์๋์ด ๋ฐํ์ ์ค๋ฅ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ๋ค. ๋ฐ๋ผ์ ์ค๋งํธ ์ปจํธ๋ํธ์ ์์ ์ฑ์ ๋์ธ๋ค (
uint256,address,bytes32ๅค) - Gas ๋น์ฉ ๊ณ ๋ ค : ๊ธฐ๋ณธ ์ ์ ํ์
(
uint,int)์ ๋นํธ ์๋ฅผ ๋ช ์ํ ์ ์๋ค. ์์ ํ์ ์ ์ฌ์ฉํด Gas๋น์ฉ์ ์ ์ฝํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ์์
์๋ฒฝํ OOP ์ธ์ด๋ ์๋๋๋ผ๋, ๋ชจ๋ํ์ ์ฌ์ฌ์ฉ์ฑ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ ์ด ์กด์ฌํ๋ค.
- ์ปจํธ๋ํธ(Contract) : OOP์ ํด๋์ค์ ์ ์ฌํ๋ค. ์ํ๋ณ์ + ํจ์๋ฅผ ํฌํจ
- ์์ :
isํค์๋๋ฅผ ํตํด ๋ค๋ฅธ ์ปจํธ๋ํธ์ ํจ์์ ์ํ ๋ณ์๋ฅผ ์์๋ฐ๋๋ค (๋ค์ค ์์ ๋ํ ์ง์ํ๋ค.) - ๋ผ์ด๋ธ๋ฌ๋ฆฌ :
delegatecall์ํตํด ์คํ. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ด๋ ์ปจํธ๋ํธ.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
์ ์ฅ์ ๊ด๋ฆฌ
๋ฐ์ดํฐ ์ ์ฅ ์์น์ ๋ฐ๋ผ Gas์ ๋น์ฉ์ด ๋ฌ๋ผ์ง๋ค.
storage: ๋ธ๋ก์ฒด์ธ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ ์ํ. ๊ฐ์ฅ ๋น์ผ Gas ๋น์ฉmemory: ํจ์ ํธ์ถ ๋์ ์ฌ์ฉ๋๋ ๋ณ์. ๋ณต์กํ ๋ฐฐ์ด/๊ตฌ์กฐ์ฒด ๋ก์ง์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ํจ์ ์ข ๋ฃ์ ์๋ฉธ๋จcalldata: ์ธ๋ถ ํจ์ ํธ์ถ์ Arguments๋ฅผ ์ ์ฅํ๋ ์ฝ๊ธฐ ์ ์ฉ ์์ญ. ๊ฐ์ฅ ํจ์จ์ด ์ข๋ค.
Gas?
Gas๋ EVM์์ ์ฐ์ฐ์ ์คํํ๋ ๋น์ฉ. ์์ ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ.
์ฒ๋ฆฌ๋น์ฉ : ๋
๊ฐ์ค๋ฅผ ์ ์ฝํ๊ธฐ ์ํด์๋ ๋ฃจํ ์ต์ํ์, ์งง์ ์ ์ ํ์ (๊ฐ๋ฅํ ๋ฒ์ ๋ด)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
ํนํ storage์ ๊ฐ์ ์์ฃผ ์
๋ฐ์ดํธ (์๋ฐํ ๋งํ๋ฉด ์ฐ๋ ํ๋) ํ์ง ์๋๊ฒ ์ข์.
๋ณด์
์ค๋งํธ ์ปจํธ๋ํธ์ ํน์ฑ (๋ถ๋ณ์ฑ)์ผ๋ก ์ธํด ๋ณด์ ์ทจ์ฝ์ ๋ฐ๊ฒฌ ์ ๋งค์ฐ ์น๋ช ์
๋ฐ๋ผ์ ์ ๊ทผ ์ ์ด, SafeMath (์ค๋ฒํ๋ก์ฐ/์ธ๋ํ๋ก์ฐ ๋ฐฉ์ง), ์ฌ์ง์
๊ณต๊ฒฉ ๋ฐฉ์ง์ ๋ํด ๋์ฑ
์ ์ ์ธ์์ผ ํจ.
์ฌ๋ด
C + JavaScript ๋น์ทํ ๋ง.
Rust๋๋ ๋น์ทํ ๋ง.
RemixIDE์์ ์น ์์ผ๋ก ๊ฐ์ ๋ฐฐํฌ ๋ฐ ๊ฐ๋จํ ์ปจํธ๋ํธ๋ฅผ ์์ฑ, ์คํํด๋ณผ์๋ ์๋ค..