@@ -251,25 +251,17 @@ export interface PollFilters {
251
251
[ PollFilterType . Logs ] : LogPollFilter [ ] ;
252
252
}
253
253
254
- export interface CallInfo {
255
- ok ?: {
256
- exit_reason : {
257
- succeed ?: 'Stopped' | 'Returned' | 'Suicided' ;
258
- error ?: any ;
259
- revert ?: 'Reverted' ;
260
- fatal ?: any ;
261
- } ;
262
- value : string ;
263
- used_gas : string ;
264
- used_storage : number ;
265
- logs : Log [ ] ;
266
- } ;
267
- err ?: {
268
- module : {
269
- index : number ;
270
- error : `0x${string } `;
271
- } ;
272
- } ;
254
+ export interface CallReturnInfo {
255
+ exit_reason : {
256
+ succeed ?: 'Stopped' | 'Returned' | 'Suicided' ;
257
+ error ?: any ;
258
+ revert ?: 'Reverted' ;
259
+ fatal ?: any ;
260
+ } ;
261
+ value : string ;
262
+ used_gas : string ;
263
+ used_storage : number ;
264
+ logs : Log [ ] ;
273
265
}
274
266
275
267
export abstract class BaseProvider extends AbstractProvider {
@@ -814,53 +806,50 @@ export abstract class BaseProvider extends AbstractProvider {
814
806
_ethCall = async ( callRequest : SubstrateEvmCallRequest , at ?: string ) => {
815
807
const api = at ? await this . api . at ( at ) : this . api ;
816
808
817
- const { from, to, gasLimit, storageLimit, value, data, accessList } = callRequest ;
818
- const estimate = false ;
819
-
820
809
// call evm rpc when `state_call` is not supported yet
821
810
if ( ! api . call . evmRuntimeRPCApi ) {
822
811
const data = await this . api . rpc . evm . call ( callRequest ) ;
823
- const res : CallInfo = {
824
- ok : {
825
- exit_reason : { succeed : 'Returned' } ,
826
- value : data . toHex ( ) ,
827
- used_gas : '0' ,
828
- used_storage : 0 ,
829
- logs : [ ] ,
830
- } ,
812
+
813
+ return {
814
+ exit_reason : { succeed : 'Returned' } ,
815
+ value : data . toHex ( ) ,
816
+ used_gas : '0' ,
817
+ used_storage : 0 ,
818
+ logs : [ ] ,
831
819
} ;
832
- return res . ok ;
833
820
}
834
821
822
+ const { from, to, gasLimit, storageLimit, value, data, accessList } = callRequest ;
823
+ const estimate = false ;
824
+
835
825
const res = to
836
826
? await api . call . evmRuntimeRPCApi . call ( from , to , data , value , gasLimit , storageLimit , accessList , estimate )
837
827
: await api . call . evmRuntimeRPCApi . create ( from , data , value , gasLimit , storageLimit , accessList , estimate ) ;
838
828
839
- const { ok , err } = res . toJSON ( ) as CallInfo ;
829
+ const ok = res . toJSON ( ) [ 'ok' ] as CallReturnInfo | undefined ;
840
830
if ( ! ok ) {
841
831
// substrate level error
842
- const errMetaValid = err ?. module . index !== undefined && err ?. module . error !== undefined ;
843
- if ( ! errMetaValid ) {
844
- return logger . throwError (
845
- 'internal JSON-RPC error [unknown error - cannot decode error info from error meta]' ,
846
- Logger . errors . CALL_EXCEPTION ,
847
- callRequest
848
- ) ;
849
- }
832
+ let errMsg : string ;
833
+ const err = res . asErr ;
834
+ if ( err . isModule ) {
835
+ const { index , error } = err . asModule ;
836
+ const errInfo = this . api . registry . findMetaError ( {
837
+ index : new BN ( index ) ,
838
+ error : new BN ( error ) ,
839
+ } ) ;
850
840
851
- const errInfo = this . api . registry . findMetaError ( {
852
- index : new BN ( err . module . index ) ,
853
- error : new BN ( hexToU8a ( err . module . error ) [ 0 ] ) ,
854
- } ) ;
855
- const msg = `internal JSON-RPC error [${ errInfo . section } .${ errInfo . name } : ${ errInfo . docs } ]` ;
841
+ errMsg = `internal JSON-RPC error [${ errInfo . section } .${ errInfo . name } : ${ errInfo . docs } ]` ;
842
+ } else {
843
+ errMsg = err . toString ( ) ;
844
+ }
856
845
857
- return logger . throwError ( msg , Logger . errors . CALL_EXCEPTION , callRequest ) ;
846
+ return logger . throwError ( errMsg , Logger . errors . CALL_EXCEPTION , callRequest ) ;
858
847
}
859
848
860
849
// check evm level error
861
850
checkEvmExecutionError ( ok ) ;
862
851
863
- return ok ! ;
852
+ return ok ;
864
853
} ;
865
854
866
855
getStorageAt = async (
0 commit comments