비트코인 기본 소개와 코드의 간단한 실현

8166 단어

1. 배점정 장군 문제


배점정 장군 문제는 마이크로소프트 수석연구원 라이슬리 람버트(Leslie Lamport)가 제기한 것으로, 그가 제기한 논문의 원문은 이렇다.
 We imagine that several divisions of the Byzantine army are camped outside an enemy city, each division commanded by its own general. The generals can communicate with one another only by messenger. After observing the enemy, they must decide upon a common plan of action. However, some of the generals may be traitors, trying to prevent the loyal generals from reaching agreement.

배점정군의 몇 사단은 적의 성 밖에 주둔하고 있으며, 각 사단은 자신의 장군이 지휘한다.장군들은 사신을 통해서만 서로 교류할 수 있다.적을 관찰한 후, 그들은 반드시 공동의 행동 계획을 결정해야 한다.그러나 일부 장군들은 충성스러운 장군의 합의를 막기 위해 반역자일 수도 있다.여기서 간결한 말로 묘사하자면 **누가 허위 소식을 보낼지 확실하지 않은 상황에서 평등한 지위에 있는 각 노드가 어떻게 공감대를 형성하고 한 가지 일을 함께 할 수 있는지를 설명한다.

2、비트코인은 무엇입니까?


비트코인은 디지털 화폐 생태계의 기초를 구성하는 개념과 기술의 집합으로 주로 비트코인 네트워크에 있는 참여자 간의 저장과 전달 가치에 사용된다. 비트코인 프로토콜 창고는 소스 소프트웨어로서 각종 계산 설비(핸드폰이나 컴퓨터 포함)에서 운행할 수 있어 이 기술을 쉽게 접근할 수 있다.비트코인의 작업 메커니즘 Pow(proof of work): 작업량 증명.모든 노드는 같은 일을 하고 있다. 일단 한 노드가 성공하면 전체 네트워크에 방송하고 다른 노드는 받은 후에 이 노드를 수록한 다음에 계속 일을 한다.비트코인은 가상의 일반 등가물로서 일반 화폐가 할 수 있는 모든 일을 할 수 있다. 이는 상품 매매, 다른 사람에게 송금하거나 조직, 신용 확대 등을 포함한다.기존 통화에 비해 다음과 같은 특징이 있습니다.
1、  
2、  
3、       

비트코인은 다른 가상화폐와 가장 큰 차이점은 전체 수량이 매우 제한되어 매우 강한 희소성을 가진다는 것이다.이 화폐 시스템은 4년 동안 1050만 개를 넘지 않았고 이후의 총 수량은 2100만 개로 영구적으로 제한될 것이다. 이것은 비트코인의 희소성과 범람성을 보장한다.전통적인 화폐와 달리 비트코인은 자신의 키를 가지고 있다.이러한 키로 그 중의 모든 노드는 거래를 체결하여 가치를 해제하고 새로운 소유자에게 넘길 수 있다.키는 보통 각 노드의 디지털 지갑에 저장됩니다.
비트코인은 탈중심화된 점대점 시스템이기 때문에 비트코인의 세계관에는'중앙'이라는 개념이 없다.비트코인은'채굴'이라고 부르는 과정에서 만들어진 것으로 비트코인 네트워크의 모든 참여자(즉 완전한 비트코인 프로토콜 창고 설비를 사용하는 누구)는 광부로서 컴퓨터의 처리 능력을 사용하여 거래를 검증하고 기록할 수 있다.평균 10분마다 비트코인 광부 한 명이 지난 10분간의 거래를 검증하고 새로운 비트코인 보상을 받을 수 있다.
비트코인의 네 가지 혁신 1. 탈중심화된 대등한 네트워크(비트코인 협의) 2. 공공 거래 총결산(블록체인) 3. 독립 거래 확인과 화폐 발행의 규칙(공통된 규칙) 4. 효과적인 블록체인 탈중심화 공통된 메커니즘(작업량 증명 알고리즘) 실현

3. 비트코인의 사용


비트코인은 가상의 일반 등가물로서 사람과 사람 간의 가치 교류를 편리하게 한다
본선 인도 계약 서비스
Bob, 파라오투의 카페 주인이 새로운 사이트를 만들고 있습니다.그는 인도 벵갈루루루에 거주하는 인도의 인터넷 개발업체 고페쉬와 계약했다.Gopesh는 비트코인 결제에 동의했다.이 이야기는 비트코인을 사용하여 하청, 계약 서비스와 국제 전신환을 연구하는 것이다.
온라인 상점
Gabriel은 리우데자네이루의 진취적인 젊은이로 비트코인 브랜드의 티셔츠와 커피잔, 스티커를 판매하는 소규모 온라인 쇼핑몰을 운영하고 있다.Gabriel은 너무 젊고 은행 계좌가 없지만 그의 부모는 그의 기업 정신을 격려한다.
자선 기부금
유지니아는 필리핀의 한 아동 자선 단체의 주임이다.최근에 그녀는 비트코인을 발견했고 이를 이용하여 새로운 국내외 기부자와 접촉하여 그녀의 자선 기부금을 모으기를 희망했다.그녀는 비트코인을 이용해 필요한 지역에 자금을 신속하게 분배하는 방법도 조사하고 있다.이 이야기는 비트코인을 이용해 화폐의 종류와 다국적 세계를 뛰어넘는 글로벌 기부 활동, 자선단체에서 개방적이고 투명한 분류 장부를 사용하는 것을 보여준다.
수출입
Mohammed는 두바이의 전자 수입상이다.그는 미국과 중국에서 비트코인을 이용해 전자제품을 구매해 UAE로 수입해 수입 결제 과정을 가속화하려고 시도하고 있다.이 이야기는 비트코인을 물리 상품과 관련된 대형 기업 간의 국제 결제에 어떻게 사용하는지 보여줄 것이다.

