데이터 타입
bool
int/ uint ( uint8, uint16 ... uint256)
address
이더 단위(ether, wei, finney, szabo)
Fixed point numbers( 고정 소수점 선언은 가능하나 할당하지 못함)
bytes, string : 동적 크기 바이트 배열
연산
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지
** 지수
해시함수
keccak256 // stirng == string solidity에서 지원하지 않으므로 keccak256(string1) == keccak256(string2)로 비교
memory/ storage
메모리는 함수가 종료되면 메모리 해제
storage는 상태 변수로 쓰임
mapping
해시 맵과 같은 key- value 구조 데이터 집합 구조
mapping(address => uint) public balances;
balances[msg.sender] = _newBalance;
Struct 구조체
struct Person {
string name;
uint age;
}
Person a = Person("Dean", 24);
Array 배열
uint [] numbers;
numbers.push(1);
let arraysize = numbers.length;
enum 열거형
enum RPS { Rock. Paper, Scissors}
RPS move = RPS.Rock;
delete
데이터 값 삭제 (초기값으로 변경) 정수면 0, 배열이면 배열의 크기를 0으로 만든다. 매핑에는 사용하지 못함
uint x = data;
delete x; // sets x to 0, does not affect data
delete data; // sets data to 0, does not affect x which still holds a copy
uint[] storage y = dataArray;
delete dataArray; // this sets dataArray.length to zero, but as uint[] is a complex object, also
// y is affected which is an alias to the storage object
// On the other hand: "delete y" is not valid, as assignments to local variables
// referencing storage objects can only be made from existing storage objects.
require
require(bool) true 일 때만 다음 라인 실행
접근 제어자
internal, external, public, private
internal 상속하는 컨트랙트 내에서 까지 접근 가능
external 컨트랙트 바깥에서만 접근할 수 있고 컨트랙트 내의 다른 함수에서는 접근 불가
함수 제어자
함수를 호출할 수 있는 접근 권한을 지정
payable 이더 결제를 가능하게 하는 함수 제어자 payable 선언 안 한 함수는 이더 전송 함수 호출 불가
onlyowner 같은 외부 라이브러리 또는 modifier로 구현해서 사용 가능
조건문 if //똑같음
반복문 for
for(uint i=1; i <=10; i++) {} // 같음
Pure/ View
pure : 컨트랙트 상태 변수에 값을 쓰지도 않고 읽어오지도 않음
view : 상태 변수 값을 가져오기만 함
상속(부모의 internal, public 접근 가능, 다중 상속 가능)
contract A is B, C {}
Interface 인터페이스
선언은 컨트랙트 같지만 함수의 몸통을 구현하지 않음
contract Animal {
function say();
}
//버전 업데이트
interface Animal {
function say();
}
Event 이벤트
이더 전송과 같은 일이 발생하면 트랜잭션에 로그를 같이 생성해 웹에서도 확인할 수 있다.
emit으로 로그 생성
event Transfer(address sender, uint amout);
function transer() { emit Transfer(msg.sender, 100); }
revert(명령문, 함수)
에러를 발생시키고 이전 상태로 되돌림
revert CustomError("hi");
revert();
'블록체인 > 이더리움' 카테고리의 다른 글
[Solidity] fallback 과 payable, 이더 전송 함수 (0) | 2022.05.12 |
---|---|
[Solidity] Scaffold-Eth 설치하기 (0) | 2022.05.11 |
[Hardhat] 컴파일 및 테스트하기 (0) | 2022.05.07 |
OpenZepplin이란? (0) | 2022.05.04 |
[Hardhat] Hardhat 설치하기 (0) | 2022.04.17 |