tendermint提供的RPC接口(一)

区块链资讯区块链兄弟2019-09-11 11:06:23  阅读 -评论 0

准备工作:作者是在windows环境上进行的部署测试,其他环境也是大同小异。可参考往期文章windows环境下tendermint的编译与使用
本文用的是官方的KVStore的例子来测试api,为了更好的显示测试结果,修改了部分代码,详细如下:
DeliverTx
func (app *KVStoreApplication) DeliverTx(req types.RequestDeliverTx) types.ResponseDeliverTx {
   fmt.Println("----------------- kvStore DeliverTx")
   var key, value []byte
   parts := bytes.Split(req.Tx, []byte("="))
   if len(parts) == 2 {
      key, value = parts[0], parts[1]
   } else {
      key, value = req.Tx, req.Tx
   }
   app.state.db.Set(prefixKey(key), value)
   app.state.Size += 1
   events := []types.Event{
      {
         Type: "app",
         Attributes: []cmn.KVPair{
            {Key: []byte("creator"), Value: []byte("Cosmoshi Netowoko")},
            {Key: []byte("key"), Value: key},
         },
      },
   }
   return types.ResponseDeliverTx{Code: code.CodeTypeOK, Events: events,Log:"DeliverTx OK"} //此处增加Log,方便测试
}
CheckTx
func (app *KVStoreApplication) CheckTx(req types.RequestCheckTx) types.ResponseCheckTx {
   fmt.Println("----------------- kvStore CheckTx")
   return types.ResponseCheckTx{Code: code.CodeTypeOK, GasWanted: 1,Log:"CheckTx OK"} //此处增加Log,方便测试}
由于篇幅比较长,计划分为2-3篇。
下面开始正文
1,Tx(发送交易)
/broadcast_tx_sync
说明:发送同步交易,从CheckTx返回相应值,不会等待DeliverTx的结果。
如果想确保这笔交易被打包了,可以通过订阅来实现(详见下文Websocket模块)。如果几个块内没有收到任何消息的话,重新发送这笔交易,如果还是没有收到,可以向其他节点发送这笔交易。订阅频道收不到消息的原因可能有:
1,恶意节点丢弃了这笔交易。
2,恶意提议者(没有必要与你通信的人)丢弃了可能在将来生效的交易(https://github.com/tendermint/tendermint/issues/3322)。
示例:
C:\Users\ch>curl -s localhost:26657/broadcast_tx_sync?tx=\"author=caohuan\"
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "code": 0,
    "data": "",
    "log": "CheckTx OK", //可以看到这里的返回值就是CheckTx的返回值
    "hash": "B339C04B9163F0585B8DB0703E2A107A9B21034B2F5D18BF9B66BDEF5DD627E3"
  }
}
/broadcast_tx_async
说明:发送异步交易,无返回值,不等待CheckTx或者DeliverTx的执行结果
详细说明同上。
示例:
C:\Users\ch>curl -s localhost:26657/broadcast_tx_async?tx=\"author=caohuan1\"
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "code": 0,
    "data": "",
    "log": "", //既不是CheckTx也不是DeliverTx    "hash": "ED86886438919C7673ACBD0C649688D95A2D0CA3425A1350E68644AE367411AA"
  }
}
/broadcast_tx_commit
说明:既返回CheckTx的执行结果也返回DeliverTx的执行结果。
需要注意的是,官方建议仅仅在测试和开发的时候使用此接口,在生产环境,尽可能的使用同步或者异步的方式发送交易,如果要确认交易成功,可以使用订阅的功能。
如果CheckTx或则DeliverTx失败了,不会返回任何的错误信息,只会返回一个包含non-OK的ABCI code。
示例:
C:\Users\ch>curl -s localhost:26657/broadcast_tx_commit?tx=\"author=caohuan12\"
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "check_tx": { //CheckTx的返回值
      "log": "CheckTx OK", 
      "gasWanted": "1"
    },
    "deliver_tx": { //DeliverTx的返回值
      "log": "DeliverTx OK",
      "events":
        {
          "type": "app",
          "attributes": [
            {
              "key": "Y3JlYXRvcg==",
              "value": "Q29zbW9zaGkgTmV0b3dva28="
            },
            {
              "key": "a2V5",
              "value": "YXV0aG9y"
            }
          ]
        }
      ]
    },
    "hash": "95C3A05EC5FBE8E4F5D4FC690398E0D9AD8B7777A4D9A130982853F9647633C9",
    "height": "7"
  }
}
2,Websocket(订阅及取消订阅)
/subscribe
说明:通过wensocket订阅事件。
想要订阅某个事件,需要提供一个字符串表达式,格式是“condition AND condition ”(只能用AND不能用OR)。condition的格式是“key operation operand”,
key是一个字符串(\t\n\r()'"=><不允许出现在key中)
operation可以是“=”,“”,“> =”, "CONTAINS"
operand可以是一个字符串(要用单引号转义),数字,日期或者事件。
比如:
tm.event = 'NewBlock' // 新区快产生
tm.event = 'CompleteProposal' // 完成一个提案
tm.event = 'Tx' AND tx.hash = 'XYZ' // 某一笔交易
tm.event = 'Tx' AND tx.height = 5 // 第五个块的所有交易
tx.height = 5 // 第五个块的所有交易
tendermint提供了几个预定义的key:tm.ecent,tx.hash,tx.height。但是用户可以通过重定义DeliverTx的响应来增加key,用以订阅其他的事件。这个比较复杂,改天重新写一篇文章来详细阐述。
示例:
循环发送十笔交易

tendermint提供的RPC接口(一)

结果:

tendermint提供的RPC接口(一)

上面代码里面的tx是可以解析的。
/unsubscribe
说明:取消订阅
示例:
订阅的代码中设置一个计数器,超过十笔交易,即取消订阅

tendermint提供的RPC接口(一)

/unsubscribe_all
说明:取消所有订阅
示例:

tendermint提供的RPC接口(一)

结果和上面取消单个订阅的一样,不再截图了
3,ABCI
/abci_info
说明:获取应用的一些信息
示例:
C:\Users\ch>curl -s localhost:26657/abci_info
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "response": {
      "data": "{\"size\":88}", //所有交易数量      "version": "0.16.1", //abci-cli的版本信息      "app_version": "1"
    }
  }
}
/abci_query
说明:查询某一笔交易,四个参数:data,path,height,prove,前两个为必填
示例:
C:\Users\ch>curl -s localhost:26657/abci_query?data=\"author\"
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "response": {
      "log": "exists",
      "key": "YXV0aG9y",
      "value": "Y2FvaHUxYW4xMjMxMTQxMTExMTExMQ=="
    }
  }
}
官方文档里还有一个必填参数path,实际操作中发现不填也没有关系,还有两个选填参数height和prove,看起来好像都没有什么用处,填与不填对结果没什么影响。查证后再补充。

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们kefu@lianshijie.com

    参与讨论 (0 人参与讨论)

    相关推荐

    中信银行打造“区块链”信用证结算!

    中信银行打造“区块链”信用证结算!

    科技不会改变金融的实质,但却能让金融服务更高效,能让资金供、需方信息不对称的问题更好地解决。近期,中信银行首个区块链项目——基于区块链的国内信用证信息传输系统(简称BCLC)(一期)成功上线,这是国内银行业第一次将区块链技术应用于信用证结算领域。 据中信银行国际业务部总经理助理张栩青介绍,将现在流行的区块链技术应用在国内信用证中,改变了银行传统信用证业务模式,信用证的开立、通知、交单、承兑报文

    中国信息技术部门成立区块链研究实验室

    中国信息技术部门成立区块链研究实验室

    暴走时评:本月初,中国政府对国内的ICO和数字货币交易所的打击在世界范围内引起了强大反响,但政府已经多次声明不会将区块链与数字货币划等号,依然非常重视区块链技术在中国的发展。鉴于中国工业和信息化部成立了一个专门研究区块链的实验室,这一论调也得到了进一步的证实。 虽然中国政府最近在大力打击比特币交易所和ICO,但仍然致力于开发区块链在其他领域的潜力。 据财新网报道,中国工业和信息化部已经成立了一

     分布式账本中的生命科学

    分布式账本中的生命科学

    生物科学是医学领域涉及遗传研究,疾病预防和生活方式治疗(lifestyle treatments)的学科。它已经存在了很长时间,但区块链技术的基础设施应用给该学科提供了重大进步的可能性。 根据Pistoia Alliance进行的2016年6月份高级制药和生命科学领袖调查,83%的受访者表示,他们预计在五年内将全面采用区块链技术。 Pistoia Alliance是一个全球性的非营利组织,致

    区块链vs.核能:日本最大电力公司东京电力(TEPCO)寻求使用区块链减轻对核电的依赖

    区块链vs.核能:日本最大电力公司东京电力(TEPCO)寻求使用区块链减轻对核电的依赖

    东京电力公司 (TEPCO) 对于能源过度中心化的风险可以说绝不陌生。 也许最著名的就是2011年发生的福岛核电站事故,这个日本最大的能源公司如今正在寻求区块链技术来防止这种灾难再次发生。 然而,从使用微型风车的分布式风力发电到用于存储在电力成本低时购买的电力的智能电池,可替代能源项目一直以来都属于个人慈善事业。 然而,TEPCO风险投资部门主管Jeffrey Char认为区块链能够帮助为这

    继证监会发表代币发行声明之后,香港交易所Gatecoin将下线部分ICO币

    继证监会发表代币发行声明之后,香港交易所Gatecoin将下线部分ICO币

    经过一系列监管以及合规审查后,香港交易所Gatecoin将会下线那些被金融监管部门定性为"证券"的代币。 香港加密货币交易所Gatecoin透露,如果在该平台交易的ICO代币在法律上符合"证券"定义,他们就会下线这些代币。据巴比特上月报道,香港主要的金融监管部门证券及期货事务监察委员会(SFC)表达了对ICO这种日渐普及的募资模式的担忧。 尽管ICO中售卖的数字代币通常都被定义为虚拟商品,但

    IBM与超级账本共同加入去中心化身份基金会(DIF),推动创建区块链ID行业标准

    IBM与超级账本共同加入去中心化身份基金会(DIF),推动创建区块链ID行业标准

    IBM与超级账本已经签署协议加入去中心化身份基金会(DIF),这个于今年初成立的联盟旨在帮助推动基于区块链的ID系统的互操作性和标准。 这两个企业区块链大佬加入了这个有各种企业组成的团体,其中包括像微软和埃森哲这样的大企业,还有像Civic和Gem这样的创业公司,以及像uPort和Sovrin这样的开源项目。 DIF执行主管告诉Coindesk说: "这应该是一个信号,表明在这一领域有广泛的

    为打击人口贩卖,牙买加警方盯上了犯罪分子的比特币钱包

    为打击人口贩卖,牙买加警方盯上了犯罪分子的比特币钱包

    作为打击人口贩卖计划的一部分,牙买加警方已经开始行动,锁定了那些试图用比特币和数字支付来掩人耳目的犯罪分子。 越来越多的人口贩卖者都开始转向数字货币来帮助他们进行地下活动并接收非法活动所得,但牙买加警方已经盯上他们了。 牙买加的'大生意' 不幸的是,人口贩卖以及性奴市场规模十分庞大,预计涉资1500亿美元。在牙买加,大约有7000个妇女、儿童以及成年男性被奴役,他们的操控者出售奴役服务的价格

    深圳市将发布《深圳市扶持金融业发展若干措施》,奖励区块链、数字货币等金融创新

    10月9日,深圳市人民政府向各区人民政府,市政府直属各单位印发《深圳市扶持金融业发展若干措施》(以下简称"《若干措施》")。深圳市政府表示,此举是为进一步完善金融支持政策体系,吸引集聚优质金融资源,推动全市金融业可持续均衡发展,加快建设国际化金融创新中心。 《若干措施》共分五大项,33条。内容包括:坚持服务导向,优化金融政策环境;发展金融总部经济,鼓励金融总部企业做大做强;支持金融企业分支机构

    麦妖榜
    更新日期 2019-09-03
    排名用户贡献值
    1牛市来了30910
    2BitettFan24187
    3等待的宿命23810
    4区块大康20369
    5六叶树20310
    6linjm122719429
    7天下无双16192
    8lizhen00215280
    9让时间淡忘14586
    10yelanyi050511349
    返回顶部 ↑