UNPKG

happyucjs-lightwallet

Version:
179 lines (144 loc) 7.18 kB
<html> <body> <script src="../dist/lightwallet.min.js"></script> <script type="text/javascript" src="../node_modules/webu/dist/webu.js"></script> <script type="text/javascript" src="../node_modules/async/lib/async.js"></script> <script> var webu = new Webu(); var global_keystore; function setWebuProvider(keystore) { var webuProvider = new HookedWebuProvider({ host: "https://rinkeby.infura.io/", transaction_signer: keystore }); webu.setProvider(webuProvider); } function newAddresses(password) { if (password == '') { password = prompt('Enter password to retrieve addresses', 'Password'); } var numAddr = parseInt(document.getElementById('numAddr').value) global_keystore.keyFromPassword(password, function(err, pwDerivedKey) { global_keystore.generateNewAddress(pwDerivedKey, numAddr); var addresses = global_keystore.getAddresses(); document.getElementById('sendFrom').innerHTML = '' document.getElementById('functionCaller').innerHTML = '' for (var i=0; i<addresses.length; ++i) { document.getElementById('sendFrom').innerHTML += '<option value="' + addresses[i] + '">' + addresses[i] + '</option>' document.getElementById('functionCaller').innerHTML += '<option value="' + addresses[i] + '">' + addresses[i] + '</option>' } getBalances(); }) } function getBalances() { var addresses = global_keystore.getAddresses(); document.getElementById('addr').innerHTML = 'Retrieving addresses...' async.map(addresses, webu.huc.getBalance, function(err, balances) { async.map(addresses, webu.huc.getTransactionCount, function(err, nonces) { document.getElementById('addr').innerHTML = '' for (var i=0; i<addresses.length; ++i) { document.getElementById('addr').innerHTML += '<div>' + addresses[i] + ' (Bal: ' + (balances[i] / 1.0e18) + ' HUC, Nonce: ' + nonces[i] + ')' + '</div>' } }) }) } function setSeed() { var password = prompt('Enter Password to encrypt your seed', 'Password'); lightwallet.keystore.createVault({ password: password, seedPhrase: document.getElementById('seed').value, //random salt hdPathString: "m/0'/0'/0'" }, function (err, ks) { global_keystore = ks document.getElementById('seed').value = '' newAddresses(password); setWebuProvider(global_keystore); getBalances(); }) } function newWallet() { var extraEntropy = document.getElementById('userEntropy').value; document.getElementById('userEntropy').value = ''; var randomSeed = lightwallet.keystore.generateRandomSeed(extraEntropy); var infoString = 'Your new wallet seed is: "' + randomSeed + '". Please write it down on paper or in a password manager, you will need it to access your wallet. Do not let anyone see this seed or they can take your Huc. ' + 'Please enter a password to encrypt your seed while in the browser.' var password = prompt(infoString, 'Password'); lightwallet.keystore.createVault({ password: password, seedPhrase: randomSeed, //random salt hdPathString: "m/0'/0'/0'" }, function (err, ks) { global_keystore = ks newAddresses(password); setWebuProvider(global_keystore); getBalances(); }) } function showSeed() { var password = prompt('Enter password to show your seed. Do not let anyone else see your seed.', 'Password'); global_keystore.keyFromPassword(password, function(err, pwDerivedKey) { var seed = global_keystore.getSeed(pwDerivedKey); alert('Your seed is: "' + seed + '". Please write it down.'); }); } function sendHuc() { var fromAddr = document.getElementById('sendFrom').value var toAddr = document.getElementById('sendTo').value var valueHuc = document.getElementById('sendValueAmount').value var value = parseFloat(valueHuc)*1.0e18 var gasPrice = 18000000000 var gas = 50000 webu.huc.sendTransaction({from: fromAddr, to: toAddr, value: value, gasPrice: gasPrice, gas: gas}, function (err, txhash) { console.log('error: ' + err) console.log('txhash: ' + txhash) }) } function functionCall() { var fromAddr = document.getElementById('functionCaller').value var contractAddr = document.getElementById('contractAddr').value var abi = JSON.parse(document.getElementById('contractAbi').value) var contract = webu.huc.contract(abi).at(contractAddr) var functionName = document.getElementById('functionName').value var args = JSON.parse('[' + document.getElementById('functionArgs').value + ']') var valueHuc = document.getElementById('sendValueAmount').value var value = parseFloat(valueHuc)*1.0e18 var gasPrice = 50000000000 var gas = 4541592 args.push({from: fromAddr, value: value, gasPrice: gasPrice, gas: gas}) var callback = function(err, txhash) { console.log('error: ' + err) console.log('txhash: ' + txhash) } args.push(callback) contract[functionName].apply(this, args) } </script> <h1>LightWallet</h1> <h2>New Wallet</h2> <div><input type="text" id="userEntropy" placeholder="Type random text to generate entropy" size="80"></input><button onclick="newWallet()">Create New Wallet</button></div> <h2>Restore Wallet</h2> <div><input type="text" id="seed" value="" size="80"></input><button onclick="setSeed()">Restore wallet from Seed</button></div> <h2>Show Addresses</h2> <div>Show <input type="text" id="numAddr" size="5" value="3"></input> more address(es) <button onclick="newAddresses('')">Show</button></div> <div id="addr"></div> <div><button onClick='getBalances()'>Refresh</button></div> <h2>Send Huc</h2> <div>From: <select id="sendFrom"></select></div> <div>To: <input type="text" size="40" id="sendTo"></input></div> <div>Huc: <input type="text" id="sendValueAmount"></div> <div><button onclick="sendHuc()">Send Huc</button></div> <h2>Show Seed</h2> <button onclick="showSeed()">Show Seed</button> <h2>Function Call</h2> <div>Caller: <select id="functionCaller"></select></div> <div>Contract Address: <input type="text" size="40" id="contractAddr"></input></div> <div>Contract ABI: <input type="text" size="40" id="contractAbi"></input></div> <div>Function Name: <input type="text" size="20" id="functionName"></input></div> <div>Function Arguments: <input type="text" size="40" id="functionArgs"></input></div> <div>Value (Huc): <input type="text" id="sendValueAmount"></div> <div><button onclick="functionCall()">Call Function</button></div> </body> </html>