Posts

KRWP 보팅 서비스 개발 중

avatar of @realmankwon
25
@realmankwon
·
0 views
·
2 min read

안녕하세요 @realmankwon입니다.

열심히 변경 될 KRWP 보팅 서비스를 개발 중에 있습니다.

KRWP 보팅 서비스는 크게 3부분으로 나뉩니다.

1. KRWP 전송 내역 저장

@krwp.burn 계정으로 전송된 KRWP를 조건없이 저장하도록 하였습니다.

장애 발생시에 중복으로 처리되지 않도록 하기 위해서 이미 처리된 전송내역은 무시하도록 한 것입니다.

장애가 발생하게 되면 특정 시점동안의 전송 내역들을 처리하지 않고 다음 건을 처리하게 될때가 있습니다.

이때는 마지막 처리한 시간을 장애 이전 시점으로 변경하여 제 처리하여야 하는데 중복 체크를 하지 않으면 처리가 어렵게 됩니다.

또한 개발 중에 수시로 테스트를 해야하는데 이때도 상당히 어렵게 됩니다.

이런 부분들을 고려하여 전송 내역을 별도로 저장하였고 이를 통해서 해당 건들을 반환할지 보팅할지를 아래의 로직에서 판단하여 별도로 관리하게 됩니다.

2. 반환 처리

가장 중요한 부분이 반환 처리 부분입니다.

중복으로 반환처리가 될 수도 있고 휴먼에러가 발생할 수 있기 때문입니다.

휴먼에러의 경우는 이미 보팅된 글을 중복으로 보팅 요청을 하는 것이 있을 수 있습니다.

뿐만 아니라 SVC에서 경험한 키체인의 오류로 인해서 동일 블록내에서 2건 이상의 전송이 발생할 수도 있습니다.

해당 건들의 처리를 위해서 Steem Block No, Transaction ID를 저장하여 동일한 포스팅 메모에 대해서 동일하지 않으면 반환을 하도록 하였습니다.

또한 장애 발생시 이전 건부터 순차 처리를 하게 되더라도 중복 보팅이나 중복 반환을 막기 위해 로직을 2중, 3중으로 판단하도록 하였습니다.

위의 조건을 포함한 기본적인 조건은 다음과 같습니다.

  1. memo 가 비었을때

  2. memo 의 permlink 포맷이 틀렸을 때

  3. memo 의 permlink 포스팅이 없을 때

  4. 글 작성 후 2일 초과 (SCT 보팅)

  5. memo 의 permlink 가 이미 보팅이 되었을때(중복 전송)

  6. voting reward를 초과하였을때

위의 조건에 해당되는 건들은 반환 건으로 별도 저장이 되고 반환을 처리하는 스케줄러에서 자동으로 반환을 완료시킵니다.

3. 보팅 처리

반환 건이 아닌 경우 보팅을 하게 됩니다.

이때 3일치 평균 SBD 가격을 기반으로 하여 보팅 될 SBD 를 구하고 보팅 비율도 계산하도록 처리하였습니다.

1 KRWP 를 1000원의 가치로 만들기 위해서 보팅 금액이 1000원이 되어야 하지만 상황에 따라 그렇지 않을 수 있기 때문에 보팅 시점에 저자보상이 1100원이 나오도록 계산하였습니다.

그러므로 보팅되는 금액은 2200원이 될 것입니다.

실제 보이는 화면에서는 2200원 / 현재 SBD 3일 평균가격으로 표시가 될 것입니다.

하지만 이것이 정확하게 맞아 떨어지지 않을수도 있기 때문에 테스트를 하면서 계산된 가격이 맞는지 확인을 해 봐야할 것 같습니다.

SCT 반감기 전에 서비스를 오픈하려고 최대한 개발 중에 있습니다.

개인적인 일들로 인하여 힘든 상황이지만 최대한 오류없는 기능으로 오픈할 수 있도록 하겠습니다.

불금! 즐겁게 보내세요! ^^