Skip to content

Commit 60e969b

Browse files
BitHighlanderclaude
andcommitted
feat: add Solana protocol support (GetAddress, SignTx, SignMessage)
- Generate messages_solana_pb2.py via docker_build_pb.sh (protoc 3.5.1) - Regenerate messages_pb2.py with Solana MessageType entries (750-755) - Add solana_get_address, solana_sign_tx, solana_sign_message to client - Add Solana mapping in mapping.py - Point device-protocol submodule at feature-solana (messages-solana.proto) - Add messages-solana to build_pb.sh proto generation list Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7f0d55f commit 60e969b

6 files changed

Lines changed: 451 additions & 60 deletions

File tree

build_pb.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ CURDIR=$(pwd)
33
cd "device-protocol"
44

55
echo "Building with protoc version: $(protoc --version)"
6-
for i in messages messages-ethereum messages-eos messages-nano messages-cosmos messages-ripple messages-binance messages-tendermint messages-thorchain messages-osmosis messages-mayachain types ; do
6+
for i in messages messages-ethereum messages-eos messages-nano messages-cosmos messages-ripple messages-binance messages-tendermint messages-thorchain messages-osmosis messages-mayachain messages-solana types ; do
77
protoc --python_out=$CURDIR/keepkeylib/ -I/usr/include -I. $i.proto
88
i=${i/-/_}
99
sed -i -Ee 's/^import ([^.]+_pb2)/from . import \1/' $CURDIR/keepkeylib/"$i"_pb2.py

device-protocol

keepkeylib/client.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
from . import messages_tendermint_pb2 as tendermint_proto
4646
from . import messages_thorchain_pb2 as thorchain_proto
4747
from . import messages_mayachain_pb2 as mayachain_proto
48+
from . import messages_solana_pb2 as solana_proto
4849
from . import types_pb2 as types
4950
from . import eos
5051
from . import nano
@@ -1138,6 +1139,29 @@ def mayachain_sign_tx(
11381139

11391140
return resp
11401141

1142+
# ── Solana ──────────────────────────────────────────────────────
1143+
1144+
@field('address')
1145+
@expect(solana_proto.SolanaAddress)
1146+
def solana_get_address(self, address_n, show_display=False):
1147+
return self.call(
1148+
solana_proto.SolanaGetAddress(address_n=address_n, show_display=show_display)
1149+
)
1150+
1151+
@session
1152+
@expect(solana_proto.SolanaSignedTx)
1153+
def solana_sign_tx(self, address_n, raw_tx):
1154+
return self.call(
1155+
solana_proto.SolanaSignTx(address_n=address_n, raw_tx=raw_tx)
1156+
)
1157+
1158+
@session
1159+
@expect(solana_proto.SolanaMessageSignature)
1160+
def solana_sign_message(self, address_n, message):
1161+
return self.call(
1162+
solana_proto.SolanaSignMessage(address_n=address_n, message=message)
1163+
)
1164+
11411165
@field('address')
11421166
@expect(ripple_proto.RippleAddress)
11431167
def ripple_get_address(self, address_n, show_display=False):

keepkeylib/mapping.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from . import messages_tendermint_pb2 as tendermint_proto
1010
from . import messages_thorchain_pb2 as thorchain_proto
1111
from . import messages_mayachain_pb2 as mayachain_proto
12+
from . import messages_solana_pb2 as solana_proto
1213

1314
map_type_to_class = {}
1415
map_class_to_type = {}
@@ -36,6 +37,8 @@ def build_map():
3637
msg_class = getattr(thorchain_proto, msg_name)
3738
elif msg_type.startswith('MessageType_Mayachain'):
3839
msg_class = getattr(mayachain_proto, msg_name)
40+
elif msg_type.startswith('MessageType_Solana'):
41+
msg_class = getattr(solana_proto, msg_name)
3942
else:
4043
msg_class = getattr(proto, msg_name)
4144

keepkeylib/messages_pb2.py

Lines changed: 100 additions & 58 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

keepkeylib/messages_solana_pb2.py

Lines changed: 322 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)