๋ชฉ์ฐจ
๋ฆฌ์์ฒ
๊ด๋ จ ํ๋ก์ ํธ
์์ด(Sui)๋ ์ด์ ๋ฐ์นญ ์ดํ ๊ฐ์ฅ ํฐ ์คํ ๊ณ์ธต ์ ๊ทธ๋ ์ด๋๋ฅผ ์๊ณ ํ๋ค. ๊ฒ์ผ๋ก๋ "๋ ๋น ๋ฅด๊ณ , ์บ์ฑ์ด ์๊ธฐ๊ณ , ์ฐจ์ธ๋ Move ๊ธฐ๋ฅ์ ์ค๋นํ๋ค"๋ ์์ฝ์ด ์ ๋ถ์ฒ๋ผ ๋ณด์ด์ง๋ง, ๊ทธ๋ฌ๋ ์ด๋ฒ ์ ๋ฐ์ดํธ๋ ์คํ ์์ง์์ ์๊ฐ๋ณด๋ค ๋ ํฐ ํจ๋ฌ๋ค์์ ์ ํ์ด ๋ฐ์ํ๋ค. ์ด์ ์ด๋ฒ ์ ๊ทธ๋ ์ด๋๋ก ์ธํด ๋ฐ์ํ๋ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๊นํ๋ธ์ ์ฌ๋ผ์จ ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ดํด๋ณด์๋ค.
1. ๋ฌด์์ด ๋ฐ๋์๋?
1.1 ์คํ ํ์ดํ๋ผ์ธ
์์ด์ ์คํ ์์ง์ ํ๋กํ ์ฝ ๋ฒ์ ๋ณ๋ก ๊ฒฉ๋ฆฌ๋์ด ๊ด๋ฆฌ๋๋ฉฐ, ์ด๋ฒ ์
๋ฐ์ดํธ๋ก ์คํ ์์ง์ v3๋ก ์
๋ฐ์ดํธ๋๋ค. v3์ ํต์ฌ์ static_programmable_transactions๋ผ๋ ์์ ํ ์๋ก์ด ์คํ ํ์ดํ๋ผ์ธ์ ๋์
์ด๋ฉฐ, ํ๋กํ ์ฝ ์ค์ ํ๋๊ทธ ํ๋๋ก ๊ธฐ์กด ๊ฒฝ๋ก์ ์ ๊ฒฝ๋ก๋ฅผ ๋ถ๊ธฐํ๋ค.

1.1.1 ๊ธฐ์กด ๋ฐฉ์: ์คํํ๋ฉด์ ํ์ธ
๊ธฐ์กด v2์ ์คํ ๋ชจ๋ธ์ ๋จ์ํ๋ค. PTB(Programmable Transaction Block)์ ๋ช
๋ น์ด๋ค์ ์์๋๋ก ํ๋์ฉ ๊บผ๋ด์, ๊ฐ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ ์์ ์ ํ์
์ ํ์ธํ๊ณ , borrow ๊ท์น์ ๊ฒ์ฆํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ตฌ์กฐ๋ค. ๊ธฐ์กด์๋ ์ด ๊ณผ์ ์ด ๋จ์ผ ํ์ผ(execution.rs) ์์์ ๋ชจ๋ ๊ฒ์ด ์ด๋ฃจ์ด์ก๋ค.
์ด ๋ฐฉ์์ ์ง๊ด์ ์ด์ง๋ง ๊ตฌ์กฐ์ ์ธ ํ๊ณ๊ฐ ์๋ค. ๋ฐํ์์ ๋ชจ๋ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์คํ ๋์ค์์ผ ํ์ ๋ถ์ผ์น๋ borrow ์๋ฐ์ ๋ฐ๊ฒฌํ ์ ์๊ณ , ํจํค์ง ๋ก๋ฉ์ด๋ ํ์ ํด์์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค. ๋คํธ์ํฌ ๊ท๋ชจ๊ฐ ์์ ๋๋ ๋ฌธ์ ๊ฐ ์์์ง๋ง, ์์ด์ ์จ์ฒด์ธ ํจํค์ง ์๊ฐ ๋์ด๋๊ณ ํธ๋์ญ์ ๋ณต์ก๋๊ฐ ๋์์ง๋ฉด์ ์ด ๊ตฌ์กฐ๊ฐ ๋ณ๋ชฉ์ด ๋๊ธฐ ์์ํ ๊ฒ์ด๋ค.
1.1.2 ์ ๋ฐฉ์: ๋ถ์ ํ ์คํ
v3์ ์ ํ์ดํ๋ผ์ธ์ ํธ๋์ญ์ ์ ์ฆ์ ์คํํ์ง ์๋๋ค. ๋์ , ์ปดํ์ผ๋ฌ์ฒ๋ผ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ํธ๋์ญ์ ์ ๋ถ์ํ๊ณ ๊ฒ์ฆํ ๋ค์ ์คํํ๋ค.

