안녕하세요 Web3 업계에서 근무하고 있는 TaeRim Lee 라고 합니다.
다름이 아니라 얼마전, 이더리움 계열 library 작성중에 다른 이더리움 계열 블록체인과 클레이튼의 메세지 서명 방식이 다른 것을 확인하였습니다.
이더리움의 경우
"\x19Ethereum Signed Message:\n" + len(message)
caver.js의 경우
"\x19Klaytn Signed Message:\n" + len(message)
와 같이 메세지에 헤더를 붙인 후 해싱한 뒤 서명을 하는데,
이더리움의 경우는 EIP-191(EIP-191: Signed Data Standard)에 이미 표준이 제정되어 있고, 클레이튼의 경우에는 caver.js에만 명시되어 있고 따로 표준화되어 있지 않아서 개발자의 입장에서 어떤 방식으로 서명을 할지 혼동이 올 수 있습니다.
또한 metamask에서 네트워크를 cypress나 baobab의 chainId로 설정해서 클레이튼 네트워크와 상호작용 할 수 있지만, metamask에서의 personal_sign 방식은 EIP-191을 사용하기 때문에 같은 메세지를 서명하더라도 kaikas와 metamask의 서명 결과가 다르게 됩니다.
하나의 예시로, 오픈씨에서 지갑을 연결하여 로그인하는 경우 이용약관 동의를 메세지 서명을 통해 진행하는데, klaytn 네트워크에 연결된 상태로 메세지 서명은 metamask에서의 결과는 verify 되지 않고, kaikas를 통한 서명만 verify 되어 로그인이 진행됩니다.
또한 기존처럼 서명 방식이 caver.js에서만 설명이 되어 있고, KIP로 표준화 되어있지 않다면 caver.js를 사용하지 않는 개발자는 더욱 불편할 수 있습니다.
해당 PR 확인해 주시면 감사하겠습니다. KIP-97