Caver.utils 버그 발견 (hexToNumber)

안녕하세요, 클린이입니다.

caver에 아래와 같이 변환 버그가 있습니다.

caver.utils.hexToNumber('17')
//17 이 나오는데 함수명 처럼 Input 값을 hex값으로 본다면 23이 맞습니다.
caver.utils.hexToNumber('c')
//12 가 잘 나옵니다.

Call 실행 결과로 uint 배열이 다음과 같이 오는데,
어떻게 처리 해야 할지 몰라 직접 파싱 하다가 찾았네요.

0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000017

혹시 한번에 이런 hex 값을 배열로 처리 할 수 있는 함수가 있으면 알려주시면 감사하겠습니다.

hexToNumber 에 보면 인풋이 hex string이므로
'0x17’을 입력해주는게 맞습니다
아래 'c’도 '0xc’로 정확히 입력하는게 맞습니다.

함수명이 toNumber라면 답변 주신걸 이해하겠는데,
보통 비슷한 함수에서는 prefix인 0x 를 붙이지 않아도 hex string으로 인식합니다.

hexToNumber에 17을 넣었는데 17이 나온다니요…

아래는 마이크로소프트에서 가이드 하는 hexString 변환 예제 코드입니다.

string hexString = “43480170”;
uint num = uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);

byte[] floatVals = BitConverter.GetBytes(num);
float f = BitConverter.ToSingle(floatVals, 0);
Console.WriteLine(“float convert = {0}”, f);

// Output: 200.0056

hex string으로 인식을 하던지 아니면 hex string이 아니라고 에러를 출력하던지
둘 중 하나는 하는게 이 함수를 받아들이는 사용자 측면에서 맞는 동작으로 보입니다.

그렇겠네요 ( 참고로 저도 지나가는 클린이 입니다)
웹3랑 caver 같이 테스트해보았는데 웹3에서는 해당부분이 업데이트 되었나봅니다.

image

Uncaught Error: Given value “17” is not a valid hex string. 라는 에러를 떨구네요
반대로 caver-js 에서는 그대로 17값을 출력하는걸 보니 조만간 업데이트가 있지 않을까 싶네요

hex string이 아니라고 출력하는게 더 맞는 것 같습니다
웹3 랑 caver 각각 에서의 문서 주소입니다

https://web3js.readthedocs.io/en/v1.2.11/web3-utils.html#hextonumber

1 Like

오호, 이더리움은 벌써 문제를 수정했나 보군요.

이게 자칫하면 서비스 하는 클라이언트 입장에서는 알 수 없는 큰 버그가 될 수 있어서요.

클레이튼도 빨리 수정해 주면 좋겠네요.

좋은 정보 감사합니다.

@klay
안녕하세요.

caver-js에 관심을 가져주시고 Klaytn 포럼에 해당 내용을 제보해주셔서 감사드립니다 :slight_smile:

당장 빠른 패치는 어렵지만 다음 릴리즈 때 해당 부분이 Fix 될 수 있게끔 조치하도록 하겠습니다.
불편하시겠지만 Fix 전까지는 prefix 0x 가 붙은 채로 input이 들어갈 수 있도록 주의 부탁드립니다.

또한 GitHub - klaytn/caver-js: Official caver-js repository 는 오픈소스이기 때문에
여건이 되신다면, 이슈 및 PR을 올려주시는 것도 함께 고려해보시면 너무 좋을 거 같습니다.

감사합니다.

P.S.
@kkookk
댓글 남겨주시고 관련 이슈에 대해 함께 논의해주셔서 감사합니다.

cc. @Jamie

넵, 조만간 PR 올려보도록 하겠습니다 :slight_smile:

2 Likes