๋จ๊ณ๋ฅผ ํ๋์ฉ ํ์ด๋ณด์.
Loading: ์๋ณธ ํธ๋์ญ์ ์ ์ ๋ ฅ๊ฐ๋ค์ ๋ถ๋ฅํ๊ณ , ์ฐธ์กฐํ๋ ํจํค์ง์ ํจ์๋ค์ ๋ก๋ฉํ์ฌ ์ค๊ฐ ํํ(Loading AST)์ ๋ง๋ ๋ค. ์ด ๊ณผ์ ์์
CachedPackageStore๊ฐ ์ด๋ฏธ ๋ก๋ฉ๋ ํจํค์ง๋ฅผ ์บ์ฑํด๋๋ค.Typing: Loading AST๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ ๋ช ๋ น์ด์ ์ ๋ ฅ ํ์ ๊ณผ ๋ฐํ ํ์ ์ ์ ์ ์ผ๋ก ์ถ๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ, drop ์์ ์ฑ, ์ ๋ ฅ ์ธ์ ํธํ์ฑ ๋ฑ์ ์คํ ์ ์ ๊ฒ์ฆํ๋ค. ์ VM์์ ๊ฐ์ฅ ๋น์ค์ด ํฐ ๋ถ๋ถ์ด๋ค.
Execution: ํ์ ์ด ํ์ ๋๊ณ ๊ฒ์ฆ๊น์ง ์๋ฃ๋ Typed AST๋ฅผ ์คํํ๋ค. ๋ฐํ์์์ ์ถ๊ฐ์ ์ธ ํ์ ์ฒดํฌ๊ฐ ๊ฑฐ์ ํ์ ์์ผ๋ฏ๋ก ์คํ ์์ฒด๊ฐ ๊ฐ๋ฒผ์์ง๋ค.
์ฝ๋ ๊ท๋ชจ๋ง ๋ด๋ ๋ณํ์ ํฌ๊ธฐ๋ฅผ ์ค๊ฐํ ์ ์๋ค. ๊ธฐ์กด ์คํ ์ฝ์ด๊ฐ ์ฝ 3,500์ค์ด์๋ ๊ฒ์ ๋นํด, ์ ํ์ดํ๋ผ์ธ์ 10,529์ค๋ก 3๋ฐฐ ๊ฐ๊น์ด ๋์ด๋ฌ๋ค. ๋จ์ํ ์ฝ๋๊ฐ ๋์ด๋ ๊ฒ์ด ์๋๋ผ, ์คํ ์ ์ ํด์ผ ํ ์ผ์ด ๊ทธ๋งํผ ๋ง์์ก๋ค๋ ๋ป์ด๋ค.
๋ฐํ์ ๋์ ํด์์์ ์คํ ์ ์ ์ ๋ถ์์ผ๋ก์ ์ ํ์, ๋จ์ํ ์ต์ ํ๊ฐ ์๋๋ผ ์คํ ์์ง์ ์ค๊ณ ์ฒ ํ ์์ฒด๊ฐ ๋ฐ๋๋ ๊ฒ์ด๋ค. ์ด๋ ํฅํ ๋ ๋ณต์กํ ํธ๋์ญ์ ํจํด์ด ๋ฑ์ฅํ๋๋ผ๋ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฐ์ด ๋๋ค.
Loading, Typing, Execution์ด ๋ช ํํ ๋ถ๋ฆฌ๋จ์ผ๋ก์จ, ๊ฐ ๋จ๊ณ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ต์ ํํ๊ฑฐ๋ ๊ต์ฒดํ ์ ์๋ ์ฌ์ง๊ฐ ์๊ฒผ๋ค. ์๋ฅผ ๋ค์ด ํฅํ JIT ์ปดํ์ผ์ด๋ AOT ์ปดํ์ผ ๊ฐ์ ๊ณ ๊ธ ์ต์ ํ๋ฅผ ๋์ ํ ๋, Typed AST๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋ ์๋ก์ด Execution ๋ฐฑ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
1.2 ํจํค์ง๋ณ ์บ์ฑ(Per-Package Caching)์ ๋์
์ VM์ ๋ ๋ค๋ฅธ ํต์ฌ ๋ณํ๋ CachedPackageStore์ ๋์
์ด๋ค.

