<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                >[success] # 一條簡單的區塊鏈 >[info] ### 區塊 - 區塊鏈首先要有區塊, 區塊里存放著交易相關等數據 - 在本節中我們弄一個簡單的區塊, 僅僅包含最關鍵的信息,其數據結構在go語言定義如下: ```go type Block struct { Timestamp int64 //時間戳 Data []byte //內容 PrevBlockHash []byte //上一個區塊的Hash Hash []byte //當前區塊的Hash } ``` - 其中Hash計算如下 ```go Hash = SHA256(PrevBlockHash + Timestamp + Data) ``` >[info] ### 區塊鏈 - 將一個個區塊連接起來組成區塊鏈 ```go type Blockchain struct { blocks []*Block //區塊的切片即區塊鏈 } ``` >[warning] ### 一條簡單的區塊鏈 - 通過區塊和區塊鏈實現一條簡單的區塊鏈 ```go package main import ( "bytes" "crypto/sha256" "fmt" "strconv" "time" ) //區塊 type Block struct { Timestamp int64 PrevBlockHash []byte Hash []byte Data []byte } //區塊鏈 type BlockChain struct { blocks []*Block } func main() { // 創建一個有創世塊的鏈 blockchain := NewBlockChain() //添加新的塊 blockchain.AddBlock("第二個塊的內容") blockchain.AddBlock("第三個塊的內容") //遍歷塊 for _, block := range blockchain.blocks { fmt.Printf("Timestamp: %s\n", time.Unix(block.Timestamp, 0).Format("2006-01-02 03:04:05")) fmt.Printf("Prev hash: %x\n", block.PrevBlockHash) fmt.Printf("Data: %s\n", block.Data) fmt.Printf("Hash: %x\n", block.Hash) fmt.Println() } } func NewBlock(data string, prevBlockHash []byte) *Block { block := &Block{ Timestamp: time.Now().Unix(), PrevBlockHash: prevBlockHash, Data: []byte(data), Hash: []byte{}, } //設置當前塊Hash block.SetHash() return block } // Hash = sha256(PrevBlockHash + Data + Timestamp) func (b *Block) SetHash() { timestamp := []byte(strconv.FormatInt(b.Timestamp, 10)) headers := bytes.Join([][]byte{b.PrevBlockHash, b.Data, timestamp}, []byte{}) hash := sha256.Sum256(headers) b.Hash = hash[:] } //創世塊 func NewGenesisBlock() *Block { return NewBlock("創世塊", []byte{}) } //創世鏈 func NewBlockChain() *BlockChain { return &BlockChain{[]*Block{NewGenesisBlock()}} } //添加塊 func (blockchain *BlockChain) AddBlock(data string) { prevBlock := blockchain.blocks[len(blockchain.blocks)-1] //獲取上一個區塊的Hash newBlock := NewBlock(data, prevBlock.Hash) blockchain.blocks = append(blockchain.blocks, newBlock) //把當前塊添加到區塊鏈上 } ``` >[danger] ### 效果圖 ``` Timestamp: 2020-01-07 17:14:43 Prev hash: Data: 創世塊 Hash: cf774fdc758cbb90e28cf053401927576a7350f778b60631112ce6fc074a278a Timestamp: 2020-01-07 17:14:43 Prev hash: cf774fdc758cbb90e28cf053401927576a7350f778b60631112ce6fc074a278a Data: 第二個塊的內容 Hash: 3dd326874c10708e299c649760ed93689670a0d4fbeecd0a20755e0cbc9aded1 Timestamp: 2020-01-07 17:14:43 Prev hash: 3dd326874c10708e299c649760ed93689670a0d4fbeecd0a20755e0cbc9aded1 Data: 第三個塊的內容 Hash: 5a2aaa1c443453717cbb92a85893c9600e2166555428a1d5714bf742842bb6cd ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看