본문 바로가기

Blockchain/solidity

bytes32 자료형을 사용하는 이유? vs bytes

solidity로 작성된 스마트 컨트랙트 문서를 보다보면 bytes32로 선언된 function이나 event들을 자주 접하게 된다. 

그러던 중에 bytes32이면 32바이트인가? 왜 '32'라는 숫자를 좋아할까? 궁금해서 구글링을 해보았다. 

 

한 블로그의 예시에서는 

Polygon의 PoS 브릿지에서는 토큰타입등과 같이 이벤트로 남기는 값에 있어서 주소값을 제외하고는 bytes32를 남긴다고 한다. 

 

bytes32를 사용하는 이유 

일반 byte에 비하여 용량을 적게 사용한다고 한다. 

가스비를 최대한 줄여야 하기 때문에 bytes32를 사용한다고 한다. 

 

bytes vs bytes32

bytes

bytes는 byte[]와 같은 의미를 가진다. 

bytes와 같은 가변(동적) 길이의 배열은 interface나 ABI가 지원을 하지 않기 때문에 사용할 수 없다. 

bytes가 임의(가변)길이의 원시 데이터를 담는 배열이라고 생각하면 된다. 

 

bytes32 

bytes32는 고정길이 배열이기 때문에 컨트랙트 안과 밖 사이의 전달 가능하다.

(추가로, 고정크기 바이트 배열의 경우 byte1,byte2...byte32와 같이 bytes 뒤에 숫자를 붙이며 뒤에 붙는 숫자는 바이트 수를 의미한다) bytes1 = 1바이트의 의미 

 

 

결론적으로 bytes32는 

1) 사이즈가 작거나 

2) 외부호출에 쓰일때 사용하고 

-> 가스비 아끼자.. 

bytes는 사이즈가 큰 경우 사용한다고 한다. 

 

참고 https://it-timehacker.tistory.com/221