진작에 끝내야 했던 Cryptozombies 솔리디티 문법 lesson3를 끝냈다. lesson3는 내용이 꽤 많았다. 핵심적인 내용만 요약하자면 다음과 같다 :
DApp
의 중요한 일부를 수정할 수 있도록 하는 함수를 만들어 놓는 것이 일반적이다. 그 방법은 컨트랙트를 소유 가능하게 만드는 것이다. (OpenZeppelin의 Ownable 컨트랙트)함수 제어자 : 함수처럼 보이지만 function 키워드 대신 modifier 키워드를 사용하고 함수를 호출하듯이 직접 호출할 수 없다. 대신에 함수 정의부 끝에 해당 함수의 작동 방식을 바꾸도록 제어자의 이름을 붙일 수 있다. 함수 제어자는 인수를 받을 수 있다.
솔리디티에서는 사용자들이 누군가가 만든 DApp
의 함수를 실할할 때마다 Gas
라고 불리는 화폐를 지불해야 한다.
시간 단위 (Time units) : 솔리디티는 시간을 다룰 수 있는 단위게를 기본적으로 제공한다.
구조체를 인수로 전달하기 : private
또는 internal
함수에 인수로서 구조체의 storage
포인터를 전달할 수 있다.
보안을 점검하는 좋은 방법은 모든 public
과 external
함수를 검사하고, 사용자들이 그 함수들을 남용할 수 있는 방법을 직접 생각해보는 것이다. 남용을 막기 위한 가장 쉬운 방법은 함수를 internal
로 만드는 것이다.
view
함수는 사용자에 의해 외부에서 호출되었을 때 가스를 전혀 소모하지 않는다. 이건 view
함수가 블록체인 상에서 실제로 어떤 것도 수정하지 않기 때문이다. 데이터를 읽기만 한다.
솔리디티에서 비싼 연산 중 하나는 바로 storage
를 쓰는 것이다. 비용을 최소화하기 위해 진짜 필요한 경우가 아니면 storage
에 데이터를 쓰지 않는 것이 좋다.
storage
에 아무것도 쓰지 않고도 함수 안에 새로운 배열을 만들려면 memory
키워드를 쓰면 된다. 이 배열은 함수가 끝날 때까지만 존재할 것이고, 이는 storage
의 배열을 직접 업데이트하는 것보다 가스 소모 측면에서 훨씬 저렴하다. 외부에서 호출된느 view
함수라면 무료다.
밑에 링크를 걸어놓은 블로그에 좀 더 자세한 내용들을 기록해두었다.