4. 비트코인 지갑


비트코인 지갑은 비트코인 생태계에서 가장 활발한 개발 분야 중 하나이다. 플랫폼에 따라 비트코인 지갑은 다음과 같이 분류할 수 있다. 1. 데스크톱 지갑에서 본총이 최초로 실현한 클라이언트 중의 지갑은 바로 왼쪽 지갑이지만 운영 체제에 놓고 실행하면 어느 정도 안전 위험이 있다. 2. 핸드폰 지갑과 핸드폰 지갑은 비트코인 지갑에서 가장 흔히 볼 수 있는 유형이다.스마트폰 운영체제(예를 들어 iOS와 안드로이드)에서 실행되는 지갑은 보통 새 사용자에게 절호의 선택이다.그 중에서 핸드폰 지갑은 Mycelium, Mycelium 사이트 주소 3, 온라인 지갑 웹 지갑은 인터넷 브라우저를 통해 방문하고 사용자의 지갑을 제3자가 보유한 서버에 저장한다. 이것은 제3자 서버에 전적으로 의존하지만 온라인 지갑은 일정한 안전 위험이 있기 때문에 대량의 비트코인을 저장하는 것을 추천하지 않는다.4. 하드웨어 지갑 하드웨어 지갑은 전문적인 하드웨어에서 비트코인 지갑을 독립적으로 조작하는 설비를 말한다.이들은 USB를 통해 데스크톱 웹 브라우저나 모바일 기기의 근거리 통신(NFC)을 통해 작동한다.전용 하드웨어를 통해 모든 비트코인과 관련된 조작을 하는데 이 지갑들은 매우 안전하고 대량의 비트코인을 저장하기에 적합하다고 여겨진다.5. 종이 지갑이 비트코인을 제어하는 키도 장기적으로 저장할 수 있다.다른 재료(목재, 금속 등)를 사용해도 종이지갑이라고 부른다.종이 지갑은 낮은 기술이지만 고도로 안전한 장기적으로 비트코인을 저장하는 방법을 제공한다.오프라인 저장소도 흔히 냉 저장소라고 부른다.6. 전체 노드 클라이언트의 완전한 클라이언트 노드는 비트코인 거래의 전체 역사(모든 사용자가 거래할 때)를 저장하는 클라이언트로서 사용자의 지갑을 관리하고 비트코인 네트워크에서 직접 거래를 시작할 수 있다.전체 노드 처리 프로토콜의 모든 방면

5. 고 언어로 비트코인을 비교하여 간단하게 실현


1. 블록 구조체 만들기
type Block struct {
    Timestamp     int64  //       
    Data          []byte //      
    PrevBlockHash []byte //     hash
    Hash          []byte //      hash
}

2. hash 설정
func (this *Block) SetHash() {
    Timestamp := []byte(strconv.FormatInt(this.Timestamp, 10)) //         int    
    headers := bytes.Join([][]byte{this.PrevBlockHash, this.Data, Timestamp}, []byte{})//headers       hash、                   byte    
    hash := sha256.Sum256(headers) 
    this.Hash = hash[:] 
}

3. 새로운 Block을 만들고 Block의 주소를 되돌려 데이터 데이터와 이전 블록의hash값을 전송합니다
func NewBlock(data string, PrevBlockHash []byte) *Block {
    block := &Block{time.Now().Unix(), []byte(data), PrevBlockHash, []byte{}} //       block   
    block.SetHash()//  sethash, block           sethash()   ,     hash 
    return block
}

4. 블록체인 구조체 만들기
type Blockchain struct {
    blocks []*Block//  blocks         
}

5、블록을 추가하는 방법을 만듭니다.
func (this *Blockchain) AddBlock(data string) {
    prevBlock := this.blocks[len(this.blocks)-1] //    
    newBlock := NewBlock(data, prevBlock.Hash) //               hash  ,          
    this.blocks = append(this.blocks, newBlock)
}

6. 창세 블록 만들기
func NewGenesisBlock() *Block {
    return NewBlock("      ", []byte{})
}
func NewBlockchain() *Blockchain {
    return &Blockchain{[]*Block{NewGenesisBlock()}}
}

6. 마지막으로 큰 성과를 거두고 주함수에서 실천하자
func main() {
    bc := NewBlockchain() 

    bc.AddBlock("send 1 btc to ivan")
    bc.AddBlock("send 2 more btc to ivan")

    for _, block := range bc.blocks {
        fmt.Printf("Prev.hash: %x 
"
, block.PrevBlockHash)
fmt.Printf("Data:%s
"
, block.Data)
fmt.Printf("Hash: %x
"
, block.Hash)
fmt.Println()
} }

좋은 웹페이지 즐겨찾기