diff --git a/allDeals.js b/allDeals.js index 60905e0..eb86dd3 100644 --- a/allDeals.js +++ b/allDeals.js @@ -98,7 +98,7 @@ var allDealsPage = function(){ $("#all_deals_div").show(); $("#all_deals_table").hide(); $("#all_deals_table_legend").hide(); - $("#all_deals_show_legend").click(toggleLegend); + $("#all_deals_show_legend").mouseover(toggleLegend); makeAllDealsTable(); }; diff --git a/dapp-styles/icons/style.css b/dapp-styles/icons/style.css index 018837d..451199b 100644 --- a/dapp-styles/icons/style.css +++ b/dapp-styles/icons/style.css @@ -253,7 +253,15 @@ a:focus { } .item-actions { - background-color: #fff; + background-color: #ffffcc; + color: #33383e; + border-radius: 20px; + display: inline-block; + padding: 0.5em; +} + +.item-todo-actions { + background-color: #ccccff; color: #33383e; border-radius: 20px; display: inline-block; @@ -269,7 +277,7 @@ a:focus { } .item-address { - background-color: #fff; + background-color: #ffffcc; color: #33383e; border-radius: 8px; display: inline-block; @@ -286,7 +294,7 @@ a:focus { } .item-new-deal { - background-color: #fff; + background-color: #ccccff; color: #33383e; border-radius: 20px; display: block; diff --git a/deals.js b/deals.js index 989d48e..37b8938 100644 --- a/deals.js +++ b/deals.js @@ -46,7 +46,7 @@ function NewDealUI(){ icon = "icon-hourglass"; } else{ - action = "Create New Mixing Deal"; + action = "Create New Mixing Deal (it is free)"; icon = "icon-star"; } @@ -151,7 +151,7 @@ function DealUI(deal){ } } - var string = " " + action +""; string = ""; diff --git a/events.js b/events.js index e5fe1d8..6874bc6 100644 --- a/events.js +++ b/events.js @@ -1,239 +1,312 @@ -var alertStatus = function(msg){ - $("#footer_status_msg").html(msg); - $("#footer_status_msg").show(); - $("#footer_status_msg").fadeOut(60000); // 1 minute +var alertStatus = function(msg) { + $("#footer_status_msg").html(msg); + $("#footer_status_msg").show(); + $("#footer_status_msg").fadeOut(60000); // 1 minute }; -var waitForEventConifrmFunc = function(event, tx, callback){ - event.watch(function(err, result){ - if(err) { callback(); return handleError(err); } - if(result.transactionHash === tx ) callback(result.args); - event.stopWatching(); +var waitForEventConifrmFunc = function(event, tx, callback) { + event.watch(function(err, result) { + if (err) { + callback(); + return handleError(err); + } + if (result.transactionHash === tx) callback(result.args); + event.stopWatching(function(){}); }); }; -var createNewDealFunc = function(){ +var createNewDealFunc = function() { var sender = getPublicAccount(); - - globalContractInstance.newDeal( dealParamsArray[0], - dealParamsArray[1], - dealParamsArray[2], - dealParamsArray[3], - dealParamsArray[4], - {from: sender}, - function( err, result ){ - if( err ) return handleError(err); - newDealUIInstance.clickStart(); - waitForEventConifrmFunc(globalContractInstance.NewDeal(), - result, - function(args){ - if( args._success ) alertStatus("New deal created"); - else alertStatus( "New deal failed: " + args._err ); - newDealUIInstance.clickEnd(); - }); - } ); + + globalContractInstance.newDeal(dealParamsArray[0], + dealParamsArray[1], + dealParamsArray[2], + dealParamsArray[3], + dealParamsArray[4], { + from: sender + }, + function(err, result) { + if (err) return handleError(err); + newDealUIInstance.clickStart(); + waitForEventConifrmFunc(globalContractInstance.NewDeal(), + result, + function(args) { + if (args._success) alertStatus("New deal created"); + else alertStatus("New deal failed: " + args._err); + newDealUIInstance.clickEnd(); + }); + }); }; -function listenToDeals(){ - var listenToEvent = function( event, eventType ){ - event.watch(function(err,result){ - if( err ) return handleError(err); - globalAllDeals.processDeal(eventType, result.args ); - }); +function listenToDeals() { + var listenToEvent = function(event, eventType) { + event.watch(function(err, result) { + if (err) return handleError(err); + globalAllDeals.processDeal(eventType, result.args); + }); }; - - listenToEvent( globalContractInstance.NewDeal(), "newDeal" ); - listenToEvent( globalContractInstance.Claim({_claimer: getPrivateAccount()}), "claim" ); - listenToEvent( globalContractInstance.Deposit({_depositor: getPublicAccount()}), "deposit" ); - listenToEvent( globalContractInstance.Withdraw({_withdrawer: getPrivateAccount()}), "withdraw" ); - listenToEvent( globalContractInstance.Withdraw({_withdrawer: getPublicAccount()}), "withdraw" ); + + listenToEvent(globalContractInstance.NewDeal(), "newDeal"); + listenToEvent(globalContractInstance.Claim({ + _claimer: getPrivateAccount() + }), "claim"); + listenToEvent(globalContractInstance.Deposit({ + _depositor: getPublicAccount() + }), "deposit"); + listenToEvent(globalContractInstance.Withdraw({ + _withdrawer: getPrivateAccount() + }), "withdraw"); + listenToEvent(globalContractInstance.Withdraw({ + _withdrawer: getPublicAccount() + }), "withdraw"); } -function getDeals(){ +function getDeals() { globalAllDeals = new Deals(); $("#before_load").show(); $("#after_load").hide(); - - var getAllEvents = function( newEvent, eventType, finalCallback ){ - newEvent.get(function(err,logs){ - if( err ) return handleError(err); - for( var logInd = 0 ; logInd < logs.length ; logInd++){ - globalAllDeals.processDeal(eventType, logs[logInd].args ); + + var getAllEvents = function(newEvent, eventType, finalCallback) { + newEvent.get(function(err, logs) { + if (err) return handleError(err); + for (var logInd = 0; logInd < logs.length; logInd++) { + globalAllDeals.processDeal(eventType, logs[logInd].args); } - newEvent.stopWatching(); + newEvent.stopWatching(function(){}); finalCallback(); }); }; - - var getPrivateWithdrawFunc = function(){ - getAllEvents( globalContractInstance.Withdraw({_withdrawer: getPrivateAccount()},{fromBlock: 0, toBlock: 'latest'}), "withdraw", function(){ + + var getPrivateWithdrawFunc = function() { + getAllEvents(globalContractInstance.Withdraw({ + _withdrawer: getPrivateAccount() + }, { + fromBlock: 0, + toBlock: 'latest' + }), "withdraw", function() { $("#before_load").hide(); $("#after_load").show(); // $("#relevant_deals_label").html("revelvant deals are loaded"); listenToDeals(); newDealUIInstance = new NewDealUI(); newDealUIInstance.makeUI(); - globalAllDeals.doneLoading = true; - }); + globalAllDeals.doneLoading = true; + }); }; - var getPublicWithdrawFunc = function(){ - getAllEvents(globalContractInstance.Withdraw({_withdrawer: getPublicAccount()},{fromBlock: 0, toBlock: 'latest'}), "withdraw",getPrivateWithdrawFunc); + var getPublicWithdrawFunc = function() { + getAllEvents(globalContractInstance.Withdraw({ + _withdrawer: getPublicAccount() + }, { + fromBlock: 0, + toBlock: 'latest' + }), "withdraw", getPrivateWithdrawFunc); }; - var getDepositFunc = function(){ - getAllEvents( globalContractInstance.Deposit({_depositor: getPublicAccount()},{fromBlock: 0, toBlock: 'latest'}), "deposit", getPublicWithdrawFunc); + var getDepositFunc = function() { + getAllEvents(globalContractInstance.Deposit({ + _depositor: getPublicAccount() + }, { + fromBlock: 0, + toBlock: 'latest' + }), "deposit", getPublicWithdrawFunc); }; - var getClaimFunction = function(){ - getAllEvents( globalContractInstance.Claim({_claimer: getPrivateAccount()},{fromBlock: 0, toBlock: 'latest'}), "claim", getDepositFunc); + var getClaimFunction = function() { + getAllEvents(globalContractInstance.Claim({ + _claimer: getPrivateAccount() + }, { + fromBlock: 0, + toBlock: 'latest' + }), "claim", getDepositFunc); }; - var getNewDealsFunction = function(){ - getAllEvents( globalContractInstance.NewDeal({},{fromBlock: 0, toBlock: 'latest'}), "newDeal", getClaimFunction); + var getNewDealsFunction = function() { + getAllEvents(globalContractInstance.NewDeal({}, { + fromBlock: 0, + toBlock: 'latest' + }), "newDeal", getClaimFunction); }; - getNewDealsFunction(); + + getNewDealsFunction(); } /////////////////////////////////////////////////////////////////////////////// -function listenToEnoughClaimsEvent(dealId){ - var event = globalContractInstance.EnoughClaims({_dealId: dealId},{fromBlock: 0, toBlock: 'latest'}); - event.get(function(err,logs){ - if( err ) return handleError(err); - var logSize = logs.length; - for( var logInd = 0 ; logInd < logs.length ; logInd++){ - globalAllDeals.processDeal("enoughClaims", logs[logInd].args ); - } - event.stopWatching(); - if( logSize > 0 ) return; - var listenEvent = globalContractInstance.EnoughClaims({_dealId: dealId},{fromBlock: 0, toBlock: 'latest'}); - listenEvent.watch(function(err,result){ - globalAllDeals.processDeal("enoughClaims", result.args ); - listenEvent.stopWatching(); // this is one time event - }); - +function listenToEnoughClaimsEvent(dealId) { + var event = globalContractInstance.EnoughClaims({ + _dealId: dealId + }, { + fromBlock: 0, + toBlock: 'latest' + }); + event.get(function(err, logs) { + if (err) return handleError(err); + var logSize = logs.length; + for (var logInd = 0; logInd < logs.length; logInd++) { + globalAllDeals.processDeal("enoughClaims", logs[logInd].args); + } + event.stopWatching(function(){}); + if (logSize > 0) return; + var listenEvent = globalContractInstance.EnoughClaims({ + _dealId: dealId + }, { + fromBlock: 0, + toBlock: 'latest' + }); + listenEvent.watch(function(err, result) { + globalAllDeals.processDeal("enoughClaims", result.args); + listenEvent.stopWatching(function(){}); // this is one time event + }); + }); } /////////////////////////////////////////////////////////////////////////////// -function listenToFullyFundedEvent(dealId){ - var event = globalContractInstance.DealFullyFunded({_dealId: dealId},{fromBlock: 0, toBlock: 'latest'}); - event.get(function(err,logs){ - if( err ) return handleError(err); - var logSize = logs.length; - for( var logInd = 0 ; logInd < logs.length ; logInd++){ - globalAllDeals.processDeal("fullyFunded", logs[logInd].args ); - } - event.stopWatching(); - if( logSize > 0 ) return; - var listenEvent = globalContractInstance.DealFullyFunded({_dealId: dealId},{fromBlock: 0, toBlock: 'latest'}); - listenEvent.watch(function(err,result){ - globalAllDeals.processDeal("fullyFunded", result.args ); - listenEvent.stopWatching(); // this is one time event - }); - +function listenToFullyFundedEvent(dealId) { + var event = globalContractInstance.DealFullyFunded({ + _dealId: dealId + }, { + fromBlock: 0, + toBlock: 'latest' + }); + event.get(function(err, logs) { + if (err) return handleError(err); + var logSize = logs.length; + for (var logInd = 0; logInd < logs.length; logInd++) { + globalAllDeals.processDeal("fullyFunded", logs[logInd].args); + } + event.stopWatching(function(){}); + if (logSize > 0) return; + var listenEvent = globalContractInstance.DealFullyFunded({ + _dealId: dealId + }, { + fromBlock: 0, + toBlock: 'latest' + }); + listenEvent.watch(function(err, result) { + globalAllDeals.processDeal("fullyFunded", result.args); + listenEvent.stopWatching(function(){}); // this is one time event + }); + }); } /////////////////////////////////////////////////////////////////////////////// -function getActiveDealUI(event){ - +function getActiveDealUI(event) { + return globalAllDeals.getDealUI(event.currentTarget.id); } -var makeClaimFunc = function(event){ +var makeClaimFunc = function(event) { var sender = getPrivateAccount(); var dealUI = getActiveDealUI(event); var dealId = new BigNumber(dealUI.deal._dealId); - globalContractInstance.makeClaim( dealId, - {from: sender, value: dealDefaultParams._claimDepositInWei, gas: maxGas}, - function( err, result ){ - if( err ) return handleError(err); - dealUI.clickStart(); - waitForEventConifrmFunc(globalContractInstance.Claim({_dealId: dealId, _claimer: sender}), - result, - function(args){ - if( args._success ) alertStatus("Join deal completed"); - else alertStatus("Join deal failed: " + args._err ); - dealUI.clickEnd(); - } - ); - }); + globalContractInstance.makeClaim(dealId, { + from: sender, + value: dealDefaultParams._claimDepositInWei, + gas: maxGas + }, + function(err, result) { + if (err) return handleError(err); + dealUI.clickStart(); + waitForEventConifrmFunc(globalContractInstance.Claim({ + _dealId: dealId, + _claimer: sender + }), + result, + function(args) { + if (args._success) alertStatus("Join deal completed"); + else alertStatus("Join deal failed: " + args._err); + dealUI.clickEnd(); + } + ); + }); }; -var makeDepositFunc = function(event){ +var makeDepositFunc = function(event) { var sender = getPublicAccount(); var dealUI = getActiveDealUI(event); var dealId = new BigNumber(dealUI.deal._dealId); - globalContractInstance.makeDeposit( dealId, - {from: sender, value: dealDefaultParams._claimUnitValueInWei, gas: maxGas}, - function( err, result ){ - if( err ) return handleError(err); - dealUI.clickStart(); - waitForEventConifrmFunc(globalContractInstance.Deposit({_dealId: dealId, _depositor: sender}), - result, - function(args){ - if( args._success ) alertStatus("Make deposit completed"); - else alertStatus( "Deposit failed: " + args._err ); - dealUI.clickEnd(); - } - ); - }); + globalContractInstance.makeDeposit(dealId, { + from: sender, + value: dealDefaultParams._claimUnitValueInWei, + gas: maxGas + }, + function(err, result) { + if (err) return handleError(err); + dealUI.clickStart(); + waitForEventConifrmFunc(globalContractInstance.Deposit({ + _dealId: dealId, + _depositor: sender + }), + result, + function(args) { + if (args._success) alertStatus("Make deposit completed"); + else alertStatus("Deposit failed: " + args._err); + dealUI.clickEnd(); + } + ); + }); }; -var makeWithdrawFunc = function(event){ +var makeWithdrawFunc = function(event) { var publicSender = getPublicAccount(); var privateSender = getPrivateAccount(); - + var dealUI = getActiveDealUI(event); - var dealId = new BigNumber(dealUI.deal._dealId); + var dealId = new BigNumber(dealUI.deal._dealId); var deal = dealUI.deal; var sender; - if( deal.isPublicWithdraw()) sender = publicSender; + if (deal.isPublicWithdraw()) sender = publicSender; else sender = privateSender; - globalContractInstance.withdraw( dealId, - {from: sender, value: 0, gas: maxGas}, - function( err, result ){ - if( err ) return handleError(err); - dealUI.clickStart(); - waitForEventConifrmFunc(globalContractInstance.Withdraw({_dealId: dealId, _withdrawer: sender}), - result, - function(args){ - if( args._success ) alertStatus("Withdraw completed"); - else alertStatus( "Withdraw failed: " + args._err ); - dealUI.clickEnd(); - } - ); - }); + globalContractInstance.withdraw(dealId, { + from: sender, + value: 0, + gas: maxGas + }, + function(err, result) { + if (err) return handleError(err); + dealUI.clickStart(); + waitForEventConifrmFunc(globalContractInstance.Withdraw({ + _dealId: dealId, + _withdrawer: sender + }), + result, + function(args) { + if (args._success) alertStatus("Withdraw completed"); + else alertStatus("Withdraw failed: " + args._err); + dealUI.clickEnd(); + } + ); + }); }; -var selectAccountChange = function(){ - if( ( $('#secret_address').val() < 0 ) || ( $('#public_address').val() < 0) ){ +var selectAccountChange = function() { + if (($('#secret_address').val() < 0) || ($('#public_address').val() < 0)) { $("#before_load").hide(); - $("#after_load").hide(); + $("#after_load").hide(); return; } - + $('#secret_address').attr('disabled', true); $('#public_address').attr('disabled', true); - - - getDeals(); -}; -var getDealStatus = function(deal){ - globalContractInstance.dealStatus( new BigNumber(deal._dealId), - function( err, result ){ - if( err ) return handleError(err); - deal.status = new DealStatus(result[0], - result[1], - result[2], - result[3]); - }); + + getDeals(); }; +var getDealStatus = function(deal) { + globalContractInstance.dealStatus(new BigNumber(deal._dealId), + function(err, result) { + if (err) return handleError(err); + deal.status = new DealStatus(result[0], + result[1], + result[2], + result[3]); + }); +}; \ No newline at end of file diff --git a/globalParams.js b/globalParams.js index 69ae200..b3ee0a6 100644 --- a/globalParams.js +++ b/globalParams.js @@ -1,12 +1,14 @@ -var contractAddress = '0x5d7ed36a08c5ee76032d0759c51045e275ecadd0'; +var contractAddress = null; var contractAddressTestnet = '0x262f9ed983c644d7f05c11edea6957d2426f5246'; +var contractAddressMainnet = '0x6983a7dc794b2e4ce8f759a883840a04ae958152'; + var contractABI = [{"constant":false,"inputs":[{"name":"dealId","type":"uint256"}],"name":"makeDeposit","outputs":[{"name":"","type":"uint8"}],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"dealId","type":"uint256"}],"name":"makeClaim","outputs":[{"name":"","type":"uint8"}],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"dealId","type":"uint256"}],"name":"withdraw","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_dealId","type":"uint256"}],"name":"dealStatus","outputs":[{"name":"","type":"uint256[4]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_depositDurationInHours","type":"uint256"},{"name":"_claimDurationInHours","type":"uint256"},{"name":"_claimUnitValueInWei","type":"uint256"},{"name":"_claimDepositInWei","type":"uint256"},{"name":"_minNumClaims","type":"uint256"}],"name":"newDeal","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"inputs":[],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"_dealId","type":"uint256"},{"indexed":false,"name":"_startTime","type":"uint256"},{"indexed":false,"name":"_depositDurationInHours","type":"uint256"},{"indexed":false,"name":"_claimDurationInHours","type":"uint256"},{"indexed":false,"name":"_claimUnitValueInWei","type":"uint256"},{"indexed":false,"name":"_claimDepositInWei","type":"uint256"},{"indexed":false,"name":"_minNumClaims","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"},{"indexed":false,"name":"_err","type":"string"}],"name":"NewDeal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_claimer","type":"address"},{"indexed":true,"name":"_dealId","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"},{"indexed":false,"name":"_err","type":"string"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_depositor","type":"address"},{"indexed":true,"name":"_dealId","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"},{"indexed":false,"name":"_err","type":"string"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_withdrawer","type":"address"},{"indexed":true,"name":"_dealId","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_public","type":"bool"},{"indexed":false,"name":"_success","type":"bool"},{"indexed":false,"name":"_err","type":"string"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_dealId","type":"uint256"}],"name":"EnoughClaims","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_dealId","type":"uint256"}],"name":"DealFullyFunded","type":"event"}]; var globalWeb3; var globalContractInstance; var eventScope = {fromBlock: 0, toBlock: 'latest'}; -var claimSizeInWei = new BigNumber(1000 * 1000 * 1000); -var depositSizeInWei = new BigNumber(1000 * 1000 * 1000); var etherToWei = new BigNumber(1000000000000000000); +var claimSizeInWei = etherToWei; +var depositSizeInWei = claimSizeInWei.dividedBy(100); var depositSizeInEther = depositSizeInWei.dividedBy(etherToWei); var claimSizeInEther = claimSizeInWei.dividedBy(etherToWei); var maxGas = 500000; diff --git a/init.js b/init.js index b9b6315..0c90a5a 100644 --- a/init.js +++ b/init.js @@ -1,5 +1,15 @@ +var noClientError = function(){ + $("#before_load").html("

Could not find ethereum client

"); + alert("Could not find ethereum client"); + return -1; +}; + + window.addEventListener('load', function() { - +// must have: +// instructions +// change contract to give only half profit +// do about - write github md //function init() { // Checks Web3 support @@ -11,8 +21,10 @@ window.addEventListener('load', function() { } else if (typeof Web3 !== 'undefined') { // If there isn't then set a provider web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); - - } else if(typeof web3 == 'undefined' && typeof Web3 == 'undefined') { + if( ! web3.isConnected()) return noClientError(); + } else{ + return noClientError(); + // If there is neither then this isn't an ethereum browser document.getElementById("results").style.display = "none"; document.getElementById("see-results").style.display = "none"; @@ -25,15 +37,25 @@ window.addEventListener('load', function() { return; } globalWeb3 = web3; - var simplemixerContract = web3.eth.contract(contractABI); - globalContractInstance = simplemixerContract.at(contractAddressTestnet); - - var page = location.pathname.split("/").slice(-1); - if( page.toString() === "index.html" || page.toString() === ""){ - myDealsPage(); - } - else if( page.toString() === "alldeals.html" ){ - allDealsPage(); - } + globalWeb3.eth.getBlock(0, function(err, result){ + if( err ) return HandleError(err); + if( result.hash.toString() === "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3" ){ + // live + contractAddress = contractAddressMainnet; + } + else if( result.hash.toString() === "0x0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303"){ + // testnet + contractAddress = contractAddressTestnet; + } + + globalContractInstance = simplemixerContract.at(contractAddress); + var page = location.pathname.split("/").slice(-1); + if( page.toString() === "index.html" || page.toString() === ""){ + myDealsPage(); + } + else if( page.toString() === "alldeals.html" ){ + allDealsPage(); + } + }); }); \ No newline at end of file diff --git a/myDeals.js b/myDeals.js index 336c005..7ec7df0 100644 --- a/myDeals.js +++ b/myDeals.js @@ -1,10 +1,9 @@ var myDealsPage = function(){ - $("#my_deals_div").show(); - + $("#my_deals_div").show(); $("#before_load").hide(); $("#after_load").hide(); - $("#active_deals_title").html("Active Deals: " + claimSizeInEther.toString() + " Ether deposit, " + - depositSizeInEther.toString() + " Ether collateral"); + $("#active_deals_title").html("Active Deals:" + claimSizeInEther.toString() + " ETH deposit  " + + depositSizeInEther.toString() + " ETH collateral"); var accounts = web3.eth.accounts; @@ -20,7 +19,12 @@ var myDealsPage = function(){ $('#public_address').val(-1); $('#secret_address').on('change', selectAccountChange); - $('#public_address').on('change', selectAccountChange); + $('#public_address').on('change', selectAccountChange); }; + + + + +