Solidity란 이더리움 스마트 컨트랙트를 구현하기 위해서 만들어진 이더리움 전용 언어.
-
EVMEthereum Virtual Machine에서 구동.
-
코인이 전달되는 코드이기 때문에 베스트 프랙티스를 참고해서 작성하길 권유.
-
지원 개발 환경(IDE)
-
Remix
-
…
-
Hello World
// SPDX-License-Identifier: MIT // (1)
pragma solidity ^0.8.12; // (2)
contract HelloWorld { // (3)
function helloWorld() external pure returns (string memory) { (4)
return "Hello, World!";
}
}
-
저작권
-
컴파일러 버전 설정
-
컨트랙트명을
HelloWorld
로 지정 -
`function <함수명>() `
자료형
value types
-
uint
: 부호 없는 정수형. 기본적으로 256비트 자료형(uint256
).uint32
,uint64
선언 가능. -
int
: 정수형 -
bool
: 논리 자료형 -
string
: UTF-8 인코딩 문자열 -
bytes
: 바이트 -
address
: 20 바이트 이더리움 주소 값
reference types
-
storage
-
memory
-
구조체
struct Zombie { string name; uint dna; }
-
배열
uint[4] fixedArray; (1) uint[] dynamicArray; (2) new uint[](5); (3) uint[5] public publicArray; (4)
-
크기 고정
-
계속 커질 수 있는 배열
-
new
키워드 활용한 선언 -
public
키워드 선언을 통해 다른 컨트랙트에서 조회 가능 (just 조회)
-
맵핑
mapping(_KeyType => _ValueType) public <name>;
-
_KeyType
: 매핑, 동적 크기 배열, 컨트랙트, 열거형, 구조체를 제외한 모든 유형 -
_ValueType
: 매핑 타입을 포함한 모든 유형
enum
함수
contract ZombieFactory {
function createZombie(string _name, uint _dna) { (1)
}
function processDna(uint _dna) private { (2)
}
function convertDna(uint _dna) public returns (string) { (3)
return "converted";
}
function rollbackDna(uint _dna) private pure returns (string) { (4)
require(_dna > 0, "message"); (5)
}
}
-
function
키워드를 통해 선언 가능. -
public
,private
접근자를 통해 외부 컨트랙트의 호출 제한 설정 가능. (default:public
) -
returns (<type>)
키워드를 통해 반환 타입 지정 가능 -
함수 제어자 설정 가능
-
view
: 컨트랙트의 변수를 읽기만 할 때. -
pure
: 컨트렉트의 변수를 읽지도, 쓰지도 않을 때 (순수 함수를 의미하는 것 같음)
-
-
require(<conditional>, <message>)
를 통해 사전 검증 가능
function multiReturn() public pure returns (
uint a;
uint b;
uint c;
) {
return (10, 20, 30); (1)
}
uint number;
(, , number) = multipleReturn(); (2)
-
한번에 여러 값 반환 가능
-
세번째 값만 사용하고자 할 경우
난수 생성
-
keccak256
해시 함수 제공-
SHA-3 사용
-
충돌이 희박함
-
keccak256("aaa")