11import async from "async" ;
2- import { dappPath } from 'embark-utils' ;
2+ import { dappPath , getAppendLogFileCargo , readAppendedLogs } from 'embark-utils' ;
33const embarkJsUtils = require ( 'embarkjs' ) . Utils ;
44const { bigNumberify} = require ( 'ethers/utils/bignumber' ) ;
55const RLP = require ( 'ethers/utils/rlp' ) ;
@@ -11,11 +11,20 @@ const BLOCK_LIMIT = 100;
1111export default class EthereumAPI {
1212 constructor ( embark , web3 , blockchainName ) {
1313 this . embark = embark ;
14+ this . events = embark . events ;
15+ this . logger = embark . logger ;
1416 this . blockchainName = blockchainName ;
1517 this . web3 = web3 ;
1618 this . requestManager = new Manager ( web3 . currentProvider ) ;
1719 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+ } ) ;
1928 }
2029
2130 registerAPIs ( ) {
@@ -26,7 +35,7 @@ export default class EthereumAPI {
2635 this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getTransactions" , this . getTransactions . bind ( this ) ) ;
2736 this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "getTransactionByHash" , this . getTransactionByHash . bind ( this ) ) ;
2837 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 ) ) ;
3039 this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "signMessage" , this . signMessage . bind ( this ) ) ;
3140 this . embark . events . request ( "blockchain:api:register" , this . blockchainName , "verifyMessage" , this . verifyMessage . bind ( this ) ) ;
3241 }
@@ -356,7 +365,7 @@ export default class EthereumAPI {
356365 } ) ;
357366 }
358367
359- subscribeToContractEvents ( callback ) {
368+ subscribeToContractEvents ( ) {
360369 this . contractsSubscriptions . forEach ( ( eventEmitter ) => {
361370 const reqMgr = eventEmitter . options . requestManager ;
362371 // attempting an eth_unsubscribe when not connected throws an
@@ -378,28 +387,24 @@ export default class EthereumAPI {
378387 eventEmitter . on ( 'data' , ( data ) => {
379388 const dataWithName = Object . assign ( data , { name : contractObject . className } ) ;
380389 this . contractsEvents . push ( dataWithName ) ;
390+ this . saveEvent ( dataWithName ) ;
381391 this . events . emit ( 'blockchain:contracts:event' , dataWithName ) ;
382392 } ) ;
383393 } ) ;
384- callback ( ) ;
385394 } ) ;
386395 }
387396
388- getEvents ( ) {
389- const data = this . readEvents ( ) ;
390- return Object . values ( data ) . reverse ( ) ;
391- }
392-
393397 saveEvent ( event ) {
394398 this . writeLogFile . push ( event ) ;
395399 }
396400
397- readEvents ( ) {
398- this . fs . ensureFileSync ( this . logFile ) ;
401+ async readEvents ( asString ) {
399402 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 ? '[]' : [ ] ;
403408 }
404409 }
405410
0 commit comments