일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>
- mysql wsl
- ws 라이브러리
- useEffect clean up
- 시퀄라이즈 기본설정
- express.static
- 라우터와 미들웨어
- nodejs파일업로드
- express router
- 아이디 중복체크기능
- 라우터 분리
- JWT 하드코딩
- useContext
- node.js path
- JWT 로그인 기능 구현
- JWT 만들어보기
- css기초
- 라우터미들웨어 분리
- cookie-parser 만들어보기
- 세션으로 로그인 구현
- buffer.from
- express session
- 라우트 매개변수
- express실행
- FormData()
- next 매개변수
- 블록 만들기
- javascript기초
- 비동기파일업로드
- OAuth 카카오
- Today
- Total
목록분류 전체보기 (110)
즐코
트랜잭션 객체를 통해 스마트 컨트랙트 내용을 이더리움 네트워크 상에 던지는데 이걸 스마트 컨트랙트를 배포한다고 표현한다. 스마트 컨트랙트 배포를 위해서는 스마트 컨트랙트 내용이 바이트코드로 변환되어 트랜잭션 객체 속에 데이터로 담겨야하는데, 바이트 코드로 변환하기 전 코드는 solidity 로 작성해준다. 솔리디티로 스마트 컨트랙트를 작성하는 방법과 컴파일을 거쳐 이 스마트 컨트랙트가 어떤 흐름으로 배포되고 실행되는지만 간단하게 정리하였다. 솔리디티 문법은 차차 알아갈 예정임 Solidity 시작하기 1. VSC 상에서 solidity extension 깔아주기 2. solidity 기본 작성 루트 디렉토리 내에 Contracts 폴더를 하나 만들어주고 HelloWorld.sol 파일을 만들어봄 타입스크..
어젠 ipc 로 geth와 통신했으나 이번엔 http-rpc 통신하는 걸 연습함 node 라는 디렉토리를 미리 생성, 아래 명령어를 통해 node라는 디렉토리를 datadir로 정하고, 새로운 계정을 생성한다. 비번을 입력하면 keystore 디렉토리 생성되고 그 안에 새로운 계정 파일이 저장된다. $ geth --datadir node account new 저번 포스팅에선 genesis.json 내 속성들을 하드코딩으로 넣어줬으나, 이걸 자동으로 만들어주는 라이브러리가 있다! 그게 바로 puppeth 이고 이걸 사용해서 private 네트워크를 구축해보려고한다! Puppeth 으로 제네시스 설정 파일 생성 1. geth를 설치할 때 생성되었던 go-ethereum 디렉토리로 이동한다. 2. 여기서 저번..
geth로 네트워크 돌려보기 이번 포스팅에선 이전에 설치한 geth를 실행시켜 실제 이더리움 메인넷과 연결하고 프라이빗 네트워크도 만들어보고자한다. ( geth 설치 관한 이전 포스팅 : https://yjleekr.tistory.com/87 ) Geth를 실행시키면 우리의 컴퓨터는 하나의 노드, 즉 이더리움 클라이언트가 되어 이더리움 네트워트에 참여하게 된다. 이렇게 각 노드들은 트랜잭션들로 새로운 블럭을 채굴하여 보상을 받으며 연결된 다른 노드들에게 이를 보내준다. 이 새로운 블럭을 받은 노드들은 블럭의 유효성을 검증하고 자신들의 db에 추가한다. 이 각각의 블럭에서 제공하는 정보는 geth가 state(상태-이더리움 내 각각의 계정의 ETH 잔량)를 업데이트하는데 쓰인다. 블록체인과 상호작용하기 위..
이번 포스팅에선 프론트단에서 사용자가 입력한 데이터를 메타마스크로 넘기고, 메타마스크에서 개인키로 서명을 대신해줘서 완성한 이 tx 데이터를 블록체인네트워크로 전달하는 방식의 트랜잭션을 간단하게 구현해본다. 물론 위의 그림과 달리 GETH가 아닌 테스트 용도의 가나쉬 네트워크를 이용할 것이다. 이렇게 서버가 없는 구조를 DAPP이라고 보면 된다. 보통 트랜잭션을 만들고 블록체인 네트워크 쪽에 던지는 방식은 아래와 같이 3가지의 방식이 있다고 한다. 1/ 애초에 백엔드 서버 없이 프론트에서 입력 데이터를 받아 바로 트랜잭션을 만들어 메타마스크로 넘기는 경우 2/ 쇼핑몰처럼 상품에 대한 정보를 연동해줘야하는 경우 백엔드/DB 서버가 필요한데, 이때 프론트가 백엔드에게 입력 데이터를 던져서 백엔드 자체에서..
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가 비트코..
class 에 대해서 다시 짚고 넘어갈 필요할 것 같아 다시 개념정리를 해본다. 이 class는 객체지향적 프로그래밍과 관련있으므로 이 OOP도 한번 정리해본다. 객체지향적 프로그래밍 (OOP / Object-Oriented Programming) 1. 캡슐화 Encapsulation - 데이터와 그 데이터를 활용하는 함수를 한 캡슐, 컨테이너 안에 잘 정리하는 것을 의미한다. 여기서 그 캡슐 역할을 하는 게 class이며, 위에서 가리키는 데이터는 속성이고 그 속성을 쓰는 함수가 메소드이다. - 또한 캡슐화를 통해 공개할 데이터와 숨길 데이터에 대한 구분이 가능해진다. (public,protected,private 사용) ( https://yjleekr.tistory.com/73 : 타입스크립트 공부..
해당 포스팅에선 블록 채굴 후 트랜잭션 풀의 업데이트 및 블록체인 네트워크 상의 다른 노드들에게 트랜잭션 풀을 공유 즉, 브로드캐스트 해주는 것에 대해서 정리한다. 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는 트랜잭션의 고유한 인덱스값을 가리킨다. 실제로는 해시값으로 찍히지만 여기선 흐름을 익히기 위해 ..