From 4b97ac87047ad2879c0c6db450ad8cd095df4521 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Sat, 1 Sep 2018 07:47:43 -0400 Subject: [PATCH] Updated approveAndCall section --- gas-relayer/src/strategy/IdentityStrategy.js | 2 - .../components/approveandcallgasrelayed.js | 106 ++++++------------ 2 files changed, 33 insertions(+), 75 deletions(-) diff --git a/gas-relayer/src/strategy/IdentityStrategy.js b/gas-relayer/src/strategy/IdentityStrategy.js index dcc7bbc..5871747 100644 --- a/gas-relayer/src/strategy/IdentityStrategy.js +++ b/gas-relayer/src/strategy/IdentityStrategy.js @@ -72,8 +72,6 @@ class IdentityStrategy extends Strategy { estimatedGas = await this._estimateGas(input); } else { const tmp = Math.floor(parseInt((await this._estimateGas(input)).toString(10), 10) * 1.05); - - console.log(tmp); estimatedGas = this.web3.utils.toBN(tmp); // TODO: tune this } diff --git a/test-dapp/app/components/approveandcallgasrelayed.js b/test-dapp/app/components/approveandcallgasrelayed.js index 6fec346..63a0b5c 100644 --- a/test-dapp/app/components/approveandcallgasrelayed.js +++ b/test-dapp/app/components/approveandcallgasrelayed.js @@ -1,4 +1,5 @@ import React, {Component} from 'react'; +import StatusGasRelayer, {Contracts, Functions} from '../status-gas-relayer'; import Button from '@material-ui/core/Button'; import Card from '@material-ui/core/Card'; import CardActions from '@material-ui/core/CardActions'; @@ -15,7 +16,7 @@ import TextField from '@material-ui/core/TextField'; import config from '../config'; import web3 from 'Embark/web3'; import {withStyles} from '@material-ui/core/styles'; -import { Typography } from '@material-ui/core'; + const styles = theme => ({ root: { width: '100%', @@ -63,7 +64,7 @@ class ApproveAndCallGasRelayed extends Component { }); }; - sign = (event) => { + sign = async (event) => { if(event) event.preventDefault(); this.setState({ @@ -74,27 +75,21 @@ class ApproveAndCallGasRelayed extends Component { IdentityGasRelay.options.address = this.props.identityAddress; try { - IdentityGasRelay.methods.deployGasRelayHash( - this.state.value, - web3.utils.soliditySha3({t: 'bytes', v: this.state.data}), - this.props.nonce, - this.state.gasPrice, - this.state.gasLimit, - this.state.gasToken - ) - .call() - .then(message => { - return web3.eth.sign(message, web3.eth.defaultAccount); - }) - .then(signature => { - this.setState({signature}); - }); + const s = new StatusGasRelayer.Identity(this.props.identityAddress, web3.eth.defaultAccount) + .setContractFunction(Functions.Identity.approveAndCall) + .setTransaction(this.state.to, this.state.value, this.state.data) + .setBaseToken(this.state.baseToken) + .setGas(this.state.gasToken, this.state.gasPrice, this.state.gasLimit); + + const signature = await s.sign(web3); + + this.setState({signature}); } catch(error){ this.setState({transactionError: error.message}); } } - obtainRelayers = event => { + obtainRelayers = async event => { event.preventDefault(); const {web3, kid, skid} = this.props; @@ -106,34 +101,20 @@ class ApproveAndCallGasRelayed extends Component { this.props.clearMessages(); try { - const sendOptions = { - ttl: 1000, - sig: kid, - powTarget: 1, - powTime: 20, - topic: this.state.topic, - symKeyID: skid, - payload: web3.utils.toHex({ - 'contract': this.props.identityAddress, - 'address': web3.eth.defaultAccount, - 'action': 'availability', - 'gasToken': this.state.gasToken, - 'gasPrice': this.state.gasPrice - }) - }; - - web3.shh.post(sendOptions) - .then(() => { - this.setState({submitting: false}); - console.log("Message sent"); - return true; - }); + const s = new StatusGasRelayer.AvailableRelayers(Contracts.Identity, this.props.identityAddress, web3.eth.defaultAccount) + .setRelayersSymKeyID(skid) + .setAsymmetricKeyID(kid) + .setGas(this.state.gasToken, this.state.gasPrice); + await s.post(web3); + + console.log("Message sent"); + this.setState({submitting: false}); } catch(error){ this.setState({messagingError: error.message, submitting: false}); } } - sendTransaction = event => { + sendTransaction = async event => { event.preventDefault(); const {web3, kid} = this.props; @@ -151,39 +132,18 @@ class ApproveAndCallGasRelayed extends Component { try { - let jsonAbi = IdentityGasRelay._jsonInterface.filter(x => x.name == "approveAndCallGasRelayed")[0]; - let funCall = web3.eth.abi.encodeFunctionCall(jsonAbi, [ - this.state.baseToken, - this.state.to, - this.state.value, - this.state.data, - this.props.nonce, - this.state.gasPrice, - this.state.gasLimit, - this.state.gasToken, - this.state.signature - ]); - const sendOptions = { - ttl: 1000, - sig: kid, - powTarget: 1, - powTime: 20, - topic: this.state.topic, - pubKey: relayer, - payload: web3.utils.toHex({ - 'contract': this.props.identityAddress, - 'address': web3.eth.defaultAccount, - 'action': 'transaction', - 'encodedFunctionCall': funCall - }) - }; + const s = new StatusGasRelayer.Identity(this.props.identityAddress, web3.eth.defaultAccount) + .setContractFunction(Functions.Identity.approveAndCall) + .setTransaction(this.state.to, this.state.value, this.state.data) + .setBaseToken(this.state.baseToken) + .setGas(this.state.gasToken, this.state.gasPrice, this.state.gasLimit) + .setRelayer(relayer) + .setAsymmetricKeyID(kid); - web3.shh.post(sendOptions) - .then(() => { - this.setState({submitting: false}); - console.log("Message sent"); - return true; - }); + await s.post(this.state.signature, web3); + + this.setState({submitting: false}); + console.log("Message sent"); } catch(error){ this.setState({messagingError: error.message, submitting: false}); }