交易所学习笔记

本文深入探讨了区块链中验证者数据库的存储方式,包括十六进制字符串到字节数组的转换,以及使用LevelDB进行数据增删改的批处理操作。同时,文章介绍了消息队列的结构和交易费用计算方法,并概述了Tendermint共识算法的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

power, err := strconv.Atoi(powerS)    //字符串转换为整数

 

pubkey, err := hex.DecodeString(pubkeyS)   //把16进制字符串转换为字节数组

 

/*******   数据库操作

batch := ldb.NewBatch()
batch.Delete(key)
batch.Commit()

 

batch := ldb.NewBatch()
batch.Put(key, value.Bytes())
batch.Commit()

**********/

 

 

validator  数据库存储

key  : val:pubketS

value  :  

value := bytes.NewBuffer(make([]byte, 0))
err := types.WriteMessage(v, value)
batch.Put(key, value.Bytes())

 

/*****************************************************************queue*********************************************************/

Queue  结构体包含了一个Message的通道  通道容量大于2048  一个Message对应的处理器   和一个优先级

 

关于order的event

1.当挂单时候会触发place order event

2.当订单部分成交会触发place order event

3.当订单完成时会触发close order event

 

 

数据的处理

func CalcFeeImpl(cost int64, rate int32, minFee int64) int64 {
	fee := big.NewInt(0).Mul(big.NewInt(cost), big.NewInt(int64(rate)))
	fee = big.NewInt(0).Div(fee, big.NewInt(msq.SymtemUnit))
	return cmn.Max(fee.Int64(), minFee)
}

 

tendermint流程

func send(request *msq.WriteRequest) (*msq.Response, error) {
	height++
	hash := []byte("foo")
	header := &types.Header{
		Height: height,
	}

	trade.BeginBlock(hash, header)
	//先是req  再是request加密
	data, err := msq.MarshalMessage(request)
	if err != nil {
		return nil, err
	}

	err = trade.Check(data)
	if err != nil {
		return nil, err
	}

	res, err := trade.Exec(data)
	if err != nil {
		return nil, err
	}

	var resp msq.Response
	err = msq.UnmarshalMessage(res, &resp)
	if err != nil {
		return nil, err
	}

	trade.EndBlock(height)

	trade.Commit()
	return &resp, nil
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值