코인 거래 검증에 대해 질문드립니다.
비트코인 거래시에
코인 거래가 생성되고 블록이 생성된후 전파되는 순서는
1. A->B로 BITCOIN을 보내길 원함
2. A의 안쓰여진 UTXO를 해제스크립트로 품
- 해제스크립트를 쓰는이유 :남의 UTXO를 사용못하기위해 잠금스크립트를 걸어둠
3. B에게 줄 bitcoin output1과 남은 bitcoin을 돌려받을 output2 총 2개의 output생성
- 때에 따라 input이 여러개 , output이 여러개일수도있음
4. 만들어진된 tx를 mempool에 저장
5. C마이너가 열심히 채굴을해서 nonce값 찾아 블록을 배포할 권리를 얻음
6. 블록에 mempool의 tx들을 담아서 다른 노드에 배포
7. 다른 노드들이 spv지불검증을 통해 블록에 담긴 tx들이 옳바른지 검증
8. 옳바르면 블록을 저장 후 주변 노드에 전파
여기까지 제가이해한게 맞나요?
맞다면 여기서 7번에서 spv 지불검증을 할때 옳바르지 않은 tx가 있다면 그 tx만 제거하고 블록을 저장하나요?
그리고 잠금스크립트는 언제 실행이 되는지 궁금합니다
또한 중간중간 부족한 부분이있으면 추가설명 부탁드리겠습니다.
안녕하세요?
블록체인에 대해 많은 이해가 있으신 것 같습니다. 제 나름대로 말씀하신 부분에 대해 몇가지 답변과 수정을 해봅니다.
감사합니다.
거래검증에 대해
노드가 전달받은 거래를 다른 노드에게 전달할때는 먼저 검증을 하고 보냅니다. 이 검증을 통과해야 다른 노드로 전파하고, 검증이 안되면 검증한 해당 노드에서 거래가 파기됩니다. 이때 검증된 거래가 Mempool에 모이게 됩니다.
SPV
Spv는 단순지불검증노드 입니다. 이는 블록체인 용량을 다 받을 수 없는 모바일기기등에서 사용되며 주로 지갑을 SPV라고 부르는 경우가 많습니다. 거래를 검증할때는 full 노드에게 머클경로를 이용하여 거래 유효성을 확인을 받습니다.
3, 수정된 거래순서
1. A->B로 BITCOIN을 보내길 원함
2. A의 안쓰여진 UTXO를 해제스크립트로 품
- 해제스크립트를 쓰는이유 :남의 UTXO를 사용못하기위해 잠금스크립트를 걸어둠
3. B에게 줄 bitcoin output1과 남은 bitcoin을 돌려받을 output2 총 2개의 output생성
- 때에 따라 input이 여러개 , output이 여러개일수도있음
4. 만들어진 tx를 노드에서 먼저 자체 검증
5. 만약 SPV노드라면 full노드에게 거래 검증을 요청함, 하지만 채굴을 할 수 없음.
(채굴은 다른 full에서 일어 남)
6. tx가 유효하면 mempool에 저장하고 다른노드에게 전파, 유효하지 않으면 폐기함
7. C마이너가 mempool에서 tx를 선책하여 후보블록을 만듬
8. 열심히 채굴을해서 nonce값 찾아 블록을 주변노드에 배포함
9. 다른 노드들이 받은 블록과 넌스값을 확인하여 블록이 유효하면 기존 블록에 추가
10. 기존 노도들은 기존에 nonce값을 찾던 행위를 중단하고 모든 tx를 다시 mempool에 복귀시키고 6의 과정부터 다시시작