ens-usernames/app/actions/accounts.js

51 lines
1.8 KiB
JavaScript

import ERC20Token from '../../embarkArtifacts/contracts/ERC20Token'
import UsernameRegistrar from '../../embarkArtifacts/contracts/UsernameRegistrar'
import TestToken from '../../embarkArtifacts/contracts/TestToken'
import { getDefaultAccount } from '../utils/web3Helpers'
import { actions as accountActions } from '../reducers/accounts'
import { isNil } from 'lodash'
const { receiveAccounts, receiveStatusContactCode } = accountActions;
export const fetchAndDispatchAccountsWithBalances = (web3, dispatch) => {
web3.eth.getAccounts((err, addresses) => {
if (addresses) {
const defaultAccount = web3.eth.defaultAccount || addresses[0]
const accounts = addresses.map(async address => {
const balance = await web3.eth.getBalance(address, 'latest')
const SNTBalance = await ERC20Token.methods.balanceOf(address).call()
return { address, balance, SNTBalance }
})
Promise.all(accounts).then(accounts => {
dispatch(receiveAccounts(defaultAccount, accounts))
})
}
})
}
export const checkAndDispatchStatusContactCode = (dispatch) => {
window.web3.currentProvider.status
.getContactCode()
.then(data => {
setTimeout(() => {
// This seems to be required with Status api calls.
// This could be a bug with the client itself as the issue is found in other contexts.
dispatch(receiveStatusContactCode(data))
}, 0);
})
.catch(err => {
console.warn('Error:', err);
})
};
export const fetchAndDispatchSNTAllowance = dispatch => {
const { methods: { allowance } } = TestToken;
const { receiveSntAllowance } = accountActions;
const spender = UsernameRegistrar._address;
allowance(getDefaultAccount(), spender)
.call()
.then(allowance => {
dispatch(receiveSntAllowance(allowance))
})
};