SEER区块链database_api更新 支持通过txid查询交易所在区块信息

在这里插入图片描述
————用区块链技术为文体产业赋能————

日前,SEER核心开发者对SEER cli和database_api进行了更新,新增接口:get_transaction_by_txid,可用于通过交易ID查询该交易在链上所在区块高度和交易在区块中的位置。

交易ID即txid,是通过已签名的交易内容来进行计算出的散列值,可在区块生产或被确认前产生。例如交易所等第三方网关,通常在发起一笔提现或充值后,会向用户反馈此操作的交易id,用户可凭此txid在区块浏览器查询此交易被确认的状态。因此,TXID的一致算法非常重要,而在Graphene工具组中,传统的形式是通过额外运行elasticsearch插件来实现此功能。SEER将此功能集成在database_api中,可极大减轻前端开发者的工作量,提高开发效率。

格式:get_transaction_by_txid transaction_id

参数:transaction_id,交易的散列值。可通过cli的get_transaction_id 、transfer2 、get_block接口进行前端计算生成,新升级后的database_api的get_block也将包含transaction_ids字段。

作用:通过transaction_id查询该交易在链上所在区块高度和交易在区块中的位置,前端开发者可再通过get_block接口向用户返回该transaction_id所对应的transactions结构体(即交易详细内容)。

示例:{"jsonrpc": "2.0", "method": "get_transaction_by_txid", "params": [3ecbd34522eb320b105b653247012ea996fa7065], "id": 1}

返回信息示例:

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "id": "2.22.102327",//交易的object_ID
        "txid": "3ecbd34522eb320b105b653247012ea996fa7065",//transaction_id
        "timestamp": "2019-08-26T08:32:51",//时间戳,格林尼治时间
        "block_num": 13274359,//交易所在块高
        "trx_in_block": 0//交易在区块中的位置
    }
}

通过接口返回的"block_num""trx_in_block"两个参数可知道此交易所在块高及此交易在该区块中的位置,从而再使用get_block接口查询其交易详细内容。

示例:{"jsonrpc": "2.0", "method": "get_block", "params": [13274359], "id": 1}

返回信息示例:

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "previous": "00ca9c96829ff5fbcef6c087c762e2cde24b5915",//上一个块的块号
        "timestamp": "2019-08-26T08:32:51",//时间戳,格林尼治时间
        "witness": "1.5.55",//该块的见证人object_ID
        "transaction_merkle_root": "c41ddd9469e13daf8b7f75cbdf1ed2b4c8a98b79",//交易默克尔根值
        "extensions": [],
        "witness_signature": "2048394f5d99f22f58cdc2de15568fb27397eb5bb9da3a235a04f6da68f622aa8b5face2f9e7d01a4c58e3fcd605855c683ac9ca58b250a53775d5a8afd199134d",//见证人签名
        "transactions": [//交易列表
        {//第一个交易结构体
            "ref_block_num": 40186,//引用的区块号
            "ref_block_prefix": 4227178370,//引用的区块头
            "expiration": "2019-08-28T08:33:18",//交易可能的过期时间
            "operations": [//操作列表
                [0, {//操作代码,此处0表示转账
                    "fee": {//手续费
                        "amount": 200000,//金额,带5位小数精度,此处200000表示2
                        "asset_id": "1.3.0"//资产类型 
                    },
                    "from": "1.2.28828",//发起用户ID
                    "to": "1.2.8848",//接收用户ID
                    "amount": {
                        "amount": 100000,//金额,带5位小数精度,此处100000表示1
                        "asset_id": "1.3.0"
                    },
                    "extensions": []
                }]
            ],
            "extensions": [],
            "signatures": ["1f5cd08d2edbb100429915dee6b0449c8a6319c4dc556147db13cc9af1ef26c51756b437926dc29d24dc65cf1110c71f246fb82fa698f1970ae3523729d0bbc3fe"],//交易签名
            "operation_results": [//操作结果
                [0, {}]
            ]
        }, {//第二个交易结构体
            "ref_block_num": 40186,//引用的区块号
            "ref_block_prefix": 4227178370,//引用的区块头
            "expiration": "2019-08-28T08:33:19",//交易可能的过期时间
            "operations": [//操作列表
                [0, {//操作代码,此处0表示转账
                    "fee": {//手续费
                        "amount": 200000,//金额,带5位小数精度,此处200000表示2
                        "asset_id": "1.3.0"//资产类型 
                    },
                    "from": "1.2.28828",//发起用户ID
                    "to": "1.2.8848",//接收用户ID
                    "amount": {
                        "amount": 100000,//金额,带5位小数精度,此处100000表示1
                        "asset_id": "1.3.0"//资产类型 
                    },
                    "extensions": []
                }]
            ],
            "extensions": [],
            "signatures": ["20295aa7c286a406c86540524a97e6395815effd6e617ef940b869d37da303aabb175123fd6f83a6661d4955cf90198babe7a3002c0e2a7d73a771b92cd097648c"],//交易签名
            "operation_results": [//操作结果
                [0, {}]
            ]
        }],
        "block_id": "00ca9c97062a5716c580219349f3d7fb04713f89",//当前块号
        "signing_key": "SEER7txfWeMueDBWKs6sC9zTUmwhjG6xeVwPZhXwcvH5ctCYdnCPnu",//见证人签名公钥
        "transaction_ids": ["3ecbd34522eb320b105b653247012ea996fa7065", "501e507c8c62221f9f4484d1f0334585e3cf362a"],//交易ID集合
        "txs_count": 2//此块包含的交易数量
    }
}

