mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-22 17:33:23 +01:00
Added signTokenTx; Adding token confirmation screen
This commit is contained in:
parent
836bf2e1a3
commit
7eb6dae418
@ -1,6 +1,7 @@
|
||||
const EventEmitter = require('events').EventEmitter
|
||||
const async = require('async')
|
||||
const Dnode = require('dnode')
|
||||
const Eth = require('ethjs')
|
||||
const EthQuery = require('eth-query')
|
||||
const launchMetamaskUi = require('../../ui')
|
||||
const StreamProvider = require('web3-stream-provider')
|
||||
@ -34,6 +35,7 @@ function setupWeb3Connection (connectionStream) {
|
||||
providerStream.on('error', console.error.bind(console))
|
||||
global.ethereumProvider = providerStream
|
||||
global.ethQuery = new EthQuery(providerStream)
|
||||
global.eth = new Eth(providerStream)
|
||||
}
|
||||
|
||||
function setupControllerConnection (connectionStream, cb) {
|
||||
@ -47,6 +49,7 @@ function setupControllerConnection (connectionStream, cb) {
|
||||
})
|
||||
connectionStream.pipe(accountManagerDnode).pipe(connectionStream)
|
||||
accountManagerDnode.once('remote', function (accountManager) {
|
||||
console.log({ accountManager })
|
||||
// setup push events
|
||||
accountManager.on = eventEmitter.on.bind(eventEmitter)
|
||||
cb(null, accountManager)
|
||||
|
@ -80,6 +80,7 @@
|
||||
"ethereumjs-tx": "^1.3.0",
|
||||
"ethereumjs-util": "github:ethereumjs/ethereumjs-util#ac5d0908536b447083ea422b435da27f26615de9",
|
||||
"ethereumjs-wallet": "^0.6.0",
|
||||
"ethjs": "^0.2.8",
|
||||
"ethjs-ens": "^2.0.0",
|
||||
"ethjs-query": "^0.2.9",
|
||||
"express": "^4.14.0",
|
||||
|
@ -1,3 +1,4 @@
|
||||
const abi = require('human-standard-token-abi')
|
||||
const getBuyEthUrl = require('../../app/scripts/lib/buy-eth-url')
|
||||
|
||||
var actions = {
|
||||
@ -118,6 +119,7 @@ var actions = {
|
||||
cancelPersonalMsg,
|
||||
sendTx: sendTx,
|
||||
signTx: signTx,
|
||||
signTokenTx: signTokenTx,
|
||||
updateAndApproveTx,
|
||||
cancelTx: cancelTx,
|
||||
completedTx: completedTx,
|
||||
@ -192,6 +194,7 @@ module.exports = actions
|
||||
var background = null
|
||||
function _setBackgroundConnection (backgroundConnection) {
|
||||
background = backgroundConnection
|
||||
console.log({ background })
|
||||
}
|
||||
|
||||
function goHome () {
|
||||
@ -439,6 +442,19 @@ function sendTx (txData) {
|
||||
}
|
||||
}
|
||||
|
||||
function signTokenTx (tokenAddress, toAddress, amount, txData) {
|
||||
return dispatch => {
|
||||
dispatch(actions.showLoadingIndication())
|
||||
const token = global.eth.contract(abi).at(tokenAddress)
|
||||
token.transfer(toAddress, amount, txData)
|
||||
.catch(err => {
|
||||
dispatch(actions.hideLoadingIndication())
|
||||
dispatch(actions.displayWarning(err.message))
|
||||
})
|
||||
dispatch(actions.showConfTxPage({}))
|
||||
}
|
||||
}
|
||||
|
||||
function updateAndApproveTx (txData) {
|
||||
log.info('actions: updateAndApproveTx: ' + JSON.stringify(txData))
|
||||
return (dispatch) => {
|
||||
|
@ -91,9 +91,9 @@ PendingTx.prototype.render = function () {
|
||||
// const maxCost = txFeeBn.add(amountBn)
|
||||
// const balanceBn = hexToBn(balance)
|
||||
// const insufficientBalance = balanceBn.lt(maxCost)
|
||||
|
||||
const fromName = identities[txParams.from].name;
|
||||
const toName = identities[txParams.to].name;
|
||||
const fromName = identities[txParams.from].name
|
||||
const to = identities[txParams.to]
|
||||
const toName = to ? to.name : ' '
|
||||
|
||||
const endOfFromAddress = txParams.from.slice(txParams.from.length - 4)
|
||||
const endOfToAddress = txParams.to.slice(txParams.to.length - 4)
|
||||
|
@ -1,7 +1,7 @@
|
||||
const Component = require('react').Component
|
||||
const connect = require('react-redux').connect
|
||||
const h = require('react-hyperscript')
|
||||
const ethUtil = require('ethereumjs-util')
|
||||
const { addHexPrefix } = require('ethereumjs-util')
|
||||
const classnames = require('classnames')
|
||||
const inherits = require('util').inherits
|
||||
const actions = require('../../actions')
|
||||
@ -50,6 +50,14 @@ function mapStateToProps (state) {
|
||||
function mapDispatchToProps (dispatch) {
|
||||
return {
|
||||
backToAccountDetail: address => dispatch(actions.backToAccountDetail(address)),
|
||||
hideWarning: () => dispatch(actions.hideWarning()),
|
||||
addToAddressBook: (recipient, nickname) => dispatch(
|
||||
actions.addToAddressBook(recipient, nickname)
|
||||
),
|
||||
signTx: txParams => dispatch(actions.signTx(txParams)),
|
||||
signTokenTx: (tokenAddress, toAddress, amount, txData) => (
|
||||
dispatch(actions.signTokenTx(tokenAddress, toAddress, amount, txData))
|
||||
),
|
||||
// showSidebar: () => { dispatch(actions.showSidebar()) },
|
||||
// hideSidebar: () => { dispatch(actions.hideSidebar()) },
|
||||
// showModal: (payload) => { dispatch(actions.showModal(payload)) },
|
||||
@ -75,13 +83,14 @@ function SendTokenScreen () {
|
||||
SendTokenScreen.prototype.validate = function () {
|
||||
const {
|
||||
to,
|
||||
amount,
|
||||
amount: stringAmount,
|
||||
gasPrice: hexGasPrice,
|
||||
gasLimit: hexGasLimit,
|
||||
} = this.state
|
||||
|
||||
const gasPrice = parseInt(hexGasPrice, 16)
|
||||
const gasLimit = parseInt(hexGasLimit, 16) / 1000000000
|
||||
const amount = Number(stringAmount)
|
||||
|
||||
if (to && amount && gasPrice && gasLimit) {
|
||||
return {
|
||||
@ -92,7 +101,7 @@ SendTokenScreen.prototype.validate = function () {
|
||||
|
||||
const errors = {
|
||||
to: !to ? 'Required' : null,
|
||||
amount: !Number(amount) ? 'Required' : null,
|
||||
amount: !amount ? 'Required' : null,
|
||||
gasPrice: !gasPrice ? 'Gas Price Required' : null,
|
||||
gasLimit: !gasLimit ? 'Gas Limit Required' : null,
|
||||
}
|
||||
@ -104,20 +113,41 @@ SendTokenScreen.prototype.validate = function () {
|
||||
}
|
||||
|
||||
SendTokenScreen.prototype.submit = function () {
|
||||
// const {
|
||||
// to,
|
||||
// amount,
|
||||
// selectedCurrency,
|
||||
// isGasTooltipOpen,
|
||||
// gasPrice,
|
||||
// gasLimit,
|
||||
// } = this.state
|
||||
const {
|
||||
to,
|
||||
amount,
|
||||
gasPrice,
|
||||
gasLimit,
|
||||
} = this.state
|
||||
|
||||
const {
|
||||
identities,
|
||||
selectedAddress,
|
||||
selectedTokenAddress,
|
||||
hideWarning,
|
||||
addToAddressBook,
|
||||
signTokenTx,
|
||||
} = this.props
|
||||
|
||||
const { nickname = ' ' } = identities[to] || {}
|
||||
|
||||
const { isValid, errors } = this.validate()
|
||||
|
||||
if (!isValid) {
|
||||
return this.setState({ errors })
|
||||
}
|
||||
|
||||
hideWarning()
|
||||
addToAddressBook(to, nickname)
|
||||
|
||||
const txParams = {
|
||||
from: selectedAddress,
|
||||
value: '0',
|
||||
gas: gasLimit,
|
||||
gasPrice: gasPrice,
|
||||
}
|
||||
|
||||
signTokenTx(selectedTokenAddress, to, Number(amount).toString(16), txParams)
|
||||
}
|
||||
|
||||
SendTokenScreen.prototype.renderToAddressInput = function () {
|
||||
|
Loading…
Reference in New Issue
Block a user