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