1
1
import async from "async" ;
2
- import { dappPath } from 'embark-utils' ;
2
+ import { dappPath , getAppendLogFileCargo , readAppendedLogs } from 'embark-utils' ;
3
3
const embarkJsUtils = require ( 'embarkjs' ) . Utils ;
4
4
const { bigNumberify} = require ( 'ethers/utils/bignumber' ) ;
5
5
const RLP = require ( 'ethers/utils/rlp' ) ;
@@ -11,11 +11,20 @@ const BLOCK_LIMIT = 100;
11
11
export default class EthereumAPI {
12
12
constructor ( embark , web3 , blockchainName ) {
13
13
this . embark = embark ;
14
+ this . events = embark . events ;
15
+ this . logger = embark . logger ;
14
16
this . blockchainName = blockchainName ;
15
17
this . web3 = web3 ;
16
18
this . requestManager = new Manager ( web3 . currentProvider ) ;
17
19
this . fs = embark . fs ;
18
- this . logFile = dappPath ( ".embark" , "contractEvents.json" ) ;
20
+ this . logFile = dappPath ( ".embark" , "contractEvents.json.txt" ) ;
21
+ this . contractsSubscriptions = [ ] ;
22
+ this . contractsEvents = [ ] ;
23
+
24
+ this . writeLogFile = getAppendLogFileCargo ( this . logFile , this . logger ) ;
25
+ this . events . on ( 'contractsDeployed' , ( ) => {
26
+ this . subscribeToContractEvents ( ) ;
27
+ } ) ;
19
28
}
20
29
21
30
registerAPIs ( ) {
@@ -26,7 +35,7 @@ export default class EthereumAPI {
26
35
this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getTransactions" , this . getTransactions . bind ( this ) ) ;
27
36
this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getTransactionByHash" , this . getTransactionByHash . bind ( this ) ) ;
28
37
this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getTransactionByRawTransactionHash" , this . getTransactionByRawTransactionHash . bind ( this ) ) ;
29
- this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getEvents" , this . getEvents . bind ( this ) ) ;
38
+ this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getEvents" , this . readEvents . bind ( this ) ) ;
30
39
this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "signMessage" , this . signMessage . bind ( this ) ) ;
31
40
this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "verifyMessage" , this . verifyMessage . bind ( this ) ) ;
32
41
}
@@ -356,7 +365,7 @@ export default class EthereumAPI {
356
365
} ) ;
357
366
}
358
367
359
- subscribeToContractEvents ( callback ) {
368
+ subscribeToContractEvents ( ) {
360
369
this . contractsSubscriptions . forEach ( ( eventEmitter ) => {
361
370
const reqMgr = eventEmitter . options . requestManager ;
362
371
// attempting an eth_unsubscribe when not connected throws an
@@ -378,28 +387,24 @@ export default class EthereumAPI {
378
387
eventEmitter . on ( 'data' , ( data ) => {
379
388
const dataWithName = Object . assign ( data , { name : contractObject . className } ) ;
380
389
this . contractsEvents . push ( dataWithName ) ;
390
+ this . saveEvent ( dataWithName ) ;
381
391
this . events . emit ( 'blockchain:contracts:event' , dataWithName ) ;
382
392
} ) ;
383
393
} ) ;
384
- callback ( ) ;
385
394
} ) ;
386
395
}
387
396
388
- getEvents ( ) {
389
- const data = this . readEvents ( ) ;
390
- return Object . values ( data ) . reverse ( ) ;
391
- }
392
-
393
397
saveEvent ( event ) {
394
398
this . writeLogFile . push ( event ) ;
395
399
}
396
400
397
- readEvents ( ) {
398
- this . fs . ensureFileSync ( this . logFile ) ;
401
+ async readEvents ( asString ) {
399
402
try {
400
- return JSON . parse ( this . fs . readFileSync ( this . logFile ) ) ;
401
- } catch ( _error ) {
402
- return { } ;
403
+ return readAppendedLogs ( this . logFile , asString ) ;
404
+ } catch ( e ) {
405
+ this . logger . error ( 'Error reading contract log file' , e . message ) ;
406
+ this . logger . trace ( e . trace ) ;
407
+ return asString ? '[]' : [ ] ;
403
408
}
404
409
}
405
410
0 commit comments