이번 강의는 새로운 블록을 받았을 때 그 블록이 가진 Tx를 보고 mempool에서 지워주는 기능의 함수를 만들어 봅니다
여기서 드는 의문은 새로운 블록을 만들면 모든 노드에서 그 mempool은 모두 지워주면 되는 것 아니냐고 할 수 있는데
제가 생각하는 그러지 않는 이유는
1. 블록이 생성됨과 동시에 혹은 0.001초 뒤에 Tx가 발생되어 노드 3000에서는 안지운 mempool을 노드 4000에서는 지울 수도 있음
2. 수수료를 더 많이 내면 빠르게 체인에 추가된다고 하는 것과 연관있어 보임(정확히는 모르겠음)
쨋든 시작해봅니다
AddPeerBlock() 함수에서 block의 Tx.ID를 for loop으로 일일이 가져와서 mempool Tx.ID와 일일이 대조해보고 일일이 지우고 mempool의 []*Tx는 배열이라 바꾸기 까다로워 새로 만들어주어야 하여 굉장히 비효율적일 수 있다고 합니다
그러므로 mempool의 Tx의 구조를 바꿔서 건강한 코드를 짜는 것 같습니다
Txs map[string]*Tx 구조로 만들어서 Tx.ID를 통해 Tx를 금방 찾고 금방 삭제하여 수정에 용이하게 하기 위함인것 같고 또한
새로 알게된 점은 go 언어의 map을 초기화해줄 때 nil을 사용하게 되면 map이 아예 지워지므로 make(map[string]*Tx) 처럼 아예 초기화된 맵을 새로 만들어주어야 한답니다
살짝 오류가 났었습니다
assignment to entry in nil map 오류
쾅점수는 2점 정도 드리겠습니다 구글링하면 쉽게 나오지만 문법을 모르고 있었다면 당황했을 문법이고, 조금 주긴 아쉬우니 1점 추가하여 2점으로 넉넉히 주었습니다 panic serving : assignment to entr
yyth.tistory.com
이렇게 완료하고 나면 노드 3000에서 블록을 생성했을 때 노드 3000뿐만 아니라 노드 4000의 mempool에서도 새로운 블록의 Tx들이 말끔히 지워지는 걸 볼 수 있습니다
이제 다음 강의에선 노드가 2개를 초과하여 많아졌을 때 사용할 수 있는 글로벌한 메모리풀을 만들어본다고 합니다
그럼 끝!
'go언어 블록체인' 카테고리의 다른 글
노마드코인 12-32 (0) | 2021.08.19 |
---|---|
노마드 코인 12-31 리뷰 (0) | 2021.08.19 |
노마드 코인 12-29 리뷰 (0) | 2021.08.19 |
노마드코인 12-28 리뷰 (0) | 2021.08.19 |
노마드 코인 12-27 리뷰 (0) | 2021.08.18 |