목록DevOps/Chain (27)
Blockchain & Devops

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..
Geth(Go Ethereum)은 Go로 개발된 Ethereum client다. JSON-RPC를 이용해서 이더리움 콘솔에 접속할 수 있는 환경을 제공한다. + JSON-RPC? JSON으로 인코딩된 원격 프로시저 호출이다. 매우 간단한 프로토콜로, 소량의 데이터 타입과 명령어들만으로 정의한다. JSON-RPC는 알림을 허용하고, 다수의 호출이 서버로 전송되고 순서없이 응답한다. 참고 자료 : https://www.getoutsidedoor.com/2019/08/10/%EC%99%9C-json-rpc%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C/ 기본적으로 Geth를 이용해서 Ethereum wallet 정보와, state를 확인할 수 있다. Geth 설치방법 $ s..