일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JWT 로그인 기능 구현
- Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>
- express router
- 라우트 매개변수
- 비동기파일업로드
- 블록 만들기
- JWT 하드코딩
- express.static
- JWT 만들어보기
- css기초
- useContext
- buffer.from
- javascript기초
- next 매개변수
- FormData()
- ws 라이브러리
- cookie-parser 만들어보기
- 라우터미들웨어 분리
- useEffect clean up
- nodejs파일업로드
- 세션으로 로그인 구현
- express session
- node.js path
- 라우터 분리
- mysql wsl
- 아이디 중복체크기능
- 라우터와 미들웨어
- OAuth 카카오
- express실행
- 시퀄라이즈 기본설정
- Today
- Total
목록BlockChain (35)
즐코
1. address 이더리움 네트워크 상에서의 계정을 가리킨다. 즉, 이더리움 주소 길이인 20바이트를 담을 수 있는 타입이다. 크립토 좀비에선 해당 address를 좀비들에 대한 소유권을 가진 고유 아이디값으로 쓴다. 2. mapping struct, arrays 처럼 구조화된 데이터 타입을 저장하는데 쓰이는 또다른 데이터 타입이다. 객체처럼 key, value 값으로 이뤄져있다. mapping (key => value) [변수명] // 계정-그에 해당하는 잔고를 저장할 때, 계정,주소가 key값이고 uint 즉 잔고가 value mapping (address => uint) public accountBalance; // 사용자 아이디-그에 해당하는 실명을 저장할 때, 아이디가 key, string 즉..
크립트 좀비를 통해 solidity 데이터 타입 및 함수 등에 대해서 먼저 간단하게 정리하고자 한다. 여러 데이터 타입이 있지만 우선 기본적인 uint, bytes, struct, arrays만 짚고 넘어간다. bool은 그냥 불리언타입이라 생략한다. 다음 포스팅에선 크립토 좀비를 통해 mapping과 address 라는 살짝 특이한 데이터타입을 정리할 예정이다. 1. uint unsigned Integer 음수가 아닌 정수 * int : 음수를 포함한 정수를 가리킨다. uint 뒤에 붙는 숫자는 비트를 의미한다. uint8, uint16, uint32 ~ uint256까지 8비트씩 증가한다. 이때, uint256을 uint라고 줄여 말한다. ex) uint256 = 256비트(32바이트이자 64자리)짜..
1. 스마트 컨트랙트 - 이벤트 등록 저번 포스팅에서 화면이 렌더되자마자 배포된 컨트랙트를 가져와서 최신 상태변수값을 조회하여 화면에 렌더해주었다. 다만, 우리는 가나쉬 네트워크를 사용하고 있기 때문에 가나쉬를 실행하고 있는 터미널을 종료하면 가나쉬 네트워크와 연결된 노드는 사라지고 다시 실행 시 새로운 노드와 그에 따른 계정들도 재생성해준다. 이 때 이 이더리움 네트워크 상에서 각 노드들을 구분할 수 있는게 network id 이다. 자세히 설명하자면, 네트워크 chain id 가 같은 노드들은 같은 네트워크 상에 묶이게 된다. 이때 한 네트워크 내의 각 노드들은 저마다의 식별자를 가지고 있는데 그게 바로 네트워크 아이디이다. truffle migration으로 배포 진행 후에 build/contrac..
Counter 라는 아주 단순한 컨트랙트를 만들어서 클라이언트가 브라우저 상에서 숫자를 증가/감소 시킬때마다 (즉, 네트워크 내 상태변수를 변경시킬때마다) 메타마스크를 통해 가나쉬 테스트 네트워크에 배포된 컨트랙트를 실행시키는 걸 해보려고 한다. 상태를 변경하는 것도 하나의 트랜잭션이므로, 이 트랜잭션 발생 시 개인키로 서명을 해줘야하는데 그 역할을 메타마스크로 대체해준 것이다. 1/ truffle 이용하여 컨트랙트 배포 및 실행 테스트 - truffle 구조 생성 $ truffle init - truffle 설정파일 수정 저번 포스팅과 달리 가나쉬 테스트 네트워크를 이용할 예정이므로, port#는 8545로 해준다. (미리 가나쉬 실행해두기! ganache-cli) // truffle-config.js..
스마트컨트랙트 개발할 때 많이 쓰는 프레임워크에는 Hardhat과 Truffle이 있다고 한다. 요즘은 Hardhat이 핫하다곤하지만, 익숙한 web3 라이브러리 기반의 프레임워크인 truffle을 쓰는게 통일성 있으니 truffle을 사용해보려고 한다. 해당 포스팅에선 truffle 설치 및 스마트 컨트랙트 배포, 실행을 간단하게 정리해본다. 1/ Truffle 설치 truffle은 전역으로 설치해주었다. $ npm i -g truffle // 디렉토리 하나 만들어서 그 안에서 init $ npx truffle init init 명령어를 실행한 truffle 폴더 하에 아래 디렉토리들이 자동 생성되었다. - build : 솔리디티 코드를 컴파일한 내용이 json 형태로 들어간다 (해당 디렉토리는 맨 처..
truffle 을 배우기 전 자바스크립트로 스마트 컨트랙트를 컴파일해보고 이를 배포, 실행하는 과정을 정리해보았다. 1/ keythereum 라이브러리 사용해서 개인키 알아내기 스마트컨트랙트 배포를 위해 트랜잭션을 만드려면 서명이 필요한데 서명에는 개인키가 필요하다는 걸 인지해야한다. 개인키를 뽑아내기 위해서는 계정 생성 시 만들어진 keystore 디렉토리 내의 계정 정보가 담긴 UTC 파일을 사용해야한다. 이 때, keythereum 라이브러리를 통해서 UTC 파일 내용을 복호화해서 개인키를 알아낼 수 있다. $ npm i keythereum web3 우선, 실습을 위해 이전에 생성한 계정 정보 UTC가 담긴 keystore 디렉토리를 복사해서 갖고온다. keythereum.importFromFile..
트랜잭션 객체를 통해 스마트 컨트랙트 내용을 이더리움 네트워크 상에 던지는데 이걸 스마트 컨트랙트를 배포한다고 표현한다. 스마트 컨트랙트 배포를 위해서는 스마트 컨트랙트 내용이 바이트코드로 변환되어 트랜잭션 객체 속에 데이터로 담겨야하는데, 바이트 코드로 변환하기 전 코드는 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 서버가 필요한데, 이때 프론트가 백엔드에게 입력 데이터를 던져서 백엔드 자체에서..