liquid-funding/app/utils/events.js

103 lines
2.9 KiB
JavaScript
Raw Normal View History

import LiquidPledging from 'Embark/contracts/LiquidPledging'
import LPVault from 'Embark/contracts/LPVault'
import web3 from 'Embark/web3'
2019-01-19 15:08:16 +00:00
import { getLastBlockStored } from '../actions/lpEvents'
const AUTHORIZE_PAYMENT = 'AuthorizePayment'
2019-01-19 18:12:36 +00:00
export const GIVER_ADDED = 'GiverAdded'
export const DELEGATE_ADDED = 'DelegateAdded'
export const PROJECT_ADDED = 'ProjectAdded'
2018-12-14 17:48:42 +00:00
const ALL_EVENTS = 'allEvents'
2018-12-03 13:50:15 +00:00
const lookups = {
[GIVER_ADDED]: {
id: 'idGiver',
type: 'Funder'
},
[DELEGATE_ADDED]: {
id: 'idDelegate',
type: 'Delegate'
},
[PROJECT_ADDED]: {
id: 'idProject',
type: 'Project'
2018-12-03 13:50:15 +00:00
}
}
2019-01-11 15:45:19 +00:00
const hexToDecimal = hex => Number(parseInt(hex, 16))
const formatVaultEvent = async event => {
const { returnValues } = event
return {
...returnValues,
2019-01-11 15:45:19 +00:00
ref: hexToDecimal(returnValues.ref)
}
}
2019-01-25 17:18:44 +00:00
const getPastVaultEvents = async (event, raw = false, fromBlock = 0) => {
const events = await LPVault.getPastEvents(event, {
addr: await web3.eth.getCoinbase(),
2019-01-25 17:18:44 +00:00
fromBlock,
toBlock: 'latest'
})
if (raw) return events
const formattedEvents = await Promise.all(
events.map(formatVaultEvent)
)
return formattedEvents
}
const { getPledgeAdmin } = LiquidPledging.methods
2018-12-02 14:46:20 +00:00
export const formatFundProfileEvent = async event => {
2018-12-03 13:50:15 +00:00
const lookup = lookups[event.event]
2019-01-19 18:12:36 +00:00
const { id, returnValues: { url } } = event
2018-12-03 13:50:15 +00:00
const idProfile = event.returnValues[lookup.id]
const { addr, commitTime, name, canceled } = await getPledgeAdmin(idProfile).call()
return {
2019-01-19 01:51:48 +00:00
id,
2018-12-03 13:50:15 +00:00
idProfile,
url,
commitTime,
name,
addr,
2018-12-03 13:50:15 +00:00
canceled,
type: lookups[event.event].type
}
}
2019-01-19 15:08:16 +00:00
const getPastEvents = async (event, raw = false, fromBlock = 0) => {
const events = await LiquidPledging.getPastEvents(event, {
addr: await web3.eth.getCoinbase(),
2019-01-19 15:08:16 +00:00
fromBlock,
toBlock: 'latest'
})
2018-12-14 17:48:42 +00:00
if (raw) return events
2018-12-03 13:50:15 +00:00
const formattedEvents = await Promise.all(
events.map(formatFundProfileEvent)
)
return formattedEvents
}
2018-12-14 17:48:42 +00:00
export const lpEventsSubscription = async () => {
//todo add on event handlers
const events = await LiquidPledging.events.allEvents({
2018-12-14 17:48:42 +00:00
fromBlock: 0,
toBlock: 'latest'
})
return events
}
export const getFunderProfiles = async () => await getPastEvents(GIVER_ADDED)
export const getDelegateProfiles = async () => await getPastEvents(DELEGATE_ADDED)
export const getProjectProfiles = async () => await getPastEvents(PROJECT_ADDED)
2019-01-25 17:18:44 +00:00
export const getAllLPEvents = async fromBlock => await getPastEvents(
2019-01-19 15:08:16 +00:00
ALL_EVENTS,
true,
2019-01-25 17:18:44 +00:00
fromBlock
2019-01-19 15:08:16 +00:00
)
export const getAuthorizedPayments = async () => getPastVaultEvents(AUTHORIZE_PAYMENT)
2019-01-25 17:18:44 +00:00
export const getAllVaultEvents = async (fromBlock = 0) => getPastVaultEvents(ALL_EVENTS,true, fromBlock)
2018-12-03 13:50:15 +00:00
export const getProfileEvents = async () => {
const [ funderProfiles, delegateProfiles, projectProfiles]
= await Promise.all([getFunderProfiles(), getDelegateProfiles(), getProjectProfiles()])
return [ ...funderProfiles, ...delegateProfiles, ...projectProfiles]
2018-12-03 13:50:15 +00:00
}