-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdemo.js
More file actions
390 lines (306 loc) · 47 KB
/
Copy pathdemo.js
File metadata and controls
390 lines (306 loc) · 47 KB
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
// Copyright 2017 Zerocoin Electric Coin Company LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =================================
// START: Web3 deploy code
// =================================
var tracker = null;
var atumToken_abi = web3.eth.contract([{"constant": true,"inputs": [],"name": "name","outputs": [{"name": "","type": "string"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "v","type": "uint256"},{"name": "n","type": "uint256"}],"name": "rightShift","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [],"name": "totalSupply","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [{"name": "left","type": "bytes32"},{"name": "right","type": "bytes32"}],"name": "combine","outputs": [{"name": "","type": "bytes32"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "shieldedTxCapacity","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "target","type": "address"},{"name": "amount","type": "uint256"}],"name": "mint","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [],"name": "shieldedTransferCount","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [{"name": "cm","type": "bytes32"}],"name": "getWitness","outputs": [{"name": "","type": "uint256"},{"name": "","type": "bytes32[]"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "available","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "unshieldingCount","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "proof","type": "bytes"},{"name": "send_nf","type": "bytes32"},{"name": "cm","type": "bytes32"},{"name": "value","type": "uint64"}],"name": "shield","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": false,"inputs": [{"name": "v","type": "uint256"},{"name": "n","type": "uint256"}],"name": "leftShift","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [],"name": "capacity","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "proof","type": "bytes"},{"name": "anchor","type": "bytes32"},{"name": "spend_nf_1","type": "bytes32"},{"name": "spend_nf_2","type": "bytes32"},{"name": "send_nf_1","type": "bytes32"},{"name": "send_nf_2","type": "bytes32"},{"name": "cm_1","type": "bytes32"},{"name": "cm_2","type": "bytes32"}],"name": "shieldedTransfer","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [],"name": "shieldedTxAvailable","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "depth","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "getEmptyRoots","outputs": [{"name": "","type": "bytes32[]"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [{"name": "","type": "address"}],"name": "balanceOf","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "shieldingCount","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "proof","type": "bytes"},{"name": "spend_nf","type": "bytes32"},{"name": "cm","type": "bytes32"},{"name": "rt","type": "bytes32"},{"name": "value","type": "uint64"}],"name": "unshield","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [{"name": "cm","type": "bytes32"}],"name": "commitmentExists","outputs": [{"name": "","type": "bool"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "owner","outputs": [{"name": "","type": "address"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "size","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "cm","type": "bytes32"}],"name": "addCommitment","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [{"name": "depth","type": "uint256"}],"name": "getEmptyRoot","outputs": [{"name": "","type": "bytes32"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "recipient","type": "address"},{"name": "value","type": "uint256"}],"name": "transfer","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"constant": true,"inputs": [],"name": "balance","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [{"name": "cm","type": "bytes32"}],"name": "getLeafIndex","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "ZTOKEN_TREE_DEPTH","outputs": [{"name": "","type": "uint256"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [{"name": "index","type": "uint256"}],"name": "getCommitmentAtLeafIndex","outputs": [{"name": "","type": "bytes32"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": true,"inputs": [],"name": "root","outputs": [{"name": "","type": "bytes32"}],"payable": false,"type": "function","stateMutability": "view"},{"constant": false,"inputs": [{"name": "newOwner","type": "address"}],"name": "transferOwnership","outputs": [],"payable": false,"type": "function","stateMutability": "nonpayable"},{"inputs": [{"name": "initialSupply","type": "uint256"},{"name": "tokenName","type": "string"}],"payable": false,"type": "constructor","stateMutability": "nonpayable"},{"payable": false,"type": "fallback","stateMutability": "nonpayable"},{"anonymous": false,"inputs": [{"indexed": true,"name": "from","type": "address"},{"indexed": true,"name": "to","type": "address"},{"indexed": false,"name": "value","type": "uint256"}],"name": "LogTransfer","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"name": "to","type": "address"},{"indexed": false,"name": "amount","type": "uint256"}],"name": "LogMint","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"name": "from","type": "address"},{"indexed": false,"name": "value","type": "uint256"},{"indexed": false,"name": "uuid","type": "bytes32"}],"name": "LogShielding","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"name": "from","type": "address"},{"indexed": false,"name": "value","type": "uint256"},{"indexed": false,"name": "uuid","type": "bytes32"}],"name": "LogUnshielding","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"name": "from","type": "address"},{"indexed": false,"name": "uuid_1","type": "bytes32"},{"indexed": false,"name": "uuid_2","type": "bytes32"}],"name": "LogShieldedTransfer","type": "event"}]);
var code = '0x6060604052600060055534156200001257fe5b604051620033a4380380620033a4833981016040528080519060200190919080518201919050505b601d5b5b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6200008a6200057f565b809050604051809103906000f0801515620000a157fe5b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002819055508060020a60038190555062000111816200024464010000000002620020a1176401000000009004565b5b5081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160098190555080600890805190602001906200017692919062000590565b50620001816200057f565b809050604051809103906000f08015156200019857fe5b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050620006aa565b60006000600060010291506004805480600101828162000265919062000617565b916000526020600020900160005b8490919091509060001916905550600090505b60018303811015620002f557620002b28283620002fb6401000000000262000afc176401000000009004565b915060048054806001018281620002ca919062000617565b916000526020600020900160005b84909190915090600019169055505b808060010191505062000286565b5b505050565b60006200030762000646565b60006040604051805910620003195750595b908082528060200260200182016040525b509150600090505b6020811015620003bc5784816020811015156200034b57fe5b1a7f01000000000000000000000000000000000000000000000000000000000000000282828151811015156200037d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b808060010191505062000332565b600090505b60208110156200044e578381602081101515620003da57fe5b1a7f01000000000000000000000000000000000000000000000000000000000000000282602083018151811015156200040f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8080600101915050620003c1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633319f70b836000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200182810382528381815181526020019150805190602001908083836000831462000513575b8051825260208311156200051357602082019150602081019050602083039250620004ed565b505050905090810190601f168015620005405780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15156200055c57fe5b60325a03f115156200056a57fe5b5050506040518051905092505b505092915050565b604051610b31806200287383390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005d357805160ff191683800117855562000604565b8280016001018555821562000604579182015b8281111562000603578251825591602001919060010190620005e6565b5b5090506200061391906200065a565b5090565b815481835581811511620006415781836000526020600020918201910162000640919062000682565b5b505050565b602060405190810160405280600081525090565b6200067f91905b808211156200067b57600081600090555060010162000661565b5090565b90565b620006a791905b80821115620006a357600081600090555060010162000689565b5090565b90565b6121b980620006ba6000396000f30060606040523615610194576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101ad5780630af0b1321461024657806318160ddd146102835780631d48f5e9146102a957806334298c21146102f657806340c10f191461031c57806341a42bea1461035b57806347e722461461038157806348a0d7541461040f5780634e3cb2e9146104355780635967caa21461045b5780635ae60499146104e25780635cfc1a511461051f5780635e2aca56146105455780635f95f1d4146105fa578063631c56ef146106205780636def0cbe1461064657806370a08231146106bb5780637a14db1614610705578063835278b71461072b57806386307865146107bf5780638da5cb5b146107fb578063949d225d1461084d5780639f7ad1d114610873578063a06f097714610897578063a9059cbb146108d3578063b69ef8a814610912578063c8c5051514610938578063ce0a857214610970578063d0316c5014610996578063ebf0c717146109d2578063f2fde38b14610a00575b341561019c57fe5b6101ab5b6101a8610a36565b5b565b005b34156101b557fe5b6101bd610a3e565b604051808060200182810382528381815181526020019150805190602001908083836000831461020c575b80518252602083111561020c576020820191506020810190506020830392506101e8565b505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561024e57fe5b61026d6004808035906020019091908035906020019091905050610adc565b6040518082815260200191505060405180910390f35b341561028b57fe5b610293610af6565b6040518082815260200191505060405180910390f35b34156102b157fe5b6102d860048080356000191690602001909190803560001916906020019091905050610afc565b60405180826000191660001916815260200191505060405180910390f35b34156102fe57fe5b610306610d6f565b6040518082815260200191505060405180910390f35b341561032457fe5b610359600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610d8b565b005b341561036357fe5b61036b610eda565b6040518082815260200191505060405180910390f35b341561038957fe5b6103a3600480803560001916906020019091905050610ee0565b60405180838152602001806020018281038252838181518152602001915080519060200190602002808383600083146103fb575b8051825260208311156103fb576020820191506020810190506020830392506103d7565b505050905001935050505060405180910390f35b341561041757fe5b61041f610fc9565b6040518082815260200191505060405180910390f35b341561043d57fe5b610445610fd8565b6040518082815260200191505060405180910390f35b341561046357fe5b6104e0600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035600019169060200190919080356000191690602001909190803567ffffffffffffffff16906020019091905050610fde565b005b34156104ea57fe5b610509600480803590602001909190803590602001909190505061132e565b6040518082815260200191505060405180910390f35b341561052757fe5b61052f61133f565b6040518082815260200191505060405180910390f35b341561054d57fe5b6105f8600480803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919080356000191690602001909190803560001916906020019091908035600019169060200190919080356000191690602001909190803560001916906020019091908035600019169060200190919080356000191690602001909190505061134a565b005b341561060257fe5b61060a6116b3565b6040518082815260200191505060405180910390f35b341561062857fe5b6106306116c7565b6040518082815260200191505060405180910390f35b341561064e57fe5b6106566116d2565b60405180806020018281038252838181518152602001915080519060200190602002808383600083146106a8575b8051825260208311156106a857602082019150602081019050602083039250610684565b5050509050019250505060405180910390f35b34156106c357fe5b6106ef600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611735565b6040518082815260200191505060405180910390f35b341561070d57fe5b61071561174d565b6040518082815260200191505060405180910390f35b341561073357fe5b6107bd600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803560001916906020019091908035600019169060200190919080356000191690602001909190803567ffffffffffffffff16906020019091905050611753565b005b34156107c757fe5b6107e1600480803560001916906020019091905050611a79565b604051808215151515815260200191505060405180910390f35b341561080357fe5b61080b611aa3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561085557fe5b61085d611ac9565b6040518082815260200191505060405180910390f35b341561087b57fe5b610895600480803560001916906020019091905050611ad4565b005b341561089f57fe5b6108b56004808035906020019091905050611b5e565b60405180826000191660001916815260200191505060405180910390f35b34156108db57fe5b610910600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611b97565b005b341561091a57fe5b610922611d64565b6040518082815260200191505060405180910390f35b341561094057fe5b61095a600480803560001916906020019091905050611e23565b6040518082815260200191505060405180910390f35b341561097857fe5b610980611e5e565b6040518082815260200191505060405180910390f35b341561099e57fe5b6109b46004808035906020019091905050611e63565b60405180826000191660001916815260200191505060405180910390f35b34156109da57fe5b6109e2611e97565b60405180826000191660001916815260200191505060405180910390f35b3415610a0857fe5b610a34600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611eac565b005b60006000fd5b565b60088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ad45780601f10610aa957610100808354040283529160200191610ad4565b820191906000526020600020905b815481529060010190602001808311610ab757829003601f168201915b505050505081565b60008160020a83811515610aec57fe5b0490505b92915050565b60095481565b6000610b06612079565b60006040604051805910610b175750595b908082528060200260200182016040525b509150600090505b6020811015610bb6578481602081101515610b4757fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028282815181101515610b7857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8080600101915050610b30565b600090505b6020811015610c44578381602081101515610bd257fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028260208301815181101515610c0657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8080600101915050610bbb565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633319f70b836000604051602001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360008314610d06575b805182526020831115610d0657602082019150602081019050602083039250610ce2565b505050905090810190601f168015610d325780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610d4d57fe5b60325a03f11515610d5a57fe5b5050506040518051905092505b505092915050565b60006002610d7b61133f565b811515610d8457fe5b0490505b90565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de85760006000fd5b610e31600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611f4f565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e8060095482611f4f565b6009819055508173ffffffffffffffffffffffffffffffffffffffff167f9f494565851dbcb31fb5198ca217cda6833282fadb96ba9431bd19c82afc1dd3826040518082815260200191505060405180910390a25b5b5050565b600d5481565b6000610eea61208d565b60006000610ef661208d565b600060006000600660008a60001916600019168152602001908152602001600020549550610f2660008711611f7b565b600186039450600254604051805910610f3c5750595b908082528060200260200182016040525b50935060009250849150600090505b600254831015610fb757610f796001831884806001019550611f8c565b8482806001019350815181101515610f8d57fe5b906020019060200201906000191690816000191681525050610fb0826001610adc565b9150610f5c565b8484975097505b505050505050915091565b60006005546003540390505b90565b600c5481565b6110338167ffffffffffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f7b565b61105a60006010600086600019166000191681526020019081526020016000205414611f7b565b61106c61106683611a79565b15611f7b565b6111d0600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e088659e868686866000604051602001526040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001856000191660001916815260200184600019166000191681526020018367ffffffffffffffff1667ffffffffffffffff16815260200182810382528681815181526020019150805190602001908083836000831461116a575b80518252602083111561116a57602082019150602081019050602083039250611146565b505050905090810190601f1680156111965780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15156111b457fe5b60325a03f115156111c157fe5b50505060405180519050612048565b6111d982611ad4565b60016010600085600019166000191681526020019081526020016000208190555061124d600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548267ffffffffffffffff16612059565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fe98b540e92df7848084ffd671d0e51f24307beb49f2ab01e35bb695ceb8aba6782846040518082600019166000191681526020019150506040518091039020604051808367ffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a2600b600081548092919060010191905055505b50505050565b60008160020a830290505b92915050565b600060035490505b90565b61137160006010600087600019166000191681526020019081526020016000205414611f7b565b61139860006010600086600019166000191681526020019081526020016000205414611f7b565b6113bf60006010600089600019166000191681526020019081526020016000205414611f7b565b6113e660006010600088600019166000191681526020019081526020016000205414611f7b565b6113f86113f283611a79565b15611f7b565b61140a61140482611a79565b15611f7b565b6115a2600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663794f69e38a8a8a8a8a8a8a8a6000604051602001526040518963ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001896000191660001916815260200188600019166000191681526020018760001916600019168152602001866000191660001916815260200185600019166000191681526020018460001916600019168152602001836000191660001916815260200182810382528a818151815260200191508051906020019080838360008314611538575b80518252602083111561153857602082019150602081019050602083039250611514565b505050905090810190601f1680156115645780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b151561158657fe5b60325a03f1151561159357fe5b50505060405180519050612048565b6115ab82611ad4565b6115b481611ad4565b6001601060008660001916600019168152602001908152602001600020819055506001601060008560001916600019168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f0d3211cecea8fbffc05221205fa1aefe539b636c658a996a6cbc8729fe1ad00183604051808260001916600019168152602001915050604051809103902083604051808260001916600019168152602001915050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390a2600d600081548092919060010191905055505b5050505050505050565b6000600d546116c0610d6f565b0390505b90565b600060025490505b90565b6116da61208d565b600480548060200260200160405190810160405280929190818152602001828054801561172a57602002820191906000526020600020905b81546000191681526020019060010190808311611712575b505050505090505b90565b600a6020528060005260406000206000915090505481565b600b5481565b61177a60006010600087600019166000191681526020019081526020016000205414611f7b565b61178b61178684611a79565b611f7b565b611923600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb68ef7a87878633876000604051602001526040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001866000191660001916815260200185600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281038252878181518152602001915080519060200190808383600083146118bc575b8051825260208311156118bc57602082019150602081019050602083039250611898565b505050905090810190601f1680156118e85780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b151561190757fe5b60325a03f1151561191457fe5b50505060405180519050612048565b600160106000866000191660001916815260200190815260200160002081905550611997600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548267ffffffffffffffff16611f4f565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f77c10afc47cf7753a7d1b501cd07d1720103713089bf4f7ba501bebda81cd4b782856040518082600019166000191681526020019150506040518091039020604051808367ffffffffffffffff16815260200182600019166000191681526020019250505060405180910390a2600c600081548092919060010191905055505b5050505050565b6000600060066000846000191660001916815260200190815260200160002054141590505b919050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060055490505b90565b6000611afd60006006600085600019166000191681526020019081526020016000205414611f7b565b611b0c60035460055410611f7b565b60056000815460010191905081905590508060066000846000191660001916815260200190815260200160002081905550816007600083815260200190815260200160002081600019169055505b5050565b6000611b706004805490508310611f7b565b600482815481101515611b7f57fe5b906000526020600020900160005b505490505b919050565b611be281600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f7b565b611c2b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612059565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cb7600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611f4f565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0a85107a334eae0d22d21cdf13af0f8e8125039ec60baaa843d2c4c5b0680174836040518082815260200191505060405180910390a35b5050565b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611e0657fe5b60325a03f11515611e1357fe5b5050506040518051905090505b90565b60006000600660008460001916600019168152602001908152602001600020549050611e5160008211611f7b565b6001810191505b50919050565b601d81565b60006000611e746005548410611f7b565b600183019050600760008281526020019081526020016000205491505b50919050565b6000611ea66000600254611f8c565b90505b90565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f095760006000fd5b80600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b600060008284019050611f70848210158015611f6b5750838210155b612048565b8091505b5092915050565b801515611f885760006000fd5b5b50565b6000600060006000611f9e868661132e565b600554111515611fce57600485815481101515611fb757fe5b906000526020600020900160005b5054935061203f565b6000851415611ff8576001860192506007600084815260200190815260200160002054935061203f565b61200f61200687600161132e565b60018703611f8c565b915061202b600161202188600161132e565b0160018703611f8c565b90506120378282610afc565b935061203f565b5b50505092915050565b8015156120555760006000fd5b5b50565b6000600061206983851015612048565b82840390508091505b5092915050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b6000600060006001029150600480548060010182816120c0919061213c565b916000526020600020900160005b8490919091509060001916905550600090505b60018303811015612136576120f68283610afc565b91506004805480600101828161210c919061213c565b916000526020600020900160005b84909190915090600019169055505b80806001019150506120e1565b5b505050565b815481835581811511612163578183600052602060002091820191016121629190612168565b5b505050565b61218a91905b8082111561218657600081600090555060010161216e565b5090565b905600a165627a7a72305820dc9fc1e24c964629cf2bb2cc9b9e6448fc0dd2d91ccb55730d6c442248410efb00296060604052341561000c57fe5b5b618801600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550618802600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550618803600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550618804600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b610a078061012a6000396000f30060606040523615610060576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633319f70b14610079578063794f69e3146100c0578063e088659e1461015e578063eb68ef7a146101ce575b341561006857fe5b6100775b61007461025d565b5b565b005b341561008157fe5b6100a260048080359060200190820180359060200191909192905050610265565b60405180826000191660001916815260200191505060405180910390f35b34156100c857fe5b6101446004808035906020019082018035906020019190919290803560001916906020019091908035600019169060200190919080356000191690602001909190803560001916906020019091908035600019169060200190919080356000191690602001909190803560001916906020019091905050610346565b604051808215151515815260200191505060405180910390f35b341561016657fe5b6101b460048080359060200190820180359060200191909192908035600019169060200190919080356000191690602001909190803567ffffffffffffffff16906020019091905050610580565b604051808215151515815260200191505060405180910390f35b34156101d657fe5b61024360048080359060200190820180359060200191909192908035600019169060200190919080356000191690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803567ffffffffffffffff16906020019091905050610782565b604051808215151515815260200191505060405180910390f35b60006000fd5b565b6000610276604084849050146109b9565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a27652384846000604051602001526040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192508082843782019150509350505050602060405180830381600087803b151561032657fe5b60325a03f1151561033357fe5b5050506040518051905090505b92915050565b600060006000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635286a75b8d8d8d8d8d8d8d8d8d6000604051602001526040518a63ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001896000191660001916815260200188600019166000191681526020018760001916600019168152602001866000191660001916815260200185600019166000191681526020018460001916600019168152602001836000191660001916815260200182810382528b8b8281815260200192508082843782019150509a5050505050505050505050602060405180830381600087803b151561046c57fe5b60325a03f1151561047957fe5b50505060405180519050915081600060208110151561049457fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002905060007f010000000000000000000000000000000000000000000000000000000000000002817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561050f5760009250610571565b60017f010000000000000000000000000000000000000000000000000000000000000002817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156105655760019250610571565b5b61057060006109ca565b5b50509998505050505050505050565b600060006000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634e32026389898989896000604051602001526040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001856000191660001916815260200184600019166000191681526020018367ffffffffffffffff1667ffffffffffffffff168152602001828103825287878281815260200192508082843782019150509650505050505050602060405180830381600087803b151561067257fe5b60325a03f1151561067f57fe5b50505060405180519050915081600060208110151561069a57fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002905060007f010000000000000000000000000000000000000000000000000000000000000002817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156107155760009250610777565b60017f010000000000000000000000000000000000000000000000000000000000000002817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561076b5760019250610777565b5b61077660006109ca565b5b505095945050505050565b600060006000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330be923f8a8a8a8a8a8a6000604051602001526040518763ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001866000191660001916815260200185600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018367ffffffffffffffff1667ffffffffffffffff16815260200182810382528888828181526020019250808284378201915050975050505050505050602060405180830381600087803b15156108a857fe5b60325a03f115156108b557fe5b5050506040518051905091508160006020811015156108d057fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002905060007f010000000000000000000000000000000000000000000000000000000000000002817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561094b57600092506109ad565b60017f010000000000000000000000000000000000000000000000000000000000000002817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156109a157600192506109ad565b5b6109ac60006109ca565b5b50509695505050505050565b8015156109c65760006000fd5b5b50565b8015156109d75760006000fd5b5b505600a165627a7a723058205e0858bc113550796f33e84498c079ff12e84eef567dac0871a0a15e0e9cfbee0029'
// =================================
// END: Web3
// =================================
function _demo_create_atumToken(tokenName, initialSupply) {
// =================================
// START: Web3 deploy code
// =================================
//console.log("Deploying atumToken with bytecode ending with : " + code.substring((code.length-20), code.length ));
var atumToken = atumToken_abi.new(
initialSupply,
tokenName,
{
from: web3.eth.accounts[0],
data: code,
gas: '59700000' // changed
}, function (e, contract) {
console.log(e)
//console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
// =================================
// END: Web3 deploy code
// =================================
return atumToken;
}
function _demo_get_atumToken(a) {
return atumToken_abi.at(a)
}
function _demo_watch_events(c) {
var events = c.allEvents();
events.watch(function(error, result){
if (error) {
return error;
} else {
if (result.event =="LogShielding"){
if ((result.args.uuid in tracker.notes)) {
console.log("[*] Shielding added to z-contract.");
console.log("***************************************************************");
console.log("note uuid : " + result.args.uuid);
}
} else if (result.event =="LogUnshielding") {
if ((result.args.uuid in tracker.notes)) {
console.log("[*] Unshielding added to z-contract.");
console.log("***************************************************************");
var note = tracker.notes[result.args.uuid];
tracker.spent[note.uuid] = note;
delete (tracker.notes[note.uuid]);
}
} else if (result.event =="LogShieldedTransfer") {
web3.zsl.NoteDecrypt(tracker.keypair.a_sk,result.args.blob, function(err,result){
if (!err){
console.log("[*] Incoming funds! amount : " + result.value + " " + c.name());
console.log("***************************************************************");
var value = parseInt(result.value);
var cm = web3.zsl.getCommitment("0x"+result.out_rho_1, tracker.keypair.a_pk, value);
var note = {};
note.rho = "0x" + result.out_rho_1;
note.value = value;
note.ztoken = c.address;
note.uuid = web3.toHex(web3.sha3(cm, { encoding: 'hex' }));
tracker.notes[note.uuid] = note;
}
});
}
}
});
return true;
}
// Namespace for demo, using module pattern.
var demo = (function() {
return {
init: function(){
tracker = new ztracker() ;
console.log("Tracker successfully initialized.")
return tracker ;
},
demo_tracker : function(){
return
}
create_atumToken: function(tokenName, initialSupply) {
return _demo_create_atumToken(tokenName, initialSupply);
},
get_atumToken: function(a) {
return _demo_get_atumToken(a);
},
watch_events: function(c){
return _demo_watch_events(c);
},
};
})();
// Note tracker
function ztracker() {
this.keypair = zsl.GenerateZKeypair();
this.notes = {};
this.spent = {};
}
ztracker.prototype.shield = function (atumToken, value) {
var rho = zsl.getRandomness();
var pk = tracker.keypair.a_pk;
console.log("***************************************************************");
console.log("[*] Generating proof for shielding");
var start = new Date();
var result = zsl.createShielding(rho, pk, value);
var elapsed = new Date() - start;
console.log("[*] Generated in " + elapsed / 1000 + " secs");
var uuid = web3.toHex(web3.sha3(result.cm, { encoding: 'hex' }));
var events = atumToken.allEvents();
var note = {};
note.rho = rho;
note.value = value;
note.uuid = uuid;
note.atumToken = atumToken.address;
tracker.notes[uuid] = note;
atumToken.shield(result.proof, result.send_nf, result.cm, value, { from: eth.accounts[0], gas: 350000 });
return "Waiting for log event...";
}
ztracker.prototype.unshield = function (uuid) {
var note = tracker.notes[uuid];
var a = note.atumToken;
var atumToken = atumToken_abi.at(a);
var cm = zsl.getCommitment(note.rho, tracker.keypair.a_pk, note.value);
var witnesses = atumToken.getWitness(cm)
var treeIndex = parseInt(witnesses[0])
var authPath = witnesses[1]
console.log("***************************************************************");
console.log("[*] Generating proof for unshielding");
var start = new Date();
var result = zsl.createUnshielding(note.rho, tracker.keypair.a_sk, eth.accounts[0], note.value, treeIndex, authPath)
var elapsed = new Date() - start;
console.log("[*] Generated in " + elapsed / 1000 + " secs");
var rt = atumToken.root();
atumToken.unshield(result.proof, result.spend_nf, cm, rt, note.value, { from: eth.accounts[0], gas: 350000 })
return "Waiting for log event...";
}
ztracker.prototype.sendNote = function(atumToken, uuid, amount, shieldedAddress) {
var blob = null;
var empty_uncles = ["0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100", "0x8000000000000000000000000000000000000000000000000000000000000100"];
var note = tracker.notes[uuid];
if (note === undefined || note == null && typeof note !== 'object') {
console.log(" fatal error with note, skipping.");
return;
}
if (note.value < amount) {
console.log("Cannot transfer " + amount + " as note value of " + note.value + " is too small.");
return;
}
var pk = tracker.keypair.a_pk;
var sk = tracker.keypair.a_sk;
var change = note.value - amount;
var cm = web3.zsl.getCommitment(note.rho, pk, note.value);
var witnesses = atumToken.getWitness(cm);
var treeIndex = parseInt(witnesses[0]);
var authPath = witnesses[1];
var tmpKeypair = web3.zsl.GenerateZKeypair();
var out_rho_1 = web3.zsl.getRandomness();
var out_rho_2 = web3.zsl.getRandomness();
console.log("***************************************************************");
console.log("[*] Generating proof for shielded transfer");
var start = new Date();
web3.zsl.createShieldedTransfer(
note.rho,
sk,
note.value,
treeIndex,
authPath,
web3.zsl.getRandomness(),
tmpKeypair.a_sk,
0,
0,
empty_uncles,
out_rho_1,
shieldedAddress,
amount,
out_rho_2,
pk,
change,
function(error, result) {
if (!error) {
var elapsed = new Date() - start;
console.log("[*] Generated in " + elapsed / 1000 + " secs");
blob = result.blob;
var n1 = {};
n1.value = amount;
n1.rho = out_rho_1;
n1.uuid = web3.toHex(web3.sha3(result.out_cm_1, {
encoding: 'hex'
}));
n1.atumToken = atumToken.address;
console.log("[*] Recipient receives note of " + amount + " " + atumToken.name());
var n2 = {};
if (change > 0) {
n2.value = change;
n2.rho = out_rho_2;
n2.uuid = web3.toHex(web3.sha3(result.out_cm_2, {
encoding: 'hex'
}));
n2.atumToken = atumToken.address;
console.log("[*] Sender receives change of " + change + " " + atumToken.name());
}
console.log("[*] Submit shielded transfer to contract...");
var anchor = atumToken.root();
atumToken.shieldedTransfer(
result.proof, anchor,
result.in_spend_nf_1,
result.in_spend_nf_2,
result.out_send_nf_1,
result.out_send_nf_2,
result.out_cm_1,
result.out_cm_2,
blob, {
from: eth.accounts[0],
gas: 2470000
},
function(error, result) {
if (!error) {
var events = atumToken.allEvents();
events.watch(function (error, event) {
if (!error) {
var s = JSON.stringify(event.args);
if (event.event == 'LogShieldedTransfer' && event.args['uuid_1'] == n1.uuid ) {
console.log("[*] Shielded-transfer added to contract.");
console.log("***************************************************************");
tracker.spent[uuid] = note;
delete (tracker.notes[uuid]);
if ( change > 0) {
tracker.notes[n2.uuid] = n2;
}
events.stopWatching();
}
}
});
} else {
console.log(err);
}
});
} else {
console.log(error);
}
});
return "Waiting for log event...";
}
ztracker.prototype.list = function (atumToken, amount) {
var result = [];
var name = atumToken.name();
var addr = atumToken.address;
if (amount == undefined) {
amount = 0;
}
for (var uuid in this.notes) {
var note = this.notes[uuid];
if (addr == note.atumToken && (note.value >= amount)) {
result.push(note);
}
}
console.log("***************************************************************");
console.log("Found " + result.length + " " + name + " notes >= " + amount)
console.log(JSON.stringify(result, null, 4))
console.log("***************************************************************");
}
ztracker.prototype.balance = function (atumToken) {
var result = 0;
var name = atumToken.name();
var addr = atumToken.address;
for (var uuid in this.notes) {
var note = this.notes[uuid];
if (addr == note.atumToken) {
result += note.value;
}
}
console.log("***************************************************************");
console.log("Shielded balance of " + name + " = " + result);
console.log("***************************************************************");
}
// Basic persistence of tracker for demo purposes.
ztracker.prototype.load = function (filename) {
var result = JSON.parse(zsl.loadTracker(filename));
this.keypair = result.keypair;
this.notes = result.notes;
this.spent = result.spent;
return true;
}
// TODO: Post-demo, filename should be sanitized.
ztracker.prototype.save = function (filename) {
return zsl.saveTracker(filename, JSON.stringify(this))
}