diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py index ee64ae1349c6edfdc8c15ec8c9cbedc83044a76c..eb6ae82250caafc9b395a02cd43c102eda264100 100644 --- a/src/cutecoin/core/account.py +++ b/src/cutecoin/core/account.py @@ -199,10 +199,15 @@ class Account(object): self_ = Person.lookup(self.pubkey, community) selfcert = self_.selfcert(community) - block = community.get_block() - block_hash = hashlib.sha1(block.signed_raw().encode("ascii")).hexdigest().upper() + try: + block = community.get_block() + block_hash = hashlib.sha1(block.signed_raw().encode("ascii")).hexdigest().upper() + block_number = block['number'] + except ValueError as e: + block_number = 0 + block_hash = "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709" membership = Membership(PROTOCOL_VERSION, community.currency, - selfcert.pubkey, block.number, + selfcert.pubkey, block_number, block_hash, type, selfcert.uid, selfcert.timestamp, None) key = SigningKey(self.salt, password) diff --git a/src/cutecoin/core/community.py b/src/cutecoin/core/community.py index be398ec58a8194560b6fbdbc786769a65c4b6837..a089bc9cd098b263a1bc7698505897e8512b9ff6 100644 --- a/src/cutecoin/core/community.py +++ b/src/cutecoin/core/community.py @@ -69,10 +69,13 @@ class Community(object): def dividend(self): ud = self.request(bma.blockchain.UD) - block_number = ud['result']['blocks'][-1] - block = self.request(bma.blockchain.Block, - req_args={'number': block_number}) - return block['dividend'] + if len(ud['result']['blocks']) > 0: + block_number = ud['result']['blocks'][-1] + block = self.request(bma.blockchain.Block, + req_args={'number': block_number}) + return block['dividend'] + else: + return 1 def peering(self): peers = [] diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py index b01501d4904793fa0a26f1efb06100911f0a24a0..27afe43765f5d9d8228819d17cc6513e39f0db98 100644 --- a/src/cutecoin/core/wallet.py +++ b/src/cutecoin/core/wallet.py @@ -81,13 +81,22 @@ class Cache(): return self.tx_received def refresh(self, community): - current_block = community.request(bma.blockchain.Current) + current_block = 0 + try: + block_data = community.request(bma.blockchain.Current) + current_block = block_data['number'] + except ValueError as e: + if '404' in str(e): + current_block = 0 + else: + raise + with_tx = community.request(bma.blockchain.TX) # We parse only blocks with transactions parsed_blocks = reversed(range(self.latest_block + 1, - current_block['number'] + 1)) + current_block + 1)) logging.debug("Refresh from {0} to {1}".format(self.latest_block + 1, - current_block['number'] + 1)) + current_block + 1)) parsed_blocks = [n for n in parsed_blocks if n in with_tx['result']['blocks']] @@ -110,13 +119,13 @@ class Cache(): if awaiting.compact() != tx.compact()] self.tx_sent.append(tx) - if current_block['number'] > self.latest_block: + if current_block > self.latest_block: self.available_sources = self.wallet.sources(community) self.tx_sent = self.tx_sent[:50] self.tx_received = self.tx_received[:50] - self.latest_block = current_block['number'] + self.latest_block = current_block class Wallet(object): diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py index 585d4fbf45afe982e6aece8b7e7c05ae0c0c783d..bab2a6672d33f81b395bf49d9396176e5871f23b 100644 --- a/src/cutecoin/gui/currency_tab.py +++ b/src/cutecoin/gui/currency_tab.py @@ -25,21 +25,23 @@ class BlockchainWatcher(QObject): self.account = account self.community = community self.exiting = False - self.last_block = self.community.request(bma.blockchain.Current)['number'] + peering = self.community.request(bma.network.Peering) + self.last_block = peering['block'].split('-')[0] @pyqtSlot() def watch(self): while not self.exiting: time.sleep(10) - current_block = self.community.request(bma.blockchain.Current) - if self.last_block != current_block['number']: + peering = self.community.request(bma.network.Peering) + block_number = peering['block'].split('-')[0] + if self.last_block != block_number: for w in self.account.wallets: w.cache.refresh(self.community) - logging.debug("New block, {0} mined in {1}".format(current_block['number'], + logging.debug("New block, {0} mined in {1}".format(block_number, self.community.currency)) - self.new_block_mined.emit(current_block['number']) - self.last_block = current_block['number'] + self.new_block_mined.emit(block_number) + self.last_block = block_number new_block_mined = pyqtSignal(int) @@ -90,7 +92,8 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): self.tabs_account.addTab(self.tab_community, QIcon(':/icons/community_icon'), "Community") - block_number = self.community.request(bma.blockchain.Current)['number'] + peering = self.community.request(bma.network.Peering) + block_number = peering['block'].split('-')[0] self.status_label.setText("Connected : Block {0}" .format(block_number)) @@ -167,7 +170,8 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): self.app.save(self.app.current_account) def showEvent(self, event): - block_number = self.community.request(bma.blockchain.Current)['number'] + peering = self.community.request(bma.network.Peering) + block_number = peering['block'].split('-')[0] self.status_label.setText("Connected : Block {0}" .format(block_number)) diff --git a/src/cutecoin/gui/process_cfg_account.py b/src/cutecoin/gui/process_cfg_account.py index df95f7167c4fe6926d8de2cf9b54c4a9ab6e4883..e5b0210887e989057e6ef4e53ae2a0fe23f4c59a 100644 --- a/src/cutecoin/gui/process_cfg_account.py +++ b/src/cutecoin/gui/process_cfg_account.py @@ -50,6 +50,7 @@ class StepPageInit(Step): self.config_dialog.list_communities.setModel(model) nb_wallets = len(self.config_dialog.account.wallets) self.config_dialog.spinbox_wallets.setValue(nb_wallets) + self.config_dialog.password_asker = PasswordAskerDialog(self.config_dialog.account) self.config_dialog.button_previous.setEnabled(False) self.config_dialog.button_next.setEnabled(False)