1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-24 07:18:09 +00:00

client.py updated to use Stellar messages instead of map

This commit is contained in:
ZuluCrypto 2018-04-19 15:10:57 -06:00
parent 73b07a489b
commit 1fb521f4cd
No known key found for this signature in database
GPG Key ID: 0D1266F87C28A2E1

View File

@ -1112,150 +1112,26 @@ class ProtocolMixin(object):
parsed = stellar.parse_transaction_bytes(tx_envelope)
tx = parsed["tx"]
tx.network_passphrase = network_passphrase
tx.address_n = address_n
# Will return a StellarTxOpRequest
resp = self.call(proto.StellarSignTx(
protocol_version=parsed["protocol_version"],
address_n=address_n,
network_passphrase=network_passphrase,
source_account=parsed["source_account"],
fee=parsed["fee"],
sequence_number=parsed["sequence_number"],
timebounds_start=parsed["timebounds_start"],
timebounds_end=parsed["timebounds_end"],
memo_type=parsed["memo_type"],
memo_text=parsed["memo_text"],
memo_id=parsed["memo_id"],
memo_hash=parsed["memo_hash"],
num_operations=parsed["num_operations"]
))
resp = self.call(parsed["tx"])
if not isinstance(resp, proto.StellarTxOpRequest):
raise CallException("Unexpected response to transaction")
for op_idx in range(0, parsed["num_operations"]):
op = parsed["operations"][op_idx]
resp = None
# Send each operation to the device.
# The response to the last message should be a StellarSignedTx
for op in parsed["operations"]:
resp = self.call(op)
# Create account
if op["type"] == 0:
resp = self.call(proto.StellarCreateAccountOp(
source_account=op["source_account"],
new_account=op["new_account"],
starting_balance=op["starting_balance"]
))
# Payment
if op["type"] == 1:
asset = proto.StellarAssetType(type=op["asset"]["type"], code=op["asset"]["code"],
issuer=op["asset"]["issuer"])
resp = self.call(proto.StellarPaymentOp(
source_account=op["source_account"],
destination_account=op["destination_account"],
amount=op["amount"],
asset=asset
))
# Path Payment
if op["type"] == 2:
destination_asset = proto.StellarAssetType(type=op["destination_asset"]["type"],
code=op["destination_asset"]["code"],
issuer=op["destination_asset"]["issuer"])
resp = self.call(proto.StellarPathPaymentOp(
source_account=op["source_account"],
send_max=op["send_max"],
destination_account=op["destination_account"],
destination_asset=destination_asset,
destination_amount=op["destination_amount"],
paths=op["paths"]
))
# Manage Offer
if op["type"] == 3:
selling_asset = proto.StellarAssetType(type=op["selling_asset"]["type"],
code=op["selling_asset"]["code"],
issuer=op["selling_asset"]["issuer"])
buying_asset = proto.StellarAssetType(type=op["buying_asset"]["type"], code=op["buying_asset"]["code"],
issuer=op["buying_asset"]["issuer"])
resp = self.call(proto.StellarManageOfferOp(
source_account=op["source_account"],
selling_asset=selling_asset,
buying_asset=buying_asset,
amount=op["amount"],
price_n=op["price_n"],
price_d=op["price_d"],
offer_id=op["offer_id"]
))
# Passive Offer
if op["type"] == 4:
selling_asset = proto.StellarAssetType(type=op["selling_asset"]["type"],
code=op["selling_asset"]["code"],
issuer=op["selling_asset"]["issuer"])
buying_asset = proto.StellarAssetType(type=op["buying_asset"]["type"], code=op["buying_asset"]["code"],
issuer=op["buying_asset"]["issuer"])
resp = self.call(proto.StellarCreatePassiveOfferOp(
source_account=op["source_account"],
selling_asset=selling_asset,
buying_asset=buying_asset,
amount=op["amount"],
price_n=op["price_n"],
price_d=op["price_d"]
))
# Set Options
if op["type"] == 5:
resp = self.call(proto.StellarSetOptionsOp(
source_account=op["source_account"],
inflation_destination_account=op["inflation_destination"],
clear_flags=op["clear_flags"],
set_flags=op["set_flags"],
master_weight=op["master_weight"],
low_threshold=op["low_threshold"],
medium_threshold=op["medium_threshold"],
high_threshold=op["high_threshold"],
home_domain=op["home_domain"],
signer_type=op["signer_type"],
signer_key=op["signer_key"],
signer_weight=op["signer_weight"],
))
# Change Trust
if op["type"] == 6:
asset = proto.StellarAssetType(type=op["asset"]["type"], code=op["asset"]["code"],
issuer=op["asset"]["issuer"])
resp = self.call(proto.StellarChangeTrustOp(
source_account=op["source_account"],
limit=op["limit"],
asset=asset
))
# Allow Trust
if op["type"] == 7:
resp = self.call(proto.StellarAllowTrustOp(
source_account=op["source_account"],
trusted_account=op["trusted_account"],
asset_type=op["asset_type"],
asset_code=op["asset_code"],
is_authorized=op["is_authorized"]
))
# Merge Account
if op["type"] == 8:
resp = self.call(proto.StellarAccountMergeOp(
source_account=op["source_account"],
destination_account=op["destination_account"]
))
# Manage data
if op["type"] == 10:
resp = self.call(proto.StellarManageDataOp(
source_account=op["source_account"],
key=op["key"],
value=op["value"]
))
# Merge Account
if op["type"] == 11:
resp = self.call(proto.StellarBumpSequenceOp(
source_account=op["source_account"],
bump_to=op["bump_to"]
))
# Verify expected response message StellarSignedTx and return it
if not isinstance(resp, proto.StellarSignedTx):
raise CallException("Stellar.UnexpectedEndOfOperations", "Reached end of operations without a signature")
# Exit if the response was a StellarSignedTx
if isinstance(resp, proto.StellarSignedTx):
return resp
raise CallException("Reached end of operations without a signature")
@expect(proto.StellarMessageSignature)
def stellar_sign_message(self, address_n, message):
return self.call(proto.StellarSignMessage(address_n=address_n, message=message))