1.0.7 • Published 5 years ago

ortpearl v1.0.7

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

ortpearl

ethereum event watch engine, just like Oriental Pearl TV Tower, high and beautiful

How to use

const {startEngine} = require('ortpearl');

// abis of the contract for the watcher to watch
const abis = {
  contractName: {
    'usdt': {
      'abi': [
        'event Transfer(address indexed from, address indexed to, uint value)',
        'event Approval(address indexed owner, address indexed spender, uint value)'
      ],
      'networks': {
        '1': { // mainnet
          'block': 4634748, // initial block number
          'address': '0xdac17f958d2ee523a2206206994597c13d831ec7'
        },
        '3': { // ropsten
          'block': 6414181,
          'address': '0x7A434FBdAca6D9Bee580FE2c285c9859BC63FB67'
        }
      }
    }
};

// nodes
const nodes: {
  1: process.env.ETH_MAINNET_NODE,
  3: process.env.ETH_ROPSTEN_NODE,
  5: process.env.ETH_GOERLI_NODE,
};

// tasks
// when the task event is fetched and match the confirm/chainId, this handler will trigger
async function handler(ctx, events) {
  const {foo} = ctx; // the towerConfig.taskCtx will passed into here
  console.log(foo); // bar
  console.log(events);
  /*
   events = [{
     _id: Schema.Types.String, //
    seq: {type: Schema.Types.Number, required: true, index: true},
    blockNumber: {type: Schema.Types.Number, required: true},
    logIdx: {type: Schema.Types.Number, required: true},
    blockHash: {type: Schema.Types.String, required: true},
    txHash: {type: Schema.Types.String, required: true},
    contract: EthAddress,
    baseTopic: {type: Schema.Types.String, required: true},
    topics: [{type: Schema.Types.String}],
    confirm: {type: Schema.Types.Number, required: true},
    eventName: {type: Schema.Types.String, required: true},
    chainId: {type: Schema.Types.Number, required: true},
    values: {},
    status: {type: Schema.Types.Number, required: true}
 }];
  */
  return true; // false the engine will retry dispatch this event again
}

const tasks = {
  transferEvent: {
    handler,
    contract: 'usdt', // same as contract name in abi configure
    confirm: 5, // confirm count
    chainId: 3, // chain id of the watch task
    event: 'Transfer' // event name, should be equal with the event name in abi
  }
};

// tower config
const towerConfig = {
  tasks,
  abis,
  taskCtx: { // task ctx object, will passed to handler
    foo: 'bar'
  },
  taskNamespace: 'my-watchtower',
  maxConfirmCount: FINAL_EVENT_CONFIRM_COUNT,
  nodes,
  mongoUrl: DB_URL,
  engineDbName: ORTPEARL_DB_NAME
};

const stopEngine = await startEngine(towerConfig);