๐ฌ Solidity 3๊ฐ ๐ฌ
๐ ์ปจํธ๋ํธ์ ๋ถ๋ณ์ฑ
์ด๋๋ฆฌ์์ ์ปจํธ๋ํธ๋ฅผ ๋ฐฐํฌํ๊ณ ๋๋ฉด ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ ๊ฒฐ์ ์ด ์์ผ๋ฉด, ๋ฐฐํฌ ํ ๊ณ ์น ๋ฐฉ๋ฒ์ด ์๋ค!
์ด๋ฐ ์ด์ ๋ก DApp์์ ์ค์ํ ์ผ๋ถ๋ฅผ ์์ ํ ์ ์๋๋ก ํ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋๋๊ฒ ํฉ๋ฆฌ์ !
๐ ์์ ๊ฐ๋ฅํ ์ปจํธ๋ํธ
๊ทผ๋ฐ ์ด๋ ๊ฒ ์ปจํธ๋ํธ ์์ ๊ฐ๋ฅํ ํจ์๋ฅผ external
ํจ์๋ก ๋ง๋ค์ด๋์ผ๋ฉด
๋๊ตฌ๋ ์ด ํจ์๋ฅผ ํธ์ถํ๊ณ ์ปจํธ๋ํธ๋ฅผ ์์ ํ ์ ์๋ค.
์ด๊ฑธ ๋์ฒํ๊ธฐ ์ํด์๋ ์ปจํธ๋ํธ๋ฅผ ์์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ!
์ปจํธ๋ํธ๋ฅผ ๋์์ผ๋ก, ํน๋ณ ๊ด๋ฆฌ์๊ฐ ์์์ ์๋ ค์ฃผ๋ ๊ฒ
๐ onlyOwner ํจ์ ์ ์ด์
ํจ์ ์ ์ด์๋ modifier
ํค์๋ ์ฌ์ฉ
์ง์ ํธ์ถ์ x. ํจ์ ์ ์๋ถ ๋์ ํด๋น ํจ์ ์๋ ๋ฐฉ์ ๋ฐ๊พธ๋๋ก ์ ์ด์์ ์ด๋ฆ ๋ถ์ผ ์ ์์
modifier onlyOwner() {
require(msg.sender == owner);
_;
_;
: ๋ณธ๋ฌธ์ฝ๋๋ก ๋๋์๊ฐ๊ฒ ํจ.
contract MyContract is Ownable {
event LaughManiacally(string laughter);
// ์๋ `onlyOwner`์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ๋ณด๊ฒ:
function likeABoss() external onlyOwner {
LaughManiacally("Muahahahaha");
}
}
likeABoss
๊ฐ ์คํ๋๋ฉด, onlyOwner
๊ฐ ๋จผ์ ์คํ๋จ.
_;
์ ์ํด ๋ค์ ๋ณธ๋ฌธ ์ฝ๋ likeABoss
๋ก ๋์๊ฐ์ ์ฝ๋๋ฅผ ์คํํ๋ค.
๐ ๊ฐ์ค(Gas)
์๋ฆฌ๋ํฐ์์๋ ์ฌ์ฉ์๋ค์ด ๋ด๊ฐ ๋ง๋ DApp์ ํจ์๋ฅผ ์คํํ ๋๋ง๋ค ๊ฐ์ค ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํํ๋ฅผ ์ง๋ถํ๊ฒ ๋๋ค.
๊ฐ๊ฐ์ ์ฐ์ฐ์ ๊ฐ์ค ๋น์ฉ์ด ์๊ณ , ์ฐ์ฐ์ ์ํํ๋ ๋ฐ ์๋ชจ๋๋ ์ปดํจํ
์์์ ์์ด ์ด๋ฅผ ๊ฒฐ์ ํจ.
๋ด ํจ์์ ์ ์ฒด Gas ๋น์ฉ์ ๊ทธ ํจ์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ ์ฐ์ฐ๋ค์ ๊ฐ์ค ๋น์ฉ์ ๋ชจ๋ ํฉ์น ๊ฒ๊ณผ ๊ฐ๋ค!
ํจ์๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ์๋ค์ด ์ค์ ๋์ ์ง๋ถํ๊ธฐ ๋๋ฌธ์, ์ด๋๋ฆฌ์์์์ ์ฝ๋ ์ต์ ํ๋ ๋งค์ฐ ์ค์ํจ!
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ค ๋จ์ถ์ ์ด๋ป๊ฒ?
uint ๋์ ์ uint8์ ์ฐ๋๋ผ๋ ์๋ฌด ์ํฅ์ด ์๋ค.
์๋ฆฌ๋ํฐ์์๋ uint์ ํฌ๊ธฐ์ ์๊ด์์ด 256๋นํธ์ ์ ์ฅ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ์ก์๋๊ธฐ ๋๋ฌธ
ํ์ง๋ง struct ์์์๋ ์์ธ!
๊ตฌ์กฐ์ฒด ์์์ ์ฌ๋ฌ uint๋ฅผ ์ด๋ค๋ฉด, ์ต๋ํ ์์ ๋นํธ์ uint์ฐ๊ธฐ
๐ ์๊ฐ ๋จ์
now
ํ์ฌ์ ์ ๋์ค ํ์์คํฌํ ๊ฐ ์ป์ ์ ์์
์ด๊ฑธ๋ก ์ข๋น ์ฌ์ฌ์ฉ๋๊ธฐ์๊ฐ, ๋ ๋ฒจ ๊ฐ์ ์ถ๊ฐํจ
๐ storage ํฌ์ธํฐ
private ๋๋ internal ํจ์์ ์ธ์๋ก์ ๊ตฌ์กฐ์ฒด์ storage
ํฌ์ธํฐ๋ฅผ ์ ๋ฌํ ์ ์์
ํจ์๋ค ๊ฐ์ ๊ตฌ์กฐ์ฒด ์ฃผ๊ณ ๋ฐ์ ๋ ์ ์ฉ
๐ ํจ์ ์ ์ด์์ ๋ ๋ค๋ฅธ ํน์ง
ํจ์ ์ ์ด์๋ ์ธ์ ๋ํ ๋ฐ์ ์ ์๋ค!
// ์ฌ์ฉ์์ ๋์ด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋งคํ
mapping (uint => uint) public age;
// ์ฌ์ฉ์๊ฐ ํน์ ๋์ด ์ด์์ธ์ง ํ์ธํ๋ ์ ์ด์
modifier olderThan(uint _age, uint _userId) {
require (age[_userId] >= _age);
_;
}
// ์ฐจ๋ฅผ ์ด์ ํ๊ธฐ ์ํด์๋ 16์ด ์ด์์ด์ด์ผ ํ๋ค.
// `olderThan` ์ ์ด์๋ฅผ ์ธ์์ ํจ๊ป ํธ์ถํ๋ ค๋ฉด ์ด๋ ๊ฒ:
function driveCar(uint _userId) public olderThan(16, _userId) {
// ํ์ํ ํจ์ ๋ด์ฉ๋ค
}
๐ ์ข๋น ์ ์ด์
ํจ์ ์ ์ด์๋ค ์ด์ฉํ์ฌ
๋ ๋ฒจ์
ํ ๋ ์ข๋น ์ด๋ฆ ๋ณ๊ฒฝํ๊ณ / ์์์ dna๊ฐ ๋ถ์ฌํ ์ ์๋๋ก ํ๋ ์ธ์ผํฐ๋ธ ๋ถ์ฌ
๊ทธ ํจ์ ๊ตฌํํจ!
๐ 'view'ํจ์๋ฅผ ์ด์ฉํด ๊ฐ์ค ์ ์ฝํ๊ธฐ
view ํจ์๋ ๊ฐ์ค๊ฐ ๋ค์ง ์๋๋ค
view ํจ์๊ฐ ๋ธ๋ก์ฒด์ธ ์์์ ์ค์ ๋ก ์ด๋ค ๊ฒ๋ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ
(์ธ๋ถ์์ ํธ์ถ๋์์ ๋๋ง)
์ฌ์ฉ์๋ค์ ์ ์ฒด ์ข๋น ๊ตฐ๋ ๋ฐํํ๋ ํจ์ ๊ตฌํ
์ฌ์ฉ์๋ค์ ํ๋กํ ํ์ด์ง์ ๊ทธ๋ค์ ์ ์ฒด ๊ตฐ๋๋ฅผ ํ์ํ๊ณ ์ถ๋ค๋ฉด, ์ด ํจ์๋ฅผ ํธ์ถํ ์ ์๋๋ก ํ๋ ํจ์ ๊ตฌํ
๐ Storage๋ ๋น์ธ๋ค
๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ์ฐ๊ฑฐ๋ ๋ฐ๊ฟ ๋, ๋ธ๋ก์ฒด์ธ์ ์๊ตฌ์ ์ผ๋ก ๊ธฐ๋ก๋๊ธฐ ๋๋ฌธ์
storage์ ์ฐ๊ธฐ ์ฐ์ฐ์ ๋งค์ฐ๋งค์ฐ ๋น์! ์ต๋ํ ํผํด์ฃผ์.
storage์ ์๋ฌด๊ฒ๋ ์ ์ฐ๊ณ ๋ ํจ์ ์์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋๋ ค๋ฉด ๋ฐฐ์ด์ memory ํค์๋๋ฅผ ์ฐ๋ฉด ๋๋ค
์ด ๋ฐฐ์ด์ ํจ์๊ฐ ๋๋ ๋๊น์ง๋ง ์กด์ฌํจ.
function getArray() external pure returns(uint[]) {
// ๋ฉ๋ชจ๋ฆฌ์ ๊ธธ์ด 3์ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๋ค.
uint[] memory values = new uint[](3);
// ์ฌ๊ธฐ์ ํน์ ํ ๊ฐ๋ค์ ๋ฃ๋๋ค.
values.push(1);
values.push(2);
values.push(3);
// ํด๋น ๋ฐฐ์ด์ ๋ฐํํ๋ค.
return values;
}
ํน์ ํ ์ฌ์ฉ์๊ฐ ์์ ํ ๋ชจ๋ ์ข๋น๋ฅผ uint[]
๋ฐฐ์ด๋ก ๋ฐํํด์ฃผ๋ ํจ์ ๊ตฌํ
๐ For ๋ฐ๋ณต๋ฌธ
for ๋ฐ๋ณต๋ฌธ์ ์ฐ์ง ์๊ณ ๊ทธ๋ฅ ๋ฐฐ์ด์ ํค์๋๋ฅผ ์ฐ๋ ํํ๋ง ์ฐ๋ฉด, ๋์ค์ ์ฌ์ฉ์์ ์ข๋น๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ข๋น ๋ฐฐ์ด๋ก ์ฎ๊ฒจ๊ฐ๋ ๊ฒฝ์ฐ
๋ฐฐ์ด์ ๋น ์๋ฆฌ๋ฅผ ๋ฉ์ฐ๋ ๋ฐ์ ์ฐ์ฐ์ด ํฌ๋จธ์น ์๋ชจ๋จ.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ ๊ทผํ ํ ํน์ ์ฌ์ฉ์์ ์ข๋น๋ค๋ก ๋ค์ ์ถ๋ ค์ ๋ฐฐ์ด ๋ค์ ๋ง๋ค ์ ์์
DApp ์์ ์๋ ๋ชจ๋ ์ข๋น๋ค์ ์ ๊ทผํ๊ณ , ๊ทธ๋ค์ ์์ ์๊ฐ ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ์์ธ์ง ๋น๊ตํ์ฌ ํ์ธํ ํ, ์กฐ๊ฑด์ ๋ง๋ ์ข๋น๋ค์ result ๋ฐฐ์ด์ ์ถ๊ฐํ ํ ๋ฐํํ๋ ํจ์ ๊ตฌํ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฌ Solidity 3๊ฐ ๐ฌ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@hyjno2/์๋ฆฌ๋ํฐ-3๊ฐ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค