Solidity Language
: smart contract 과정 중 EVM에서 byte코드를 생성하고, smart contract을 만들기 위한 가장 많이 쓰이는 언어이다.
1) solidity 버전 선언
: 두 가지 중 마음에 드는 걸 사용하자.
- pragma solidity >= 0.4.16 <0.9.0 // 0.4.16 버전 이상, 0.9.0 버전 이하를 통해서 실행이 됨.
- pragma solidity ^0.6.0 // 최소 0.6.0 이상의 버전으로 컴파일되어야 해. (0.7.0은 X)
2) 데이터 타입 종류
- boolean
- integer
- fixed point : fixed, ufixed(fixed32x2 - 전체가 32비트인 실수, 소수점 2자리까지 표현)
- address : 20바이트 주소
- byte array(fixed) : 1-32까지 고정된 사이즈로 만들 수 있음.
- byte array(dynamic) : bytes, string
- Enum
- Arrays
- Struct
- Mapping
- Time units : 10 minutes
- Ether unis : wei, Szabo, ether
3) 사전에 선언된 이름들
3-1) 사전에 선언된 변수명
- msg object : msg.sender(=address) / msg.value(=ether) / msg.data(=데이터 payload) / msg.sig(어떤 function인지)
- tx object : tx.gasprice(=gas 가격) / tx.origin(=transaction을 만든 address)
- block object : block.coinbase(=miner address) / block.difficulty(=난이도) / block.gaslimit(=최대 허용치)
- address object : address.balance / address.transfer
3-1) 사전에 선언된 함수명
- built-in function : addmod, mulmod, keccak256, sha256, sha3, ripemd160, ecrecover, this, selfdestruct
- contract
- interface
- library
4) 함수
4-1) 함수 키워드
- public : default, 다른 EOA나 외부에서도 누구나 쓸 수 있게 하겠어.
- external : 외부의 EOA는 이 funciont을 쓸 수 있지만, 내부에서는 X
- internal : 내부에서만 쓸 수 있고, 외부에서는 쓸 수 X / 파생된 contract들도 사용할 수 있음.
- private : 오직 자기 자신만 쓸 수 있음. "호출만 안 되는 것임. 코드를 볼 수는 있음"
- view : 보기만 가능
- pure : 고치는 것뿐만 아니라 상태 정보에 access 못함.
- payable : ether의 전송도 처리해줄 수 있음.
4-2) 함수
- receive 함수 : 이 contract에게 receive를 받아 처리함. (원형. receive () external payable{ .. } )
- fallback 함수 : 매칭이 되는 데이터나 함수가 없을 때 fallback 함수를 사용함. (원형. fallback () external [payable] )
- contract 함수 : contract을 만들었을 때 처음 실행되는 함수. 초기 state를 설정함. 필수는 아니고 옵션임.
// 아래와 같이 명시적으로 작성함.
contract MEContract{
constructor(){
// constructor
}
}
- selfdestruct 함수 : 이더를 받을 대상의 address를 적어주고 지워줌. (원형. selfdestruct(address recipient); )
- require 함수 : if문 같은 역할을 함. (원형. require(); )
- modifier 함수 : 함수에 여러 상태를 적용시킬 수 있음.
** modifier 함수 사용 예시
function destroy() public {
require(msg.sender == owner);
selfdestruct(owner);
}
// 하지만 위의 require코드가 따로 modifer 함수로 만들어져 사용될 수 있음.
modifier onlyOwner{
require(msg.sender == owner);
_; // 해당 코드를 modified function으로 변경시킨다는 의미
}
function destroy() public onlyOnwer{
selfdestruct(owner);
}
** 에러를 핸들링할 때 주로 사용하는 함수
- assert()
- require()
- revert
'학교 공부 > 블록체인' 카테고리의 다른 글
[Ethereum] Solidity 기본 변수와 함수 종류 (0) | 2021.08.01 |
---|---|
[Ethereum] Smart Contract 보안 취약점 (2) | 2021.06.11 |
[Ethereum] Smart Contract이란? (0) | 2021.06.03 |
[Ethereum] Transaction이란? (0) | 2021.06.03 |
[Ethereum] 이더리움에서 사용하는 암호학 (0) | 2021.06.03 |
댓글