๐งก mapping
Solidity์์ mapping์ ํ์ด์ฌ์ dictionary์ ๋น์ทํ ์ญํ ์ ์ํํ๋ค. key-value ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
mapping (address => uint) public accountBalance;
mapping (uint => string) userIdToName;
๐งก Msg.sender
msg.sender๋ ๋ชจ๋ ํจ์์์ ์ด์ฉ ๊ฐ๋ฅํ ์ ์ญ๋ณ์๋ค. ๋ง ๊ทธ๋๋ก message sender๋ฅผ ๋ปํ๋ค.
mapping (address => uint) favoriteNumber;
function setMyNumber(uint _myNumber) public {
favoriteNumber[msg.sender] = _myNumber;
}
function whatIsMyNumber() public view returns (uint) {
return favoriteNumber[msg.sender];
}
๐งก Require
Solidity์์ require์ ํน์ ์กฐ๊ฑด์ด ์ฐธ์ด ์๋ ๋ ํจ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์์ํค๋ ์ง์์์ด๋ค. ์ด์ง assert ๋๋๐
๊ทธ๋ฆฌ๊ณ , Solidity๋ ์์ฒด์ ์ผ๋ก ๋ฌธ์์ด์ ๋น๊ตํ๋ ํจ์๊ฐ ์์ด์ ํด์๊ฐ์ ๋น๊ตํด์ผ ํ๋ค. WA~
function sayHiToVitalik(string _name) public returns (string) {
require(keccak256(_name) == keccak256("Vitalik"));
return "Hi!";
}
๐งก Inheritance
๊ทธ๋ฅ.. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํํ ์์ ์์คํ ์ด๋ค.
contract Doge {
function catchphrase() public returns (string) {
return "So Wow CryptoDoge";
}
}
contract BabyDoge is Doge {
function anotherCatchphrase() public returns (string) {
return "Such Moon BabyDoge";
}
}
๐งก Import
๋ค๋ฅธ ํ์ผ์ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉํ๋ ์ง์์์ด๋ค.
import "./someothercontract.sol";
contract newContract is SomeOtherContract {
}
๐งก Storage vs Memory ๐ค
๋งค์ฐ ๋งค์ฐ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ด๋ค.
Solidity์๋ ๋ณ์๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ผ๋ก Storage์ Memory๋ฅผ ์ฌ์ฉํ๋ค. Storage๋ ๋ธ๋ก์ฒด์ธ ์์์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ ๋ณ์์ด๊ณ Memory๋ ์์์ ์ผ๋ก ์ ์ฅ๋๋ ๋ณ์๋ก, ์ปจํธ๋ํธ ํจ์์ ๋ํ ์ธ๋ถ ํธ์ถ์ด ์ด๋ฃจ์ด์ง ๋ ์ญ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ Solidity๊ฐ ์์์ ์ฒ๋ฆฌํด์ค๋ค. ์์ฃผ ์ข์์ฉ๐ฅฐ except for struct
๊น์ ๋ณต์ฌ vs ์์ ๋ณต์ฌ์ ์์ ์ด๋ค.
contract SandwichFactory {
struct Sandwich {
string name;
string status;
}
Sandwich[] sandwiches;
function eatSandwich(uint _index) public {
Sandwich storage mySandwich = sandwiches[_index];
mySandwich.status = "Eaten!";
Sandwich memory anotherSandwich = sandwiches[_index + 1];
anotherSandwich.status = "Eaten!";
sandwiches[_index + 1] = anotherSandwich;
}
}
๐งก Access Modifier
Solidity์๋ Internal๊ณผ External์ด๋ผ๋ ํจ์ ์ ๊ทผ ์ ์ด์๊ฐ ์๋ค.
Internal์ ํจ์๊ฐ ์ ์๋ ์ปจํธ๋ํธ๋ฅผ ์์ํ๋ ์ปจํธ๋ํธ์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ปํ๋ค.
External์ ์ปจํธ๋ํธ ๋ฐ๊นฅ์์๋ง ํธ์ถ๋ ์ ์๊ณ ์ปจํธ๋ํธ ๋ด์ ๋ค๋ฅธ ํจ์์ ์ํด ํธ์ถ๋ ์ ์๋ค๋ ๊ฒ์ ๋ปํ๋ค.
contract Sandwich {
uint private sandwichesEaten = 0;
function eat() internal {
sandwichesEaten++;
}
}
contract BLT is Sandwich {
uint private baconSandwichesEaten = 0;
function eatWithBacon() public returns (string) {
baconSandwichesEaten++;
eat();
}
}
๐งก Interface
์ปจํธ๋ํธ๋ฅผ ์ด์ฉํ์ฌ interface๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ.
contract NumberInterface {
function getNum(address _myAddress) public view returns (uint);
}
๐งก ๋ค์์ ๋ฐํ๊ฐ ์ฒ๋ฆฌํ๊ธฐ
Solidity์ ๋ค์์ ๋ฐํ๊ฐ์ ์ฒ๋ฆฌํ๋ ํน์ํ ๋ฌธ๋ฒ์ด๋ค.
function multipleReturns() internal returns(uint a, uint b, uint c) {
return (1, 2, 3);
}
function processMultipleReturns() external {
uint a;
uint b;
uint c;
(a, b, c) = multipleReturns();
}
function getLastReturnValue() external {
uint c;
(,,c) = multipleReturns();
}
๐งก if
์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์กฐ๊ฑด๋ฌธ์ด๋ค.
function eatBLT(string sandwich) public {
if (keccak256(sandwich) == keccak256("BLT")) {
eat();
}
}
https://share.cryptozombies.io/ko/lesson/2/share/bjloed?id=Y3p8MTIwMjIz
'Solidity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CryptoZombie] 1-5 ERC721 & Crypto-Collectibles (1) | 2021.08.02 |
---|---|
[CryptoZombie] 1-4 Zombie Battle System (0) | 2021.08.02 |
[CryptoZombie] 1-3 Advanced Solidity Concepts (0) | 2021.07.22 |
[CryptoZombie] 1-1 Making the Zombie Factory (0) | 2021.07.22 |
[Chap4] ์ค๋งํธ ์ปจํธ๋ํธ์ ๊ฐ๋ (0) | 2021.07.16 |