def get(self): isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'HDForwarder documentation', 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('documentation.html') self.response.write(template.render(template_values))
def get(self): isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Distributer documentation', 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('documentation.html') self.response.write(template.render(template_values))
def get(self): parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Blockchaindata documentation', 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('documentation.html') self.response.write(template.render(template_values))
def get(self): error = '' isAdmin = False forwarderID = 0 forwarder = Forwarder(parent=forwarders_key()) if self.request.get('forwarderID'): try: forwarderID = int(self.request.get('forwarderID')) except ValueError: error = 'forwarderID must be an integer' if error == '': forwarder = Forwarder.get_by_id(forwarderID, parent=forwarders_key()) if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() if forwarderID == 0: forwarder.userID = users.get_current_user().user_id() forwarder.creator = users.get_current_user().nickname() forwarder.creatorEmail = users.get_current_user().email() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'url': url, 'url_linktext': url_linktext, 'forwarder': forwarder, 'forwarderID': forwarderID, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('forwarder.html') self.response.write(template.render(template_values))
def get(self): forwarderID = 0 status = 'All' if self.request.get('status') in ['Pending', 'Active', 'Disabled']: status = self.request.get('status') if status != 'All': forwarders_query = Forwarder.query( Forwarder.status == status).order(-Forwarder.date) else: forwarders_query = Forwarder.query().order(-Forwarder.date) forwarders = forwarders_query.fetch() isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'forwarders': forwarders, 'forwarderID': forwarderID, 'status': status, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('admin.html') self.response.write(template.render(template_values))
def get(self): parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Blockchaindata', 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): forwarderID = 0 status = 'All' if self.request.get('status') in ['Pending', 'Active', 'Disabled']: status = self.request.get('status') if status != 'All': forwarders_query = Forwarder.query(Forwarder.status == status).order(-Forwarder.date) else: forwarders_query = Forwarder.query().order(-Forwarder.date) forwarders = forwarders_query.fetch() isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'forwarders': forwarders, 'forwarderID': forwarderID, 'status': status, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('admin.html') self.response.write(template.render(template_values))
def get(self): isAdmin = False error = '' if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' distributerID = 0 distributer = Distributer(parent=distributers_key()) if self.request.get('distributerID'): try: distributerID = int(self.request.get('distributerID')) distributer = Distributer.get_by_id(distributerID, parent=distributers_key()) except ValueError: error = 'distributerID must be a integer' parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'distributer': distributer, 'distributerID': distributerID, 'url': url, 'url_linktext': url_linktext, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('editDistributer.html') self.response.write(template.render(template_values))
def get(self): error = '' parameters = Parameters.get_or_insert('DefaultConfig') self.address = '' self.regBlock = 0 distribution = [] if self.request.get('address') != '': address = self.request.get('address') if validAddress(address): self.address = self.request.get('address') else: error = "Invalid address: " + address if self.request.get('regBlock') != '': try: self.regBlock = int(self.request.get('regBlock')) except ValueError: error = "Block for SIL must be a positive integer" url = parameters.blockchaindataURL + '/latestBlock' try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} latestBlock = 0 if 'success' in data and data['success'] == 1: latestBlock = data['latestBlock']['height'] else: error = 'Unable to retrieve latest block' logging.error(error) self.block = 0 if self.request.get('block') != '': try: self.block = int(self.request.get('block')) except: error = "Block must be a positive integer" else: self.block = latestBlock hash = '' intHash = '' if latestBlock >= self.block and latestBlock > 0 and error == '': url = parameters.blockchaindataURL + '/block?block=' + str( self.block) try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} if 'success' in data and data['success'] == 1: hash = data['block']['hash'] intHash = int(hash, 16) else: error = 'Unable to retrieve hash' logging.error(error) self.xpub = '' if self.request.get('xpub') != '': xpub = self.request.get('xpub') if validXPUB(xpub): self.xpub = self.request.get('xpub') else: error = "Invalid XPUB key: " + xpub self.metric = 'SIL' if self.request.get('metric') != '' and self.request.get('metric') in [ 'LBL', 'LRL', 'LSL' ]: self.metric = self.request.get('metric') if self.address != '' and error == '': distribution = self.getDistribution(self.address, self.regBlock, self.xpub, self.metric) distribution = self.addCumulative(distribution) nDistribution = len(distribution) strFloat = '0.' for i in range(len(str(intHash)) - 1, -1, -1): strFloat += str(intHash)[i] rand = float(strFloat) winnerIndex = -1 winnerAddress = '' values = [] totalValue = 0 if nDistribution > 0 and latestBlock >= self.block: values = self.extractValues(distribution) totalValue = sum(values) winnerIndex = getWinnerIndex(rand, values) winnerAddress = distribution[winnerIndex][0] if self.request.get('format') == 'json' and error == '': self.response.write( json.dumps({ 'success': 1, 'winner': { 'distribution': distribution, 'winnerAddress': winnerAddress, 'winnerIndex': winnerIndex, 'intHash': intHash, 'random': rand, 'target': totalValue * rand } })) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Proportional Random', 'address': self.address, 'regBlock': self.regBlock, 'block': self.block, 'xpub': self.xpub, 'metric': self.metric, 'latestBlock': latestBlock, 'hash': hash, 'intHash': intHash, 'rand': rand, 'totalValue': totalValue, 'winnerIndex': winnerIndex, 'winnerAddress': winnerAddress, 'distribution': distribution, 'nDistribution': nDistribution, 'error': error, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): parameters = Parameters.get_or_insert('DefaultConfig') error = '' self.proposalAddress = '' if self.request.get('proposalAddress') != '': address = self.request.get('proposalAddress') if validAddress(address): self.proposalAddress = address else: error = "Invalid address: " + address url = parameters.blockchaindataURL + '/latestBlock' data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} latestBlock = 0 if 'success' in data and data['success'] == 1: latestBlock = data['latestBlock']['height'] else: error = 'Unable to retrieve latest block' proposalBlock = 0 if self.request.get('proposalBlock') != '': try: proposalBlock = int(self.request.get('proposalBlock')) except ValueError: error = "proposalBlock must be a positive integer" else: proposalBlock = latestBlock weights = '' if self.request.get('weights') in [ 'Value', 'Equal', 'SIL', 'LBL', 'LRL', 'LSL' ]: weights = self.request.get('weights') elif self.request.get('weights') != '': error = 'Incorrect weights' self.registrationAddress = '' if self.request.get('regAddress') != '': regAddress = self.request.get('regAddress') if validAddress(regAddress): self.registrationAddress = self.request.get('regAddress') else: error = "Invalid regAddress: " + regAddress self.registrationBlockHeight = latestBlock if self.request.get('regBlock') != '': try: self.registrationBlockHeight = int( self.request.get('regBlock')) except ValueError: error = "regBlock must be a positive integer" if self.registrationBlockHeight < 0: error = "regBlock must be a positive integer" self.registrationXPUB = '' if self.request.get('regXPUB') != '': regXPUB = self.request.get('regXPUB') if validXPUB(regXPUB): self.registrationXPUB = regXPUB else: error = "Invalid regXPUB: " + regXPUB self.weightValues = [] if weights == 'SIL' and self.registrationAddress != '' and self.registrationBlockHeight != 0: url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + self.registrationAddress + '&block=' + str( self.registrationBlockHeight) data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: error = 'Unable to retrieve SIL' if 'success' in data and data['success'] == 1: self.weightValues = data['SIL'] elif weights in [ 'LBL', 'LRL', 'LSL' ] and self.registrationAddress != '' and self.registrationBlockHeight != 0 and self.registrationXPUB != '': url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + self.registrationAddress + '&block=' + str( self.registrationBlockHeight ) + '&xpub=' + self.registrationXPUB + '&metric=' + weights data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: error = 'Unable to retrieve Linked values' if 'success' in data and data['success'] == 1: if weights == 'LBL': self.weightValues = data['LBL'] elif weights == 'LRL': self.weightValues = data['LRL'] elif weights == 'LSL': self.weightValues = data['LSL'] digits = 1 if self.request.get('digits') != '': try: digits = int(self.request.get('digits')) except ValueError: error = "Digits must be a positive integer" if digits <= 0: error = "Digits must be a positive integer" digits = 1 self.proposal = '' if self.request.get('proposal') != '': self.proposal = self.request.get('proposal') self.options = [] self.optionsDict = {} strOptions = '' if self.request.get('options') != '': strOptions = self.request.get('options') self.options = strOptions.split('|') i = 0 for option in self.options: self.optionsDict[str(i)] = option i += 1 TXS = [] if self.proposalAddress != '': url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.proposalAddress + '&block=' + str( proposalBlock) data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} if 'success' in data and data['success'] == 1: TXS = data['TXS'] else: error = 'Unable to retrieve transactions' votes = self.convertTXs2Votes(TXS, proposalBlock, digits) nVotes = len(votes) results = self.calcResults(votes, weights) nResults = len(results) rows = {} toggle = 'Odd' for option in sorted(results): rows[option] = toggle if toggle == 'Odd': toggle = 'Even' elif toggle == 'Even': toggle = 'Odd' proposalHash = getProposalHash(self.proposalAddress, self.proposal, strOptions) if self.request.get('format') == 'json' and error == '': response = {'success': 1} response['results'] = results response['options'] = self.optionsDict response['digits'] = digits response['block'] = proposalBlock if self.proposal != '': response['proposal'] = self.proposal if self.proposalAddress != '': response['proposalAddress'] = self.proposalAddress if self.registrationAddress != '': response['regAddress'] = self.registrationAddress if self.registrationBlockHeight != '': response['regBlock'] = self.registrationBlockHeight if self.registrationXPUB != '': response['regXPUB'] = self.registrationXPUB if weights != '': response['weights'] = weights response['proposalHash'] = proposalHash self.response.write(json.dumps(response)) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Bitvoter', 'proposalAddress': self.proposalAddress, 'proposalBlock': proposalBlock, 'regAddress': self.registrationAddress, 'regBlock': self.registrationBlockHeight, 'regXPUB': self.registrationXPUB, 'proposal': self.proposal, 'options': self.optionsDict, 'strOptions': strOptions, 'latestBlock': latestBlock, 'votes': votes, 'nVotes': nVotes, 'optionIDs': sorted(results, key=lambda x: int(x)), 'results': results, 'nResults': nResults, 'weights': weights, 'digits': digits, 'evenRow': 0, 'error': error, 'rows': rows, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): error = '' self.address = '' self.block = 0 SIL = [] if self.request.get('address') != '': self.address = self.request.get('address') if validAddress(self.address) or self.address == '': parameters = Parameters.get_or_insert('DefaultConfig') url = parameters.blockchaindataURL + '/latestBlock' try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} latestBlock = 0 if 'success' in data and data['success'] == 1: latestBlock = data['latestBlock']['height'] else: error = 'Unable to retrieve latest block' self.block = latestBlock if self.request.get('block') != '' and self.request.get( 'block') != '0': try: self.block = int(self.request.get('block')) except ValueError: self.block = 0 error = "block must be a positive integer" txs = [] if self.address != '' and self.block != 0: url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.address + '&block=' + str( self.block) try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} txs = [] if 'success' in data and data['success'] == 1: txs = data['TXS'] else: error = 'Unable to retrieve transactions' SIL = self.TXS2SIL(txs, self.block) else: error = 'Invalid address: ' + self.address if self.request.get('format') == 'json' and error == '': self.response.write(json.dumps({'success': 1, 'SIL': SIL})) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Simplified Inputs List', 'address': self.address, 'block': self.block, 'SIL': SIL, 'error': error, 'nSIL': len(SIL), 'totalReceived': self.totalReceived(SIL), 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): error = '' self.address = '' self.block = 0 SIL = [] if self.request.get('address') != '': self.address = self.request.get('address') if validAddress(self.address) or self.address == '': parameters = Parameters.get_or_insert('DefaultConfig') url = parameters.blockchaindataURL + '/latestBlock' try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} latestBlock = 0 if 'success' in data and data['success'] == 1: latestBlock = data['latestBlock']['height'] else: error = 'Unable to retrieve latest block' self.block = latestBlock if self.request.get('block') != '' and self.request.get('block') != '0': try: self.block = int(self.request.get('block')) except ValueError: self.block = 0 error = "block must be a positive integer" txs = [] if self.address != '' and self.block != 0: url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.address + '&block=' + str(self.block) try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} txs = [] if 'success' in data and data['success'] == 1: txs = data['TXS'] else: error = 'Unable to retrieve transactions' SIL = self.TXS2SIL(txs, self.block) else: error = 'Invalid address: ' + self.address if self.request.get('format') == 'json' and error == '': self.response.write(json.dumps({'success': 1, 'SIL': SIL})) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Simplified Inputs List', 'address': self.address, 'block': self.block, 'SIL': SIL, 'error': error, 'nSIL': len(SIL), 'totalReceived': self.totalReceived(SIL), 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): error = '' forwarderID = 0 LBL = [] LAL = [] beneficiaryAddress = '' beneficiaryBalance = 0 beneficiaryShare = 0 linkedAddress = '' forwardingAddress = '' forwardingAddressBalance = 0 forwardingAddressBeneficiary = '' forwardingBeneficiaryShare = 0 showWarning = True parameters = Parameters.get_or_insert('DefaultConfig') if self.request.get('forwarderID'): try: forwarderID = int(self.request.get('forwarderID')) except ValueError: error = 'forwarderID must be an integer' if error == '': forwarders = [ Forwarder.get_by_id(forwarderID, parent=forwarders_key()) ] url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + forwarders[ 0].address + '&xpub=' + forwarders[ 0].xpub + '&metric=LBL,LAL' ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) if 'success' in data and data['success'] == 1: LBL = data['LBL'] LAL = data['LAL'] if self.request.get('address'): address = self.request.get('address') totalShares = 0 for i in range(0, len(LAL)): totalShares += LBL[i][1] if LAL[i][0] == address: beneficiaryAddress = address beneficiaryBalance = LBL[i][1] linkedAddress = LAL[i][1] showWarning = False if LAL[i][1] == address: forwardingAddress = LAL[i][1] forwardingAddressBalance = LBL[i][1] forwardingAddressBeneficiary = LAL[i][0] showWarning = False if totalShares > 0: beneficiaryShare = beneficiaryBalance / float( totalShares) * 100 forwardingBeneficiaryShare = forwardingAddressBalance / float( totalShares) * 100 else: showWarning = False else: showWarning = False forwarders_query = Forwarder.query( Forwarder.visibility == 'Public', Forwarder.status == 'Active').order(-Forwarder.date) forwarders = forwarders_query.fetch() isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' if self.request.get('forwarderID') and self.request.get( 'format') == 'json': response = {'success': 1, 'forwarder': {}} if len(forwarders) == 1: forwarder = forwarders[0] tmpForwarder = {} tmpForwarder['ID'] = forwarder.key.id() tmpForwarder['Name'] = forwarder.name tmpForwarder['Address'] = forwarder.address tmpForwarder['Description'] = forwarder.description tmpForwarder['Creator'] = forwarder.creator tmpForwarder['CreatorEmail'] = forwarder.creatorEmail tmpForwarder['Youtube'] = forwarder.youtube tmpForwarder['Status'] = forwarder.status tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount tmpForwarder['FeeAddress'] = forwarder.feeAddress tmpForwarder['FeePercent'] = forwarder.feePercent tmpForwarder['MinimumAmount'] = forwarder.minimumAmount tmpForwarder['XPUB'] = forwarder.xpub tmpForwarder['Visibility'] = forwarder.visibility tmpForwarder['Date'] = int( time.mktime(forwarder.date.timetuple())) response['forwarder'] = tmpForwarder self.response.write(json.dumps(response)) elif not self.request.get('forwarderID') and self.request.get( 'format') == 'json': response = {'success': 1, 'forwarders': []} for forwarder in forwarders: tmpForwarder = {} tmpForwarder['ID'] = forwarder.key.id() tmpForwarder['Name'] = forwarder.name tmpForwarder['Address'] = forwarder.address tmpForwarder['Description'] = forwarder.description tmpForwarder['Creator'] = forwarder.creator tmpForwarder['CreatorEmail'] = forwarder.creatorEmail tmpForwarder['Youtube'] = forwarder.youtube tmpForwarder['Status'] = forwarder.status tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount tmpForwarder['FeeAddress'] = forwarder.feeAddress tmpForwarder['FeePercent'] = forwarder.feePercent tmpForwarder['MinimumAmount'] = forwarder.minimumAmount tmpForwarder['XPUB'] = forwarder.xpub tmpForwarder['Visibility'] = forwarder.visibility tmpForwarder['Date'] = int( time.mktime(forwarder.date.timetuple())) response['forwarders'].append(tmpForwarder) self.response.write(json.dumps(response)) else: template_values = { 'url': url, 'url_linktext': url_linktext, 'forwarders': forwarders, 'forwarderID': forwarderID, 'showWarning': showWarning, 'beneficiaryAddress': beneficiaryAddress, 'beneficiaryBalance': beneficiaryBalance, 'beneficiaryShare': '%.2f' % beneficiaryShare, 'linkedAddress': linkedAddress, 'forwardingAddress': forwardingAddress, 'forwardingAddressBalance': forwardingAddressBalance, 'forwardingAddressBeneficiary': forwardingAddressBeneficiary, 'forwardingBeneficiaryShare': '%.2f' % forwardingBeneficiaryShare, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), 'socialButtons': SOCIALBUTTONS_ENABLED, } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): self.address = '' self.block = 0 self.xpub = '' metrics = ['LBL'] #default metric(s) linkedAddresses = [] balances = [] error = '' if self.request.get('address') != '': address = self.request.get('address') if validAddress(address): self.address = address else: error = "Invalid address: " + address if self.request.get('xpub') != '': xpub = self.request.get('xpub') if validXPUB(xpub): self.xpub = xpub else: error = "Invalid XPUB key: " + xpub if self.request.get('block') != '': try: self.block = int(self.request.get('block')) except ValueError: error = "Block must be a positive integer" if self.request.get('metric') != '': metrics = str(self.request.get('metric')).split(",") SIL = [] data = {} if self.address != '' and self.xpub != '' and error == '': parameters = Parameters.get_or_insert('DefaultConfig') url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + self.address if self.block != 0: url += '&block=' + str(self.block) try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} if 'success' in data and data['success'] == 1: SIL = data['SIL'] linkedAddresses = self.getAddressesFromXPUB( self.xpub, len(SIL)) balances = self.getBalances(linkedAddresses) LAL = [] #Linked Address List LBL = [] #Linked Balance List LRL = [] #Linked Received List LSL = [] #Linked Sent List response = {} if self.request.get('format') == 'json' and error == '': for i in range(0, len(SIL)): if 'LAL' in metrics: LAL.append([SIL[i][0], linkedAddresses[i]]) if 'LBL' in metrics: LBL.append( [SIL[i][0], balances[linkedAddresses[i]]['balance']]) if 'LRL' in metrics: LRL.append( [SIL[i][0], balances[linkedAddresses[i]]['received']]) if 'LSL' in metrics: LSL.append( [SIL[i][0], balances[linkedAddresses[i]]['sent']]) if 'LAL' in metrics: response['LAL'] = LAL if 'LBL' in metrics: response['LBL'] = LBL if 'LRL' in metrics: response['LRL'] = LRL if 'LSL' in metrics: response['LSL'] = LSL response['success'] = 1 self.response.write(json.dumps(response)) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Blocklinker', 'data': data, 'address': self.address, 'xpub': self.xpub, 'block': self.block, 'SIL': SIL, 'error': error, 'nSIL': len(SIL), 'linkedAddresses': linkedAddresses, 'balances': balances, 'metric': metrics[0], 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): error = '' parameters = Parameters.get_or_insert('DefaultConfig') self.address = '' self.regBlock = 0 distribution = [] if self.request.get('address') != '': address = self.request.get('address') if validAddress(address): self.address = self.request.get('address') else: error = "Invalid address: " + address if self.request.get('regBlock') != '': try: self.regBlock = int(self.request.get('regBlock')) except ValueError: error = "Block for SIL must be a positive integer" url = parameters.blockchaindataURL + '/latestBlock' try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} latestBlock = 0 if 'success' in data and data['success'] == 1: latestBlock = data['latestBlock']['height'] else: error = 'Unable to retrieve latest block' logging.error(error) self.block = 0 if self.request.get('block') != '': try: self.block = int(self.request.get('block')) except: error = "Block must be a positive integer" else: self.block = latestBlock hash = '' intHash = '' if latestBlock >= self.block and latestBlock > 0 and error == '': url = parameters.blockchaindataURL + '/block?block=' + str(self.block) try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} if 'success' in data and data['success'] == 1: hash = data['block']['hash'] intHash = int(hash, 16) else: error = 'Unable to retrieve hash' logging.error(error) self.xpub = '' if self.request.get('xpub') != '': xpub = self.request.get('xpub') if validXPUB(xpub): self.xpub = self.request.get('xpub') else: error = "Invalid XPUB key: " + xpub self.metric = 'SIL' if self.request.get('metric') != '' and self.request.get('metric') in ['LBL', 'LRL', 'LSL']: self.metric = self.request.get('metric') if self.address != '' and error == '': distribution = self.getDistribution(self.address, self.regBlock, self.xpub, self.metric) distribution = self.addCumulative(distribution) nDistribution = len(distribution) strFloat = '0.' for i in range(len(str(intHash))-1, -1, -1): strFloat += str(intHash)[i] rand = float(strFloat) winnerIndex = -1 winnerAddress = '' values = [] totalValue = 0 if nDistribution > 0 and latestBlock >= self.block: values = self.extractValues(distribution) totalValue = sum(values) winnerIndex = getWinnerIndex(rand, values) winnerAddress = distribution[winnerIndex][0] if self.request.get('format') == 'json' and error == '': self.response.write(json.dumps({'success': 1, 'winner': {'distribution': distribution, 'winnerAddress': winnerAddress, 'winnerIndex': winnerIndex, 'intHash': intHash, 'random': rand, 'target': totalValue*rand}})) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Proportional Random', 'address': self.address, 'regBlock': self.regBlock, 'block': self.block, 'xpub': self.xpub, 'metric': self.metric, 'latestBlock': latestBlock, 'hash': hash, 'intHash': intHash, 'rand': rand, 'totalValue': totalValue, 'winnerIndex': winnerIndex, 'winnerAddress': winnerAddress, 'distribution': distribution, 'nDistribution': nDistribution, 'error': error, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): parameters = Parameters.get_or_insert('DefaultConfig') error = '' self.proposalAddress = '' if self.request.get('proposalAddress') != '': address = self.request.get('proposalAddress') if validAddress(address): self.proposalAddress = address else: error = "Invalid address: " + address url = parameters.blockchaindataURL + '/latestBlock' data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} latestBlock = 0 if 'success' in data and data['success'] == 1: latestBlock = data['latestBlock']['height'] else: error = 'Unable to retrieve latest block' proposalBlock = 0 if self.request.get('proposalBlock') != '': try: proposalBlock = int(self.request.get('proposalBlock')) except ValueError: error = "proposalBlock must be a positive integer" else: proposalBlock = latestBlock weights = '' if self.request.get('weights') in ['Value', 'Equal', 'SIL', 'LBL', 'LRL', 'LSL']: weights = self.request.get('weights') elif self.request.get('weights') != '': error = 'Incorrect weights' self.registrationAddress = '' if self.request.get('regAddress') != '': regAddress = self.request.get('regAddress') if validAddress(regAddress): self.registrationAddress = self.request.get('regAddress') else: error = "Invalid regAddress: " + regAddress self.registrationBlockHeight = latestBlock if self.request.get('regBlock') != '': try: self.registrationBlockHeight = int(self.request.get('regBlock')) except ValueError: error = "regBlock must be a positive integer" if self.registrationBlockHeight < 0: error = "regBlock must be a positive integer" self.registrationXPUB = '' if self.request.get('regXPUB') != '': regXPUB = self.request.get('regXPUB') if validXPUB(regXPUB): self.registrationXPUB = regXPUB else: error = "Invalid regXPUB: " + regXPUB self.weightValues = [] if weights == 'SIL' and self.registrationAddress != '' and self.registrationBlockHeight != 0: url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + self.registrationAddress + '&block=' + str(self.registrationBlockHeight) data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: error = 'Unable to retrieve SIL' if 'success' in data and data['success'] == 1: self.weightValues = data['SIL'] elif weights in ['LBL', 'LRL', 'LSL'] and self.registrationAddress != '' and self.registrationBlockHeight != 0 and self.registrationXPUB != '': url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + self.registrationAddress + '&block=' + str(self.registrationBlockHeight) + '&xpub=' + self.registrationXPUB + '&metric=' + weights data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: error = 'Unable to retrieve Linked values' if 'success' in data and data['success'] == 1: if weights == 'LBL': self.weightValues = data['LBL'] elif weights == 'LRL': self.weightValues = data['LRL'] elif weights == 'LSL': self.weightValues = data['LSL'] digits = 1 if self.request.get('digits') != '': try: digits = int(self.request.get('digits')) except ValueError: error = "Digits must be a positive integer" if digits <= 0: error = "Digits must be a positive integer" digits = 1 self.proposal = '' if self.request.get('proposal') != '': self.proposal = self.request.get('proposal') self.options = [] self.optionsDict = {} strOptions = '' if self.request.get('options') != '': strOptions = self.request.get('options') self.options = strOptions.split('|') i = 0 for option in self.options: self.optionsDict[str(i)] = option i += 1 TXS = [] if self.proposalAddress != '': url = parameters.blockchaindataURL + '/transactions?format=json&address=' + self.proposalAddress + '&block=' + str(proposalBlock) data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} if 'success' in data and data['success'] == 1: TXS = data['TXS'] else: error = 'Unable to retrieve transactions' votes = self.convertTXs2Votes(TXS, proposalBlock, digits) nVotes = len(votes) results = self.calcResults(votes, weights) nResults = len(results) rows = {} toggle = 'Odd' for option in sorted(results): rows[option] = toggle if toggle == 'Odd': toggle = 'Even' elif toggle == 'Even': toggle = 'Odd' proposalHash = getProposalHash(self.proposalAddress, self.proposal, strOptions) if self.request.get('format') == 'json' and error == '': response = {'success': 1} response['results'] = results response['options'] = self.optionsDict response['digits'] = digits response['block'] = proposalBlock if self.proposal != '': response['proposal'] = self.proposal if self.proposalAddress != '': response['proposalAddress'] = self.proposalAddress if self.registrationAddress != '': response['regAddress'] = self.registrationAddress if self.registrationBlockHeight != '': response['regBlock'] = self.registrationBlockHeight if self.registrationXPUB != '': response['regXPUB'] = self.registrationXPUB if weights != '': response['weights'] = weights response['proposalHash'] = proposalHash self.response.write(json.dumps(response)) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Bitvoter', 'proposalAddress': self.proposalAddress, 'proposalBlock': proposalBlock, 'regAddress': self.registrationAddress, 'regBlock': self.registrationBlockHeight, 'regXPUB': self.registrationXPUB, 'proposal': self.proposal, 'options': self.optionsDict, 'strOptions': strOptions, 'latestBlock': latestBlock, 'votes': votes, 'nVotes': nVotes, 'optionIDs': sorted(results , key=lambda x: int(x)), 'results': results, 'nResults': nResults, 'weights': weights, 'digits': digits, 'evenRow': 0, 'error': error, 'rows': rows, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): error = '' self.address = '' self.resultsURL = '/results?' if self.request.get('address') != '': address = self.request.get('address') if validAddress(address): self.address = address self.resultsURL += 'proposalAddress=' + self.address else: error = "Invalid address: " + address self.proposal = '' if self.request.get('proposal') != '': self.proposal = self.request.get('proposal') self.resultsURL += '&proposal=' + self.proposal self.options = [] strOptions = '' if self.request.get('options') != '': strOptions = self.request.get('options') self.options = strOptions.split('|') self.resultsURL += '&options=' + self.request.get('options') self.cost = 50000 #default cost to cast a vote in Satoshis if self.request.get('cost') != '': try: self.cost = int(self.request.get('cost')) self.resultsURL += '&cost=' + str(self.cost) except ValueError: error = "cost must be a positive integer" if self.cost <= 0: error = "cost must be a positive integer" self.digits = 1 if self.request.get('digits') != '': try: self.digits = int(self.request.get('digits')) self.resultsURL += '&digits=' + str(self.digits) except ValueError: error = "Digits must be a positive integer" if self.digits <= 0: error = "Digits must be a positive integer" self.weights = 'Value' if self.request.get('weights') in [ "Equal", "Value", "SIL", "LBL", "LRL", "LSL" ]: self.weights = self.request.get('weights') self.resultsURL += '&weights=' + self.weights self.registrationAddress = '' if self.request.get('regAddress') != '': regAddress = self.request.get('regAddress') if validAddress(regAddress): self.registrationAddress = regAddress self.resultsURL += '®Address=' + self.registrationAddress self.registrationXPUB = '' if self.request.get('regXPUB') != '': regXPUB = self.request.get('regXPUB') if validXPUB(regXPUB): self.registrationXPUB = self.request.get('regXPUB') self.resultsURL += '®XPUB=' + self.registrationXPUB self.registrationBlock = 0 if self.request.get('regBlock') != '': try: self.registrationBlock = int(self.request.get('regBlock')) self.resultsURL += '®Block=' + str(self.registrationBlock) except ValueError: error = "regBlock must be a positive integer" if self.registrationBlock < 0: error = "regBlock must be a positive integer" rows = {} amounts = {} for i in range(0, len(self.options)): amounts[self.options[i]] = (self.cost + i) / 1e8 if i % 2 == 0: rows[self.options[i]] = 'Even' else: rows[self.options[i]] = 'Odd' proposalHash = getProposalHash(self.address, self.proposal, strOptions) if self.request.get('format') == 'json' and error == '': proposal = {} proposal['address'] = self.address proposal['proposal'] = self.proposal proposal['options'] = getOptions(self.address, self.options, self.cost) proposal['cost'] = self.cost proposal['digits'] = self.digits if self.weights != '': proposal['weights'] = self.weights if self.registrationAddress != '': proposal['regAddress'] = self.registrationAddress if self.registrationXPUB != '': proposal['regXPUB'] = self.registrationXPUB if self.registrationBlock != 0: proposal['regBlock'] = self.registrationBlock proposal['proposalHash'] = proposalHash self.response.write( json.dumps({ 'success': 1, 'proposal': proposal })) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Proposal', 'address': self.address, 'proposal': self.proposal, 'proposalHash': proposalHash, 'cost': self.cost, 'digits': self.digits, 'options': getOptions(self.address, self.options, self.cost), 'weights': self.weights, 'regAddress': self.registrationAddress, 'regXPUB': self.registrationXPUB, 'regBlock': self.registrationBlock, 'error': error, 'resultsURL': self.resultsURL, 'nOptions': len(self.options), 'amounts': amounts, 'rows': rows, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('proposal.html') self.response.write(template.render(template_values))
def get(self): error = '' self.address = '' self.resultsURL = '/results?' if self.request.get('address') != '': address = self.request.get('address') if validAddress(address): self.address = address self.resultsURL += 'proposalAddress=' + self.address else: error = "Invalid address: " + address self.proposal = '' if self.request.get('proposal') != '': self.proposal = self.request.get('proposal') self.resultsURL += '&proposal=' + self.proposal self.options = [] strOptions = '' if self.request.get('options') != '': strOptions = self.request.get('options') self.options = strOptions.split('|') self.resultsURL += '&options=' + self.request.get('options') self.cost = 50000 #default cost to cast a vote in Satoshis if self.request.get('cost') != '': try: self.cost = int(self.request.get('cost')) self.resultsURL += '&cost=' + str(self.cost) except ValueError: error = "cost must be a positive integer" if self.cost <= 0: error = "cost must be a positive integer" self.digits = 1 if self.request.get('digits') != '': try: self.digits = int(self.request.get('digits')) self.resultsURL += '&digits=' + str(self.digits) except ValueError: error = "Digits must be a positive integer" if self.digits <= 0: error = "Digits must be a positive integer" self.weights = 'Value' if self.request.get('weights') in ["Equal", "Value", "SIL", "LBL", "LRL", "LSL"]: self.weights = self.request.get('weights') self.resultsURL += '&weights=' + self.weights self.registrationAddress = '' if self.request.get('regAddress') != '': regAddress = self.request.get('regAddress') if validAddress(regAddress): self.registrationAddress = regAddress self.resultsURL += '®Address=' + self.registrationAddress self.registrationXPUB = '' if self.request.get('regXPUB') != '': regXPUB = self.request.get('regXPUB') if validXPUB(regXPUB): self.registrationXPUB = self.request.get('regXPUB') self.resultsURL += '®XPUB=' + self.registrationXPUB self.registrationBlock = 0 if self.request.get('regBlock') != '': try: self.registrationBlock = int(self.request.get('regBlock')) self.resultsURL += '®Block=' + str(self.registrationBlock) except ValueError: error = "regBlock must be a positive integer" if self.registrationBlock < 0: error = "regBlock must be a positive integer" rows = {} amounts = {} for i in range(0, len(self.options)): amounts[self.options[i]] = (self.cost + i)/1e8 if i%2 == 0: rows[self.options[i]] = 'Even' else: rows[self.options[i]] = 'Odd' proposalHash = getProposalHash(self.address, self.proposal, strOptions) if self.request.get('format') == 'json' and error == '': proposal = {} proposal['address'] = self.address proposal['proposal'] = self.proposal proposal['options'] = getOptions(self.address, self.options, self.cost) proposal['cost'] = self.cost proposal['digits'] = self.digits if self.weights != '': proposal['weights'] = self.weights if self.registrationAddress != '': proposal['regAddress'] = self.registrationAddress if self.registrationXPUB != '': proposal['regXPUB'] = self.registrationXPUB if self.registrationBlock != 0: proposal['regBlock'] = self.registrationBlock proposal['proposalHash'] = proposalHash self.response.write(json.dumps({'success': 1, 'proposal': proposal})) elif self.request.get('format') == 'json' and error != '': self.response.write(json.dumps({'success': 0, 'error': error})) else: parameters = Parameters.get_or_insert('DefaultConfig') template_values = { 'Title': 'Proposal', 'address': self.address, 'proposal': self.proposal, 'proposalHash': proposalHash, 'cost': self.cost, 'digits': self.digits, 'options': getOptions(self.address, self.options, self.cost), 'weights': self.weights, 'regAddress': self.registrationAddress, 'regXPUB': self.registrationXPUB, 'regBlock': self.registrationBlock, 'error': error, 'resultsURL': self.resultsURL, 'nOptions': len(self.options), 'amounts': amounts, 'rows': rows, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(Spellbook(parameters)), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), } template = JINJA_ENVIRONMENT.get_template('proposal.html') self.response.write(template.render(template_values))
def get(self): error = '' forwarderID = 0 LBL = [] LAL = [] beneficiaryAddress = '' beneficiaryBalance = 0 beneficiaryShare = 0 linkedAddress = '' forwardingAddress = '' forwardingAddressBalance = 0 forwardingAddressBeneficiary = '' forwardingBeneficiaryShare = 0 showWarning = True parameters = Parameters.get_or_insert('DefaultConfig') if self.request.get('forwarderID'): try: forwarderID = int(self.request.get('forwarderID')) except ValueError: error = 'forwarderID must be an integer' if error == '': forwarders = [Forwarder.get_by_id(forwarderID, parent=forwarders_key())] url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + forwarders[0].address + '&xpub=' + forwarders[0].xpub + '&metric=LBL,LAL' ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) if 'success' in data and data['success'] == 1: LBL = data['LBL'] LAL = data['LAL'] if self.request.get('address'): address = self.request.get('address') totalShares = 0 for i in range(0, len(LAL)): totalShares += LBL[i][1] if LAL[i][0] == address: beneficiaryAddress = address beneficiaryBalance = LBL[i][1] linkedAddress = LAL[i][1] showWarning = False if LAL[i][1] == address: forwardingAddress = LAL[i][1] forwardingAddressBalance = LBL[i][1] forwardingAddressBeneficiary = LAL[i][0] showWarning = False if totalShares > 0: beneficiaryShare = beneficiaryBalance/float(totalShares)*100 forwardingBeneficiaryShare = forwardingAddressBalance/float(totalShares)*100 else: showWarning = False else: showWarning = False forwarders_query = Forwarder.query(Forwarder.visibility == 'Public', Forwarder.status == 'Active').order(-Forwarder.date) forwarders = forwarders_query.fetch() isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' if self.request.get('forwarderID') and self.request.get('format') == 'json': response = {'success': 1, 'forwarder': {}} if len(forwarders) == 1: forwarder = forwarders[0] tmpForwarder = {} tmpForwarder['ID'] = forwarder.key.id() tmpForwarder['Name'] = forwarder.name tmpForwarder['Address'] = forwarder.address tmpForwarder['Description'] = forwarder.description tmpForwarder['Creator'] = forwarder.creator tmpForwarder['CreatorEmail'] = forwarder.creatorEmail tmpForwarder['Youtube'] = forwarder.youtube tmpForwarder['Status'] = forwarder.status tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount tmpForwarder['FeeAddress'] = forwarder.feeAddress tmpForwarder['FeePercent'] = forwarder.feePercent tmpForwarder['MinimumAmount'] = forwarder.minimumAmount tmpForwarder['XPUB'] = forwarder.xpub tmpForwarder['Visibility'] = forwarder.visibility tmpForwarder['Date'] = int(time.mktime(forwarder.date.timetuple())) response['forwarder'] = tmpForwarder self.response.write(json.dumps(response)) elif not self.request.get('forwarderID') and self.request.get('format') == 'json': response = {'success': 1, 'forwarders': []} for forwarder in forwarders: tmpForwarder = {} tmpForwarder['ID'] = forwarder.key.id() tmpForwarder['Name'] = forwarder.name tmpForwarder['Address'] = forwarder.address tmpForwarder['Description'] = forwarder.description tmpForwarder['Creator'] = forwarder.creator tmpForwarder['CreatorEmail'] = forwarder.creatorEmail tmpForwarder['Youtube'] = forwarder.youtube tmpForwarder['Status'] = forwarder.status tmpForwarder['ConfirmAmount'] = forwarder.confirmAmount tmpForwarder['FeeAddress'] = forwarder.feeAddress tmpForwarder['FeePercent'] = forwarder.feePercent tmpForwarder['MinimumAmount'] = forwarder.minimumAmount tmpForwarder['XPUB'] = forwarder.xpub tmpForwarder['Visibility'] = forwarder.visibility tmpForwarder['Date'] = int(time.mktime(forwarder.date.timetuple())) response['forwarders'].append(tmpForwarder) self.response.write(json.dumps(response)) else: template_values = { 'url': url, 'url_linktext': url_linktext, 'forwarders': forwarders, 'forwarderID': forwarderID, 'showWarning': showWarning, 'beneficiaryAddress': beneficiaryAddress, 'beneficiaryBalance' : beneficiaryBalance, 'beneficiaryShare': '%.2f' % beneficiaryShare, 'linkedAddress': linkedAddress, 'forwardingAddress': forwardingAddress, 'forwardingAddressBalance' : forwardingAddressBalance, 'forwardingAddressBeneficiary': forwardingAddressBeneficiary, 'forwardingBeneficiaryShare': '%.2f' % forwardingBeneficiaryShare, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), 'socialButtons': SOCIALBUTTONS_ENABLED, } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))
def get(self): distribution = [] distributerID = 0 beneficiaryAddress = '' beneficiaryBalance = 0 beneficiaryShare = 0 showWarning = True parameters = Parameters.get_or_insert('DefaultConfig') if self.request.get('distributerID'): distributerID = int(self.request.get('distributerID')) distributers = [Distributer.get_by_id(distributerID, parent=distributers_key())] if distributers[0].distributionSource == 'Custom': distribution = json.loads(distributers[0].custom) else: if distributers[0].distributionSource in ['LBL', 'LRL', 'LSL']: url = parameters.blocklinkerURL + '/LinkedList?format=json&address=' + distributers[0].registrationAddress + '&xpub=' + distributers[0].registrationXPUB + '&block=' + str(distributers[0].registrationBlockheight) + '&metric=LAL,' + distributers[0].distributionSource elif distributers[0].distributionSource == 'SIL': url = parameters.simplifiedInputsListURL + '/SIL?format=json&address=' + distributers[0].registrationAddress + '&block=' + str(distributers[0].registrationBlockheight) data = {} try: ret = urllib2.urlopen(urllib2.Request(url)) data = json.loads(ret.read()) except: data = {} if 'success' in data and data['success'] == 1: if 'SIL' in data: distribution = data['SIL'] elif 'LBL' in data: distribution = data['LBL'] elif 'LRL' in data: distribution = data['LRL'] elif 'LSL' in data: distribution = data['LSL'] if self.request.get('address'): address = self.request.get('address') totalShares = 0 beneficiaryValue = 0 for i in range(0, len(distribution)): totalShares += distribution[i][1] if distribution[i][0] == address: beneficiaryAddress = address beneficiaryValue = distribution[i][1] showWarning = False if totalShares > 0: beneficiaryShare = beneficiaryValue/float(totalShares)*100 else: showWarning = False else: showWarning = False distributers_query = Distributer.query(Distributer.visibility == 'Public', Distributer.status == 'Active').order(-Distributer.date) distributers = distributers_query.fetch() isAdmin = False if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' isAdmin = users.is_current_user_admin() else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' if self.request.get('distributerID') and self.request.get('format') == 'json': response = {'success': 1, 'distributer': []} if len(distributers) == 1: distributer = distributers[0] tmpDistributer = {} tmpDistributer['ID'] = distributer.key.id() tmpDistributer['Name'] = distributer.name tmpDistributer['Address'] = distributer.address tmpDistributer['Description'] = distributer.description tmpDistributer['Creator'] = distributer.creator tmpDistributer['CreatorEmail'] = distributer.creatorEmail tmpDistributer['Youtube'] = distributer.youtube tmpDistributer['Status'] = distributer.status tmpDistributer['FeeAddress'] = distributer.feeAddress tmpDistributer['FeePercent'] = distributer.feePercent tmpDistributer['Custom'] = distributer.custom tmpDistributer['DistributionSource'] = distributer.distributionSource tmpDistributer['Threshold'] = distributer.threshold tmpDistributer['MinimumAmount'] = distributer.minimumAmount tmpDistributer['TransactionFee'] = distributer.transactionFee tmpDistributer['RegistrationAddress'] = distributer.registrationAddress tmpDistributer['RegistrationBlockheight'] = distributer.registrationBlockheight tmpDistributer['RegistrationXPUB'] = distributer.registrationXPUB tmpDistributer['Visibility'] = distributer.visibility tmpDistributer['Date'] = int(time.mktime(distributer.date.timetuple())) response['distributer'] = tmpDistributer self.response.write(json.dumps(response)) elif not self.request.get('distributerID') and self.request.get('format') == 'json': response = {'success': 1, 'distributers': []} for distributer in distributers: tmpDistributer = {} tmpDistributer['ID'] = distributer.key.id() tmpDistributer['Name'] = distributer.name tmpDistributer['Address'] = distributer.address tmpDistributer['Description'] = distributer.description tmpDistributer['Creator'] = distributer.creator tmpDistributer['CreatorEmail'] = distributer.creatorEmail tmpDistributer['Youtube'] = distributer.youtube tmpDistributer['Status'] = distributer.status tmpDistributer['FeeAddress'] = distributer.feeAddress tmpDistributer['FeePercent'] = distributer.feePercent tmpDistributer['Custom'] = distributer.custom tmpDistributer['DistributionSource'] = distributer.distributionSource tmpDistributer['Threshold'] = distributer.threshold tmpDistributer['MinimumAmount'] = distributer.minimumAmount tmpDistributer['TransactionFee'] = distributer.transactionFee tmpDistributer['RegistrationAddress'] = distributer.registrationAddress tmpDistributer['RegistrationBlockheight'] = distributer.registrationBlockheight tmpDistributer['RegistrationXPUB'] = distributer.registrationXPUB tmpDistributer['Visibility'] = distributer.visibility tmpDistributer['Date'] = int(time.mktime(distributer.date.timetuple())) response['distributers'].append(tmpDistributer) self.response.write(json.dumps(response)) else: template_values = { 'url': url, 'url_linktext': url_linktext, 'distributers': distributers, 'distributerID': distributerID, 'distribution': distribution, 'nDistribution': len(distribution), 'showWarning': showWarning, 'beneficiaryAddress': beneficiaryAddress, 'beneficiaryBalance' : beneficiaryBalance, 'beneficiaryShare': '%.2f' % beneficiaryShare, 'cssHTML': includes.get_CssHTML(), 'metaHTML': includes.get_MetaHTML(), 'scriptsHTML': includes.get_ScriptsHTML(), 'navigationHTML': includes.get_NavigationHTML(url, url_linktext, Spellbook(parameters), isAdmin), 'logoHTML': includes.get_LogoHTML(), 'footerHTML': includes.get_FooterHTML(), 'googleAnalyticsHTML': includes.get_GoogleAnalyticsHTML(parameters.trackingID), 'socialButtons': SOCIALBUTTONS_ENABLED, } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values))