# 查询字符串
可以查询区块高度、区块的时间辍、区块里的验证者节点等数据。
## 使用案例
**比较数字**
1. 判断区块高度是否大于12
实例化一个查询句柄:
```go
query, err := New("block.height > 12")
```
根据库里给的信息判断区块高度大于12是否正确,给的数据类型必须是`map[string][]string`类型的,例如:
```go
query.Matches(map[string][]string{"block.height": []string{"2", "12", "13"}})
```
从库里查询到区块的高度有2、12、13这三个情况,其中13大于12,所以匹配成功。
2. 判断验证者节点的投票权是否小于等于10.0
实例化一个查询句柄:
```go
query, err := New("validator1.power <= 10.0")
```
根据库里给的信息判断验证者节点的投票权小于等于10.0是否正确,同样,给的数据类型必须是`map[string][]string`类型的,例如:
```go
query.Matches(map[string][]string{"validator1.power": []string{"12"}, "validator2.power": []string{"9.3"}})
```
从库里查询到有两个验证者节点的投票权,其中validator1的投票权大于10.0,尽管validator2的投票权小于10.0,但是它不是我们查询的对象,所以上述匹配失败。
**比较字符串**
1. 判断验证者节点是否存在
实例化一个查询句柄:
```go
query, err := New("block.validator1 EXISTS AND block.height = 12")
```
根据库里给的信息判断高度12的区块的验证者节点集合中是否存在验证者节点validator1,同样的,给的数据类型必须是`map[string][]string`
类型的,例如:
```go
query.Matches(map[string][]string{"block.validator1": []string{"10.0"}, "block.height": []string{"12"}})
```
从库里查询到有高度为12的区块,且存在validator1节点,所以匹配成功,但是倘若我们从库里查询到的信息是下面这样的,匹配则会失败:
```go
query.Matches(map[string][]string{"block.validator1.power": []string{"10.0"}, "block.height": []string{"12"}})
```
原因在于`block.validator1`里面含有一个`.`,这样程序就会认为这是一个完整的查询对象,而不是依靠前缀匹配规则区查询,这样的话,自然无法在库提供的信息里找到合适的匹配,详见匹配源码:
```go
if strings.Contains(compositeKey, ".") {
// 如果查询对象含有"."的话,则代表该对象是一个完整的事件属性
if _, ok := events[compositeKey]; !ok {
// 给的map里不存在这个事件属性
return false, nil
}
} else {
foundEvent := false
for event := range events {
if strings.Index(event, compositeKey) == 0 {
// 假如event是"block.height",compositeKey是"block"这样的,就能够匹配成功。
foundEvent = true
break
}
}
if !foundEvent {
return false, nil
}
}
```
2. 判断区块里是否包含指定的节点
实例化一个查询句柄:
```go
query, err := New("block.validators CONTAINS 'validator1'")
```
根据库里给的信息区块的验证者节点集合中是否存在节点validator1,同样的,给的数据类型必须是`map[string][]string`类型的,例如:
```go
query.Matches(map[string][]string{"block.validators": []string{"validator2", "validator3"}})
```
由于给定的信息里不含validator1,所以匹配失败。
**比较时间和日期**
比较时间要用到关键词`TIME`,而比较日期则要用到关键词`DATE`,下面给出两个例子,分别判断区块时间是否早于指定时间:
```go
query1, err := New("block.time < TIME 2022-12-03T00:00:40+08:00")
query2, err := New("block.date < DATE 2022-11-09")
```
根据给定的信息来判断:
```go
query1.Matches(map[string][]string{"block.time": []string{time.Now().Format(time.RFC3339)}})
query2.Matches(map[string][]string{"block.date": []string{"2022-11-08"}})
```
上面的匹配结果分别是成功和失败。
## 注意事项
1. 如果要对小数做比较,那么小数的整数部分不可以是**0**。
2. 无法查询负数。
3. 如果要查询字符串,需要在字符串的两端加上引号。
4. 数字、时间、日期可以作:"<=" | ">=" | ">" | "<" | "="这五种比较。
5. 字符串可以作:"=" | "CONTAINS" 两种比较。
6. "EXISTS" 用来判断属性是否存在。
**peg工具在这里:** https://github.com/pointlander/peg
没有合适的资源?快使用搜索试试~ 我知道了~
基于以太坊和tendermint的可修改区块链开发资料齐全+详细文档.zip
共224个文件
go:168个
proto:17个
json:16个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 188 浏览量
2024-12-08
22:10:42
上传
评论
收藏 395KB ZIP 举报
温馨提示
【资源说明】 基于以太坊和tendermint的可修改区块链开发资料齐全+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于以太坊和tendermint的可修改区块链开发资料齐全+详细文档.zip (224个子文件)
.gitignore 17B
types.pb.go 148KB
consensus.pb.go 88KB
message.pb.go 56KB
block.pb.go 42KB
fp_fallback.go 35KB
query.peg.go 35KB
types.pb.go 34KB
core.go 28KB
conn.go 25KB
node.go 25KB
packet.pb.go 23KB
g2.go 23KB
g1.go 22KB
bls12.go 19KB
validator.pb.go 18KB
format.go 16KB
autofile.go 15KB
bls12_381.go 14KB
chameleon.go 14KB
conn_test.go 14KB
nodeInfo.pb.go 14KB
signature.pb.go 14KB
events.pb.go 14KB
tx.pb.go 14KB
query.go 14KB
state.pb.go 13KB
isogeny.go 12KB
chain.go 12KB
pubsub.go 12KB
fp6.go 11KB
tx.pb.go 11KB
consensus.go 11KB
proof.pb.go 10KB
fr_fallback.go 10KB
btree.go 10KB
netaddress.pb.go 9KB
node.go 9KB
proof.go 9KB
node_test.go 9KB
decode.go 9KB
pubsub_test.go 8KB
peer.go 8KB
encode.go 8KB
memdb.go 8KB
switch.go 8KB
pool.go 8KB
logger.go 8KB
keyshair_test.go 8KB
pairing.go 7KB
handler.go 7KB
reactor.go 7KB
reactor.go 7KB
transport.go 7KB
key.pb.go 7KB
field_element.go 7KB
netaddress.go 7KB
switch_test.go 7KB
stepinfo.go 7KB
store.pb.go 7KB
fp12.go 7KB
fp.go 7KB
block.go 7KB
transport_test.go 6KB
message.go 6KB
config.go 6KB
fr.go 6KB
monitor.go 6KB
fp2.go 5KB
decode_test.go 5KB
reactor.go 5KB
log_test.go 5KB
stepInfo.go 5KB
tx.go 5KB
rand.go 5KB
service.go 5KB
encode_test.go 5KB
validator.go 5KB
state.go 4KB
db.go 4KB
nodeInfo.go 4KB
glv.go 4KB
swu.go 4KB
subscription.go 4KB
addrbook.go 4KB
writer.go 4KB
kvstore.go 4KB
register.go 4KB
execution.go 4KB
reader.go 4KB
query_test.go 4KB
bls12_test.go 4KB
arithmetic_decl.go 4KB
structs.go 3KB
events.go 3KB
dockernet.go 3KB
os.go 3KB
btree_test.go 3KB
freelist.go 3KB
id.go 3KB
共 224 条
- 1
- 2
- 3
资源评论
Yuki-^_^
- 粉丝: 3101
- 资源: 2952
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【全年行事历】5团建医药箱常备药清单.docx
- 【全年行事历】4团建活动物料清单.xlsx
- 【全年行事历】7团建活动策划书.docx
- 【全年行事历】ZOL团建活动策划方案.pptx
- 【全年行事历】XXX团建活动计划.pptx
- 【全年行事历】86团建活动培训PPT完.pptx
- 【全年行事历】公司年度活动计划.xls
- 【全年行事历】大型企业公司活动进度表.xlsx
- 【全年行事历】公司户外团建活动方案-某公司.pptx
- 【全年行事历】公司团建费用统计表.xlsx
- 【全年行事历】公司团建拓展行程方案-模版.docx
- 【全年行事历】公司全年团建活动方案.xls
- 【全年行事历】公司员工一年度关怀方案预算.xls
- 【全年行事历】公司团建活动项目介绍.pptx
- 【全年行事历】行政部年度活动策划及经费预算.xlsx
- 【全年行事历】行政全年活动筹备规划.xlsx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功