-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathdApp.html
159 lines (131 loc) · 12.6 KB
/
dApp.html
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<html>
<head>
<link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/doximity/vital/master/releases/v1.0.0/stylesheets/vital.min.css">
<script type="text/javascript" src="web3.min.js"></script>
<style type="text/css">
.hidden {
display: none;
}
</style>
</head>
<body class='components components_index'>
<div class="row">
<div class="section">
<h2>Token Crowdsale</h2>
<p>This is an example token crowdsale dApp.</p>
<h3>Token Address: <span id="contractAddress"></span></h3>
<hr />
<h1>Make Contribution</h1>
<blockquote>Contribute by buying a specific amount of tokens</blockquote>
<h2>Rate: <span id="tokenPrice"></span> tokens = 1 wei</h2>
<div class="row full-width-forms">
<div class="col-1-3 space">
<input id="contributeAmount" type="number" placeholder="Token Amount" />
</div>
<div class="col space"></div>
<div class="col" style="padding-top: 10px; padding-left: 20px; font-weight: bold">
cost: <span id="tokenCost"></span> wei
</div>
</div>
<div class="row">
<button id="contribute" class="btn solid blue">
Buy Tokens
</button>
</div>
<div id="contributionResponse" class="row hidden">
<br /><br />
<div class="row notice">
<div class="section" id="contributionResponse_body">
Your contribution is being processed...
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
// set my current account
var selectedAccount = '0x3364ed250ea774146a0fbbc1da0ffa6a81514ca7';
// set current provider
if(typeof window.web3 !== "undefined" && typeof window.web3.currentProvider !== "undefined") {
var web3 = new Web3(window.web3.currentProvider);
} else {
var web3 = new Web3();
}
var _price = 100;
var _initialAmount = 4500;
var crowdsaleInstance;
var Crowdsale = web3.eth.contract([{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"type":"function"},{"inputs":[{"name":"_price","type":"uint256"},{"name":"_initialAmount","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Contributed","type":"event"}]);
var bytecode = '6060604052604051604080610a36833981016040528080519060200190919080519060200190919050505b81600060005081905550806040516106ec8061014583390180828152602001915050604051809103906000f0600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff02191690830217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3083604051837c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750505060405180519060200150505b5050610205806108316000396000f360606040526040516020806106ec833981016040528080519060200190919050505b80600060005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005081905550806002600050819055505b5061067d8061006f6000396000f360606040523615610074576000357c010000000000000000000000000000000000000000000000000000000090048063095ea7b31461008157806318160ddd146100b657806323b872dd146100d957806370a0823114610117578063a9059cbb14610143578063dd62ed3e1461017857610074565b61007f5b610002565b565b005b6100a060048080359060200190919080359060200190919050506101ad565b6040518082815260200191505060405180910390f35b6100c36004805050610281565b6040518082815260200191505060405180910390f35b610101600480803590602001909190803590602001909190803590602001909190505061028a565b6040518082815260200191505060405180910390f35b61012d6004808035906020019091905050610496565b6040518082815260200191505060405180910390f35b61016260048080359060200190919080359060200190919050506104d4565b6040518082815260200191505060405180910390f35b6101976004808035906020019091908035906020019091905050610614565b6040518082815260200191505060405180910390f35b600081600160005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060008573ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905061027b565b92915050565b60026000505481565b600081600060005060008673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505410158015610324575081600160005060008673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060003373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505410155b80156103305750600082115b156104855781600060005060008573ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a381600060005060008673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282825054039250508190555081600160005060008673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060003373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505403925050819055506001905061048f5661048e565b6000905061048f565b5b9392505050565b6000600060005060008373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505490506104cf565b919050565b600081600060005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005054101580156105155750600082115b156106045781600060005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282825054039250508190555081600060005060008573ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061060e5661060d565b6000905061060e565b5b92915050565b6000600160005060008473ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005060008373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050549050610677565b929150505660606040523615610048576000357c010000000000000000000000000000000000000000000000000000000090048063a035b1fe1461017a578063fc0c546a1461019d57610048565b6101785b600034111561017557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336000600050543402604051837c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750505060405180519060200150507ffa35a310d7113dddce1c275da946348e9aaebf9050b00b372033c4d84b0bd6eb33346000600050543402604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b5b565b005b61018760048050506101d6565b6040518082815260200191505060405180910390f35b6101aa60048050506101df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006000505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156';
// get accounts
web3.eth.getAccounts(function(err, accounts){
if(err) console.log('Error getting accounts', err);
if(!accounts || accounts.length <= 0) {
console.log('No accounts!');
return;
}
// set selected account
selectedAccount = accounts[0];
});
var StandardToken = web3.eth.contract([{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_initialAmount","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]);
var standardTokenInstance = StandardToken.at('0x9d617660cc593b8bb7b061ad5218a54bc5bd53d0');
standardTokenInstance.balanceOf(selectedAccount, function(err, result){
console.log('Balance is: ', err, result)
});
// deploy your crowdsale contract
// uncomment this to deploy the crowdsale
/*crowdsaleInstance = Crowdsale.new(_price, _initialAmount,
{
from: selectedAccount,
data: bytecode,
gas: 3000000
}, function(e, contract){
console.log(e, contract);
if (typeof contract.address != 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
});*/
// setup crowdsale contract instance
var crowdsaleInstance = Crowdsale.at('0x5b2dd8986e1330ae6ace2d2ea490b6e907f71e67');
// get the token price and set in the UI
crowdsaleInstance.token(function(err, result){
document.querySelector("#contractAddress").innerHTML = result;
});
// get the token price and set in the UI
crowdsaleInstance.price(function(err, result){
document.querySelector("#tokenPrice").innerHTML = result.toString(10);
});
// add keyup listener to calc token price for amount
document.querySelector("#contributeAmount").addEventListener('keyup', function(event){
var value = parseInt(document.querySelector("#contributeAmount").value, 10) / 100;
if(value < 1 || isNaN(value))
document.querySelector("#tokenCost").innerHTML = 'buy more...';
else
document.querySelector("#tokenCost").innerHTML = value;
});
// add click for contribute button
document.querySelector("#contribute").addEventListener('click', function(){
// set the notice
document.querySelector("#contributionResponse").classList.remove("hidden");
// token amount and calc token value
var tokenAmount = parseInt(document.querySelector("#contributeAmount").value, 10);
var txValue = parseInt(tokenAmount / 100, 10);
// send Eth tx to crowdsale contract
web3.eth.sendTransaction({
from: selectedAccount,
gas: 3000000,
value: txValue,
to: crowdsaleInstance.address
}, function(err, result){
if(err)
document.querySelector("#contributionResponse_body").innerHTML = "There was an error processing your contribution: <br />" + String(err);
else
document.querySelector("#contributionResponse_body").innerHTML = "Your contribution is being processed... <br /><br /> Transaction Hash: " + result;
});
// listen for contribution in crowdsale contract
crowdsaleInstance.Contributed({_sender: selectedAccount}, function(err, result){
document.querySelector("#contributionResponse_body").innerHTML = "Your contribution has been processed! <br /><br /> Transaciton Hash: " + result.transactionHash;
});
});
</script>
</body>
</html>