목록DevOps/Chain (21)
devops

쿼럼(quorum)은 JP모건에서 높은 확장성 구현을 위해 이더리움을 하드포크하여 개발한 엔터프라이즈 블록체인이다. 각 노드는 전체 네트워크 합의를 기다리지 않고, 신뢰할 수 있는 특정 노드만이 합의하여 확장성을 크게 개선할 수 있다. 오픈소스기 때문에 많은 기업과 서비스들이 쿼럼을 활용해서 프라이빗 체인을 운용하고 테스트 중에 있는 것으로 보인다.쿼럼같은 엔터프라이즈 체인은 프라이버시가 중요한데, 이를 Tessera 라는 Private Transaction Manager가 역할을 해주고 있다. Tessera 테세라는 Consensys가 개발하고 있으며 Goquorum과 Hyperledger Besu에 사용되는 트랜잭션 매니저다. 주요 역할은 아래와 같다. 다른 트랜잭션 매니저와 함께 P2P 네트워크 구..
위메이드의 메인넷, 위믹스 3.0를 올려보려고 한다. requirements - Golang $ git clone https://github.com/wemixarchive/go-wemix.git $ cd go-wemix && make 빌드가 완료되면 아래와 gwemix.tar.gz 파일이 build 디렉토리에 생성된다. $ tar xvfz gwemix.tar.gz 압축을 풀면 아래와 같은 파일들이 생성되는데, gwemix.sh는 기본 디렉토리 경로가 /opt/ 기 때문에 /opt/wemix 디렉토리를 생성하고 아래 파일들을 옮긴다. bin/gwemix bin/gwemix.sh bin/solc.sh bin/logrot conf/WemixGovernance.js conf/genesis-template.jso..

Cosmos 체인의 아키텍처를 이해하기 위해선 상태머신과 텐더민트 그리고 인터페이스인 ABCI를 알아야한다. 하나씩 짚어보자 State Machine 블록체인은 'replicated deterministic state machine'이라고 부른다. 즉, 복제되는 결정론적인 상태머신이다. 상태머신은 컴퓨터 사이언스의 개념으로 머신이 다양한 상태를 가질 수 있으나, 특정 시점엔 하나의 상태만 가진다. 여기서 현재 시스템의 상태를 말하는 'state'와 상태를 변화시키는 트리거 역할을 하는 'transaction'이 있다. +--------+ +--------+ | | | | | S +---------------->+ S' | | | apply(T) | | +--------+ +--------+ 위를 보면 상..

Application Specific blockchain을 앱체인(App-chain)이라고 부르기도 한다. 즉 특정 어플리케이션만을 위해서 구축된 블록체인이다. 그래서 어플리케이션의 최적화를 위해서 코어부터 커스터마이징을 통해 원하는 체인 스펙을 설정한다. Cosmos SDK는 이런 앱체인에 특화된 프레임워크로 많은 블록체인 프로젝트에서 사용하고 있다. 아마 우리가 들어본 웬만한 프로젝트는 Cosmos SDK를 썼다고봐도 무방하다. 아래 레포는 cosmos sdk 기반의 체인들 리스트다. akash, cronos, evmos, ehos, kava, osmosis, terra, terra2 등 아주 유명한 프로젝트들이 cosmos sdk를 통해서 탄생했다. https://github.com/cosmos/c..

Cosmos SDK Cosmos는 흔히아는 ATOM 코인의 블록체인이다. 생각보다 높은 시총을 유지하고 있고, 매스컴에서도 많이 회자되는 체인인데, 그 이유는 이 SDK를 통해 생성된 체인들이 모두 연결되는 Cosmos IBC 덕분이라고 생각한다. 이 Cosmos SDK는 PoS 기반의 퍼블릭 블록체인을 쉽게 구축할 수 있는 오픈소스 프레임 워크로, 구축된 체인을 Application-specific blockchain이라 부르기도 한다. Cosmos SDK의 목표는 개발자가 쉽게 커스터마이징한 블록체인을 구축하고 Cosmos 기반 체인들과 연결하는 것에 있다. 최근들어 모듈식 블록체인이 뜨고 있는데, Cosmos SDK 또한 모듈들의 조합으로 구성된다. 그래서 누구나 모듈을 만들 수 있고, 이미 만들어..

블록체인 증명 알고리즘은 블록의 생성은 어려우나 검증은 쉽도록 구성하는 것이 중요하다. 블록의 파라미터 중 Nonce는 유일하게 채굴자들이 변경할 수 있는 값이다. 블록을 생성하기 위해서는 Nonce값을 수정해서 원하는 hash값을 찾아야한다. hash 함수는 결정론적이기 때문에 Nonce값을 반복적으로 대입할 수 밖에 없다. 물론, 블록 생성의 댓가는 코인이기 때문에, 보상을 받기위해 기어이 nonce에 대입하는 컴퓨팅 파워를 사용한다. package main import ( "crypto/sha256" "fmt" "strings" ) func main() { diff := 3 nonce := 1 target := strings.Repeat("1", diff) for { hash := fmt.Sprin..
내가 구현한 블록체인과 통신할 수 있는 CLI를 구현해본다. flag를 사용해서 port와 사용할 mode를 설정한다. package cli import ( "flag" "fmt" "os" ) func usage() { fmt.Printf("This is vatacoin\n\n") fmt.Printf("Please use the following flags:\n\n") fmt.Printf("-port:Set the PORT of the server\n") fmt.Printf("-mode:Choose between 'html' and 'rest'\n\n") os.Exit(0) } func Start() { if len(os.Args) == 1 { usage() } port := flag.Int("port"..
REST API를 GO로 구현해서 blockchain부터 특정 block을 확인하고, 추가할 수 있도록 해본다. package rest import ( "encoding/json" "fmt" "log" "net/http" "strconv" "github.com/gorilla/mux" ) var port string type url string func (u url) MarshalText() ([]byte, error) { url := fmt.Sprintf("http://localhost%s%s", port, u) return []byte(url), nil } type urlDescription struct { URL url `json:"url"` Method string `json:"method"` De..

이전에는 main.go에 모든 함수를 때려넣어서 구현했지만, func의 기능도 세분화해서 만들어보려고 한다. main.go # main.go package main import ( "fmt" "github.com/test/blockchain" ) func main() { chain := blockchain.GetBlockchain() chain.AddBlock("Second Block") chain.AddBlock("3 Block") chain.AddBlock("4 Block") for _, block := range chain.AllBlocks() { fmt.Println("Data: ", block.Data) fmt.Println("Hash: ", block.Hash) fmt.Println("Prev..

Golang x Blockchain 블록체인의 구조에 대해서 이해하더라도, 직접 코드로 구현해보는 것만큼 좋은게 없다. 이더리움도 Go로 개발할 정도로, Go는 빠른 처리속도를 자랑하기 때문에 다양한 블록체인 프로젝트에 Golang이 많이 사용된다. 간단한 구조로 구현해보고 개념도 학습해보자. Block 블록은 블록체인의 가치있는 정보를 저장하는 매개체다. 비트코인의 경우엔 트랜잭션같은 거래내역들이 저장된다. 외에도 version, timestamp, hash 들이 저장되어 개별 블록이 구분되고 연결될 수 있다. 블록의 기본적인 구성은 아래와 같다. type Block struct { Timestamp int64 Data []byte PrevBlockHash []byte Hash []byte } Time..