mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-31 17:31:36 +00:00
Merge pull request #6199 from benma/bb02
plugins/bitbox02: fix compatibility with bitbox02-3.0.0
This commit is contained in:
commit
8e12b43b5d
2 changed files with 41 additions and 12 deletions
|
@ -13,5 +13,5 @@ safet>=0.1.5
|
||||||
keepkey>=6.3.1
|
keepkey>=6.3.1
|
||||||
btchip-python>=0.1.26
|
btchip-python>=0.1.26
|
||||||
ckcc-protocol>=0.7.7
|
ckcc-protocol>=0.7.7
|
||||||
bitbox02>=2.0.2
|
bitbox02>=3.0.0
|
||||||
hidapi
|
hidapi
|
||||||
|
|
|
@ -33,6 +33,7 @@ try:
|
||||||
HARDENED,
|
HARDENED,
|
||||||
u2fhid,
|
u2fhid,
|
||||||
bitbox_api_protocol,
|
bitbox_api_protocol,
|
||||||
|
FirmwareVersionOutdatedException,
|
||||||
)
|
)
|
||||||
requirements_ok = True
|
requirements_ok = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -161,11 +162,17 @@ class BitBox02Client(HardwareClientBase):
|
||||||
hid_device = hid.device()
|
hid_device = hid.device()
|
||||||
hid_device.open_path(self.bitbox_hid_info["path"])
|
hid_device.open_path(self.bitbox_hid_info["path"])
|
||||||
|
|
||||||
self.bitbox02_device = bitbox02.BitBox02(
|
|
||||||
|
bitbox02_device = bitbox02.BitBox02(
|
||||||
transport=u2fhid.U2FHid(hid_device),
|
transport=u2fhid.U2FHid(hid_device),
|
||||||
device_info=self.bitbox_hid_info,
|
device_info=self.bitbox_hid_info,
|
||||||
noise_config=NoiseConfig(),
|
noise_config=NoiseConfig(),
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
|
bitbox02_device.check_min_version()
|
||||||
|
except FirmwareVersionOutdatedException:
|
||||||
|
raise
|
||||||
|
self.bitbox02_device = bitbox02_device
|
||||||
|
|
||||||
self.fail_if_not_initialized()
|
self.fail_if_not_initialized()
|
||||||
|
|
||||||
|
@ -176,13 +183,6 @@ class BitBox02Client(HardwareClientBase):
|
||||||
"Please initialize the BitBox02 using the BitBox app first before using the BitBox02 in electrum"
|
"Please initialize the BitBox02 using the BitBox app first before using the BitBox02 in electrum"
|
||||||
)
|
)
|
||||||
|
|
||||||
def check_device_firmware_version(self) -> bool:
|
|
||||||
if self.bitbox02_device is None:
|
|
||||||
raise Exception(
|
|
||||||
"Need to setup communication first before attempting any BitBox02 calls"
|
|
||||||
)
|
|
||||||
return self.bitbox02_device.check_firmware_version()
|
|
||||||
|
|
||||||
def coin_network_from_electrum_network(self) -> int:
|
def coin_network_from_electrum_network(self) -> int:
|
||||||
if constants.net.TESTNET:
|
if constants.net.TESTNET:
|
||||||
return bitbox02.btc.TBTC
|
return bitbox02.btc.TBTC
|
||||||
|
@ -357,13 +357,36 @@ class BitBox02Client(HardwareClientBase):
|
||||||
# Build BTCInputType list
|
# Build BTCInputType list
|
||||||
inputs = []
|
inputs = []
|
||||||
for txin in tx.inputs():
|
for txin in tx.inputs():
|
||||||
_, full_path = keystore.find_my_pubkey_in_txinout(txin)
|
my_pubkey, full_path = keystore.find_my_pubkey_in_txinout(txin)
|
||||||
|
|
||||||
if full_path is None:
|
if full_path is None:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
"A wallet owned pubkey was not found in the transaction input to be signed"
|
"A wallet owned pubkey was not found in the transaction input to be signed"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
prev_tx = txin.utxo
|
||||||
|
if prev_tx is None:
|
||||||
|
raise UserFacingException(_('Missing previous tx.'))
|
||||||
|
|
||||||
|
prev_inputs: List[bitbox02.BTCPrevTxInputType] = []
|
||||||
|
prev_outputs: List[bitbox02.BTCPrevTxOutputType] = []
|
||||||
|
for prev_txin in prev_tx.inputs():
|
||||||
|
prev_inputs.append(
|
||||||
|
{
|
||||||
|
"prev_out_hash": prev_txin.prevout.txid[::-1],
|
||||||
|
"prev_out_index": prev_txin.prevout.out_idx,
|
||||||
|
"signature_script": prev_txin.script_sig,
|
||||||
|
"sequence": prev_txin.nsequence,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
for prev_txout in prev_tx.outputs():
|
||||||
|
prev_outputs.append(
|
||||||
|
{
|
||||||
|
"value": prev_txout.value,
|
||||||
|
"pubkey_script": prev_txout.scriptpubkey,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
inputs.append(
|
inputs.append(
|
||||||
{
|
{
|
||||||
"prev_out_hash": txin.prevout.txid[::-1],
|
"prev_out_hash": txin.prevout.txid[::-1],
|
||||||
|
@ -371,6 +394,12 @@ class BitBox02Client(HardwareClientBase):
|
||||||
"prev_out_value": txin.value_sats(),
|
"prev_out_value": txin.value_sats(),
|
||||||
"sequence": txin.nsequence,
|
"sequence": txin.nsequence,
|
||||||
"keypath": full_path,
|
"keypath": full_path,
|
||||||
|
"prev_tx": {
|
||||||
|
"version": prev_tx.version,
|
||||||
|
"locktime": prev_tx.locktime,
|
||||||
|
"inputs": prev_inputs,
|
||||||
|
"outputs": prev_outputs,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -405,7 +434,7 @@ class BitBox02Client(HardwareClientBase):
|
||||||
assert txout.address
|
assert txout.address
|
||||||
# check for change
|
# check for change
|
||||||
if txout.is_change:
|
if txout.is_change:
|
||||||
_, change_pubkey_path = keystore.find_my_pubkey_in_txinout(txout)
|
my_pubkey, change_pubkey_path = keystore.find_my_pubkey_in_txinout(txout)
|
||||||
outputs.append(
|
outputs.append(
|
||||||
bitbox02.BTCOutputInternal(
|
bitbox02.BTCOutputInternal(
|
||||||
keypath=change_pubkey_path, value=txout.value,
|
keypath=change_pubkey_path, value=txout.value,
|
||||||
|
@ -536,7 +565,7 @@ class BitBox02_KeyStore(Hardware_KeyStore):
|
||||||
|
|
||||||
class BitBox02Plugin(HW_PluginBase):
|
class BitBox02Plugin(HW_PluginBase):
|
||||||
keystore_class = BitBox02_KeyStore
|
keystore_class = BitBox02_KeyStore
|
||||||
minimum_library = (2, 0, 2)
|
minimum_library = (3, 0, 0)
|
||||||
DEVICE_IDS = [(0x03EB, 0x2403)]
|
DEVICE_IDS = [(0x03EB, 0x2403)]
|
||||||
|
|
||||||
SUPPORTED_XTYPES = ("p2wpkh-p2sh", "p2wpkh", "p2wsh")
|
SUPPORTED_XTYPES = ("p2wpkh-p2sh", "p2wpkh", "p2wsh")
|
||||||
|
|
Loading…
Add table
Reference in a new issue