golang 区块链:验证签名

这篇具有很好参考价值的文章主要介绍了golang 区块链:验证签名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.遍历交易集合txs获取全部的消费记录inputMap
2.从区块链获取inputMap的消费记录input对应的output
3.传入output的集合,逐笔验证签名

验证:
1.复制一份新的交易对象(input的签名和公钥置空)
2.对复制的交易进行hash,获取签名需要的hash

获取input的output所在的交易
设置vin的公钥为utxo的pubhash
对交易进行hash

3.验证签名文章来源地址https://www.toymoban.com/news/detail-519068.html

type Client struct {
   
	Blockchain *blockchain.Blockchain
}
type Blockchain struct {
   
	Tip []byte	//最新区块的hash
	DB *bolt.DB	//"github.com/boltdb/bolt"
}
type UTXO struct {
   
	Hash []byte	//交易哈希
	Index int	//索引
	Output *TXOutput	//未花费的output
}
type TXOutput struct {
   
	//金额
	Value int
	//ripemd160
	PubHash []byte
}
type TXInput struct {
   
	//交易的Hash
	TxHash []byte
	//存储TXOutput在Vout里面的索引
	Vout int
	//数字签名
	ScriptSig []byte
	//公钥
	PubKey []byte
}

/*
验证交易
*/
func (client *Client)verifyTxs(txs []*transaction.Transaction) (validTxs []*transaction.Transaction,msg string, err error) {
   
	/*
	从数据库查询最新的hash
	并将数据库设值给blockchain
	*/
	client.getBlockchainAndSetToClient()
	iterator := client.Blockchain.Iterator()
	//遍历txs获取全部inputMap
	var inputMap = make(map[string]*transaction.TXInput)
	for _, tx := range txs {
   
		for _, vin := range tx.Vins {
   
			inputMap[string(vin.TxHash)] = vin
			//log.Printf("传入的vin:%+v\n",vin)
		}
	}

	//调用方法,根据inputMap获取全部utxos
	var utxos []*transaction.UTXO
	utxos,msg,err = getUTXOsByInputMap(iterator,inputMap)

	//遍历txs,逐比验证
	for _, tx := range txs {
   
		isValid,_ := tx.VerifySign(utxos)
		if !isValid {
   
			continue
		}

		//有效交易添加到返回值
		validTxs = append(validTxs, tx)
	}

	return
}

/*
new 一个迭代器
 */
func (blc *Blockchain) Iterator() *BlockchainIterator {
   
	if blc.DB == nil {
   
		return nil
	}
	return &BlockchainIterator{
   NextHash: blc.Tip, DB: blc.DB}
}

验证交易的签名

/*
验证交易的签名
 */
func (tx *Transaction) VerifySign

到了这里,关于golang 区块链:验证签名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 好用的区块链API SDK(TRON/ETH)

    2024年02月11日
    浏览(30)
  • 【漏洞复现】CVE-2004-2761:使用弱哈希算法签名的 SSL 证书(SSL Certificate Signed Using Weak Hashing Algorithm)

    概要:本次复现是针对编号为CVE-2004-2761的漏洞,由于条件有限,本次复现通过创建自签名证书进行操作。 问题描述:证书链中的 SSL 证书使用弱哈希算法进行签名。 本次复现环境在Linux平台下使用Nginx进行环境的搭建,通过 Openssl 组件生成自签名证书,并在 Nginx 配置文件中进

    2024年02月10日
    浏览(28)
  • 区块链数字签名、验签,以及椭圆曲线算法JS库—elliptic的使用

    目录 一、简介 二、椭圆曲线密码elliptic 1、安装elliptic和js-sha3 2、Keccak256 3、签名过程

    2024年02月02日
    浏览(36)
  • 波场(Tron)监控区块交易记录(http 版本,不依赖 sdk)

    做项目的时候经常需要通过监控链的区块交易记录,然后根据交易记录与用户的地址进行核对,从而得知用户地址的充币和提币的情况。 引用依赖 这段代码运行的时候,首选是获取的最新的区块高度(接口 getnowblock),然后逐个累加(接口 getblockbynum)区块进行检查,核对交

    2024年01月18日
    浏览(47)
  • Java实现Tron(波场)区块链的开发实践(二)交易监控与转账

    上一节我们具体讲到Java实现Tron波场链的开发部署:通过trident源码编译组件,使用RPC的方式链接Tron波场链,并进行了代码实现,还有如何创建离线钱包。 这一节我们通过部署好的项目环境,具体如何使用代码来实现波场链的交易监控和交易转账. 1. 所有的开端就是获取链的接

    2024年03月12日
    浏览(49)
  • 韩媒评UDC大会:区块链行业刮“环保之风”,TRON为最环保的企业

    9月23日,韩国备受关注的全球区块链会议“Upbit Developer Conference”(简称UDC)正式结束,大会以“想象你的区块链生活”为主题,汇聚了包括孙宇晨等在内的区块链领域的数十位领军人士,就“NFT”、“元宇宙”以及“Web 3.0”等区块链热点趋势进行了深入探讨。 当日,韩国知

    2024年01月23日
    浏览(39)
  • Java实现Tron(波场)区块链的开发实践(一)环境搭建及简单实现

    最近在开发区块链相关项目时,因本人一直使用JAVA做开发语言,但是区块链开发对JAVA语言相对来说不是很友好。在开发过程中遇到很多的问题,甚至通过百度、Google都无法解决,官方文档大部分篇幅在介绍接口相关信息,对Java实现不多。 可是为了赚点钱,也是硬着头皮,经

    2024年04月08日
    浏览(35)
  • 045.Solidity入门——32验证签名

    在使用智能合约时,经常需要进行签名验证,以确保交易的合法性和完整性。Solidity提供了一些内置函数,可以轻松地对签名进行验证。 示例代码: 合约VerifySignature: 包含了一个签名者的地址和一个用于验证签名的函数verify。在构造函数中,将签名者的地址传递给合约,并在

    2024年02月03日
    浏览(66)
  • 数据结构 in Golang:Hash Tables(哈希表)

    水果店的价格表: 苹果 Apple:3元 香蕉 Banana:4元 桃子 Peach:2元 梨 Pear:3元 找到一种水果的价格: 可以使用 binary search,通过名称来查找,耗时:O(logn) 如何只耗时 O(1) 来找到价格呢? Hash 函数:通过一个字符串 - 一个数值 例如: \\\"Apple\\\" - 1 \\\"Banana\\\" - 2 \\\"Peach\\\" - 7 \\\"Pear\\\" - 8 将字符

    2024年02月08日
    浏览(35)
  • 区块链系统:签名

            签名算法是使用私钥签名,公钥验证的方法,对一个消息的真伪进行确认。如果一个人持有私钥,他就可以使用私钥对任意的消息进行签名,即通过私钥 sk 对消息 message 进行签名,得到 signature :          签名的目的是为了证明,该消息确实是由持有私钥 s

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包