-
Notifications
You must be signed in to change notification settings - Fork 45
/
contract.js
114 lines (98 loc) · 3.19 KB
/
contract.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import {
Client, LocalAddress, CryptoUtils, LoomProvider
} from 'loom-js'
import BN from 'bn.js'
import Web3 from 'web3'
import SimpleStore from './contracts/SimpleStore.json'
export default class Contract {
async loadContract() {
this.onEvent = null
this._createClient()
this._createCurrentUserAddress()
this._createWebInstance()
await this._createContractInstance()
}
_createClient() {
this.privateKey = CryptoUtils.generatePrivateKey()
this.publicKey = CryptoUtils.publicKeyFromPrivateKey(this.privateKey)
let writeUrl = 'ws://127.0.0.1:46658/websocket'
let readUrl = 'ws://127.0.0.1:46658/queryws'
let networkId = 'default'
if (process.env.NETWORK == 'extdev') {
writeUrl = 'ws://extdev-plasma-us1.dappchains.com:80/websocket'
readUrl = 'ws://extdev-plasma-us1.dappchains.com:80/queryws'
networkId = 'extdev-plasma-us1'
}
this.client = new Client(networkId, writeUrl, readUrl)
this.client.on('error', msg => {
console.error('Error on connect to client', msg)
console.warn('Please verify if loom command is running')
})
}
_createCurrentUserAddress() {
this.currentUserAddress = LocalAddress.fromPublicKey(this.publicKey).toString()
}
_createWebInstance() {
this.web3 = new Web3(new LoomProvider(this.client, this.privateKey))
}
async _createContractInstance() {
const networkId = await this._getCurrentNetwork()
this.currentNetwork = SimpleStore.networks[networkId]
if (!this.currentNetwork) {
throw Error('Contract not deployed on DAppChain')
}
const ABI = SimpleStore.abi
this.simpleStoreInstance = new this.web3.eth.Contract(ABI, this.currentNetwork.address, {
from: this.currentUserAddress
})
this.simpleStoreInstance.events.NewValueSet({ filter: { _value: 10 }}, (err, event) => {
if (err) console.error('Error on event', err)
else {
if (this.onEvent) {
this.onEvent(event.returnValues)
}
}
})
this.simpleStoreInstance.events.NewValueSetAgain({ filter: { _value: 47 }}, (err, event) => {
if (err) console.error('Error on event', err)
else {
setTimeout(() => alert("Loooomy help me :)"))
if (this.onEvent) {
this.onEvent(event.returnValues)
}
}
})
}
addEventListener(fn) {
this.onEvent = fn
}
_getCurrentNetwork() {
if (process.env.NETWORK == 'extdev') {
return '9545242630824'
}
else {
const web3 = new Web3()
const chainIdHash = web3.utils.soliditySha3(this.client.chainId)
.slice(2) // Removes 0x
.slice(0, 13) // Produces safe Number less than 9007199254740991
const chainId = new BN(chainIdHash).toString()
return chainId
}
}
async setValue(value) {
// Just a small test with Loomy
if (value == 47) {
return await this.simpleStoreInstance.methods.setAgain(value).send({
from: this.currentUserAddress
})
}
return await this.simpleStoreInstance.methods.set(value).send({
from: this.currentUserAddress
})
}
async getValue() {
return await this.simpleStoreInstance.methods.get().call({
from: this.currentUserAddress
})
}
}