forked from austintgriffith/dapparatus
-
Notifications
You must be signed in to change notification settings - Fork 2
/
contractloader.js
83 lines (83 loc) · 2.59 KB
/
contractloader.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
import React, { Component } from 'react';
import Blockies from 'react-blockies';
import deepmerge from 'deepmerge';
let defaultConfig = {}
defaultConfig.DEBUG = true;
defaultConfig.hide = true;
class ContractLoader extends Component {
constructor(props) {
super(props);
let config = defaultConfig
if(props.config) {
config = deepmerge(config, props.config)
}
this.state = {
config: config,
contracts: {}
}
}
contractLoader(contractName,customAddress){
let {require} = this.props
let {DEBUG} = this.state.config
let resultingContract
try{
let contractObject = {
address:require("contracts/"+contractName+".address.js"),
abi:require("contracts/"+contractName+".abi.js"),
blocknumber:require("contracts/"+contractName+".blocknumber.js"),
}
if(customAddress){
contractObject.address = customAddress
}
if(DEBUG) console.log("ContractLoader - Loading ",contractName,contractObject)
let contract = new this.props.web3.eth.Contract(contractObject.abi,contractObject.address)
resultingContract = contract.methods
resultingContract._blocknumber = contractObject.blocknumber
resultingContract._address = contractObject.address
resultingContract._abi = contractObject.abi
resultingContract._contract = contract
}catch(e){
console.log("ERROR LOADING CONTRACT "+contractName,e)
}
return resultingContract
}
componentDidMount(){
let {require} = this.props
let {DEBUG} = this.state.config
let contractList = require("contracts/contracts.js")
if(DEBUG) console.log("ContractLoader - Loading Contracts",contractList)
let contracts = {}
for(let c in contractList){
let contractName = contractList[c];
contracts[contractName] = this.contractLoader(contractName)
}
this.setState({contracts:contracts},()=>{
this.props.onReady(this.state.contracts,this.contractLoader.bind(this))
})
}
render(){
if(this.state.config.hide){
return false
} else {
let contractDisplay = []
if(this.state.contracts){
for(let c in this.state.contracts){
contractDisplay.push(
<div key={"contract"+c} style={{margin:5,padding:5}}>
{c} ({this.state.contracts[c]._address}) - #{this.state.contracts[c]._blocknumber}
</div>
)
}
}else{
contractDisplay = "Loading..."
}
return (
<div style={{padding:10}}>
<b>Contracts</b>
{contractDisplay}
</div>
)
}
}
}
export default ContractLoader;