컨트랙트(contract) 생성
이더리움 어플리케이션의 기본적인 구성요소로 솔리디티는 이걸 위해 만들어짐모든 변수와 함수는 반드시 어느 한 컨트랙트에 속해있음.
컨트랙트 내에서 상태변수를 선언할 수 있고, 이는 컨트랙트 저장소에 영구적으로 저장된다.
contract HelloWorld {
pragma solidity ^0.8.15;
}
상태 변수
타입스크립트처럼 변수의 상태를 작성해줘야한다.
상태변수는 컨트랙트 저장소에 영구적으로 저장됨 = 이더리움 블록체인에 기록됨
uint thisIsNumber = 100;
uint dnaModulus = 10 ** thisIsNumber;
string thisIsStr = 'hello';
새 구조체(struct) 생성
복잡한 자료형 객체를 생성한다고 생각하면 된다.
Person 자료형을 사용할때는 반드시 uint형 age랑 string형 name이 들어가아한다.
struct Person{
uint age;
string name;
}
새 구조체 배열 생성
구조체를 사용해서 구조체 배열을 생성할 수 있고, 구조체 배열은 정적배열과 동적배열 두가지로 나뉜다.
배열에 몇개를 담을것인지 숫자를 고정하는 정적배열과 그렇지 않은 동적배열
uint[2] fixedArray; // 정적 배열
uint[] dynamicArray; // 동적 배열
// Person구조체를 사용해서 동적배열을 만들건데,
// 함수 접근 제어자는 public을 쓸거고
// 이름은 people로 할게
Person[] public people;
Person sato = Person(172,'Sato') // 새 Person 구조체 sato를 선언
people.push(sato)
위와 같이 새 구조체를 생성해서 배열에 넣을때 코드 한 줄로 표현이 가능하다.
people.push(Person(16,'Vitalik'))
함수 생성하기
함수에 들어가는 인자들도 속성값을 명시해주는걸 잊지말자.
솔리디티에서는 함수와 인자값을 표현할때 암묵적으로 앞에 _를 붙인다.
function _eatHamburgers(string _name, uint _amount) {}
_eatHamburgers("vitalik", 100);
함수 접근 제어자 private / public
남들과 함께 사용하도록 공개모드로 놓는게 public.
컨트랙트 안에 있는 함수들만 해당 함수를 사용하도록 비밀모드로 놓는게 private.
함수 다음에 함수 접근 제어자를 작성한다.
uint[] numbers;
function _addToArray(uint _numger) private {
numbers.push(_number);
}
반환값
반환값을 사용할 경우도 마찬가지로 반환값 속성을 작성해줘야한다.
다음은 반환값을 string으로 받는 public 함수다.
string greeting = "What's up dog";
function _sayHello() public returns (string) {
return greeting;
}
함수제어자
- view : 데이터를 사용하긴하지만 변경하지 않음
- pure : 데이터에 접근조차 하지 않음
- 아무것도 없음 : 데이터를 사용도하고 변경도 함.
function sayHello() public view returns (string) {}
function _multiply(uint a, uint b) private pure returns (uint) {
return a * b;
}
keccak256
SHA3의 한 버전인 keccak256은 string을 256비트 16진수로 매핑한다.
keccak256("aaaab")
//6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5
// >> pragma solidity ^0.8.15;
keccak256(abi.encodePacked(_species))
형변환
자료형을 변환할때 사용한다.
uint8 a = 5;
uint b = 6;
// a * b가 uint8이 아닌 uint를 반환하기 때문에 에러 메시지가 난다:
uint8 c = a * b;
// b를 uint8으로 형 변환해서 코드가 제대로 작동하도록 해야 한다:
uint8 c = a * uint8(b);
이벤트
컨트랙트가 블록체인 상에서 앱의 사용자 단에서 액션이 발생했을때 알려준다.
// 이벤트를 선언한다
event IntegersAdded(uint x, uint y, uint result);
function add(uint _x, uint _y) public {
uint result = _x + _y;
// 이벤트를 실행하여 앱에게 add 함수가 실행되었음을 알린다:
IntegersAdded(_x, _y, result);
return result;
}
'프로그래밍 > solidity' 카테고리의 다른 글
[220711] 솔리디티코드로 스마트 컨트랙트 작성하기 (0) | 2022.07.04 |
---|---|
크립토좀비) 챕터2 개념과 sol 0.8.15버전으로 개선한 코드 (0) | 2022.05.31 |
메타마스크에서 테스트 토큰 가져오기 (0) | 2022.05.26 |
솔리디티, 리믹스 에러 code 4001, code 32603, code 32000 (0) | 2022.05.26 |
[220531] 사이트에 접속하자마자 메타마스크 연동하기 / 갤러리 보이지 않음 이슈해결 (0) | 2022.05.26 |
댓글