๊ธฐ์กด์๋ ํจํค์ง๊ฐ ํ์ํ ๋๋ง๋ค ์คํ ์ด์์ ๋งค๋ฒ ์กฐํํ๋ค. ์ VM์์๋ ํ ๋ฒ ๋ก๋ฉ๋ ํจํค์ง๋ฅผ ์ต๋ 200๊ฐ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑํ๊ณ , ํ์ ์ค๋ฆฌ์ง ๋งคํ(์ด๋ค ํ์ ์ด ์ด๋ค ํจํค์ง์์ ์ฒ์ ์ ์๋์๋์ง)๋ ๋ณ๋๋ก 1,000๊ฐ๊น์ง ์บ์ฑํ๋ค. ํธ๋์ญ์ ์ด ์ฌ๋ฌ ํจํค์ง์ ๊ฑธ์ณ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ, ๊ฐ์ ํจํค์ง๋ฅผ ๋ฐ๋ณตํด์ ๋ก๋ฉํ ํ์๊ฐ ์์ด์ง๋ค.
์ผํ ๋จ์ํ ์ต์ ํ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์์ด์ ์คํ ๋ชจ๋ธ์ ์๊ฐํ๋ฉด ์ํฉํธ๊ฐ ํฌ๋ค. ์์ด์์ ํ๋์ PTB๋ ์ฌ๋ฌ ๊ฐ์ Move ํจ์ ํธ์ถ์ ์ฒด์ด๋ํ ์ ์๊ณ , ๋ํ์ด ํ๋กํ ์ฝ์ ๊ฒฝ์ฐ ํ๋์ ํธ๋์ญ์ ์์์ DEX, ๋ ๋ฉ, ์ค๋ผํด ๋ฑ ์๋ก ๋ค๋ฅธ ํจํค์ง์ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ํจํค์ง ์บ์ฑ์ ์ด๋ฐ ๋ณตํฉ ํธ๋์ญ์ ์ ์คํ ์๊ฐ์ ์ค์ง์ ์ผ๋ก ์ค์ฌ์ค๋ค.
๋ค๋ง, ํ์ฌ์ CachedPackageStore๋ ๊ณผ๋๊ธฐ์ ๊ตฌํ์ด๋ค. ์ฝ๋ ๋ด ์ฃผ์์๋ "ํฅํ ๋๋ถ๋ถ ๋๋ ์ ๋ถ๊ฐ ์ VM์ ๋ฐํ์ ์บ์๋ก ๋์ฒด๋ ๊ฒ"์ด๋ผ๊ณ ๋ช
์๋์ด ์๋ค. ์ค์ ๋ก Move VM ๋ฐํ์ ๋ ์ด์ด์๋ ์ด๋ฏธ MoveCache๋ผ๋ ๋ณ๋์ ์บ์ ๊ตฌ์กฐ๊ฐ ์กด์ฌํ๋ฉฐ, DashMap ๊ธฐ๋ฐ์ ๋์์ฑ ์ง์ ํจํค์ง ์บ์์ ๋งํค์ง๋ณ VTable ์บ์๋ฅผ ๊ฐ์ถ๊ณ ์๋ค. ํ์ฌ Sui ์ด๋ํฐ ๋ ๋ฒจ์ CachedPackageStore๊ฐ ๋ด๋นํ๋ ์ญํ ์ด ์ ์ฐจ VM ๋ด๋ถ๋ก ํก์๋๋ฉด, ์บ์ฑ์ด ์คํ ์์ง ๊น์ํ ๊ณณ์์ ์ด๋ฃจ์ด์ง๊ฒ ๋์ด ๋ ํฐ ์ฑ๋ฅ ์ด์ ์ ๊ธฐ๋ํ ์ ์๋ค.
1.3 ์ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด
์ฝ๋ ๋ ๋ฒจ์์ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ v3์ Move VM ์ธํฐํ๋ฆฌํฐ์ ์ถ๊ฐ๋ ์๋ก์ด ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด๋ค์ด๋ค.

