Smart contract storage

Storage data

슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄, storage, memoryλ“±μ˜ 데이터λ₯Ό λ‹€λ£¨κ²Œ λœλ‹€.

storage같은 κ²½μš°μ—λŠ” 블둝체인 상에 영ꡬ적으둜 μ €μž₯이 λ˜λŠ”λ°, μ •ν™•ν•˜κ²Œ 어디에 μ–΄λ–»κ²Œ μ €μž₯이 λ˜λŠ” κ²ƒμΌκΉŒ?

λ‹€μŒκ³Ό 같은 μ»¨νŠΈλž™νŠΈλ₯Ό μ˜ˆμ‹œλ‘œ λ“€μ–΄λ³΄μž.

contract StorageContract {

	struct Data {
		address user;
		uint256 amount;
	}

	mapping (uint256=>Data) mapper;
}

mapper에 μžˆλŠ” data듀은 어디에 μ €μž₯될까?

λ‹Ήμ—°νžˆ 블둝에 μ €μž₯λœλ‹€. λΈ”λ‘μ²΄μΈμ˜ 각 λΈ”λ‘μ—λŠ” νŠΈλžœμž­μ…˜ λͺ©λ‘μ΄ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

νŠΈλžœμž­μ…˜μ—λŠ” μ•”ν˜Έν™”ν 전솑이 포함될 수 μžˆμ§€λ§Œ 슀마트 μ»¨νŠΈλž™νŠΈμ™€μ˜ μƒν˜Έ μž‘μš©λ„ 포함될 수 μžˆλ‹€.

νŠΈλžœμž­μ…˜μ΄ 슀마트 μ»¨νŠΈλž™νŠΈμ™€ μƒν˜Έ μž‘μš©ν•  λ•Œ μ»¨νŠΈλž™νŠΈμ˜ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³  ν•΄λ‹Ή μŠ€ν† λ¦¬μ§€ 데이터λ₯Ό μˆ˜μ •ν•  수 μžˆλ‹€.

이 λ•Œ 슀마트 μ»¨νŠΈλž™νŠΈμ˜ μƒˆλ‘œμš΄ μƒνƒœλŠ” 블둝체인에 μ €μž₯λœλ‹€.

그런데 μ—¬κΈ°μ„œ ν•œ κ°€μ§€ 의문이 더 생긴닀.

슀마트 μ»¨νŠΈλž™νŠΈμ˜ μ½”λ“œλŠ” λ°”μ΄νŠΈ μ½”λ“œλ‘œ 컴파일 λ˜λŠ”λ°, λ‚΄κ°€ μŠ€ν† λ¦¬μ§€ 데이터λ₯Ό λ°”κΎΈλ©΄ 그것은 μ–΄λ–€ μ‹μœΌλ‘œ 반영이 될까?

슀마트 μ»¨νŠΈλž™νŠΈμ™€ μƒν˜Έ μž‘μš©ν•  λ•Œ μ‹€μ œλ‘œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ€ λ°μ΄ν„°μ˜ 특수 νŽ˜μ΄λ‘œλ“œκ°€ ν¬ν•¨λœ νŠΈλžœμž­μ…˜μ„ μƒμ„±ν•˜λŠ” 것이닀.

이 νŽ˜μ΄λ‘œλ“œλŠ” 일반적으둜 슀마트 μ»¨νŠΈλž™νŠΈμ— μˆ˜ν–‰ν•  μž‘μ—…μ„ μ•Œλ €μ£ΌλŠ” 맀개 λ³€μˆ˜λ₯Ό ν¬ν•¨ν•œ ν•¨μˆ˜ ν˜ΈμΆœμ΄λ‹€.

νŠΈλžœμž­μ…˜μ΄ 블둝에 ν¬ν•¨λ˜κ³  블둝이 μ±„κ΅΄λ˜λ©΄ λ„€νŠΈμ›Œν¬μ˜ λͺ¨λ“  λ…Έλ“œλŠ” νŠΈλžœμž­μ…˜μ—μ„œ ν•¨μˆ˜ ν˜ΈμΆœμ„ μ‹€ν–‰ν•œλ‹€.

μ—¬κΈ°μ—λŠ” 제곡된 λ§€κ°œλ³€μˆ˜λ‘œ μ»¨νŠΈλž™νŠΈμ˜ λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이 포함λœλ‹€.

