블록체인 12

[스마트 컨트랙트] 물건 사고, 환불하는 dApp 간단히 구현

사과를 구매하고, 환불할 수 있는 아주아주 간단한 dApp을 구현해보겠다. 목차 - 디렉토리 구조 - truffle 백 - 프론트 - 메타마스크 연결 - 물건 사고, 환불해보기 디렉토리 구조 Truffle 배포하기 터미널 열고 npx ganache-cli 다른 터미널에 mkdir truffle cd truffle truffle init truffle/contracts/AppleShop.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; contract AppleShop{ mapping (address => uint) myApple; //address를 넣어주면 uint(정수)값이 튀어나온다. function buyApple() public paya..

[web3] web3 연결 테스트

이전 글과 이어집니다. 전 글의 테스트 코드입니다. explorer 디렉토리 생성해서 npm install jest web3 block.test.js const Web3 = require("web3"); describe("Block", () => { let web3; it("web 연결 테스트", async () => { web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:9000")); const block_number = await web3.eth.getBlockNumber(); console.log(block_number); // for (let i = 1; i { const tx = web3.eth.getTransaction( "0..

블록체인 2022.07.01

[이더리움] test account 만들어 메타마스크 사용해보기

이전 글과 이어집니다. ☞ 이전 글 바로 보러가기 1. ganache 설치해주기 터미널 geth 깃클론 받은 디렉토리까지 들어가서, npm install -g ganache-cli 다운로드가 끝나면, ganache-cli 위 명령어를 통해 실행한다.(test account 생성해주는 것임.) 뭐 이런 식으로 뜰 것임. 2. 메타마스크 크롬에 추가하기 그냥 구글에 쳐서... 확장프로그램에 추가해준다! 그리고 계정을 만든다. 네트워크 추가를 누른다. 위처럼 작성하면 저장 버튼이 파래질 것임.(필자는 이미 만든 상태라 저렇게 뜸) 계정 가져오기를 누른다. 아까 터미널에서 생성 된 test account 9개 중 아무거나 하나 비밀키(Private Key)를 복사해서 붙여넣어준다. 그럼 계정 추가 완료!

블록체인 2022.06.27

[Typesript] 암호화폐 지갑 웹으로 구현해보기(트랜잭션&정보입력)

넌작스 다운로드 해주기. wallet/server.ts import express from 'express' import nunjucks from 'nunjucks' import { Wallet } from './wallet' import axios from 'axios' const app = express() const userid = process.env.USERID || 'podo' const userpw = process.env.USERPW || '1234' const baseurl = process.env.BASEURL || 'http://localhost:3000' const baseAuth = Buffer.from(userid + ':' + userpw).toString('base64') c..

블록체인 2022.06.17

[Typescript] 암호화폐 지갑 대~충 구현해보기(찍먹)

오늘 할 것은 암호화폐에 필요한 비밀키(개인키) 생성, 공개키 생성, 디지털 서명, 검증, 계정생성이다. 타원곡선이 블록체인에 어떻게 이용되는가? ↓ 타원곡선과 블록체인 (brunch.co.kr) 타원곡선과 블록체인 "이거 진짜 너가 보낸 트랜잭션 맞아?" | 시작하기 전에 이 글은 블록체인에 타원곡선이 어떤 식으로 이용되는지에 초점을 둔 글 입니다. 주제의 특성상 너무 기술적으로 들어가는 부분들이 있는 brunch.co.kr src/core/wallet/wallet.test.ts import { randomBytes } from 'crypto' import { SHA256 } from 'crypto-js' import elliptic from 'elliptic' const ec = new ellipti..

블록체인 2022.06.16

[Typescript, 블록체인] P2P 네트워크를 통한 브로드캐스팅 구현하기

목차 -브로드캐스팅 -코드 구현 브로드캐스팅 탈 중앙화 시스템에서 거래는 '브로드 캐스팅'을 통해 이루어진다. 중앙화 시스템(우리가 사용하는 은행을 예로들면)에서는 나의 거래 데이터를 중앙 서버에 전송한다. 이에 반해 탈 중앙화 시스템에서는 나의 거래 데이터를 나와 연결된 모든 노드(피어)에게 전송한다. 이렇게 탈 중앙화 시스템에서는 시스템에 참여하는 모든 노드가 서로 데이터를 전송한다. 이론상 모든 노드가 순서는 다르지만 모두 같은 데이터를 가지고 있어야 한다. 하지만 현실에서는 네트워크의 상황이나 네트워크 오류, 피어의 관계 등에 따라(데이터 전달 속도가 다르므로) 특정 시점에 모든 노드가 가지고 있는 데이터는 서로 상의할 수 있다. 이때, 데이터를 가지고 있다고 해당 데이터가 무조건 '기록'되는 것..

블록체인 2022.06.15

[Typescript] 타입스크립트로 블록체인 P2P 구현해보기(찍먹)

타입스크립트로 블록체인에 이용되는 p2p를 찍먹해보겠다. index.ts import { BlockChain } from '@core/index' //블록정보가 담겨있는 객체임. 전 글에서 확인가능합니다 import express from 'express' import { P2PServer } from './src/serve/p2p' const app = express() const bc = new BlockChain() const ws = new P2PServer() app.use(express.json()) app.get('/', (req, res) => { res.send('Chain') }) app.get('/chains', (req, res) => { res.json(bc.chain.getChi..

블록체인 2022.06.14

[Typescript] 타입스크립트로 블록체인 마이닝(채굴) 구현하기

채굴을 위해 사용되는 mining 함수는 이전 블록의 해시값, 시간, 거래내역, 난이도(diff)를 인자로 받는다. 그리고 해당 값과 난스, 해시값을 합쳐 블록(block)을 만든다. 블록은 반복적인 해시값 계산을 통해 난이도를 통과하면 최종적으로 반환된다. 이렇게 난스를 증가시켜가며 난이도에 맞는 해시값을 발견하는게 바로 '채굴(마이닝)'이다. 따라서, 마이닝을 위해선 difficulty를 알아야하는데, 이를 위해서 일단 chain을 생성해주어야한다. chain은 쉽게 말하면 배열이다. difficulty는 지속적으로 변하는데(난이도조정), 기준이 이전 블록이므로, 연결은 반드시 이루어져 있어야한다. 코드를 작성하기 전에, 라이브러리를 설치해주는 것을 잊지말자! merkle, crypto-js, hex..

블록체인 2022.06.14

블록체인 마이닝(채굴하기)에 대해 알아보자.

블록체인에서 가장 이해가 안될수도 있는 채굴에 대해서 알아보겠다. 채굴은 퍼블릭 블록체인에서 상당히 중요한 개념이며, 보상과 사용자에게 참여를 유도시키는 핵심기술중 하나이다. 다들, 채굴이 뭔지는 대충은 알고 있을 것이다. 비트코인을 예로 들면, 문제를 맞춘 정답자에게 비트코인을 주게 되는 것이고, 퀀텀은 소유한 양에 맞춰서 이자를 주게 되는 방식이 있다. 그리고 이오스같은 경우는 간접 민주주의 방식으로 모든 사용자에게 동등한 권리를 주지 않고, 대표자들에게 채굴의 권한을 준 후 나눠주는 방식이 있다. 이러한 채굴에 대해서, 하나둘 모두 비교를 하고 싶으나 내용이 워낙 방대할 수 있어서 여기에는 일반적인 비트코인에서 사용되는 채굴 방식을 사례로 들겠다. 채굴의 의미 블록체인에서 채굴을 한다고 할 때, 사..

카테고리 없음 2022.06.14

[Typescript] 타입스크립트로 블록체인 블록 검증하기

중간에 누군가 데이터를 바꿀 수도 있기 때문에 블록이 변조되지 않았는지, 검증이 필요하다. 블록을 검증하는 조건은 아래와 같이 총 3가지인데, 이를 모두 만족해야한다. 1) 새로운 블럭height 값 = 이전 블럭 height 값 + 1 : height가 1 씩 증가 2) 이전 블럭의 hash 값 = 새로운 블럭의 previousHash 값 3) 블럭의 version, merkleRoot, timestamp, height, previousHash 값을 조합해 hash를 생성했을 때, 블럭의 hash와 값과 동일한지 : 같은 데이터기 때문에 hash도 당연히 같아야한다. 1. 타입선언 @types/Failable.d.ts declare type Result = { isError: false; value: ..

블록체인 2022.06.14