在此例中,同一个块中包含2笔交易,"trx_in_block"参数为0可知该笔交易为块中第一笔交易,于是可取得该笔交易结构体内容:

{ //第一个交易结构体
    "ref_block_num": 40186, //引用的区块号
    "ref_block_prefix": 4227178370, //引用的区块头
    "expiration": "2019-08-28T08:33:18", //交易可能的过期时间
    "operations": [ //操作列表
        [0, { //操作代码,此处0表示转账
            "fee": { //手续费
                "amount": 200000, //金额,带5位小数精度,此处200000表示2
                "asset_id": "1.3.0"//资产类型 此处表示SEER
            },
            "from": "1.2.28828", //发起用户object_ID,可通过get_account查询其用户名,此处为bm520
            "to": "1.2.8848", //接收用户ID,此处为xyz123
            "amount": {
                "amount": 100000, //金额,带5位小数精度,此处100000表示1
                "asset_id": "1.3.0"//资产类型 此处表示SEER
            },
            "extensions": []
        }]
    ],
    "extensions": [],
    "signatures": ["1f5cd08d2edbb100429915dee6b0449c8a6319c4dc556147db13cc9af1ef26c51756b437926dc29d24dc65cf1110c71f246fb82fa698f1970ae3523729d0bbc3fe"], //交易签名
    "operation_results": [ //操作结果
        [0, {}]
    ]
}

翻译该交易内容为:bm520 向 xyz123 转账 1 SEER

目前具备此功能的API已部署到SEER社区提供的新加坡节点:ws://sg1.seerchain.org ,并将在下次硬分叉升级时整合进发布版本节点程序,扩展到所有API节点。当下,SEER社区开发者正基于此最新功能API开发新版本网页钱包和区块浏览器。

大家可使用wscat、http://www.websocket-test.com等前端WS测试工具进行测试体验。

示例:

