4 changed files with 124 additions and 6 deletions
@ -0,0 +1,86 @@ |
|||
from kivy.app import App |
|||
from kivy.factory import Factory |
|||
from kivy.properties import ObjectProperty |
|||
from kivy.lang import Builder |
|||
|
|||
|
|||
|
|||
Builder.load_string(''' |
|||
#:import _ electrum_gui.kivy.i18n._ |
|||
|
|||
<CheckpointDialog@Popup> |
|||
id: popup |
|||
cp_height: 0 |
|||
cp_value: '' |
|||
title: _('Checkpoint') |
|||
size_hint: 0.8, 0.8 |
|||
pos_hint: {'top':0.9} |
|||
BoxLayout: |
|||
orientation: 'vertical' |
|||
Label: |
|||
id: description |
|||
text: 'In the event of a blockchain fork, a checkpoint can be used to ensure that you are on the correct blockchain.' |
|||
halign: 'left' |
|||
text_size: self.width, None |
|||
size: self.texture_size |
|||
BoxLayout: |
|||
orientation: 'horizontal' |
|||
size_hint: 1, 0.2 |
|||
Label: |
|||
text: _('Height') |
|||
height: '48dp' |
|||
TextInput: |
|||
id: height_input |
|||
text: '%d'%root.cp_height |
|||
on_focus: root.on_height_str() |
|||
TopLabel: |
|||
text: _('Block hash') + ':' |
|||
TxHashLabel: |
|||
data: root.cp_value |
|||
Label: |
|||
text: 'Edit the height to fetch a checkpoint from your main server, and check its value from independent sources.' |
|||
halign: 'left' |
|||
text_size: self.width, None |
|||
size: self.texture_size |
|||
Widget: |
|||
size_hint: 1, 0.3 |
|||
BoxLayout: |
|||
orientation: 'horizontal' |
|||
size_hint: 1, 0.2 |
|||
Button: |
|||
text: _('Cancel') |
|||
size_hint: 0.5, None |
|||
height: '48dp' |
|||
on_release: popup.dismiss() |
|||
Button: |
|||
text: _('OK') |
|||
size_hint: 0.5, None |
|||
height: '48dp' |
|||
on_release: |
|||
root.callback(root.cp_height, root.cp_value) |
|||
popup.dismiss() |
|||
''') |
|||
|
|||
class CheckpointDialog(Factory.Popup): |
|||
def __init__(self, network, callback): |
|||
Factory.Popup.__init__(self) |
|||
self.network = network |
|||
self.cp_height, self.cp_value = self.network.blockchain.get_checkpoint() |
|||
self.callback = callback |
|||
|
|||
def on_height_str(self): |
|||
try: |
|||
new_height = int(self.ids.height_input.text) |
|||
except: |
|||
new_height = 0 |
|||
if new_height == self.cp_height: |
|||
return |
|||
try: |
|||
header = self.network.synchronous_get(('blockchain.block.get_header', [new_height]), 5) |
|||
new_value = self.network.blockchain.hash_header(header) |
|||
except BaseException as e: |
|||
self.network.print_error(str(e)) |
|||
new_value = '' |
|||
if new_value: |
|||
self.cp_height = new_height |
|||
self.cp_value = new_value |
Loading…
Reference in new issue