www.twitter.com/stalim1717

Arbitrary Token Bridging
TL; DR์ค๋ ์ฐ๋ฆฌ๋ Optimistic Ethereum์ ๋ํ ์์์ ํ ํฐ ์ ๊ธ ๋ฐ ์ธ์ถ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์๋ก์ด ๊ฒ์ดํธ์จ์ด ์ธํฐํ์ด์ค๋ฅผ ์ถ์ํ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค! ๊ฒ์ดํธ์จ์ด์ ์ด์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์๋ Optimism ํ ํฐ ๋ชฉ๋ก ์ ๋์ด๋ ํ ํฐ์ L2๋ก(๋ฐ ๊ทธ ๋ฐ๋๋ก) ์ ์กํ๋๋ก ํ์ฉํ์ต๋๋ค. ์ด ์๋ก์ด ๋ฆด๋ฆฌ์ค๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ํ์ ์ ๋ฌธ์ ์ด๊ณ ๋ชจ๋ ERC20 ํ ํฐ์ด ๊ณ์ธต ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ์ ํํ ์ ์๋๋ก ํ๊ณ ์ ํฉ๋๋ค.์๋ ์๋ฆฌL2 ์ฒด์ธ์ ๊ฐ๋ฐํ ๋ ํ ํฐ ๋ธ๋ฆฌ์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ๊ฒ์ ๋ณต์กํ๊ณ ๊ท ํ์ด ํ๋ถํ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค. ์ฐ๋ฆฌ์ ๋ธ๋ฆฌ์ง ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค ๊ฐ์ ๊ท ํ์ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค.ERC20์ ์ธํฐํ์ด์ค์ผ ๋ฟ์ ๋๋ค . L1์๋ ์๋ฐฑ ๊ฐ์ง์ ๋ค์ํ ํ ํฐ ๊ตฌํ์ด ์์ต๋๋ค. ์ด๋ค ์ค ์ผ๋ถ๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ OpenZeppelin ํ ํฐ๊ณผ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ ์ฌ์ ์ ํ์ ์๊ธ ์๊ธ์ ํฌ๊ดํ๋ ๋จ์ผ "๋ธ๋ฆฌ์ง ERC20" ๊ตฌํ์ ์์นํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค....
The Highly Optimistic Dev Blog #01: The Mystery of the Missing Message[KOR]
ํธ์งํ์ ๋ฉ๋ชจ: ์ตํฐ๋ฏธ์คํฑ ์ด๋๋ฆฌ์ ์ ์ฐ์ฃผ์๋ ํฅ๋ฏธ๋ก์ด ์์ ์ด ๋๋ฌด ๋ง์์ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ๋์ง ์ธ์์ ์๋ฆฌ๊ธฐ ์ํด ์ ์ ์๊ฐ์ ๋ด๋ ๊ฒ์ ์ข ์ข ์์ต๋๋ค. ๋๊ด์ ์ด๋๋ฆฌ์์ ๋ด๋ถ ์๋ ๋ฐฉ์๊ณผ ์ด๋ฅผ ์คํํ๋ ๋ฐ ๋์์ ์ฃผ๋ ์ฌ๋๋ค์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ ๋ง์ ๋ถ๋ค์ ์๊ฒฌ์ ๋ค์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ฐ๋ฆฌ๋ ๋๊ด์ ์ด๋๋ฆฌ์์์ ์ผํ๋ ์ฌ๋๋ค์ด ๋งค์ผ ๊ทธ๋ค์ด ๋ค๋ฃจ๋ ์์ด๋์ด์ ๋์ ์ ๋ํด ๊ธ์ ์ฐ๋ ๋ฐ๋ธ ๋ธ๋ก๊ทธ๋ฅผ ์์ํฉ๋๋ค . ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํน์ ์คํ์ผ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ ์ฉํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ ๊ฐ์๊ฐ Optimism์์ ์ฐ๋ฆฌ์ ์์ ์ ๋ํด ์๊ฐํ๋ ๋ฐฉ์์ ๊ทธ๋๋ก ๋ณผ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ๋๊ด์ ๊ฒฝํ์ ๋ค์ฌ๋ค๋ณด๋ ์์ ์ฐฝ์ฒ๋ผ ์์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. Highly Optimistic Dev Blog์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! โบ๏ธ ์ ์: ์ผ๋น ํผ์ฒ์์ฝ ๋ฐ ๋ฐฐ๊ฒฝ์ด๊ฒ์ 2021๋ 6์ ์ด ๋ฉฐ์น ๋์ Optimistic Ethereum ํ ์คํธ๋ท ๋ฐฐํฌ๊ฐ ์๋ก์ด L...
![Cover image for OVM Deep Dive [KOR]](https://img.paragraph.com/cdn-cgi/image/format=auto,width=3840,quality=85/https://storage.googleapis.com/papyrus_images/7bed0c28a7451bc3ac2d6c15ff32525701f35fb9e1f206452879effbef6ace46.png)
OVM Deep Dive [KOR]
ํต์ฌ์์ฝ โ Layer 2 ์์คํ ์ฉ์ผ๋ก ์ค๊ณ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ EVM ํธํ ์คํ ํ๊ฒฝ์ธ OVM์ ๊ตฌ์ถํ์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์ OVM์ด ์ด๋๋ฆฌ์ ๋ฉ์ธ ์ฒด์ธ๊ณผ ๋์ผํ ๋กค์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. OVM์ ๊ตฌ์ถํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ ํ์ ๋ง์ ์ฌ๋๋ค์ ์ด์ ์ ๊ณ์ฝ์ ์ง์ํ๋ ์ต์ด์ ์ผ๋ฐํ๋ ํ๋ผ์ฆ๋ง ๊ตฌ์ฑ์ธ plapps๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ์ผํ์ต๋๋ค ! ๊ทธ๋ฌ๋ plapps์๋ ์ ํ๋ "๋จ์ด" ๊ณ์ฝ๊ณผ ๊ด๋ จ๋ ์์ ํ ์๋ก์ด ๊ฐ๋ฐ์ ๋๊ตฌ๊ฐ ํ์ํ์ต๋๋ค. ์ด๋๋ฆฌ์ L2๋ ๋จ์ํ ์ด๋๋ฆฌ์์ ์ฌ์ฉํ์ฌ ํ์ฅํ๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ ์ด๋๋ฆฌ์ ์์ฒด๋ฅผ ํ์ฅํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค . ์ด๊ฒ์ ๊ฒฐ๊ตญ ์ด๋๋ฆฌ์ ์ค๋งํธ ๊ณ์ฝ์ ์ ์ฒด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฅ์ฑ ํ๊ฒฝ์ผ๋ก ๊ฐ์ ธ์ค๊ฒ ๋ค๊ณ ์ฝ์ํ ์ต์ด์ L2 ๊ตฌ์ฑ์ธ Optimistic Rollup์ ๊ฐ๋ฐํ๊ฒ ํ์ต๋๋ค . Unipig.exchange๋ ์ฒ์์ผ๋ก ์ด ์ ๋ก ์๋ ๊ธฐ๋ฅ์ ์์ฐํ์ต๋๋ค. ์ฒ์์ผ๋ก Uniswap์ L2์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ Unipig๋...

Subscribe to stalim17

Arbitrary Token Bridging
TL; DR์ค๋ ์ฐ๋ฆฌ๋ Optimistic Ethereum์ ๋ํ ์์์ ํ ํฐ ์ ๊ธ ๋ฐ ์ธ์ถ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์๋ก์ด ๊ฒ์ดํธ์จ์ด ์ธํฐํ์ด์ค๋ฅผ ์ถ์ํ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค! ๊ฒ์ดํธ์จ์ด์ ์ด์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์๋ Optimism ํ ํฐ ๋ชฉ๋ก ์ ๋์ด๋ ํ ํฐ์ L2๋ก(๋ฐ ๊ทธ ๋ฐ๋๋ก) ์ ์กํ๋๋ก ํ์ฉํ์ต๋๋ค. ์ด ์๋ก์ด ๋ฆด๋ฆฌ์ค๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ํ์ ์ ๋ฌธ์ ์ด๊ณ ๋ชจ๋ ERC20 ํ ํฐ์ด ๊ณ์ธต ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ์ ํํ ์ ์๋๋ก ํ๊ณ ์ ํฉ๋๋ค.์๋ ์๋ฆฌL2 ์ฒด์ธ์ ๊ฐ๋ฐํ ๋ ํ ํฐ ๋ธ๋ฆฌ์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ด๋ ๊ฒ์ ๋ณต์กํ๊ณ ๊ท ํ์ด ํ๋ถํ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค. ์ฐ๋ฆฌ์ ๋ธ๋ฆฌ์ง ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค ๊ฐ์ ๊ท ํ์ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค.ERC20์ ์ธํฐํ์ด์ค์ผ ๋ฟ์ ๋๋ค . L1์๋ ์๋ฐฑ ๊ฐ์ง์ ๋ค์ํ ํ ํฐ ๊ตฌํ์ด ์์ต๋๋ค. ์ด๋ค ์ค ์ผ๋ถ๋ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ OpenZeppelin ํ ํฐ๊ณผ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ ์ฌ์ ์ ํ์ ์๊ธ ์๊ธ์ ํฌ๊ดํ๋ ๋จ์ผ "๋ธ๋ฆฌ์ง ERC20" ๊ตฌํ์ ์์นํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค....
The Highly Optimistic Dev Blog #01: The Mystery of the Missing Message[KOR]
ํธ์งํ์ ๋ฉ๋ชจ: ์ตํฐ๋ฏธ์คํฑ ์ด๋๋ฆฌ์ ์ ์ฐ์ฃผ์๋ ํฅ๋ฏธ๋ก์ด ์์ ์ด ๋๋ฌด ๋ง์์ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ๋์ง ์ธ์์ ์๋ฆฌ๊ธฐ ์ํด ์ ์ ์๊ฐ์ ๋ด๋ ๊ฒ์ ์ข ์ข ์์ต๋๋ค. ๋๊ด์ ์ด๋๋ฆฌ์์ ๋ด๋ถ ์๋ ๋ฐฉ์๊ณผ ์ด๋ฅผ ์คํํ๋ ๋ฐ ๋์์ ์ฃผ๋ ์ฌ๋๋ค์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ ๋ง์ ๋ถ๋ค์ ์๊ฒฌ์ ๋ค์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ฐ๋ฆฌ๋ ๋๊ด์ ์ด๋๋ฆฌ์์์ ์ผํ๋ ์ฌ๋๋ค์ด ๋งค์ผ ๊ทธ๋ค์ด ๋ค๋ฃจ๋ ์์ด๋์ด์ ๋์ ์ ๋ํด ๊ธ์ ์ฐ๋ ๋ฐ๋ธ ๋ธ๋ก๊ทธ๋ฅผ ์์ํฉ๋๋ค . ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํน์ ์คํ์ผ์ด๋ ๊ตฌ์กฐ๋ฅผ ์ ์ฉํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ ๊ฐ์๊ฐ Optimism์์ ์ฐ๋ฆฌ์ ์์ ์ ๋ํด ์๊ฐํ๋ ๋ฐฉ์์ ๊ทธ๋๋ก ๋ณผ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ๋๊ด์ ๊ฒฝํ์ ๋ค์ฌ๋ค๋ณด๋ ์์ ์ฐฝ์ฒ๋ผ ์์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. Highly Optimistic Dev Blog์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! โบ๏ธ ์ ์: ์ผ๋น ํผ์ฒ์์ฝ ๋ฐ ๋ฐฐ๊ฒฝ์ด๊ฒ์ 2021๋ 6์ ์ด ๋ฉฐ์น ๋์ Optimistic Ethereum ํ ์คํธ๋ท ๋ฐฐํฌ๊ฐ ์๋ก์ด L...
![Cover image for OVM Deep Dive [KOR]](https://img.paragraph.com/cdn-cgi/image/format=auto,width=3840,quality=85/https://storage.googleapis.com/papyrus_images/7bed0c28a7451bc3ac2d6c15ff32525701f35fb9e1f206452879effbef6ace46.png)
OVM Deep Dive [KOR]
ํต์ฌ์์ฝ โ Layer 2 ์์คํ ์ฉ์ผ๋ก ์ค๊ณ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ EVM ํธํ ์คํ ํ๊ฒฝ์ธ OVM์ ๊ตฌ์ถํ์ต๋๋ค. ์ด ๊ฒ์๋ฌผ์ OVM์ด ์ด๋๋ฆฌ์ ๋ฉ์ธ ์ฒด์ธ๊ณผ ๋์ผํ ๋กค์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. OVM์ ๊ตฌ์ถํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ ํ์ ๋ง์ ์ฌ๋๋ค์ ์ด์ ์ ๊ณ์ฝ์ ์ง์ํ๋ ์ต์ด์ ์ผ๋ฐํ๋ ํ๋ผ์ฆ๋ง ๊ตฌ์ฑ์ธ plapps๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ์ผํ์ต๋๋ค ! ๊ทธ๋ฌ๋ plapps์๋ ์ ํ๋ "๋จ์ด" ๊ณ์ฝ๊ณผ ๊ด๋ จ๋ ์์ ํ ์๋ก์ด ๊ฐ๋ฐ์ ๋๊ตฌ๊ฐ ํ์ํ์ต๋๋ค. ์ด๋๋ฆฌ์ L2๋ ๋จ์ํ ์ด๋๋ฆฌ์์ ์ฌ์ฉํ์ฌ ํ์ฅํ๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ ์ด๋๋ฆฌ์ ์์ฒด๋ฅผ ํ์ฅํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค . ์ด๊ฒ์ ๊ฒฐ๊ตญ ์ด๋๋ฆฌ์ ์ค๋งํธ ๊ณ์ฝ์ ์ ์ฒด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํ์ฅ์ฑ ํ๊ฒฝ์ผ๋ก ๊ฐ์ ธ์ค๊ฒ ๋ค๊ณ ์ฝ์ํ ์ต์ด์ L2 ๊ตฌ์ฑ์ธ Optimistic Rollup์ ๊ฐ๋ฐํ๊ฒ ํ์ต๋๋ค . Unipig.exchange๋ ์ฒ์์ผ๋ก ์ด ์ ๋ก ์๋ ๊ธฐ๋ฅ์ ์์ฐํ์ต๋๋ค. ์ฒ์์ผ๋ก Uniswap์ L2์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ Unipig๋...
<100 subscribers
<100 subscribers


Solidity ๊ฐ๋ฐ์: Smock v2๋ฅผ ๋ง๋๋ณด์ธ์ . Solidity ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ . _ Optimism ๊ณผ DeFi Wonderland ์ ํ์์ ์ธ ํ ๊ฐ์ ํ๋ ฅ .
์ค๋งํธ ๊ณ์ฝ ํ ์คํธ๋ ์ญ์ฌ์ ์ผ๋กโฆ ์ด๋ ค์ ์ต๋๊น? ์ด๋ ต์ง ์๋ค๋ฉด ํผ๋์ค๋ฌ์ธ ๋ฟ์ ๋๋ค. Solidity ์ด๊ธฐ์ ๊ณ์ฝ์ ํ ์คํธํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ ํ ์คํธ๋ฅผ ์ํํ ์ฑ ์์ด ์๋ ๋ค๋ฅธ ๊ณ์ฝ์ ์์ฑํ๋ ๊ฒ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ฝ 20๊ฐ์ง์ ๋ค๋ฅธ ์ด์ ๋ก ๋์ฐํ ์๊ฐ์ด์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๋ช ๊ฐ์ง๋ฅผ ์ธ๊ธํ๊ฒ ์ต๋๋ค.
Solidity์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค.
ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ํ ์คํธ ๊ณ์ฝ์ ๋ค์ ์ปดํ์ผํด์ผ ํ์ต๋๋ค.
ํ ์คํธ ๊ณ์ฝ๊ณผ ๋์ ๊ณ์ฝ์ ๋์ผํ ์ฒด์ธ ์ํ๋ฅผ ๊ณต์ ํ์ต๋๋ค.
๊ด๋ จ๋ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ์์ฒญ๋ ์๊ฐ ๋ญ๋น์์ต๋๋ค. ๊ทธ ๋น์์๋ ์ค๋งํธ ๊ณ์ฝ์ด ๋น๊ต์ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ ๊ด์ฐฎ ์์ต๋๋ค . ๊ทธ๋ฌ๋ ๋ฌผ๋ก ์ด๋ฌํ ํ ์คํธ ์ธํ๋ผ ๋ถ์กฑ์ ๊ณ์ฝ์ด ๋งค์ฐ ๋ณต์กํ ์ ์์์ ์๋ฏธํ์ต๋๋ค.
์๊ฐ์ด ์ข ๊ฑธ๋ ธ์ง๋ง ๋ง์นจ๋ด Truffle๊ณผ ๊ฐ์ JavaScript ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ํ๊ฒฝ์ ํฌ๊ฒ ๊ฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ chai ๋ฐ mocha์ ๊ฐ์ ๋๊ตฌ์ ๋ฉ์ง ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ฌผ๋ ค๋ฐ์์ต๋๋ค. ์ฐ๋ฆฌ์ ํ ์คํธ๋ ์ ์ด๋ ์ด๋ ์ ๋๋ ์ฝ์ ์ ์๊ฒ ๋์์ต๋๋ค. ์ค์ ๋ก ํฉ๋ฆฌ์ ์ธ ์์ ๋ณต์ก์ฑ์ผ๋ก ๊ณ์ฝ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
Hardhat์ ๊ฒฐ๊ตญ Truffle์ด ๋จผ์ ์ํํ ๋ง์ ์์ ์ ๊ฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ Hardhat์ ์ฃผ์ ๋ฐ์ ์ ํ๋ฌ๊ทธ์ธ ์์คํ ์ด์์ต๋๋ค. ์ด์ ๊ฐ๋ฐ์๋ Truffle๋ก๋ ๋ถ๊ฐ๋ฅํ๋ ํ ์คํธ ํ๊ฒฝ์ ์ฝ๊ฒ ์กฐ์ํ ์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋์ด ๋ชจ๋ ๊ฐ์ ๊ณผ์ ์์ Solidity ๊ฐ๋ฐ์๋ ์ฌ์ ํ ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฅ์ ๋จ์ ํ ์คํธ ํ ์ ์๋๋ก Solidity๋ก ์์ฑ๋ ๋ชจ์ ๊ณ์ฝ ์ด๋ผ๋ ์ ๋์ ์ผ๋ก ๋์ฐํ ํจํด์ ์ฒ๋ฆฌํด์ผํ์ต๋๋ค . ๋ด ๋ง์, ์ ๋ง??? ์ด๊ฒ์ด ๊ทธ๋ ๊ฒ ๋์ ๋ช ๊ฐ์ง ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Solidity์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ํ ์คํธ ๊ณ์ฝ์ ๋ค์ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
ํ ์คํธ ๊ณ์ฝ๊ณผ ๋์ ๊ณ์ฝ์ ๋์ผํ ์ฒด์ธ ์ํ๋ฅผ ๊ณต์ ํฉ๋๋ค.
???
์. ๊ทธ๋๋. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ์ณค์ต๋๋ค.
์๊ฐ: ์์ ๋ณต v2. JavaScript์์ ์กฐ๋กฑํ๋ ๊ณ์ฝ. ๋น์ ์ด ์์ํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๋ ฅํฉ๋๋ค. ๋ค์๋ Solidity์์ ๋ชจ์ โโ๊ณ์ฝ์ ์์ฑํ์ง ๋ง์ญ์์ค.
๊ณ์ฝ ์์กฐ const myFake = await smock.fake('MyContract'); const myOtherFake = await smock.fake(myContractFactory); const myOtherOtherFake = await smock.fake(myContractABI); const myOtherOtherOtherFake = await smock.fake(myContractInstance);
๋ชจ๋ ๊ณ์ฝ ๊ธฐ๋ฅ ์กฐ์ myFake.myFunction.returns(1234); myFake.myOtherFunction.returns({ myStructField: 1234 }); myFake.myOtherOtherFunction.returns((fnArg) => { return fnArg * 10 }); myFake.myOtherOtherOtherFunction.reverts(); // womp womp!
ํธ์ถ์ ๋ํ ์ด์ค์ ๋ง๋ค๊ธฐ expect(myFake.myFunction).to.have.been.calledOnce; expect(myFake.myFunction).to.have.been.calledWith(1234); expect(myFake.myFunction).to.have.been.calledBefore(myFake.myOtherFunction);
์ค์ ๊ณ์ฝ์ผ๋ก ๋ท๋ฐ์นจ๋๋ ๋ชจํ ๋ง๋ค๊ธฐ const myMockFactory = await smock.mock('MyContract'); const myMock = await myMockFactory.deploy();// Does everything a fake can do! myMock.myFunction.returns(5678);
๋ชจ์ ๊ฐ์ฒด ๋ด๋ถ์ ๋ณ์ ์กฐ์ await myMock.setVariable('myVariable', 1234); await myMock.setVariable('myOtherVariable', { myStructValue: 1234 });
๊ทธ๋ฆฌ๊ณ ํจ์ฌ ๋โฆ ์ ๋ง ๋ค๋ฅธ ๋ง์ด ํ์ํฉ๋๊น? ๊ฐ์ ์ฌ์ฉํด ๋ณด์ธ์. ๊ทธ๊ฒ์ ๋น์ ์ ์ธ์์ ๋ฐ๊ฟ ๊ฒ์ ๋๋ค. ์ง์งํ๊ฒ.
https://github.com/defi-wonderland/smock
https://blog.oplabs.co/the-highly-optimistic-dev-blog-03-introducing-smock-v2/
Solidity ๊ฐ๋ฐ์: Smock v2๋ฅผ ๋ง๋๋ณด์ธ์ . Solidity ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ . _ Optimism ๊ณผ DeFi Wonderland ์ ํ์์ ์ธ ํ ๊ฐ์ ํ๋ ฅ .
์ค๋งํธ ๊ณ์ฝ ํ ์คํธ๋ ์ญ์ฌ์ ์ผ๋กโฆ ์ด๋ ค์ ์ต๋๊น? ์ด๋ ต์ง ์๋ค๋ฉด ํผ๋์ค๋ฌ์ธ ๋ฟ์ ๋๋ค. Solidity ์ด๊ธฐ์ ๊ณ์ฝ์ ํ ์คํธํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ ํ ์คํธ๋ฅผ ์ํํ ์ฑ ์์ด ์๋ ๋ค๋ฅธ ๊ณ์ฝ์ ์์ฑํ๋ ๊ฒ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ฝ 20๊ฐ์ง์ ๋ค๋ฅธ ์ด์ ๋ก ๋์ฐํ ์๊ฐ์ด์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๋ช ๊ฐ์ง๋ฅผ ์ธ๊ธํ๊ฒ ์ต๋๋ค.
Solidity์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค.
ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ํ ์คํธ ๊ณ์ฝ์ ๋ค์ ์ปดํ์ผํด์ผ ํ์ต๋๋ค.
ํ ์คํธ ๊ณ์ฝ๊ณผ ๋์ ๊ณ์ฝ์ ๋์ผํ ์ฒด์ธ ์ํ๋ฅผ ๊ณต์ ํ์ต๋๋ค.
๊ด๋ จ๋ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ์์ฒญ๋ ์๊ฐ ๋ญ๋น์์ต๋๋ค. ๊ทธ ๋น์์๋ ์ค๋งํธ ๊ณ์ฝ์ด ๋น๊ต์ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ ๊ด์ฐฎ ์์ต๋๋ค . ๊ทธ๋ฌ๋ ๋ฌผ๋ก ์ด๋ฌํ ํ ์คํธ ์ธํ๋ผ ๋ถ์กฑ์ ๊ณ์ฝ์ด ๋งค์ฐ ๋ณต์กํ ์ ์์์ ์๋ฏธํ์ต๋๋ค.
์๊ฐ์ด ์ข ๊ฑธ๋ ธ์ง๋ง ๋ง์นจ๋ด Truffle๊ณผ ๊ฐ์ JavaScript ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ํ๊ฒฝ์ ํฌ๊ฒ ๊ฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ chai ๋ฐ mocha์ ๊ฐ์ ๋๊ตฌ์ ๋ฉ์ง ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ฅผ ๋ฌผ๋ ค๋ฐ์์ต๋๋ค. ์ฐ๋ฆฌ์ ํ ์คํธ๋ ์ ์ด๋ ์ด๋ ์ ๋๋ ์ฝ์ ์ ์๊ฒ ๋์์ต๋๋ค. ์ค์ ๋ก ํฉ๋ฆฌ์ ์ธ ์์ ๋ณต์ก์ฑ์ผ๋ก ๊ณ์ฝ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
Hardhat์ ๊ฒฐ๊ตญ Truffle์ด ๋จผ์ ์ํํ ๋ง์ ์์ ์ ๊ฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ Hardhat์ ์ฃผ์ ๋ฐ์ ์ ํ๋ฌ๊ทธ์ธ ์์คํ ์ด์์ต๋๋ค. ์ด์ ๊ฐ๋ฐ์๋ Truffle๋ก๋ ๋ถ๊ฐ๋ฅํ๋ ํ ์คํธ ํ๊ฒฝ์ ์ฝ๊ฒ ์กฐ์ํ ์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฌ๋์ด ๋ชจ๋ ๊ฐ์ ๊ณผ์ ์์ Solidity ๊ฐ๋ฐ์๋ ์ฌ์ ํ ๋งค์ฐ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฅ์ ๋จ์ ํ ์คํธ ํ ์ ์๋๋ก Solidity๋ก ์์ฑ๋ ๋ชจ์ ๊ณ์ฝ ์ด๋ผ๋ ์ ๋์ ์ผ๋ก ๋์ฐํ ํจํด์ ์ฒ๋ฆฌํด์ผํ์ต๋๋ค . ๋ด ๋ง์, ์ ๋ง??? ์ด๊ฒ์ด ๊ทธ๋ ๊ฒ ๋์ ๋ช ๊ฐ์ง ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Solidity์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ํ ์คํธ ๊ณ์ฝ์ ๋ค์ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
ํ ์คํธ ๊ณ์ฝ๊ณผ ๋์ ๊ณ์ฝ์ ๋์ผํ ์ฒด์ธ ์ํ๋ฅผ ๊ณต์ ํฉ๋๋ค.
???
์. ๊ทธ๋๋. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ์ณค์ต๋๋ค.
์๊ฐ: ์์ ๋ณต v2. JavaScript์์ ์กฐ๋กฑํ๋ ๊ณ์ฝ. ๋น์ ์ด ์์ํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๋ ฅํฉ๋๋ค. ๋ค์๋ Solidity์์ ๋ชจ์ โโ๊ณ์ฝ์ ์์ฑํ์ง ๋ง์ญ์์ค.
๊ณ์ฝ ์์กฐ const myFake = await smock.fake('MyContract'); const myOtherFake = await smock.fake(myContractFactory); const myOtherOtherFake = await smock.fake(myContractABI); const myOtherOtherOtherFake = await smock.fake(myContractInstance);
๋ชจ๋ ๊ณ์ฝ ๊ธฐ๋ฅ ์กฐ์ myFake.myFunction.returns(1234); myFake.myOtherFunction.returns({ myStructField: 1234 }); myFake.myOtherOtherFunction.returns((fnArg) => { return fnArg * 10 }); myFake.myOtherOtherOtherFunction.reverts(); // womp womp!
ํธ์ถ์ ๋ํ ์ด์ค์ ๋ง๋ค๊ธฐ expect(myFake.myFunction).to.have.been.calledOnce; expect(myFake.myFunction).to.have.been.calledWith(1234); expect(myFake.myFunction).to.have.been.calledBefore(myFake.myOtherFunction);
์ค์ ๊ณ์ฝ์ผ๋ก ๋ท๋ฐ์นจ๋๋ ๋ชจํ ๋ง๋ค๊ธฐ const myMockFactory = await smock.mock('MyContract'); const myMock = await myMockFactory.deploy();// Does everything a fake can do! myMock.myFunction.returns(5678);
๋ชจ์ ๊ฐ์ฒด ๋ด๋ถ์ ๋ณ์ ์กฐ์ await myMock.setVariable('myVariable', 1234); await myMock.setVariable('myOtherVariable', { myStructValue: 1234 });
๊ทธ๋ฆฌ๊ณ ํจ์ฌ ๋โฆ ์ ๋ง ๋ค๋ฅธ ๋ง์ด ํ์ํฉ๋๊น? ๊ฐ์ ์ฌ์ฉํด ๋ณด์ธ์. ๊ทธ๊ฒ์ ๋น์ ์ ์ธ์์ ๋ฐ๊ฟ ๊ฒ์ ๋๋ค. ์ง์งํ๊ฒ.
https://github.com/defi-wonderland/smock
https://blog.oplabs.co/the-highly-optimistic-dev-blog-03-introducing-smock-v2/
Share Dialog
Share Dialog
No activity yet