> root@ubuntu:~# wscat -c ws://sg1.seerchain.org
connected (press CTRL+C to quit)
> {"jsonrpc": "2.0", "method": "get_transaction_by_txid", "params": [15b922cbbd7f3648d92bed9f001a2cc99651228c], "id": 1}
< {"id":1,"jsonrpc":"2.0","result":{"id":"2.22.101376","txid":"15b922cbbd7f3648d92bed9f001a2cc99651228c","timestamp":"2019-08-24T00:50:36","block_num":13158209,"trx_in_block":0}}
> {"jsonrpc": "2.0", "method": "get_block", "params": [13158209], "id": 1}
< {"id":1,"jsonrpc":"2.0","result":{"previous":"00c8c740c7025d851d50eade54a0a4a5255215eb","timestamp":"2019-08-24T00:50:36","witness":"1.5.89","transaction_merkle_root":"ef0d18cdd451e748b30bfeaca3ed87e366b47550","extensions":[],"witness_signature":"201ebf2bd6f81f0bf35309dead3c7c40d28040a724b754f7af1204f66277ba0327696b8db0ba6172703a249e92c99ea214dc8c42962bca4bbfd74d9b6417400c90","transactions":[{"ref_block_num":51008,"ref_block_prefix":2237465287,"expiration":"2019-08-24T00:52:35","operations":[[0,{"fee":{"amount":336718,"asset_id":"1.3.0"},"from":"1.2.50","to":"1.2.9981","amount":{"amount":"10000000000","asset_id":"1.3.0"},"memo":{"from":"SEER6uDmZCs76JMpFTHjcTFLmjPhkjLTnA8FP3wwmSo5X7fCDATLRe","to":"SEER646RGdL4gncz7y834wfGfcHECnKdbdVWd6gh9aEYdn3HWyhBjB","nonce":"401051605206583","message":"1143d782c85ec6a8f42b401af0289b3082ed72a79a9e64200caf8a4d099b90936e552093ab285fda2972a5cd7d6a541fedf144557440b742e201642a527a350a"},"extensions":[]}]],"extensions":[],"signatures":["206665af3497858608911b602d7b69fadd8e6324ecf7c24ded5b2885449b05535210189789b5c5aac2ebfa58084c1ecb430488bfba0112c28ea62eb81544397753"],"operation_results":[[0,{}]]}],"block_id":"00c8c74161854887391db23c38dd960268760f17","signing_key":"SEER81CmBUXQUTCLCsym74KM7S7PTRpU5WyWSRJ92ZWfVck5S3Fyai","transaction_ids":["15b922cbbd7f3648d92bed9f001a2cc99651228c"],"txs_count":1}}
> 

往期回顾

?技术派 I SEER区块链压力测试告诉什么叫“黑科技”

?SEER项目投资方拿云体育与海南省文投合资注册公司

?SEER超级福利来袭!5,000,000SEER为你整装待发!

?领航区块链研究中心正式成立,拿云体育成为理事长单位

微信群:请加小助手微信seeryuanyuan

Telegram:https://t.me/seerchain

Twitter:https://twitter.com/info_seer

微博:SEER爱好者社区

币世界:https://i.bishijie.com/home/SEER?invite=110285572
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

引用:在1.h 中#include了 2.h ,然后在2.h 中又#include了 1.h ,然后这个错误就出现了 。 引用:使用 CopyOnWriteArrayList 需要注意的“坑”主要有两个方面。一个是应用场景,CopyOnWriteArrayList 仅适用于写操作非常少的场景,而且能够容忍读写的短暂不一致。例如上面的例子中,写入的新元素并不能立刻被遍历到。另一个需要注意的是,CopyOnWriteArrayList 迭代器是只读的,不支持增删改。因为迭代器遍历的仅仅是一个快照,而对快照进行增删改是没有意义的。 。 引用://final,override出现在形参列表以及尾置返回类型之后 #include using namespace std; struct B{ virtual void f1(int) const; virtual void f2(int); void f3(int) final;//出错,final不能修饰非虚函数 }; ...。 引用中的问题是由于在1.h中包含了2.h,在2.h中又包含了1.h,导致循环包含的错误。为了解决这个问题,你可以使用头文件保护符号来防止循环包含。在1.h和2.h的开头分别加上#ifndef 和 #define 防止重复包含,然后在结尾处加上#endif来关闭头文件保护符号。 引用中的问题是关于使用CopyOnWriteArrayList时需要注意的两个方面。首先,CopyOnWriteArrayList适用于写操作非常少的场景,并且可以容忍读写的短暂不一致。也就是说,当你向CopyOnWriteArrayList中写入新元素时,可能不能立刻被遍历到。其次,CopyOnWriteArrayList的迭代器是只读的,不支持增删改操作。因为迭代器遍历的是一个快照,对快照进行增删改是没有意义的。 引用中的问题是关于final和override的使用位置的错误。在C++中,final和override关键字应该出现在成员函数的声明或定义中,并且要紧跟在函数名之后的括号内。在给定的代码中,final被错误地放在了函数定义的末尾,导致出现错误。要解决这个问题,你需要将final关键字放在函数声明或定义的括号内正确使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值