목록웹 개발/블록체인 (42)
dukDukz
간단한 통신에 대한 내용 ws.on 은 addEventListener 랑 비슷하다고 볼 수 있다. document.addEventListener('click',()=>{ // document에 click 이벤트 등록 // 코드가 계~~~속 실행되어야 한다. 그래야 이벤트가 발생했을 때 알 수 있기 때문 }) ws.on('message',()=>{ // on 역시 이벤트 등록을 위해 썼다고 생각하면 될듯 }) 상위 객체에서 매서드를 실행하고 스트링으로 뭔가 들어가고 두번째 인자값이 콜백함수 callback 함수 let callback = (a,b) => { console.log(a,b) } callback(1,2) a=1, b=2 가 찍힌다. 이 상태에서 setInterval 을 써보자 et callbac..
인터페이스란? 인터페이스 : 리모컨, 클라이언트... 내가 뒤에 만든 프로그램이랑 대화할 수 있는 매개체 (요청만 보내는..) HTTP 인터페이스 node js (express http server 가 항상 backend로만 구축했던..) 지금은 client 역할만 한다 - 왜 client 역할을 하고 있는가? -> 블록체인이라는 특수성 사용자에게 1,000원 이라는 데이터를 받았다면, 우리는 그 정보를 영구적으로 가지고 있어야만 응답을 줄 수 있는데 이 데이터를 어떤 방식으로 저장할 것인가? - 저장하는 방식 1) 메모리에 저장 - 변수에 저장함 웹소켓을 껐다가 켰을때 당연히 블록이 날아간다. 웹소켓을 통해서 서로간에 연결을 시켜주는 채팅 프로그램을 만들었다고 생각해보자 websocket websock..
두개의 서버. 접속만 되게끔 했었는데 서로의 정보를 공유할 수 있게 해보자 $ curl -X POST -d "{data:"hello"}" http://localhost:3000/addPeers 서버 연결을 시켜놓고 서로 웹소켓으로 연결이 되게끔 처리를 해놓으면 연결 시도를 한다. 그러면 server2 가 체크를 한다 server1의 블록과 server2의 블록이 같은가? 다른가? - 임의로 server1의 블럭이 추가 되어 있는 상황이라서 다르다. - 검토를 한다 (제네시스 블록 제외하고 검토함) - 그 다음에 다른 부분을 찾아서 바꿔준다. - 연결할때 블럭을 2개로 바꿔준다. (server2) 연결이 된 상태에서 server1에 블럭을 추가하게 되면 server2에도 보내준다. 마찬가지로 server2..
P2P 구현하려면 websocket 사용해야 한다 node js 에서 websocket 사용해본 적 있음 - 이때 사용했던 패키지 : socket.io socket.io 는 연결만해주는게 아니라.. broadcast 같은 기능이 됨.. -> ws 패키지.. socket.io 말고 우리는 socket 으로 사용할것이다. socket.io 를 썼던 이유는 기본 기능외 여러가지가 만들어져 있다. - 그래서 초보에게 좋음 반면 ws 는 접속에 대한 것만 해주고 다른거는 우리가 구현해야 한다 ex) broadcast, to 같은것들.. 그 웹서버 구축의 기초 작업 - 세팅만 해보자! 블록체인에서는 port 2개를 쓴다고 보면됨 1. 서버 ~ 클라이언트 2. 노드간 통신 [server.js] express 환경 $..
1. 블록 추가 (수업 ver) addBlock - 배열에 push 만 하는 녀석 nextBlock - 다음 블럭의 header 와 body를 만들어주는 함수 createHash - Hash 를 만들어주는 함수 # 다음 블럭의 header 와 body를 만들어주는 함수 function nextBlock(data){ # data = body 에 넣어줄 임의값을 받는 매개 변수 # header 는 5개의 속성값이 필요함 - 그 중 이전해쉬값 이전 인덱스 값이 이전 블록 내용이 필요함 } [해쉬값] 이전해쉬값의 version + index + previousHash + timestamp + merkleRoot string 으로 묶은 다음 previousHash = SHA256(version + index + ..
# 이제 다음 블럭을 생성하는 루틴을 해보자 - 이게 코드가 길다 이때부터는 검증 , 데이터 타입을 신경쓰면서 만들어야 한다 -------- # 연결리스트 형태로 블럭을 나열할것이다. 순차적으로 만들거라는 얘기!! 블럭을 생성할 때마다 배열에 집어넣는거를 해보자 전역변수로 배열을 하나 선언한다. let Blocks = [createGenesisBlock()] console.log(Blocks) // 앞으로 볼때는 얘를 보면 됨 # 블럭을 추가해주는 거를 간략하게 해보자 : 전역변수로 선언한 곳에 push 하는 것 function addBlock(){ // 우선 class 사용 new header -> new block (header, body) 를 해야겠군 } index 는 맨마지막에 있는 녀석에 +1 ..
src 폴더 밖에 npm init [block.js] 1. version header에 넣을 version. package.json의 version을 갖고오고 싶다. fs 를 활용하자! const fs = require('fs') function getVersion(){ const package = fs.readFileSync("../package.json") console.log(package); } getVersion() 이렇게 작성하고 $ cd src $ node block 그러면 처음에는 버퍼로 나온다. console.log(package.toString("utf8")); 이렇게 바꿔주면 package.json 의 내용 전체를 확인 할 수 있다. # 객체로 가져오는 방법! JSON.parse 를 ..
# 블록체인 쌍방향 통신(P2P) - 네트워크 (http / socket) - 데이터를 저장하는 코드 (블록) (분산원장) ㄴ 어떤식으로 데이터가 저장되는지? 하나의 문서 같은게 있다고 치면, 전에 있던 데이터가 어떤 곳을 바라보는지.. 이런식으로 데이터를 연결해서 사용할 수 있도록 그런 데이터를 json 형태로 구현했다. 1 잘 묶여있는가? 풀리지 않았나? merkle 로 확인.. 제네시스 블록 최상위 노드이다 라고 가정했을 때 얘가 hash12345678 라고 한다면 두개로 나눠서 첫번째 노드는 hash1234 까지받고 두번째 노드는 hash5678 을 받는다 그 다음은 12 /34 56 / 78 그래서 특정 블럭 검증할 때 짝꿍 확인하고 위에 부분 확인.. # 머클 사용 : 데이터 연결을 쉽게 찾기..