1page
Soidity의 코드는 contract에 캡슐화 되어 있다.
모든 Solidity source code 는 Solidity compiler의 버전 선언으로 시작해야한다.
l-> ex ) pragma solidity >=0.5.0 <0.6.0; // compiler의 0.5버전부터 0.6버전까지
# contract : Ethereum 애플리케이션의 기본 구성 요소. 모든 변수와 기능이 속하며, 프로젝트의 시작점이 된다.
->ex)
pragma solidity >=0.5.0 <0.6.0;
contract temp {
....
}
# state variables : contract storage에 영구적으로 저장되는 변수. 블록체인에 작성되었음을 의미한다.
-> 상태변수는 변수명 앞에 자료형이 붙는다. (uint = 부호없는 정수[음수x] int= 부호있는 정수)
# structs : 구조체, 다중 속성을 가진 복잡한 data유형
#Array [in Solidity]
1) 고정배열, 동적배열
2) 구조체 배열 : 구조체 배열을 동적배열로 생성하면 contract에 구조화된 데이터 저장에 용이할 수 있다.
-> `${구조체이름}[] {지을이름}`
3) 공용 배열 : 다른 contract에서 읽을 순 있지만 쓸수는 없는 배열. contract의 공개 data를 저장하는데 용이.
-> `${구조체이름}[] public people`
# 값과 참조
solidity 함수에서 인수를 전달하는 방법은 2가지이다
-> 1. value : solidity compiler 가 매개변수 값의 새 복사본을 생성하여 함수에 전달한다 -> 초기 매개변수 값이 변경되어도 상관없이 값을 가질 수 있다.
-> 2. reference : 함수가 원래 변수에 대한 참조로 호출된다. 함수가 받는 변수의 값을 변경하면 원래 변수의 값도 변경된다.
value로 저장하고 싶으면 memory에 저장하라는 의미로 memory를 붙여주면 된다.
# public vs private
public 함수는 다른 계약에서도 기능을 호출 할 수 있는데, 이는 보안이 취약해지는 문제가 발생한다. 따라서 해당 계약 내에서만 컨트롤 해야하는 경우는 private로 선언하는데 구문은 public이랑 아예 똑같고, 함수명앞에 _ 를 붙여주는 것이 관례이다.
🟤 함수의 return 과 type
함수에 return 이 있을 경우 그 return 되는 값의 data type을 명시해준다.
이때 memory는 있어도 되고, 없어도 된다. 함수 내에서만 변수를 사용하고 데이터를 외부에 저장하지 않는다는 뜻이다.
만약 함수가 state를 변경하지 않을 경우 읽기전용으로, 읽기만 한다는 view 표시를 해주어야한다.
만약 함수가 state를 읽어오는 과정조차 하지 않는다면 순수기능함수로 pure 라고 명시해준다.
🟣 형 변환과 Hash 함수
이더리움엔 SHA3 의 한 버전인 keccak256 hash 함수가 있다.
또한 js와 다르게 uint , string 등 typescript 처럼 자료형을 확실하게 하기때문에 덧셈, 곱셈의 결과또한 자료형을 따라야한다.
🔵 Event
contract가 블록체인 상에서 앱의 사용자 단에서 무언가 액션이발생했을 때 의사소통하는 방법이다. contract 는 특정 이벤트가 일어나느지를 보고 발생한다면 행동을 취한다.
여기서 event가 호출이 되면 아래에서 주석을 대신해 적어놓은 코드가 실행이 되게 된다.
그렇다면 여기서 function 과 event의 차이는 무엇일까?
-> function과 event 모두 호출시 코드가 작동하는 구조인건 맞지만, event는 트랜잭션에 log를 남겨준다. 이런 log는 블록체인에 저장되며 계약이 블록체인에 존재할 때 까지 계약 주소를 사용하여 액세스할 수 있다. 생성된 이벤트는 계약 내에서 액세스할 수 없으며, 이벤트를 생성하고 내보낸 이벤트 또한 액세스할 수 없다. 즉 로그만 구경가능하다.
Reference
https://www.tutorialspoint.com/solidity/solidity_events.htm
🟢 array.push() 의 return값은 length 이다.
array.push() method를 사용하면 배열에 data가 들어가고, 해당 data의 index가 return으로 나오게 된다.