SPT 임대 보상 오류

in #sct5 years ago

안녕하세요 @realmankwon입니다.

@sct.krwp에 임대 준 양에 따른 보상분배 봇에 문제가 있어서 12월 15일부터 보상이 나가지 않고 있었습니다.
관련해서 금일 오류를 확인하여 보상 분배를 완료하였습니다.

1 . 오류 원인

우선 해당 봇의 로그를 확인해 보았습니다.

UTC 기준 00시에 한번 실행되는 것이기에 로그를 찾는 것은 쉬웠습니다.
SPT 임대 보상을 전송하기 전 10%는 @sct.krwp에 스테이킹을 하는데 바로 스테이킹을 하지 않고 스케줄러에 해당 건을 등록하여 스테이킹을 하고 있습니다.
스케줄러에 등록하는 도중에 해당 table에 db lock이 걸려서 그 이후로 입력이 되지 않았습니다.
이로 인해 그 뒤에 전송 건을 입력하는 것도 모두 rollback이 되어서 전송이 되지 못했습니다.

ACID라고 하는 DB 트랜잭션 속성이 있습니다.

  • 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
  • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
  • 고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.
  • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
    (참조 : https://ko.wikipedia.org/wiki/ACID)

이번건은 원자성(Atomicity)와 관련된 것입니다.
이 속성은 쉽게 얘기하면 DB 트랜잭션은 하나의 기능을 수행했을때 처리가 되면 모두 처리가 되고 처리가 되지 않으면 모두 처리가 되지 않아야 합니다.
SPT 임대 보상 봇은 다음의 동작을 하나의 트랜잭션으로 묶어 놓았습니다.

  • SPT 수량 체크 후 10% 수수료 스테이킹 입력
  • SPT 임대 계정 정보 확인
  • SPT 보상 계산 및 전송 정보 입력

SPT 임대 보상 봇은 스테이킹 및 전송 정보를 입력만 하고 실제 처리는 다른 봇에서 처리하고 있습니다.
이때 스테이킹 입력이 되지 않으면서 에러가 발생했고 아래의 전송 정보도 입력이 되지 않게 된 것입니다.
처리는 되지 않았지만 어떤 것은 되고 어떤 것은 되지 않았다면 후처리가 힘들었을 것입니다.

2 . 보상 처리

해당 건은 DB lock 때문에 발생한 건이어서 일단 기존의 봇을 중단시켰습니다.
기존 봇이 계속 스테이킹 정보를 입력하는 테이블에 lock 을 걸고 있었기 때문에 봇을 중단시켜서 lock 을 풀었습니다.
이후 SPT 보상 봇을 실행시켜서 아래와 같이 그동안 전송되지 않은 SPT 보상 전송을 완료하였습니다.

어제는 SCT 첫 워크샵이었습니다.
그런데 저는 참석하지 못했네요 ㅜㅜ
그저께 밤부터 몸이 아프더니 밤새 근육통에 시달려서 한숨도 자지 못했습니다.
새벽부터는 복통이 시작되었고 열이 38도를 넘어서 움직일 수가 없었네요.
문제는 원래 다쳐서 아프던 어깨와 등, 허리의 통증이 더 심해져서 누워 있기도 힘들고 앉아 있으면 더 힘들고 이러지도 저러지도 못하는 지경에 이르렀습니다.
급한대로 집에 있던 애들 진통해열제를 먹고 누워 있다가 오후까지 잠이 들었네요.
그 뒤로도 계속 침대에 붙어 있다가 오늘 아침이 되어서야 일어날 수 있었습니다.
아이들과 아내가 독감을 앓았기에 저도 독감이라 생각했는데 열이 떨어진 거 보면 장염이었던 것 같습니다.
다행히 지금은 어제보다는 나아져서 교회에서 예배도 드리고 SCT 관련 이슈도 보고 있습니다.
역시나 건강이 최고입니다.
뭐든 다 할 수 있어도 아프면 아무것도 할 수가 없네요ㅜㅜ
다들 건강 잘 챙기세요!!

Sort:  

수고 많았습니다~^^ 💙
항상 고맙습니다~^^ 💙

항상 행복한 💙 오늘 보내셔용~^^

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 60132.86
ETH 3383.12
USDT 1.00
SBD 2.51