@@ -23,9 +23,11 @@ import {
2323import { JsonRpc } from './eosjs-jsonrpc' ;
2424import {
2525 Abi ,
26+ BlockTaposInfo ,
2627 GetInfoResult ,
2728 PushTransactionArgs ,
2829 GetBlockHeaderStateResult ,
30+ GetBlockInfoResult ,
2931 GetBlockResult
3032} from './eosjs-rpc-interfaces' ;
3133import * as ser from './eosjs-serialize' ;
@@ -349,8 +351,7 @@ export class Api {
349351 { sign, requiredKeys, authorization = [ ] } : QueryConfig
350352 ) : Promise < any > {
351353 const info = await this . rpc . get_info ( ) ;
352- // TODO: replace get_block; needs rodeos changes
353- const refBlock = await this . rpc . get_block ( info . last_irreversible_block_num ) ;
354+ const refBlock = await this . tryRefBlockFromGetInfo ( info ) ;
354355 const queryBuffer = new ser . SerialBuffer ( { textEncoder : this . textEncoder , textDecoder : this . textDecoder } ) ;
355356 ser . serializeQuery ( queryBuffer , query ) ;
356357
@@ -439,13 +440,16 @@ export class Api {
439440 if ( ! info ) {
440441 info = await this . rpc . get_info ( ) ;
441442 }
443+ if ( useLastIrreversible ) {
444+ const block = await this . tryRefBlockFromGetInfo ( info ) ;
445+ return { ...ser . transactionHeader ( block , expireSeconds ) , ...transaction } ;
446+ }
442447
443- const taposBlockNumber : number = useLastIrreversible
444- ? info . last_irreversible_block_num : info . head_block_num - blocksBehind ;
448+ const taposBlockNumber : number = info . head_block_num - blocksBehind ;
445449
446450 const refBlock : GetBlockHeaderStateResult | GetBlockResult =
447451 taposBlockNumber <= info . last_irreversible_block_num
448- ? await this . rpc . get_block ( taposBlockNumber )
452+ ? await this . tryGetBlockInfo ( taposBlockNumber )
449453 : await this . tryGetBlockHeaderState ( taposBlockNumber ) ;
450454
451455 return { ...ser . transactionHeader ( refBlock , expireSeconds ) , ...transaction } ;
@@ -461,7 +465,36 @@ export class Api {
461465 try {
462466 return await this . rpc . get_block_header_state ( taposBlockNumber ) ;
463467 } catch ( error ) {
464- return await this . rpc . get_block ( taposBlockNumber ) ;
468+ return await this . tryGetBlockInfo ( taposBlockNumber ) ;
469+ }
470+ }
471+
472+ private async tryGetBlockInfo ( blockNumber : number ) : Promise < GetBlockInfoResult | GetBlockResult > {
473+ try {
474+ return await this . rpc . get_block_info ( blockNumber ) ;
475+ } catch ( error ) {
476+ return await this . rpc . get_block ( blockNumber ) ;
477+ }
478+ }
479+
480+ private async tryRefBlockFromGetInfo ( info : GetInfoResult ) : Promise < BlockTaposInfo | GetBlockInfoResult | GetBlockResult > {
481+ if (
482+ info . hasOwnProperty ( 'last_irreversible_block_id' ) &&
483+ info . hasOwnProperty ( 'last_irreversible_block_num' ) &&
484+ info . hasOwnProperty ( 'last_irreversible_block_time' )
485+ ) {
486+ return {
487+ block_num : info . last_irreversible_block_num ,
488+ id : info . last_irreversible_block_id ,
489+ timestamp : info . last_irreversible_block_time ,
490+ } ;
491+ } else {
492+ const block = await this . tryGetBlockInfo ( info . last_irreversible_block_num ) ;
493+ return {
494+ block_num : block . block_num ,
495+ id : block . id ,
496+ timestamp : block . timestamp ,
497+ } ;
465498 }
466499 }
467500
0 commit comments