일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- useEffect clean up
- JWT 로그인 기능 구현
- express router
- express실행
- 블록 만들기
- 아이디 중복체크기능
- node.js path
- 라우터미들웨어 분리
- JWT 만들어보기
- mysql wsl
- express session
- OAuth 카카오
- JWT 하드코딩
- nodejs파일업로드
- 라우터와 미들웨어
- next 매개변수
- buffer.from
- FormData()
- 세션으로 로그인 구현
- css기초
- 라우트 매개변수
- cookie-parser 만들어보기
- express.static
- Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>
- 라우터 분리
- useContext
- javascript기초
- 비동기파일업로드
- ws 라이브러리
- 시퀄라이즈 기본설정
- Today
- Total
목록BlockChain (35)
즐코
web3를 써보기 이전에 이더리움 프로그램이 지원하는 json-rpc 프로토콜에 대해서 가볍게 정리해보았다. 그리고 web3 라이브러리를 테스트 코드로 돌려보았고, 가스비에 대해서도 정리해봄 JSON RPC RPC = Remote Procedure Call 원격 프로시저 호출..? 이더리움 클라이언트 프로그램은 RPC 명령어 인터페이스를 자바스크립트의 JSON 형태로 지원한다. 이것을 JSON-RPC API라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다. JSON RPC 하나의 간단한 프로토콜이라고 생각하면 된다. HTTP 또는 TCP 프로토콜 하에서 돌아가는 건데, URL은 깔끔하게 유지하고 하나의 특정 메소드만 요청, 실행시켜서 하나의 결과물만 리턴..
이더리움 개요 현재까지 배운 블록체인 네트워크, http 서버, p2p서버, 지갑, 지갑서버 등은 비트코인의 형태를 따 온 것이다. 이젠 이더리움을 공부할건데 이 이더리움은 프로그래밍이 가능한 블록체인으로 비트코인과 다른 기술을 도입한다. 비트코인과 달리 smart contract가 이더리움의 핵심이라고 볼 수 있다. - 비트코인 : transaction의 기능만 구현 - 이더리움 : 기존의 거래뿐만 아니라 조건에 따라 특정 코드가 실행되게끔 구현한 블록체인 플랫폼 => 스마트 컨트랙트 이 스마트 컨트랙트를 위해 이더리움은 EVM 이라는 게 있고, EVM 외에 transaction과 account 내용이 기존의 비트코인과 좀 다르다. 따라서 이 EVM가 뭐고 transaction, account가 비트코..
해당 포스팅에선 블록 채굴 후 트랜잭션 풀의 업데이트 및 블록체인 네트워크 상의 다른 노드들에게 트랜잭션 풀을 공유 즉, 브로드캐스트 해주는 것에 대해서 정리한다. 1/ 트랜잭션 풀 업데이트 우선은 tx를 데이터로 넣고 채굴한 블록을 체인에 추가하면서 txPool도 같이 업데이트해줘야하므로 chain에 txPool 속성을 추가해준다. (txPool 관련 이전 포스팅 https://yjleekr.tistory.com/81?category=1284408) - 트랜잭션 발생 시 tx pool에 새로운 tx가 추가되게끔 appendTxPool 메소드도 만들어준다. - 블록 채굴 후 블록체인에 추가 시 block으로 만들어진 data는 이제 필요가 없으므로 pool에서 빼줘야한다. updateTxPool() ..
트랜잭션 발생 시 트랜잭션 내용만 Wallet.sendTransaction()의 인자로 보내줬으나, 트랜잭션 발생 시 utxo도 업데이트시켜줘야하므로, 현재 utxo 배열도 가져오게끔 인자로 넣어준다. (ws.getUTXO()) sendTransaction 관련 포스팅 : https://yjleekr.tistory.com/82?category=1284408 // index.ts app.post("/sendTransaction", (req, res) => { console.log("reqbody", req.body); try { const rcvdTx: ReceivedTx = req.body; Wallet.sendTransaction(rcvdTx, ws.getUTXO()); // UTXO 내용을 최신화하는..
트랜잭션을 코드로 나타내려면 트랜잭션이 만들어지는 과정에 대해서 먼저 이해를 해야한다. 트랜잭션의 과정 말로 표현해도 되지만, 엑셀로 표현하는 게 나중에 보기 편할 것 같아 정리해보았다 왼쪽 표는 트랜잭션 하나하나를 흐름에 따라 정리한 부분이고, 오른쪽은 각 트랜잭션에 따라 생기는 UTXO 목록이다. UTXO 가 txIn으로 쓰였으면 spent로 표시, 아직 쓰이기 전이면 unspent로 표시하였다. 오른쪽 하단 마지막 표는 트랙잰션 tx0004까지 남아있는 최종 UTXO 이다. 거래자 A,B,C 가 있다고 가정하고, A가 첫 블록 채굴에 성공해서 50BTC 를 받는 것부터 시작한다. 여기서 tx hash는 트랜잭션의 고유한 인덱스값을 가리킨다. 실제로는 해시값으로 찍히지만 여기선 흐름을 익히기 위해 ..
https://yjleekr.tistory.com/80 이전 포스팅에서는 지갑 생성까지만 했었다면, 이번엔 fs를 이용해서 지갑을 생성할 때마다 특정 폴더에 저장할 것이다. 그리고 저장된 지갑의 목록을 불러와서 지갑 디테일 확인 및 해당 지갑의 개인키를 이용하여 서명도 만들고, 서명과 함께 트랜잭션을 블록체인 서버쪽에 보낼 것이다. 지갑과 지갑서버 1. 지갑 저장 및 생성된 지갑 내용 화면에 뿌리기 파일 저장 시엔 각 지갑의 계정을 파일명으로, 파일 내용엔 개인키가 들어가게끔 코드를 작성했다. Wallet 클래스를 만들 때 생성자메소드의 인자를 받지 않았었는데, 추후 지갑들 목록에서 지갑을 가져올 때 개인키를 넣고 나머지 값을 불러올 것이므로, 인자로 개인키를 받아주는 걸로 수정한다. (실제론 요청/응답..
저번 포스팅에 이어서 트랜잭션에 대해 간단히 정리하고자 한다. 1. transaction 1/ Transaction 여러개의 input과 여러개의 output으로 구성되어 있다. 그렇기 때문에 transaction의 interface는 각각의 거래인풋들과 거래아웃풋들을 가지고 있는 배열 형태로 만들어줄것이다! - transaction 내 hash가 나타내는 값? txins와 txouts를 합쳐서 hash하여 거래 고유 인덱스값을 나타낸다. // wallet/transaction.ts interface ITransaction { hash: string; txins: ITxIn[]; txouts: ITxOut[]; } 이 트랜잭션 input과 output이 어떻게 생기는지 간단한 예로 풀어써보면 아래와 같다..
1. HTTP 기본 인증 - Basic 서버는 사용자를 식별하여 작업이나 리소스에 접근할 권한을 결정한다. 보통은 사용자 이름과 비밀번호를 입력해서 인증하는데, HTTP는 uri로 자체적인 인증 관련 기능을 제공한다. 밑의 uri 구조에서 auth과 관련된 부분이 있는데, 사용자명:비밀번호를 입력하여 특정 영역의 접근 권한을 얻을 수 있다. 현재 chrome 브라우저에선 이런 Basic 이 보안에 좋지않아 사용하지 못한다고하지만, 블록체인 네트워크의 인증에선 아직까지도 이 basic 방식이 쓰인다고 한다. HTTP 기본 인증 흐름 (Basic) 1. 클라이언트->서버 : GET 요청으로 url을 던진다. (인증 정보가 없는 상태) 2. 서버->클라이언트 : 사용자에게 아이디와 비밀번호를 제공하라는 의미..
지갑, 트랜잭션에 대해 이해하려면 개인키/공개키를 알아야하므로 이와 관련된 암호화 개념부터 시작한다. 1/ 암호화 기법 지갑에 대해서 알려면 우선 암호화기법에 대해 가볍게 짚고 넘어가야한다. 우선 암호화를 하는 가장 중요한 이유는 바로 무결성이다. 어떠한 정보나 데이터가 원본으로부터 조작되지 않았는지 무결성을 체크하는데 있어서 이 해시알고리즘이 쓰인다고 보면 된다. 1. 양방향암호화 - 대칭형 대칭키 하나로 암호화/복호화가 가능하다. 암호화한 정보를 다른 사람에게 보낼 때 이 대칭키도 같이 보내야하기때문에 대칭키의 보안이 매우 중요하다. 2. 양방향암호화 - 비대칭형 암호화하는데 있어서 공개키(public key)를 사용하고 나중에 복호화 시 개인키(private key)를 쓴다. (반대로도 가능하다!)..
1/ P2P 네트워크란? Peer To Peer 기존에 배웠던 서버-클라이언트로 구분된 통신이 아닌 노드-노드간의 통신으로 블록체인의 탈중앙화 개념과 일맥상통하다. 한 컴퓨터가 서버가 되기도 하고 클라이언트가 되기도 하기 때문에, 이전에 frt/back을 나눠서 코드를 작성해준 것과 달리 서버쪽 코드와 클라이언트쪽 코드를 같이 한 파일 안에서 작성해줌으로써 P2P 네트워크를 구축한다. 2/ P2P 네트워크 구축하기 1. BlockChain 클래스 정의 우선, 기존에 만들어둔 Chain 클래스를 사용해서 블록체인 클래스를 새로 정의해준다. 해당 블록체인 클래스를 사용해서 클래스 내부의 메소드를 사용해 블록체인 내용을 조회해보는 api 나 블록 채굴 api를 서버 쪽에 만들어줄 수 있다. // src/cor..