内容简介:第一笔交易比较特殊,他是coinbase交易,矿工的收益。金额每4年减少一半,从2009年一开始一个区块奖励50BTC、后来减少为了25个BTC、一直到18年 12.5BTC。总共有2100万BTC。交易和我们的银行的转账非常不同,比特币中没有记录账户的信息、而是交易的信息。
比特币的交易
第一笔交易比较特殊,他是coinbase交易,矿工的收益。
金额每4年减少一半,从2009年一开始一个区块奖励50BTC、后来减少为了25个BTC、一直到18年 12.5BTC。总共有2100万BTC。
交易和我们的银行的转账非常不同,比特币中没有记录账户的信息、而是交易的信息。
go实现交易 demo
package main
import (
"bytes"
"encoding/gob"
"log"
"crypto/sha256"
"fmt"
"strings"
)
const subsidy = 100
type Transation struct{
ID []byte
Vin []TXInput
Vout []TXOutput
}
type TXInput struct {
TXid []byte
Voutindex int
Signature []byte
}
type TXOutput struct {
value int
PubkeyHash []byte
}
//格式化打印交易完整信息
func (tx Transation) String() string {
var lines []string
lines = append(lines, fmt.Sprintf("--- Transaction %x:", tx.ID))
for i, input := range tx.Vin {
lines = append(lines, fmt.Sprintf(" Input %d:", i))
lines = append(lines, fmt.Sprintf(" TXID: %x", input.TXid))
lines = append(lines, fmt.Sprintf(" Out: %d", input.Voutindex))
lines = append(lines, fmt.Sprintf(" Signature: %x", input.Signature))
}
for i, output := range tx.Vout {
lines = append(lines, fmt.Sprintf(" Output %d:", i))
lines = append(lines, fmt.Sprintf(" Value: %d", output.value))
lines = append(lines, fmt.Sprintf(" Script: %x", output.PubkeyHash))
}
return strings.Join(lines, "\n")
}
//序列化
func (tx Transation) Serialize() []byte{
var encoded bytes.Buffer
enc:= gob.NewEncoder(&encoded)
err:= enc.Encode(tx)
if err!=nil{
log.Panic(err)
}
return encoded.Bytes()
}
//计算交易的hash值
func (tx *Transation) Hash() []byte{
txcopy := *tx
txcopy.ID = []byte{}
hash:= sha256.Sum256(txcopy.Serialize())
return hash[:]
}
//根据金额与地址新建一个输出
func NewTXOutput(value int,address string) * TXOutput{
txo := &TXOutput{value,nil}
txo.PubkeyHash = []byte(address)
return txo
}
//第一笔coinbase交易
func NewCoinbaseTX(to string) *Transation{
txin := TXInput{[]byte{},-1,nil}
txout := NewTXOutput(subsidy,to)
tx:= Transation{nil,[]TXInput{txin},[]TXOutput{*txout}}
tx.ID = tx.Hash()
return &tx
}
func main(){
newTX := NewCoinbaseTX("jonson")
fmt.Printf("%s",newTX.String())
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Bitcoin 区块和交易数据结构
- Substrate 区块链应用的交易费用设计
- 区块链+Azure: AAAchain打造数据交易公链
- 区块链3.0时代 多中心化交易所形态
- 【交易技术前沿】区块链驱动金融信息系统的可信安全
- 开发区块链数字资产币币场外挖矿交易系统架构知识
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通Java并发编程(第2版)
[西] 哈维尔·费尔南德斯·冈萨雷斯 / 唐富年 / 人民邮电出版社 / 2018-10 / 89.00元
Java 提供了一套非常强大的并发API,可以轻松实现任何类型的并发应用程序。本书讲述Java 并发API 最重要的元素,包括执行器框架、Phaser 类、Fork/Join 框架、流API、并发数据结构、同步机制,并展示如何在实际开发中使用它们。此外,本书还介绍了设计并发应用程序的方法论、设计模式、实现良好并发应用程序的提示和技巧、测试并发应用程序的工具和方法,以及如何使用面向Java 虚拟机的......一起来看看 《精通Java并发编程(第2版)》 这本书的介绍吧!