KRWP 보팅 서비스 오류 수정 및 잔여량

안녕하세요 @realmankwon 입니다.

KRWP 보팅 서비스에 버그가 있어서 수정하였습니다.
@realmankwon.scot 계정의 경우 132.678 KRWP 를 스테이킹하였고 424.961 KRWP 를 임대받았습니다.
1 KRWP 를 보내면 나머지를 반환해 줄거라고 예상했지만 당황스럽게도 1 KRWP 를 그대로 보팅하는 것을 확인했습니다.

그래서 해당 건을 직접 디버깅 해 보니 stake + delegationsIn 의 결과값이 NaN으로 나오고 있었습니다.

해당 버그는 스테이킹양과 임대받은 양을 합할때 문자열과 문자열을 더하는 바람에 생긴 오류입니다.
소스상으로 stake + delegationsIn 을 하면 132.678424.961 로 결과값이 계산이 되고 이걸 숫자형으로 변형하니 NaN으로 나왔던 것입니다.
대부분의 유저분들이 임대를 받지 않았기 때문에 stake 양만 있고 delegationsIn 양이 없었을 것입니다.
그래서 stake 양이 800 이라면 stake + delegationsIn 을 하면 800.000에 0이 한개 더 붙어서 800.0000이 되니 오류없이 보팅이 되었을 것입니다.

이 부분을 stake, delegationsIn 에 rate 를 곱하여서 소수점 3자리 처리를 한 후 소스를 반영하였고 다른 계정에 확인 결과 문제없이 동작하는 것을 확인하였습니다.
혹시나 임대받았던 분들이 사용하셨으면 반짝 이벤트로 생각해 주시길 바라면 초보적인 실수를 해서 민망합니다.

아울러 이론상으로는 @krwp.burn 계정에는 보팅이 완료된 후에 KRWP 잔여량은 0이어야 합니다.
하지만 현재 다음과 같이 잔여량이 남아 있습니다.

이것은 문자열 숫자를 숫자로 변환하다보면 생각과 다르게 변환이 됩니다.
예를 들면 다음의 경우 stake 양과 delegationsIn 양을 각각 0.001을 곱한 후 소수점 3자리 버림을 한 후더하게 되면 예상되는 값은
0.132 + 0.425 = 0.557입니다.
하지만 제일 하단의 결과값을 보면 0.5569999999999999가 되는 것을 알 수 있습니다.

따라서 소수점 3자리 이하 버림을 하다보니 본의 아니게 0.001이 남게 되는 현상이 더러 발생하게 됩니다.
반올림으로 처리할 수도 있지만 만약의 경우 잔여량보다 더 많은 값이 되면 보팅이 되지 않고 다음 전송이 들어와서 잔여량이 늘어날때까지 무한 대기하는 상황이 초래됩니다.
이를 막기 위해 부득이 버림 처리를 하였습니다.

혹여나 반환값이 0.001 KRWP 적게 들어온다면 위의 상황이라 생각하시고 너그러이 이해해 주셨으면 합니다.
해당 잔여량은 불특정 시기에 소각하도록 하겠습니다.
감사합니다.



0
0
0.000
0 comments