1월, 2018의 게시물 표시

RLP encoding

RLP(Recursive Length Prefix)는 임의의 깊이와 개수로 중첩된 배열을 binary data로 표현하는 인코딩 방식이다. 인코딩할 데이터 앞에 binary data의 길이를 추가하는 방식으로 동작하기 때문에 Length Prefix라는 이름이 붙었다. 현재 RLP는 이더리움이 patricia tree를 만드는 데만 이용되고 있지만, 스펙 자체는 일반적으로 사용할 수 있도록 정의돼 있다.
 RLP의 input은 binary data이다. 그 값의 이름이 무엇이고, 어떤 타입이고, 어떤 representation을 가지는지는 RLP에서 정의하지 않는다. 이는 별도의 규약을 정하여 RLP 인코딩을 하기 전에 binary data로 변경해야 한다.
 RLP가 인코딩하는 방법은 인코딩할 입력이 무엇인지에 따라 달라진다.ASCII  우선 입력이 한 바이트의 일반 ASCII 캐릭터. 즉, 0x00에서 0x7F에 해당하는 값이라면 별도의 length prefix 없이 바로 사용한다.문자열 입력이 한 바이트 ASCII 캐릭터가 아닌 바이트의 배열. 즉, 문자열이라면, 앞에 배열의 길이를 prefix로 붙이고, 그 뒤에 바이트의 배열을 그대로 사용한다. 다만 여기서 말하는 문자열은 일반적인 프로그래밍에서 말하는 문자열이 아닌, 바이트의 배열로 봐야 한다. RLP는 배열이 아닌 다른 타입은 구분 없이 문자열로 받는다. 예를 들어 문자에는 ASCII를 쓰고, 정수는 zero padding 없는 big endian을 사용한다고 했을 때, 문자열 'ab'도 [0x61, 0x62]로 표현되고, 정수 24,930도 [0x61, 0x62]로 표현된다.실제 이 값을 정수로 해석해야 하는지, 문자로 해석해야 하는지는 RLP보다 상위 레이어에서 결정하여야 한다.
 여러 바이트의 문자열은 몇 바이트가 인코딩됐는지 length prefix를 붙여 인코딩하는데, length prefix를 어떻게 붙일지는 문자열의 길이에 따라 달라진다. 만약 문자열의 길이가 55 이…