본문 바로가기

블록체인18

스위프트로 배우는 블록체인 - 탈중앙화 구현 스위프트로 배우는 블록체인 - 탈중앙화 구현 노드모듈생성지금까지는 하나의 네트워크에서 블록체인이 어떻게 작동하는지 알아보았습니다. 지금부터는 여러개의 노드를 만들어서 탈중앙화 개념을 구현해 보도록 하겠습니다. model.swift에 새로운 노드를 생성할 클래스를 아래와 같이 작성해 줍니다.//새로운 노드 생성 클래스class BlockchainNode : Codable { var address : String init(address : String) { self.address = address }} 아래에 이이서 class Blockchain 부분에 아래에 위에서 만든 노드 데이터를 컨트롤할 변수와 추가할 함수를 만들어 준다.//체인 구조체class Blockchain : Codable { //블록이 배.. 2018. 6. 2.
스위프트로 배우는 블록체인 - 채굴구현 스위프트로 배우는 블록체인 - 채굴구현 먼저 이전전 포스팅에서 다루었던 BlockChainSwift.playground를 vapor프로젝트에 App -> Model 안에 model.swift 라는 이름으로 새로 파일을 만들어서 복붙해준다. //// models.swift// App//// Created by MacBookPro on 2018. 5. 30..//import Vaporimport Foundationimport Cocoa //거래가 발생할때 거래 타입 선택 가능enum TransactionType : String, Codable{ case domestic case international} // 스마트 컨트랙드 프로토콜 함수 - 지원,신청하는 계약임protocol SmartContract{ f.. 2018. 6. 2.
스위프트로 배우는 블록체인 -스마트 컨트랙트 스위프트로 배우는 블록체인 -스마트 컨트랙트 스마트컨트랙트 구현물건을 산다거나 보험에 가입한다거나 할때 발생하는 거래데이터를 거래타입에 따라 결과값이 달라지는 스마트 컨트렉트 기능을 구현해보는시간을 가지겠습니다. 쉽게말해서 가입비가 일반회원이면 10만원이고, vip회원이면 20만원이 되는 스마트컨트랙트 거래기능을 구현해보겠습니다. 먼저 거래 타입 enum을 만들어 준다. 나중에 transaction을 발생시킬때 domestic인지 international인지 아래에서 선택할 수 있습니다.//거래 타입enum TransactionType : String, Codable{ case domestic case international} 거래 데이터 클래스를 수정해준다. fee, transactionType부분이.. 2018. 6. 1.
자바스크립트로 블록체인 구현 강좌 11 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌 11 - 나만의 비트코인 발행하기지난 포스팅에서 하나의 네트워크에서 블록체인이 어떻게 작동이 되는지 살펴보았다. 이번포스팅에서는 여러개의 노드, 즉 컴퓨터들이 참여를 할때 블록체인 데이터가 어떻게 기록되는지 살펴보겠다.순서1. api.js 파일 이름을 networkNode.js 로 변경하자. 2. networkNode.js 파일 윗 부분에 동적 포트관련 변수 선언해준다.//동적 포트 package.json script 객체에서 2번째 방에 들어있는 데이터 3001,3002,3003 ...3005var port = process.argv[2];3. app.listen 을 아래와 같이 바꿔 준다.//동적 포트app.listen(port,function(){ console.l.. 2018. 5. 31.
자바스크립트로 블록체인 구현 강좌 10 - 나만의 비트코인 발행하기(소스코드) 자바스크립트로 블록체인 구현 강좌 10 - 나만의 비트코인 발행하기(소스코드)이번 포스팅에서는 블록을 채굴할때, 즉 컴퓨팅 파워로 마이닝 할때 실행되는 app.get(/mine) 함수 부분을 작성해보도록 한다. 순서1.먼저 마지막 블록을 가져온다.2.마지막 블럭의 타입은 객체 이기 때문에 key:value 형태다. 'hash' 키 값으로 해당 value(이전블럭해쉬)를 가져온다.3.현재 블럭데이터는 이전의 발생한 거래내역을 저장해야 하기 때문에 bitcoin객체의 pendingTransaction 배열에 담긴 값을 가져와서 넣어주고, index는 마지막 블럭 index + 1을 해준다.4. 이제 nonce, blockHash를 구할 수 있는 값들을 다 구했다. 5. 그리고 위의 값들을 이용해서 creat.. 2018. 5. 30.
자바스크립트로 블록체인 구현 강좌 9 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌 9 - 나만의 비트코인 발행하기 이번시간에는 api.js에 app.get() , app.post() 부분을 작성해주고, 개발에 조금 더 도움을 줄 node api를 설치 해보도록 하겠다. node js 에서 get, post이 부분이 이해가 안간다면...구글링을 부탁드린다..여기서는 조금이라도 알고 있다고 가정하고 쭉쭉 설명하겠다. 먼저 api.js 소스 코드다var express = require('express')var app = express() // 웹브라우저에 get 방식으로 /blockchain 주소를 입력했을 때 실행app.get('/blockchain', function (req, res) { res.send('blockchain Start')}) // 웹.. 2018. 5. 30.
자바스크립트로 블록체인 구현 강좌 8 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌 8 - 나만의 비트코인 발행하기이번 포스팅 부터는 앞에서 만든 blockchain을 서버에서 구현해보도록 하겠다. 우리는 서버 구축을 간단하게 도와줄 express api를 사용할것이다. 일단 구글로 가서 express npm을 검색하자. 아래 주소로 들어가도 된다. https://www.npmjs.com/package/express콘솔을 열어서 위에 install명령어를 자신의 개발 폴더 위치에서 입력해준다. 이제 express api를 설치 완료 했다. 개발환경으로 가서 api.js 파일을 생성해주고 아래 소스 코드를 입력해주자 아래 소스코드는 express npm 문서에 있다. 간단하게 설명하면 app.get은 웹브라우저에 / 의 값이 들어오면 함수 아래를 실행하겠.. 2018. 5. 29.
자바스크립트로 블록체인 구현 강좌7 - 나만의 비트코인 발행하기(소스코드 포함) 자바스크립트로 블록체인 구현 강좌7 - 나만의 비트코인 발행하기 이번 포스팅에서는 블록체인 기술에서 핵심이라고 할 수 있는 작업증명 POW 개념을 알아보고 코드로 구현해 보자. 간단한 용어정리를 하고 넘어가자. #용어정리해쉬: 해쉬는 의미없는 데이터다. 컴퓨터에서 블럭의 길이를 맞추기 위해서 메모리에 작성된 의미없는 데이터다.예)0000asdkflqwjkeljakldjflaj;블럭: 해쉬를 가지고 있는 사람이 코인을 획득할 수 있는 블록을 의미난이도: 블럭이 생성되는 시간을 일정하게 조정하기 위해 사용되는 개념(전체 해쉬의 양 증가 -> 난이도 증가-> 블럭찾는데 더 많은 해쉬 필요 _> 블럭 생성시간 유지됨)51% 공격: 전체 해쉬의 51% 이상 가진 집단이 존재할때 전체 코인의 이동정보, 즉 블록체인.. 2018. 5. 29.
자바스크립트로 블록체인 구현 강좌6 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌6 - 나만의 비트코인 발행하기저번 시간에 포스팅한 sha256 암호화 값 리턴 함수가 어떻게 사용되는지 보겠다. 일단 test.js 부분을 다 지운다. 그리고 아래 코드를 넣어준다. bitcoin 객체의 hashBlock 함수는 3개의 인자값을 받는다. 1. 이전 블락의 hash 2.현재 블록의 거래 데이터 3.nonce 값 //blockchain.js 모듈을 이곳에서 가져다 쓰겠다.const Blockchain = require('./blockchain'); //위에서 가져온 모듈의 객체를 만든다.const bitcoin = new Blockchain(); const previousBlockHash = "abcdedferefa"const currentBlockData .. 2018. 5. 28.
자바스크립트로 블록체인 구현 강좌5 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌5 - 나만의 비트코인 발행하기 이번 포스팅에서는 sha256 해시생성기와 npm을 이용해서 sha256 모듈을 설치해서 사용해보도록하겠다.일단.sha256 은 암호화 알고리즘의 하나이다. 음..엄청쉽게 말해서 '어떤 입력값이든 고정된 길이의 임의의 문자열값으로 출력한다' 라고 알고 있으면 쉽다.예를 들면 abc 값을 sha256 알고리즘에 넣고 돌리면BA7816BF8F 01CFEA4141 40DE5DAE22 23B00361A3 96177A9CB4 10FF61F200 15AD이값이 생성이된다. 길이를 보자.abcdef를 넣으면?BEF57EC7F5 3A6D40BEB6 40A780A639 C83BC29AC8 A9816F1FC6 C5C6DCD93C 4721같은 길이의 임의의값이.. 2018. 5. 28.
자바스크립트로 블록체인 구현 강좌4 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌4 - 나만의 비트코인 발행하기 지난 포스팅에 이어서 이번시간에는 저번 포스팅에서 작성한 마지막 블락 가져오기 함수와 새로운 트랜젝션 생성하기 함수를 test.js 에서 한번 찍어 보겠다. 그리고 트랜잭션과 새로운 블락이 생겼을 때 , 그리고 새로운 블록이 생긴 이후 트랜잭션 데이터는 어떻게 변하는지 이 관계를 살펴보도록 하자. test.js로 이동해서 새로운 블락을 생성하는 함수와 새로운 트랜젝션을 생성하는 함수를 하나씩 작성한다. //blockchain.js 모듈을 이곳에서 가져다 쓰겠다.const Blockchain = require('./blockchain') //위에서 가져온 모듈의 객체를 만든다.const bitcoin = new Blockchain(); //새.. 2018. 5. 26.
자바스크립트로 블록체인 구현 강좌3 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌3 - 나만의 비트코인 발행하기 이번포스팅에서는 마지막 블록을 얻는 함수, 새로운거래가 발생할때 거래 트랜잭션 데이터를 생성하는 함수를 만들어 보도록 하겠다.먼저 blockchain.js 로가서 이어서 코드를 작성해보자. Blockchain.prototype.createNewBlock ... 생략. 이 코드 아래에 마지막 블록을 가져오는 함수를 작성한다. //마지막 블록 얻기 - chain 배열에는 블록데이터가 들어간다. 맨마지막 블록을 가져와라.Blockchain.prototype.getLastBlock = function(){ return this.chain[this.chain.length - 1];} 그 밑에 새로운 트랜잭션이 발생했을 때 작동되는 함수를 작성한다.참.. 2018. 5. 26.
자바스크립트로 블록체인 구현 강좌2 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌2 - 나만의 비트코인 발행하기 지난 포스팅에서는 자바스크립트로 블록체인 구현을 위한 셋팅과 자바스크립트의 데이터구조와 프로토타입에 대한 기본 지식을 알아보았다. 이번에는 지난번 포스팅에서 구현한 내용을 직접 console.log로 찍어보면서 대충 아~ 이런거구나 하고 감을 잡아보자blockchain.js 모듈화 하기//블록체인 데이터 구조function Blockchain(){ this.chain = []; this.newTransactions = [];} //블록체인 프로토 타입 함수 정의Blockchain.prototype.createNewBlock = function(nonce,previousBlockHash,hash){ //새 블록 객체 const newBlock.. 2018. 5. 25.
블록체인 기초 정리2 블록체인 기초 정리2 1.이더리움이 튜링완전성을 가지면서 가지는 장점은 무엇인가? 튜링완전한 언어는 더 복잡하고 다양한 조건을 가진 계약을 실행하게 해주는 프로그래밍 언어이다. 그래서 일반 컴퓨터와 같은 계산 능력을 가지게 해주는 장점이 있다. 2.이더리움이 세계컴퓨터라고 불리는 이유는? 이더리움 네트워크에 참여하는 모든 노드들은 하나로 연결되어 같은 연산을 하게 된다. 이때 이더리움 가상머신 evm으로 작동이 되는데 이때문에 이더리움은 세계 컴퓨터라고 불린다. 3.Gas란 무엇이고 왜 존재하는가? 가스는 스마트 계약을 하기 위한 재료,연료이다. 이더리움을 보낼때 보내는 이더리움 만큼 가스를 제한한다. 가스가 10이 있다면 10가스 만큼의 계약을 쓸 수 있다. 가스의 역할 중 하나는 가스를 제한해서 컴퓨.. 2018. 5. 25.
블록체인 기초 정리 블록체인 기초 정리 1.블록, 블록체인이란 무엇인가? 왜 “체인"이라는 단어를 사용하는가? 블록은 암호화된 데이터가 기록되어있는 장소이고 이 블록들이 체인처럼 서로 연결되어 있기 때문에 체인이라는 단어를 사용한다. 2.비트코인이란 무엇인가? 블록체인과 비트코인의 관계는 무엇인가? 비트코인은 블록체인을 최초로 실용화한 애플리케이션이다. 다시말하면 블록체인은 비트 코인이 바탕이되는 체계이고, 비트코인은 블록체인을 화폐에 응용한 결과물이다. 3.51% 공격이란 무엇인가? 비트코인을 예로들면, 비트코인은 작업증명(pow)을 사용해서 채굴이라는 연산을 통해 일종의 수학문제를 가장 빨리 푼 사람에게 블록을 추가 시킬 수 있는 권한을 준다. 장부작성권한이라고도 하는데, 문제는 전체 채굴 연산량의 50%이상을 보유한 .. 2018. 5. 25.
인터뷰 형식으로 알아보는 블록체인 인터뷰 형식으로 알아보는 블록체인 블록체인 스터디에서 각 팀원들이 주고 받은 내용을 인터뷰 형식으로 정리했습니다. ● 돈이란 무엇인가? - 돈이란 사람들이 필요로 하거나 원하는 가치를 보다 쉽게 저장하고 교환하기 위한 수단이나 매개체라고 생각한다. 물물교환의 시공간적 한계를 뛰어넘기 위해 만들어졌고, 가치평가의 기준이 된다. 그리고 돈의 가치는 사람들간의 합의를 통해 부여된다. ● 비트코인이 돈의 위치까지 올라갈 수 있는가? - 비트코인을 포함한 모든 탈중앙화 기반의 화폐가, 기득권(중앙기관)이 인정하는 화폐의 가치를 위협할수있기때문에 당연히 좋아하진 않을것같습니다 - 지금은 양적완화라는 이름으로 화폐를 발행하고 있는데, 이는 비트코인과 별반 다르지 않은 모습니다. 제도권에서 통제가 가능하나 안하냐가 중.. 2018. 5. 14.
키워드로 알아보는 블록체인 정리 키워드로 알아보는 블록체인 정리 ●블록체인이란?: 사람들이 신뢰 할 수 있는 방식으로 블록안에 정보 데이터가 정리, 기록되어 있는 공개된 장부 ●블록 : 관리대상이 되는 데이터 ●형태 : 블록안에 들어가있는 데이터가 서로 연결되어서 체인형태로 존재 ●특징: 누구든 임의로 수정할 수 없다. 누구나 변경된 데이터를 볼 수 있다.(장부 조작 불가능) , 위변조 방지, 분산처리 방식, 해킹 불가능 ●탈중앙 : 중앙 집중화된 권력을 분산 시킨다는 의미(중앙은행에서 화폐를 발행했다면, 이제는 모든 개인이 발행할 수 있다.) ●이중지불 방지 기술 : 한 명이 1000원을 보냈는데, 2명이 받는 문제를 방지하는 기술.(데이터의 해킹이나 오류 문제 해결) ●구현사례 : 비트코인 ●비트코인: 블록체인 기술을 기반으로 만들.. 2018. 5. 14.
[블록체인을 위한 경제공부] 자본주의란 무엇일까? 자본주의란 무엇일까? #들어가기전1-2년 전 부터 블록체인 암호화폐라는 단어들이 들렸다. 지금은 그 기술을 이용한 서비스들이 조금씩 나오고 있다. 세상의 변화가 너무 빨라서 신기하기도 하지만 무섭기도 하다. 블록체인이라는 기술에 관심이 생긴 뒤 한달 정도 이것저것 찾아 보았다. 그때 깨달은 점은 블록체인을 위한 블록체인 공부를 하면안된다는 것이다. 다시말하면 블록체인 기술이 왜 나왔고, 어떤 철학적 의미를 지니는지, 어떤 문제를 해결하기 위해서 나왔는지를 알고 접근하는것이 좋겠다는 뜻이다. 그래서 블록체인을 이해하기 위해서 자본주의 시스템을 다시 한번더 훓어 보기로 했다. 앞으로 몇일간 쓸 포스터는 자본주의에 관련된 책, 다큐멘터리 등을 정리해서 올릴 예정이다. #자본주의의 뜻자본주의는 이윤추구를 목적으.. 2018. 5. 2.