웹으로 RLP 디버깅하기

GeunWoo Kim
코드체인
Published in
4 min readJun 19, 2019

--

RLP(Recursive Length Prefix)는 중첩된 배열 형태인 데이터를 인코딩하는 방법으로 이더리움 노드가 들고 있는 트랜잭션, 스마트 컨트랙트와 같은 오브젝트 데이터들을 직렬화(serialize)하기 위해 처음 제안 되었습니다. RLP는 두 가지 인코딩 형식을 사용합니다. 첫 번째는 문자열(string)이고 다른 하나는 배열입니다. 배열의 아이템은 다시 문자열과 배열 두 가지 형식으로 인코딩 되기 때문에 Recursive라는 이름이 붙었습니다. 또한 단일 문자열 인코딩을 제외하고는 인코딩된 데이터의 길이를 결과물 앞쪽에 붙이기 때문에 Length Prefix라고 할 수 있겠습니다. 코드체인에서도 노드의 오브젝트를 직렬화 하고 다른 노드에 보낼 때 RLP를 이용하고 있습니다.

개발을 진행하다 보면 RLP로 인코딩된 데이터의 구조를 살피고, 아이템을 추가하거나, 삭제하는 등 수정할 일이 생깁니다. 이 글에서는 이럴 때 유용하게 사용할 수 있는 온라인 RLP 디버깅 툴을 소개합니다.

rlp-debugger는 코드체인 공식 GitHub Page를 통해 호스팅 되고 있는 온라인 RLP 디버깅 사이트입니다. 현재 누구나 접근 가능하고 이용할 수 있습니다. rlp-debugger는 기본적으로 인코딩, 디코딩 기능을 제공하고 인코딩된 데이터에서 아이템을 수정, 추가, 제거할 수 있는 UI를 지원합니다.

1. 디코딩

처음 rlp-debugger에 접속하면 다음과 같은 화면을 볼 수 있습니다. textbox에 RLP 인코딩된 데이터를 hex string 형태로 입력하면 Decode 버튼이 활성화되는 것을 볼 수 있습니다.

입력한 데이터가 유효하지 않을 경우 “RLP decode error”라는 문구가 뜨면서 버튼이 비활성화 됩니다.

2. 인코딩

예를 들어 “c512c2345678”라는 RLP 인코딩된 데이터를 디코드하면 다음과 같이 데이터의 구조와 그 안의 아이템까지 보거나 수정할 수 있습니다. 아이템 옆의 + 버튼으로 해당 아이템 바로 다음 인덱스에 새로운 아이템을 추가할 수 있고 — 버튼으로 해당 아이템을 제거할 수 있습니다. 아이템이 배열인 경우 아이템 아래의 +버튼을 누르면 배열의 가장 앞쪽에 새로운 아이템이 추가됩니다. List 버튼은 문자열 형식의 아이템을 배열로 바꿔줍니다.

아이템을 여러 가지 데이터 타입에 맞게 수정하는 것도 가능합니다.

rlp-debugger를 사용하기 전 주의할 점이 두 가지 있습니다. 첫 번째로 수정한 아이템의 값이 유효하지 않을 경우 인코딩이 불가능합니다. 예를 들어 hex 타입의 아이템에 0x3f4t처럼 유효하지 않은 입력을 넣을 경우 인코딩이 되지 않습니다. 두 번째로는 0과 null의 차이입니다. RLP는 단일 데이터 00과 null을 다르게 인코딩합니다. 만약 null을 인코딩하고 싶다면 textbox를 비우면 됩니다.

간단히 rlp-debugger 사용법에 대해 알아보았습니다. rlp-debugger는 여기에서 사용할 수 있으며,

https://codechain-io.github.io/rlp-debugger/

사용 중 버그를 발견하시면 repository에 issue를 남겨주세요.

--

--