오늘 해야하는 일!!
-
Msg handling
-
block, transaction isValid()
-
Fork choice
-
Re-organization (5. transaction priority(in block))
-
채점
def mining(): + block 생성 시 모든 tx_set에 대해서 utxo_set 추가/제거(현재는 coinbase transaction에 대해서만 추가함)
기존에는 transaction이 생성되면, UTXOset을 update 오늘, block 생성 시에 utxo set을 update하는 부분을 구현해야 함
def generate_transaction(receiver, amount, commission): 서명부분 utxo set에 넣고 빼는거 삭제
def get_candidateblock(): memory pool에서 transaction 가져오는거 commission 계산하는거
transaction isValid()
- 타입 및 format 체크
- 입력값과 출력값이 비어있지 않다(입력이 비어있다면, coinbase가 맞는지 확인하고 100개의 block interval이 지나야함).
- 해당 input의 unlock(서명)이 대응하는 publickey를 이용해서 복호화 가능한지 확인
- input의 총합이 output의 총합보다 크거나 같아야함
- input이 이미 사용된 input인지 memorypool에서 확인한다
block isValid( )
- hash값이 일치하는지
- 난이도 계산법이 맞는지(get_difficulty 호출)
- hash가 targetvalue보다 작은지
- 2시간 이내에 만들어졌는지
- 첫번째 거래가 coinbase transaction인지
- 모든 transaction에 대해서 isValid check
- transaction 개수가 최대치를 넘었는지
block을 전파받았을 때 시나리오 isValid 검증, 유효하면 전파 (mining 중이면) 현재 작업중인 candidate block을 파기하고 새로운 candidate block 생성 memory pool/UTXOset 업데이트
transaction을 전파받았을 때 시나리오 isValid 검증, 유효하면 전파 memorypool 업데이트


