diff --git a/app/contract_client.js b/app/contract_client.js
new file mode 100644
index 0000000..8dd0fe7
--- /dev/null
+++ b/app/contract_client.js
@@ -0,0 +1,45 @@
+import {
+ NonceTxMiddleware, SignedTxMiddleware, Client,
+ Contract, Address, LocalAddress, CryptoUtils, LoomProvider
+} from 'loom-js'
+
+import Web3 from 'web3'
+
+export default class ContractClient {
+ constructor() {}
+
+ async createContract() {
+ const privateKey = CryptoUtils.generatePrivateKey()
+ const publicKey = CryptoUtils.publicKeyFromPrivateKey(privateKey)
+
+ const client = new Client(
+ 'default',
+ 'ws://127.0.0.1:46657/websocket',
+ 'ws://127.0.0.1:9999/queryws',
+ )
+
+ const from = LocalAddress.fromPublicKey(publicKey).toString()
+ const web3 = new Web3(new LoomProvider(client, privateKey))
+ const ABI = [{"constant":false,"inputs":[{"name":"_tileState","type":"string"}],"name":"SetTileMapState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GetTileMapState","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"state","type":"string"}],"name":"OnTileMapStateUpdate","type":"event"}]
+
+ const loomContractAddress = await client.getContractAddressAsync('TilesChain')
+ const contractAddress = CryptoUtils.bytesToHexAddr(loomContractAddress.local.bytes)
+
+ this.contract = new web3.eth.Contract(ABI, contractAddress, {from})
+
+ this.contract.events.OnTileMapStateUpdate({}, (err, event) => {
+ if (err) return;
+ if (this.onEvent) {
+ this.onEvent(event)
+ }
+ })
+ }
+
+ async setTileMapState(data) {
+ await this.contract.methods.SetTileMapState(data).send()
+ }
+
+ async getTileMapState() {
+ return await this.contract.methods.GetTileMapState().call()
+ }
+}
diff --git a/app/dapp.js b/app/dapp.js
index 0b630d7..778e67f 100644
--- a/app/dapp.js
+++ b/app/dapp.js
@@ -11,6 +11,7 @@ import Web3Render from './components/standard/Web3Render';
import fetchIdeas from './utils/fetchIdeas';
import { getPolls, omitPolls } from './utils/polls';
import DrawField from './components/draw/DrawField';
+import ContractClient from './contract_client'
window['SNT'] = SNT;
import './dapp.css';
@@ -28,13 +29,12 @@ class App extends React.Component {
EmbarkJS.onReady((err) => {
if (err) this.setState({ web3Provider: false });
else {
- this._getPolls();
+ //this.contractClient = new ContractClient()
this._setAccounts();
}
web3.eth.net.getId((err, netId) => {
//if (netId !== MAINNET) this.setState({ web3Provider: false})
})
- fetchIdeas().then(ideaSites => { this.setState({ ideaSites })});
})
}
@@ -42,14 +42,6 @@ class App extends React.Component {
this.setState({account: _account});
}
- _getPolls = async () => {
- this.setState({ loading: true })
- const { nPolls, poll } = PollManager.methods;
- const polls = await nPolls().call();
- if (polls) getPolls(polls, poll).then(omitPolls).then(rawPolls => { this.setState({ rawPolls, loading: false })});
- else this.setState({ rawPolls: [], loading: false });
- }
-
_setAccounts() {
const { fromWei } = web3.utils;
web3.eth.getAccounts(async (err, [address]) => {
@@ -58,50 +50,11 @@ class App extends React.Component {
})
}
- updatePoll = async (idPoll) => {
- const { poll, nPolls } = PollManager.methods;
- const { rawPolls } = this.state;
- const npolls = await nPolls().call();
- // This check needs to be done because of a bug in web3
- if (npolls !== rawPolls.length) return this._getPolls();
- const newPolls = [...rawPolls];
- const updatedPoll = await poll(idPoll).call();
- newPolls[idPoll] = { ...updatedPoll };
- this.setState({ rawPolls: newPolls });
- }
-
- appendToPoll = (idPoll, data) => {
- const { rawPolls } = this.state;
- const newPolls = [...rawPolls];
- newPolls[idPoll] = { ...newPolls[idPoll], ...data }
- this.setState({ rawPolls: newPolls });
- }
-
- setPollOrder = pollOrder => { this.setState({ pollOrder }) }
-
- _renderStatus(title, available) {
- let className = available ? 'pull-right status-online' : 'pull-right status-offline';
- return
- {title}
-
- ;
- }
-
render(){
- const { admin, web3Provider, loading } = this.state;
- const { _getPolls, updatePoll, setPollOrder, appendToPoll } = this;
- const toggleAdmin = () => this.setState({ admin: true });
- const votingContext = { getPolls: _getPolls, toggleAdmin, updatePoll, appendToPoll, setPollOrder, ...this.state };
+ const { web3Provider, loading } = this.state;
return (
- {false &&
-
- {admin ?
- :
- }
-
- }
);
}
diff --git a/package.json b/package.json
index 3fa941b..d4d8f04 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
"formik": "^0.11.11",
"jquery": "^3.3.1",
"lodash": "^4.17.10",
+ "loom-js": "^1.14.0",
"react": "^16.3.2",
"react-blockies": "^1.3.0",
"react-bootstrap": "^0.32.1",