持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

GO语言实现UTXO模型

对于比特币而言,一个人拥有的比特币余额就是看他所掌管的账户地址里包含多少个比特币,而计算这个比特币数量的方式或者说它的数据结构就叫做UTXO(Unspent Transaction Output),它体现里交易的原子性,即某个UTXO被引用就失效,更利于保证比特币不被双花攻击

如何定义交易

交易存在三要素:转出方、接收方、金额。比特币的交易数据大致包含三部分内容:元数据、输入项、输出项。 真实的比特币交易是相当复杂的,我们需要简化一下。

1、先定义一些结构体:

```go // 交易输入结构 type TXInput struct { Txid []byte //引用交易ID VoutIdx int //使用的交易输出编号 FromAddr string //输入方验签 }

// 交易输出结构 type TXOutput struct { Value int //输出金额 ToAddr string //收方验签 }

// 交易结构 type Transaction struct { ID []byte //交易ID Vin []TXInput //交易输入项 Vout []TXOutput //交易输出项 }

```

2、将交易结构序列化后计算hash值

```go // 交易结构 type Transaction struct { ID []byte //交易ID Vin []TXInput //交易输入项 Vout []TXOutput //交易输出项 }

// 将交易信息转换为hash,并设为ID func (tx *Transaction) SetID() { var encoded bytes.Buffer var hash [32]byte

enc := gob.NewEncoder(&encoded)
enc.Encode(tx)
hash = sha256.Sum256(encoded.Bytes())
tx.ID = hash[:]

} ```

3、需要在Block结构体中增加交易信息数据,为[]*Transaction类型

go // 定义区块结构 type Block struct { Timestamp int64 //时间戳 Transactions []*Transaction //交易信息 PrevBlockHash []byte //前块hash值 Hash []byte //当前块hash值 Nonce int64 //随机值 }

4、实现一种交易转[]byte的方法.

```go

//构建区块交易hash值 func (b *Block) HashTransactions() []byte { var txHashes [][]byte var txHash [32]byte

for _, tx := range b.Transactions {//字符串拼接IDtxHashes = append(txHashes, tx.ID)
}//Join将txHashes的元素连接起来以创建一个新的字节片。分隔符[]byte{}放置在所得切片中的元素之间
txHash = sha256.Sum256(bytes.Join(txHashes, []byte{}))return txHash[:]

} ```

GO语言实现UTXO模型--如何定义交易相关推荐

  1. utxo模型_什么是UTXO?简析账户/余额模型和UTXO模型

    在比特币社区内,有一种这样的说法:其实并没有比特币,有的只是UTXO.还有一种说法是:如果理解了UTXO,你就理解了比特币. 这两种说法虽然都有不同程度的夸张,但足以体现UTXO之于比特币的重要性.既 ...

  2. R语言ARIMA集成模型预测时间序列分析

    全文链接:http://tecdat.cn/?p=18493 本文我们使用4个时间序列模型对每周的温度序列建模.第一个是通过auto.arima获得的,然后两个是SARIMA模型,最后一个是Buys- ...

  3. utxo模型_【易错概念】UTXO 和 Account 模型对比

    在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式.Bitcoin 采用的是 UTXO 模型,Ethereum ...

  4. 区块链中utxo模型是什么意思_区块链100讲:UTXO 和 Account 模型对比

    在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式.Bitcoin 采用的是 UTXO 模型,Ethereum ...

  5. utxo模型_技术教程|墨客UTXO和account模型

    在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent Transaction Output) 和 Account 模式.Bitcoin 采用的是 UTXO 模型,Ethereum ...

  6. utxo模型_墨客UTXO和account模型 |技术教程

    来源:雪球App,作者: 一笑奈何君,(https://xueqiu.com/9803210374/134555099) 在当前区块链世界中,主要有两种记录保存方式,UTXO 模式(Unspent T ...

  7. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )

    文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...

  8. 交易模型的定义及理论基础

    反趋势为基础的交易模型 该类模型是根据设计者的数据统计,然后假定市场需要调整,并在相反方向建仓交易的系统.它与趋势交易模型的区别在于,趋势交易模型可以自动调整,而反趋势交易模型由于与主要趋势相反操作经 ...

  9. r语言解释回归模型的假设_模型假设-解释

    r语言解释回归模型的假设 Ever heard of model assumptions? What are they? And why are they important? A model is ...

最新文章

  1. Science:基于微生物条形码系统的高分辨率物源追踪技术
  2. Python的零基础超详细讲解(第二天)-Python的基础语法1
  3. 里约奥运会开幕了,一起观看“VR直播”约么?
  4. 集群与存储 LVS的集群
  5. navicat数据库运行存储过程
  6. 操作系统原理之文件系统(第五章)
  7. java的empty_Java Stack empty()方法与示例
  8. 项目管理沙龙第五次聚会
  9. 无法启动此程序因为计算机丢失dtlui,电脑缺少dll文件_电脑开机总是出来DLL文件丢失,...
  10. html 链接 id属性_HTML id属性
  11. win2008r2 惠普g160鼠标_分享 HP 原机附带 WIN2008 R2 标准版 64位
  12. DeepSpeaker_RawNet_GE2E 声纹识别对比
  13. Mysql binlog 解析
  14. zz:测试还是开发?
  15. Mybatis 中经典的 9 种设计模式!面试可以吹牛了!
  16. eclipse的自动检查语法错误功能让我有点烦,能不能关掉,或者,只是10秒检查一次。。...
  17. 努比亚修复工具_努比亚 X6 救砖教程 努比亚 NX601J恢复救砖教程
  18. HTML中美化页面,10 使用CSS美化页面
  19. chkdsk 后数据丢失的恢复方法chkdsk 后数据丢失的恢复方法
  20. 笔记本电脑无法使用WiFi上网解答

热门文章

  1. awk字段分隔符的一个处理技巧,可以用于转换分隔符或者行到列的转换
  2. Linux 使用 docker 安装 Nexus3 私服
  3. Docker for windows 入门二(Kitematic的使用)
  4. 解决macOS 13 Venture beta4、beta5的CPU占用高、风扇狂转的问题
  5. mysql listen_MySQL性能优化
  6. 对于串口接收数据有丢包如何处理
  7. Java主要是干什么的
  8. 计算机网络实验报告 实验4 TCP协议分析
  9. Oracle EB-Tax 简介
  10. LLVM IR格式的基本介绍