반응형
# 솔리디티 언어 이해
1. 컨트랙 구조
- 객체지향 언어들의 클래스와 비슷
- 문법은 자바스크립트와 비슷
- 타입 구분 가능 및 상속 같은 객체지향 개념 지님(컨트랙트끼리 상속 가능)
- line 1 : solidty compiler version
- line 2 : contract name
- line 3 : 상태변수, 클래스의 멤버변수라고 생각하면 된다
- line 4 : 생성자
- line 5 : 함수 구조 (함수 이름, 매개 변수, 함수 타입, 값 리턴 타입 정의)
Pragma solidity ^0.4.23; // 솔리디티 컴파일 버전
contract MyContract {
uint count; // 상태 변수
constructor() public { // 생성자
//....
}
function numOfStudents(address_teacher) | public view | return (uint) { // 함수
}
}
contract YourContract {
MyContract myContract;
function callTest() public {
myContract.test();
}
}
2. 접근 제어자
- external : 외부 컨트랙트만 호출 가능, 상태 변수는 external 사용 불가
Pragma solidity ^0.4.23;
contract MyContract {
uint external count;
constructor() public {
//....
}
function numOfStudents(address_teacher) | public view | return (uint) {
test()
}
function test() external {
//....
}
}
contract YourContract {
Mycontract mycontract;
function callTest() public {
test();
}
}
- internal : 컨트랙트 내부 호출 가능, 상속받은 컨트랙트도 호출 가능, 상태변수는 디폴트로 internal이 선언됨
Pragma solidity ^0.4.23;
contract MyContract {
uint count;
constructor() public {
//....
}
function numOfStudents(address_teacher) | public view | return (uint) {
test()
}
function test() internal {
//....
}
}
contract YourContract is Mycontract {
function callTest() public {
test();
}
}
- public : 컨트랙 내부 호출 가능, 상속받은 컨트랙 호출 가능, 외부 컨트랙도 호출 가능 (상태변수에 public접근 제어자 선언하면, 컴파일러에서 자동적으로 변수의 getter 함수를 만들어준다. )
Pragma solidity ^0.4.23;
contract MyContract {
uint pubilc count;
constructor() public {
//....
}
function numOfStudents(address_teacher) | public view | return (uint) {
test()
}
function test() public {
//....
}
}
contract YourContract is Mycontract {
function callTest() public {
test();
}
}
contract HiContract {
Mycontract myContract;
function callTest() public {
myContract.test();
}
}
- private : 컨트랙 내부에서만 호출 가능
Pragma solidity ^0.4.23;
contract MyContract {
uint count;
constructor() public {
//....
}
function numOfStudents(address_teacher) | public view | return (uint) {
test()
}
function test() private {
//....
}
}
contract YourContract is Mycontract {
function callTest() public {
test();
}
}
contract HiContract {
Mycontract myContract;
function callTest() public {
myContract.test();
}
}
3. 함수 타입 제어자
- view : 데이터 read-only, 데이터 비용 없음
uint numOfStudents;
function getNumOfStudents() public view returns (uint) { // 함수 읽기 전용
return numOfStudents;
}
- pure : 데이터 읽지 않음, 인자값만 활용해서 반환 값 정함. 가스비용 없음
function multiply(uint x, uint y) public pure returns (uint) {
return x * y;
}
- constant : 0.4.17버전 이전에는 view/pure 쓰임
uint numOfStudents;
function getNumOfStudents() public constant returns (uint) { // 함수 읽기 전용
return numOfStudents;
}
- payable : 함수가 이더(ETH)를 받을 수 있게 함 (가스 비용 있음)
function buy() public payable {
require(10000 = msg.value);
transferEther(msg.sender);
}
4. 값 타입
- Boolean 형 ex) bool x = false;
- 정수형 타입 : int/uint
- (int == int256) (양수 음수 둘다 가능)
- (uint == uint 256) (양수만 받을 수있음)
- address : 20byte값으로 고정. 이더리움 계정 주소 저장. 두개의 멤버 소유 (balance,transfer)
- byte : 1~32byte, 문자열을 저장할 할 수 있다. 이 때 문자를 hex로 변환해서 저장해야한다. 나중에 라이브러리 사용 예정 (solidity는 문자열에 최적화 x 32바이트에 최적화 되어있기 때문.) 32바이트가 넘어가면 string 써야지. string 타입은 byte 타입보다 가스 비용이 더 요구됨
- 동적 크기의 byte 배열 : bytes/string, 값 타입 x ex) bytes[] names;
- 열거형(enum) 사용자 정의타입 만드는 방법 중 하나.
- right,left 선택할 수 있는 direction 선언,
- 이걸 컨트랙 안에서 쓸 수 있게 변수로 선언
- getDirection: diretion의 현재 설정된 값의 인덱스를 리턴
- setDirection: direction의 right나 left를 정함
5. 참조 타입 : 데이터 위치
6. 참조 타입 : 배열
7. 참조 타입 : 구조체
8. 참조 타입 : 매핑
반응형
'신기술분석 > 블록체인' 카테고리의 다른 글
블록체인 Dapp 만들기 #5 (0) | 2021.07.15 |
---|---|
블록체인 Dapp 만들기 #4 (0) | 2021.07.14 |
블록체인 Dapp 만들기 #2 (0) | 2021.06.25 |
블록체인 Dapp 만들기 #1 (10) | 2021.06.25 |
2020 국민 참여단 참여단 4차 현장 방문 후기 (0) | 2020.11.10 |
댓글