Getting started with solidity

Restricting Access

하나의 컨트랙트 내의 속성들은 다른 컨트랙트에서 접근 될 수 없는 것이 기본이며, public 키워드를 명식적으로 사용함에 따라 다른 컨트랙트에서도 접근이 가능하게 된다.

또다른 접근 제한자로는 modifier 가 있는데, 이는 특정 함수에 지정하여 해당 함수를 호출하기 전에 자격에 맞지 않으면 접근을 제한 할 수 있는 기능을 제공한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
contract AccessRestriction {
modifier onlyBy(address _account)
{
require(
msg.sender == _account,
"Sender not authorized."
);
// Do not forget the "_;"! It will
// be replaced by the actual function
// body when the modifier is used.
_;
}
}

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
2
3
4
b = new bytes(32);
add(b, 32); // b의 값이 저장된 주소값

mstore(add(b, 32), x); // b=x

Events

Event 는 솔리디티에서 일종의 로깅의 역할을 수행한다. 이더리움 상에서 일어나는 다양한 활동들에 대한 내역을 추적하고, 사용자 데이터를 자정하기 위해 이더리움은 로그 시스템을 적용하였으며, Event 의 발생은 일종의 로그 형태로 저장된다.

DAPP 개발자는 이더리움의 RPC 인터페이스를 통해 이러한 이벤트들을 구독할 수 있다. Topic 은 이러한 이벤트들을 찾을 수 있도록 해주며, 가령 특정 컨트랙트에서 발생한 로그들을 듣는 등의 일들을 할 수 있다.

여기서 각 이벤트를 정의할 때 다음과 같이 indexed 옵션을 주면, 이렇게 구독을 하는 중에 해당 속성을 읽을 수 있다. 만약 indexed 옵션을 주지 않으며, ABI 인코딩된 데이터가 내려오게 된다.

1
2
3
4
5
6
7
contract ExampleContract {
event ExampleEvent(
address indexed _from,
bytes32 indexed _id,
uint _value
);
}
Getting started with DEX Getting started with ethereum

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×