Restricting Access
하나의 컨트랙트 내의 속성들은 다른 컨트랙트에서 접근 될 수 없는 것이 기본이며, public
키워드를 명식적으로 사용함에 따라 다른 컨트랙트에서도 접근이 가능하게 된다.
또다른 접근 제한자로는 modifier
가 있는데, 이는 특정 함수에 지정하여 해당 함수를 호출하기 전에 자격에 맞지 않으면 접근을 제한 할 수 있는 기능을 제공한다.
1 | contract AccessRestriction { |
Data types
memory and storage
solidity 에서 memory 와 storage 를 이루는 데이터 chunk 의 크기는 32bytes 이다.
memory 란 모든 함수 call 마다 새롭게 할당되는 임시 데이터 저장소로 이 메모리에 읽기, 쓰기 등의 작업을 수행할 때마다 가스비가 올라간다.
variables
솔리디티에서 변수는 memory address 를 가르치는 포인터이다.
array
solidity 에서 array 의 첫번째 인자는 그 array 의 길이값을 저장한다.
Bytes
solidity 에서 bytes 는 동적으로 할당되는 byte array 이며, 그 크기는 32byte 이다. 또한, solidity 에서 변수는 memory address 를 가르치는 포인터이므로 해당 포인터로 부터 32 바이트를 더해주면 실제로 해당 bytes 의 값이 저장된 주소값을 얻을 수 있다.
1 | b = new bytes(32); |
Events
Event 는 솔리디티에서 일종의 로깅의 역할을 수행한다. 이더리움 상에서 일어나는 다양한 활동들에 대한 내역을 추적하고, 사용자 데이터를 자정하기 위해 이더리움은 로그 시스템을 적용하였으며, Event 의 발생은 일종의 로그 형태로 저장된다.
DAPP 개발자는 이더리움의 RPC 인터페이스를 통해 이러한 이벤트들을 구독할 수 있다. Topic 은 이러한 이벤트들을 찾을 수 있도록 해주며, 가령 특정 컨트랙트에서 발생한 로그들을 듣는 등의 일들을 할 수 있다.
여기서 각 이벤트를 정의할 때 다음과 같이 indexed 옵션을 주면, 이렇게 구독을 하는 중에 해당 속성을 읽을 수 있다. 만약 indexed 옵션을 주지 않으며, ABI 인코딩된 데이터가 내려오게 된다.
1 | contract ExampleContract { |
Comments