์ด๋ค์ Move ์ธ์ด์์ enum(์ด๊ฑฐํ)์ ์ง์ํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ค์ด๋ค. ๊ธฐ์กด Move์์๋ struct๋ง ์ฌ์ฉํ ์ ์์๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๊ฐ์ง ์ํ๋ฅผ ํํํ๋ ค๋ฉด ๋ณ๋์ ๋ชจ๋ ํจํด์ ์ฌ์ฉํด์ผ ํ๋ค. enum์ด ๋์ ๋๋ฉด ํจํด ๋งค์นญ์ด ๊ฐ๋ฅํด์ง๊ณ , ์ค๋งํธ ์ปจํธ๋ํธ์ ์ํ ๋จธ์ ์ ํจ์ฌ ์์ฐ์ค๋ฝ๊ฒ ํํํ ์ ์๊ฒ ๋๋ค.
๋ฐ์ดํธ์ฝ๋ ๊ฒ์ฆ๊ธฐ์๋ ability_cache.rs, data_defs.rs, regex_reference_safety/ ๋ฑ์ ์ ๋ชจ๋์ด ์ถ๊ฐ๋์๋ค. ์ด๋ ๋จ์ํ enum ํ๋๋ฅผ ์ํ ๊ฒ์ด ์๋๋ผ, Move ํ์
์์คํ
์ ์ฒด๊ฐ ํ ๋จ๊ณ ํ์ฅ๋๊ณ ์๋ค๋ ๋ป์ผ๋ก, ์์ด ํ์ ๊ธฐ์กด ์ํคํ
์ฒ๋ก๋ ์ง์ํ๊ธฐ ์ด๋ ค์ ๋ ์ฐจ์ธ๋ Move ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ ๋ง๋ จํ๋ค๊ณ ์ธ๊ธํ๊ณ ์๋ค.
2. ์ด๋ป๊ฒ ๋ด์ผํ ๊น
VM์ ํต์งธ๋ก ์ฌ์์ฑํ๋ค๋ ๊ฒ์ ๋ณด์ ๊ด์ ์์ ์๋นํ ๋ฆฌ์คํฌ๋ฅผ ์๋ฐํ๋ค. ์คํ ๊ณ์ธต์ ๋ธ๋ก์ฒด์ธ์ ํต์ฌ ์ค์ ํต์ฌ์ด๊ธฐ ๋๋ฌธ์, ์ฌ๊ธฐ์ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ ๊ณง๋ฐ๋ก ์์ฐ ์์ค์ด๋ ๋คํธ์ํฌ ์ฅ์ ๋ก ์ด์ด์ง ์ ์๋ค.
์์ด ์ธก์ ์ด ๋ฆฌ์คํฌ๋ฅผ ์ ๋ฉด์ผ๋ก ์ธ์ ํ๊ณ ์๋ค. ๋ด๋ถ ๋ฆฌ๋ทฐ์ OtterSec, Zellic์ ๋ ๋ฆฝ ๊ฐ์ฌ๋ฅผ ์๋ฃํ ๋ฐ ๋ํด, ์ฝ๋๊ฐ ํ ์คํธ๋ท์ ์ฌ๋ผ๊ฐ๊ธฐ๋ ์ ์ HackenProof์์ ๋ฒ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ธ๋ท ๋ณด์ ์์ค์ผ๋ก ์ด์๋ค. ํต์์ ์ผ๋ก ๋ฒ๊ทธ ๋ฐ์ดํฐ๋ ์ฝ๋๊ฐ ํ๋ก๋์ ์ ๊ฐ๊น์์ง์๋ก ๋ณด์์ด ๋์์ง๋๋ฐ, ์์ง ํ ์คํธ๋ท ๋ฐฐํฌ ์ ์ธ ์ฝ๋์ ๋ฉ์ธ๋ท ์์จ์ ์ ์ฉํ ๊ฒ์ ์ปค๋ฎค๋ํฐ์ ๋ณด์ ๋ฆฌ๋ทฐ๋ฅผ ์ต๋ํ ์ด๋ฅธ ์์ ์ ๋์ด์ค๊ฒ ๋ค๋ ์๋๋ก ์ฝํ๋ค.
์ ์ ํ์ ๋ถ์์ด ์ถ๊ฐ๋ ๊ฒ ์์ฒด๋ ๋ณด์์ ๊ธ์ ์ ์ด๋ค. ์คํ ์ ์ ํ์ ๊ณผ borrow ๊ท์น์ ๊ฒ์ฆํ๋ฉด, ๋ฐํ์์์ ์์์น ๋ชปํ ํ์ ํผ๋์ด๋ ๋ ํผ๋ฐ์ค ์ค์ฉ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ ๋ค. ๋ฌผ๋ก ์ ์ ๋ถ์ ์ฝ๋ ์์ฒด์ ๋ฒ๊ทธ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ถฉ๋ถํ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ ํ๋์ด์ผ ํ์ง๋ง, ์ฅ๊ธฐ์ ์ผ๋ก๋ ์คํ ๊ณ์ธต์ ์์ ์ฑ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋์ด๋ ๋ฐฉํฅ์ด๋ค.
์์ด์ ์ VM์ ๋ฉ์ธ๋ท ๋ฐฐํฌ ๋ชฉํ๋ 4์ ์ด๋ค. ๊ทธ ์ ๊น์ง ๋ฒ๊ทธ ๋ฐ์ดํฐ๋ฅผ ํตํด ์ปค๋ฎค๋ํฐ์ ์ถฉ๋ถํ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง๊ธธ ๊ธฐ๋ํ๋ฉฐ, ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ์์ด ์คํ ๊ณ์ธต์ ์ฅ๊ธฐ์ ์ธ ํ์ฅ์ฑ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง ์ง์ผ๋ณผ ํ์๊ฐ ์๋ค.