제곡된 νŽ˜μ΄λ‘œλ“œλ₯Ό μ΄μš©ν•΄μ„œ, λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€.

ν•¨μˆ˜κ°€ μ»¨νŠΈλž™νŠΈμ˜ μƒνƒœλ₯Ό μˆ˜μ •ν•˜λ©΄(즉, μ»¨νŠΈλž™νŠΈμ— μ €μž₯된 데이터가 변경됨) μƒˆ μƒνƒœκ°€ 블둝체인에 μ €μž₯λœλ‹€.

μœ„μ—μ„œ μ„€λͺ…ν•œ 것과 동일

μ΄λŠ” μ»¨νŠΈλž™νŠΈ 자체의 λ°”μ΄νŠΈ μ½”λ“œκ°€ λ³€κ²½λœλ‹€λŠ” μ˜λ―ΈλŠ” μ•„λ‹ˆλ‹€.

λ°”μ΄νŠΈμ½”λ“œλŠ” 계약 μ†ŒμŠ€ μ½”λ“œμ˜ 컴파일된 버전이며 계약이 배포된 후에도 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

λŒ€μ‹  λ³€κ²½λ˜λŠ” 것은 μ»¨νŠΈλž™νŠΈμ™€ μ—°κ²°λœ μƒνƒœ(status)이닀.

μ»¨νŠΈλž™νŠΈμ˜ λ°”μ΄νŠΈ μ½”λ“œλ₯Ό ν”„λ‘œκ·Έλž¨μœΌλ‘œ, μ»¨νŠΈλž™νŠΈμ˜ μƒνƒœλ₯Ό ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ‘œ 생각할 수 μžˆλ‹€.

μ»¨νŠΈλž™νŠΈμ™€ μƒν˜Έ μž‘μš©ν•  λ•Œ ν”„λ‘œκ·Έλž¨ 자체(λ°”μ΄νŠΈ μ½”λ“œ)λ₯Ό λ³€κ²½ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€.

λŒ€μ‹  νŠΉμ • μž…λ ₯으둜 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κ³  이둜 인해 λ³€μˆ˜(μƒνƒœ)κ°€ 변경될 수 μžˆλ‹€.

μ»¨νŠΈλž™νŠΈμ˜ μƒνƒœμ—λŠ” ꡬ쑰체 및 λ§€ν•‘κ³Ό 같은 λ³΅μž‘ν•œ 데이터 μœ ν˜•μ„ ν¬ν•¨ν•˜μ—¬ ν•¨μˆ˜ λ³Έλ¬Έ μ™ΈλΆ€μ—μ„œ μ„ μ–Έλœ λͺ¨λ“  λ³€μˆ˜κ°€ 포함λœλ‹€.

각 μ»¨νŠΈλž™νŠΈμ˜ μƒνƒœλŠ” Key-value pair의 ꡬ쑰λ₯Ό κ°€μ§€λŠ” 블둝체인 μƒνƒœ 트리(머클 트리)의 νŠΉμ • μœ„μΉ˜μ— μ €μž₯λœλ‹€.

μ»¨νŠΈλž™νŠΈμ™€ μƒν˜Έ μž‘μš©ν•  λ•Œ λ³€κ²½λ˜λŠ” 것은 λ°”μ΄νŠΈ μ½”λ“œκ°€ μ•„λ‹ˆλΌ μƒνƒœ 트리의 값이닀.

이더리움 λΈ”λ‘μ²΄μΈμ˜ 각 λΈ”λ‘μ—λŠ” Merkle Tree의 루트 ν•΄μ‹œκ°€ 블둝 ν—€λ”μ˜ μΌλΆ€λ‘œ ν¬ν•¨λœλ‹€.

λ”°λΌμ„œ μƒνƒœ 트리 μžμ²΄λŠ” 블둝체인 내에 직접 μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€.

였히렀 이더리움 λ„€νŠΈμ›Œν¬μ— μ°Έμ—¬ν•˜λŠ” 각 λ…Έλ“œμ— μ˜ν•΄ λ³„λ„λ‘œ μœ μ§€ κ΄€λ¦¬λœλ‹€.

Last updated