From e1b02fa3e627ac8de267950fb14196c7e112233d Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 3 Oct 2019 11:45:49 -0400 Subject: [PATCH] supporting creating extendec contract object --- examples/react-example1/src/App.js | 7 ++++--- src/subspace.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/examples/react-example1/src/App.js b/examples/react-example1/src/App.js index 288486a..a4415ad 100644 --- a/examples/react-example1/src/App.js +++ b/examples/react-example1/src/App.js @@ -22,18 +22,19 @@ class App extends React.Component { await subspace.init(); Product = await ProductContract.getInstance(); - const rating$ = subspace.trackEvent(Product, "Rating").map("rating").pipe(map(x => parseInt(x))); + Product = subspace.contract(Product) + const rating$ = Product.trackEvent("Rating").map("rating").pipe(map(x => parseInt(x))); window.Product = Product; window.web3 = web3; this.setState({ - title: subspace.trackProperty(Product, "products", 0).map('title'), + title: Product.trackProperty("products", 0).map('title'), averageRating: rating$.pipe($average()), minRating: rating$.pipe($min()), maxRating: rating$.pipe($max()), last5Ratings: rating$.pipe($latest(5)), - balance: subspace.trackBalance(Product.options.address) + balance: Product.trackBalance() }); } diff --git a/src/subspace.js b/src/subspace.js index d92d50d..bb06ccc 100644 --- a/src/subspace.js +++ b/src/subspace.js @@ -49,6 +49,36 @@ export default class Subspace { }) } + contract(contractInstance) { + if (!contractInstance) { + throw new Error("please pass a contract instance to Subspace.contract()") + } + + console.dir(contractInstance) + + let address = (contractInstance.options && contractInstance.options.address) || contractInstance.address || contractInstance.deployedAddress; + let abi = (contractInstance.options && contractInstance.options.jsonInterface) || contractInstance.abi || contractInstance.abiDefinition; + let from = (contractInstance.options && contractInstance.options.from) || contractInstance.from || contractInstance.defaultAddress || this.web3.defaultAccount; + let gas = (contractInstance.options && contractInstance.options.gas) || contractInstance.gas || contractInstance.gas || "800000"; + + const SubspaceContract = new this.web3.Contract(abi, {from, gas}); + SubspaceContract.options.address = address; + + SubspaceContract.trackEvent = (eventName, filterConditionsOrCb) => { + return this.trackEvent(SubspaceContract, eventName, filterConditionsOrCb); + } + + SubspaceContract.trackProperty = (propName, methodArgs, callArgs) => { + return this.trackProperty(SubspaceContract, propName, methodArgs, callArgs); + } + + SubspaceContract.trackBalance = (erc20Address) => { + return this.trackBalance(SubspaceContract.options.address, erc20Address); + } + + return SubspaceContract; + } + // TODO: get contract abi/address instead trackEvent(contractInstance, eventName, filterConditionsOrCb) { let returnSub = this.eventSyncer.track(contractInstance, eventName, filterConditionsOrCb, this.latestBlockNumber - this.options.refreshLastNBlocks);