각 노드, 참여자 컴퓨터에
3001이 관리자
6001이 노동자..
http서버는 모든 걸 보여주기 용으로 돌리는거
라고 대충이해했는데.. 이후에 db서버랑, 리액트서버랑 얘네가 어떻게 맞물리는지 사실 아직도 서버관계를 정확하게 모르겠다!
일단 코드 여기요 (지금까지 한 것만 포크해놓음)
https://github.com/jsoyun/4th-project-YunminBlock
GitHub - jsoyun/4th-project-YunminBlock: 4th BlockChain Project
4th BlockChain Project. Contribute to jsoyun/4th-project-YunminBlock development by creating an account on GitHub.
github.com
각 컴퓨터 참여자로 노드 만들어서
p2p서버 전달 확인해봄
참고로 실행할 때는
node node1/r_httpServer.js
이렇게 했다
두 서버 각각 열고
get 요청인 blocks로 들어가보면
둘다 제네시스 블록이 잘 들어가 있음요
서버 연결!!
post addpeers로
3002한테 요청하는거임
3002가 6001 웹소켓으로 상대 웹소켓 주소 ws 6001로 연결
문 똑똑
peers로 연결된거 확인!
이제 둘이 연결됐으니
3002에서 채굴해보겠음
3002 채굴돼서 들어왔지?
그렇다면 3001을 새로고침해보면 3002랑 연결되어있고 그블록의 길이가 더 길어서 추가됨
연결되어있으니까 3002에서 연속 2개 추가해도 업데이트 됨
3001에서 블록채굴해도 마찬가지로 3002에서 업뎃됨
서버 통신 코드
post로 보내면
data로 이름지어서 "data" : 웹소켓 주소 가능한거임
이 웹소켓 주소 data가 connectToPeers함수로 들어감 얘가 웹소켓 연결해줌
소켓에 넣고 메세지 핸들러 함수쓰고
얘네가 보내주는거 관리하는거임
메세지 핸들러는 이렇게 여기서 변수로 지정해줬음
(그 검증할 때 변수 10으로 다 잡아서 블록10개 이전과 비교해서 생성시간 알아내는 거 있잖아
걔랑 비슷한 원리인듯
신기한게 컴퓨터는 바보라서 걍 숫자 넣어서 계산하는 거기 때문에 시간인지 뭔지 안적어도 가능했음)
대신 쓸때는 위처럼 MessageType.QUERY_LATEST 이런식으로 해야 얘가 찾겠지?
연결됐을 때 채굴하면 broadcast로 연결되어있는애들 전부한테 뿌려주는 거
(근데 생각해보니까 마지막 최신블록 담아서 보내주는거 말고도 아예 많이 다르면 전체 교체해야되는 replace함수 써야되는데 broadcast(initMessageHandler(ws)) 이걸로 해줘야 되는거 아닌가....? 흠 정리하고 다시 수정해봐야겠다. )
중간에 맞이했던 에러들
브로드캐스트에 저 함수를넣지 않은 것 말고도 있음
갑자기 이거 뜸
(node:11496) Warning: Accessing non-existent property 'Blocks' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
(node:11496) Warning: Accessing non-existent property 'getLastBlock' of module exports inside circular dependency cular dependency
(node:11496) Warning: Accessing non-existent property 'createHash' of module exports inside circular dependency de circular dependency
(node:11496) Warning: Accessing non-existent property 'isValidTimestamp' of module exports circular dependency
inside circular dependency
이게 찾아보니까 순환참조? a스크립트에서 만든 함수 내보내고 b에서 a의 함수 가져왔는데 또 가져와서? 생기는 뭐 중복돼서 그런거라고 했는데
이전에 안뜨다가 갑자기 떠서 당황... 작동은 되는데 불안하죠잉
결국 전역변수에 있는 애들 다 지역변수로 넣어서 함...
이런식으로..
아 그리고 블록체인 에
이 부분 틀렸다는데
흠 내가 이해한 거는 새블럭을 현재 시간이랑 어느정도 오차범위까지는 인정하는 코드라고 봤거든 책도 그 얘기고..
흠..어렵군!!