diff --git a/js/src/api/contract/contract.js b/js/src/api/contract/contract.js index 8d556a118..06afb0d9d 100644 --- a/js/src/api/contract/contract.js +++ b/js/src/api/contract/contract.js @@ -40,9 +40,12 @@ export default class Contract { this._events.forEach((evt) => { this._instance[evt.name] = evt; + this._instance[evt.signature] = evt; }); + this._functions.forEach((fn) => { this._instance[fn.name] = fn; + this._instance[fn.signature] = fn; }); this._sendSubscriptionChanges(); diff --git a/js/src/api/contract/contract.spec.js b/js/src/api/contract/contract.spec.js index 3d57c2afa..9c08024a9 100644 --- a/js/src/api/contract/contract.spec.js +++ b/js/src/api/contract/contract.spec.js @@ -20,6 +20,7 @@ import sinon from 'sinon'; import { TEST_HTTP_URL, mockHttp } from '../../../test/mockRpc'; import Abi from '../../abi'; +import { sha3 } from '../util/sha3'; import Api from '../api'; import Contract from './contract'; @@ -113,7 +114,13 @@ describe('api/contract/Contract', () => { ]); contract.at('6789'); - expect(Object.keys(contract.instance)).to.deep.equal(['Drained', 'balanceOf', 'address']); + expect(Object.keys(contract.instance)).to.deep.equal([ + 'Drained', + /^(?:0x)(.+)$/.exec(sha3('Drained(uint256)'))[1], + 'balanceOf', + /^(?:0x)(.+)$/.exec(sha3('balanceOf(address)'))[1].substr(0, 8), + 'address' + ]); expect(contract.address).to.equal('6789'); }); }); diff --git a/js/src/views/Contract/Queries/inputQuery.js b/js/src/views/Contract/Queries/inputQuery.js index 94c569412..6c4e22039 100644 --- a/js/src/views/Contract/Queries/inputQuery.js +++ b/js/src/views/Contract/Queries/inputQuery.js @@ -33,6 +33,7 @@ export default class InputQuery extends Component { inputs: PropTypes.array.isRequired, outputs: PropTypes.array.isRequired, name: PropTypes.string.isRequired, + signature: PropTypes.string.isRequired, className: PropTypes.string } @@ -177,7 +178,7 @@ export default class InputQuery extends Component { onClick = () => { const { values } = this.state; - const { inputs, contract, name, outputs } = this.props; + const { inputs, contract, name, outputs, signature } = this.props; this.setState({ isLoading: true, @@ -187,7 +188,7 @@ export default class InputQuery extends Component { const inputValues = inputs.map(input => values[input.name]); contract - .instance[name] + .instance[signature] .call({}, inputValues) .then(results => { if (outputs.length === 1) { diff --git a/js/src/views/Contract/Queries/queries.js b/js/src/views/Contract/Queries/queries.js index b880140ef..47af3d45f 100644 --- a/js/src/views/Contract/Queries/queries.js +++ b/js/src/views/Contract/Queries/queries.js @@ -70,7 +70,7 @@ export default class Queries extends Component { } renderInputQuery (fn) { - const { abi, name } = fn; + const { abi, name, signature } = fn; const { contract } = this.props; return ( @@ -80,6 +80,7 @@ export default class Queries extends Component { inputs={ abi.inputs } outputs={ abi.outputs } name={ name } + signature={ signature } contract={ contract } />