솔리디티에 대해 더 잘 알고싶은 마음에 기본 개념들을 더 자세히 보려고 한다. 구글링을 하다가 좋은 미디엄을 발견해서 해당 글들을 읽고 정리할 생각이다. 미디엄에 Member-only로 되어 있어서 통번역을 하기엔 조심스럽다. 한 달에 $5만 내면 양질의 글들을 읽을 수 있으니 꼭 읽어보길 바란다!
Bytes가 저장되는 순서에 따라 두 가지 종류로 나눌 수 있다. 들어오는 순서대로 저장하는 Big-Endian과 마지막부터 저장하는 Little-Endian으로 구분된다. 이더리움은 타입에 따라 두 종류의 방법을 나눠서 사용한다.
Big-Endian : string, bytes
Little-Endian : 나머지 타입(numbers, addresses, etc…)
예를 들어, "abcd"를 저장하면 아래와 같이 저장되고
0x6162636400000000000000000000000000000000000000000000000000000000
0x61626364
를 저장하면 아래처럼 저장된다.
0x0000000000000000000000000000000000000000000000000000000061626364
또한 byte
타입과 숫자는 다르게 저장된다.
// 0x00000000…01
Uint8 u8 = 1;
// 0x01000000….
byte b = 1;
byte
타입의 다른 모습들 때문에 이게 같은 타입인지 종종 헷갈릴 때가 있다. 정리하자면
byte
: bytes1과 같은 표현이다. 1개의 byte를 가진 array라고 할 수 있다.
bytesN
: N은 1에서 32 중에 한 숫자로, 숫자만큼 크기가 한정된 array를 말한다. 크기가 정해진 Bytes(Byte Array)는 컨트랙트 간 이동이 가능하다.
bytes
: 숫자 없이 s가 붙은 것으로 byte[]
와 같은 말이다. 다른 타입들과 달리 크기가 정해져 있지 않은 dynamic array다. push, pop, length가 가능하다.