common: skip deprecated fields during generation; deprecate overwintered field in Zcash

pull/1090/head
Tomas Susanka 4 years ago
parent 64cfe48f54
commit ca3dd2bfb9

@ -130,7 +130,7 @@ message SignTx {
optional uint32 version = 4 [default=1]; // transaction version
optional uint32 lock_time = 5 [default=0]; // transaction lock_time
optional uint32 expiry = 6; // only for Decred and Zcash
// optional bool overwintered = 7; // deprecated - only for Zcash
optional bool _overwintered = 7 [deprecated=true]; // deprecated in 2.3.2, the field is not needed as it can be derived from `version`
optional uint32 version_group_id = 8; // only for Zcash, nVersionGroupId
optional uint32 timestamp = 9; // only for Peercoin
optional uint32 branch_id = 10; // only for Zcash, BRANCH_ID
@ -196,7 +196,7 @@ message TxAck {
optional bytes extra_data = 8; // only for Dash, Zcash
optional uint32 extra_data_len = 9; // only for Dash, Zcash
optional uint32 expiry = 10; // only for Decred and Zcash
// optional bool overwintered = 11; // deprecated - only for Zcash
optional bool _overwintered = 11 [deprecated=true]; // Zcash only; deprecated in 2.3.2, the field is not needed, it can be derived from `version`
optional uint32 version_group_id = 12; // only for Zcash, nVersionGroupId
optional uint32 timestamp = 13; // only for Peercoin
optional uint32 branch_id = 14; // only for Zcash, BRANCH_ID

@ -44,7 +44,7 @@ message EthereumGetAddress {
* @end
*/
message EthereumAddress {
optional bytes old_address = 1 [deprecated=true]; // trezor <1.8.0, <2.1.0 - raw bytes of Ethereum address
optional bytes _old_address = 1 [deprecated=true]; // trezor <1.8.0, <2.1.0 - raw bytes of Ethereum address
optional string address = 2; // Ethereum address as hex-encoded string
}

@ -265,7 +265,7 @@ class Descriptor:
yield " }"
# fmt: on
def process_message(self, message):
def process_message(self, message, include_deprecated=False):
logging.debug("Processing message {}".format(message.name))
msg_id = self.message_types.get(message.name)
@ -273,6 +273,8 @@ class Descriptor:
yield self.protobuf_import + " as p"
fields = [ProtoField.from_field(self, field) for field in message.field]
if not include_deprecated:
fields = [field for field in fields if not field.orig.options.deprecated]
yield from self.process_subtype_imports(fields)
@ -331,9 +333,9 @@ class Descriptor:
self.enum_types[enum.name][value.name] = value.number
yield f"{name} = {value.number} # type: Literal[{value.number}]"
def process_messages(self, messages):
def process_messages(self, messages, include_deprecated=False):
for message in sorted(messages, key=lambda m: m.name):
self.write_to_file(message.name, self.process_message(message))
self.write_to_file(message.name, self.process_message(message, include_deprecated))
def process_enums(self, enums):
for enum in sorted(enums, key=lambda e: e.name):
@ -358,10 +360,10 @@ class Descriptor:
for enum in sorted(self.enums, key=lambda m: m.name):
init_py.write("from . import {}\n".format(enum.name))
def write_classes(self, out_dir, init_py=True):
def write_classes(self, out_dir, init_py=True, include_deprecated=False):
self.out_dir = out_dir
self.process_enums(self.enums)
self.process_messages(self.messages)
self.process_messages(self.messages, include_deprecated)
if init_py:
self.write_init_py()
@ -376,6 +378,7 @@ if __name__ == "__main__":
parser.add_argument("--message-type", default="MessageType", help="Name of enum with message IDs")
parser.add_argument("-I", "--protoc-include", action="append", help="protoc include path")
parser.add_argument("-v", "--verbose", action="store_true", help="Print debug messages")
parser.add_argument("-d", "--include-deprecated", action="store_true", help="Include deprecated fields")
# fmt: on
args = parser.parse_args()
@ -387,7 +390,7 @@ if __name__ == "__main__":
descriptor = Descriptor(descriptor_proto, args.message_type, args.protobuf_module)
with tempfile.TemporaryDirectory() as tmpdir:
descriptor.write_classes(tmpdir, not args.no_init_py)
descriptor.write_classes(tmpdir, not args.no_init_py, args.include_deprecated)
for filename in os.listdir(args.out_dir):
pathname = os.path.join(args.out_dir, filename)

@ -14,6 +14,7 @@ _Most likely to be released on July 1st._
- Dedicated `initialized` field in storage.
### Deprecated
- Deprecate `Overwintered` field in `SignTx` and `TxAck`.
### Removed

@ -15,15 +15,12 @@ class EthereumAddress(p.MessageType):
def __init__(
self,
old_address: bytes = None,
address: str = None,
) -> None:
self.old_address = old_address
self.address = address
@classmethod
def get_fields(cls) -> Dict:
return {
1: ('old_address', p.BytesType, 0),
2: ('address', p.UnicodeType, 0),
}

@ -16,17 +16,14 @@ class PassphraseAck(p.MessageType):
def __init__(
self,
passphrase: str = None,
_state: bytes = None,
on_device: bool = None,
) -> None:
self.passphrase = passphrase
self._state = _state
self.on_device = on_device
@classmethod
def get_fields(cls) -> Dict:
return {
1: ('passphrase', p.UnicodeType, 0),
2: ('_state', p.BytesType, 0),
3: ('on_device', p.BoolType, 0),
}

@ -12,15 +12,3 @@ if __debug__:
class PassphraseRequest(p.MessageType):
MESSAGE_WIRE_TYPE = 41
def __init__(
self,
_on_device: bool = None,
) -> None:
self._on_device = _on_device
@classmethod
def get_fields(cls) -> Dict:
return {
1: ('_on_device', p.BoolType, 0),
}

@ -24,6 +24,6 @@ EthereumMessageSignature.signature max_size:65
EthereumGetAddress.address_n max_count:8
EthereumGetPublicKey.address_n max_count:8
EthereumAddress.old_address max_size:20
EthereumAddress._old_address max_size:20
EthereumAddress.address max_size:43
EthereumPublicKey.xpub max_size:113

@ -15,15 +15,15 @@ class EthereumAddress(p.MessageType):
def __init__(
self,
old_address: bytes = None,
_old_address: bytes = None,
address: str = None,
) -> None:
self.old_address = old_address
self._old_address = _old_address
self.address = address
@classmethod
def get_fields(cls) -> Dict:
return {
1: ('old_address', p.BytesType, 0),
1: ('_old_address', p.BytesType, 0),
2: ('address', p.UnicodeType, 0),
}

@ -21,6 +21,7 @@ class SignTx(p.MessageType):
version: int = None,
lock_time: int = None,
expiry: int = None,
_overwintered: bool = None,
version_group_id: int = None,
timestamp: int = None,
branch_id: int = None,
@ -31,6 +32,7 @@ class SignTx(p.MessageType):
self.version = version
self.lock_time = lock_time
self.expiry = expiry
self._overwintered = _overwintered
self.version_group_id = version_group_id
self.timestamp = timestamp
self.branch_id = branch_id
@ -44,6 +46,7 @@ class SignTx(p.MessageType):
4: ('version', p.UVarintType, 0), # default=1
5: ('lock_time', p.UVarintType, 0), # default=0
6: ('expiry', p.UVarintType, 0),
7: ('_overwintered', p.BoolType, 0),
8: ('version_group_id', p.UVarintType, 0),
9: ('timestamp', p.UVarintType, 0),
10: ('branch_id', p.UVarintType, 0),

@ -28,6 +28,7 @@ class TransactionType(p.MessageType):
extra_data: bytes = None,
extra_data_len: int = None,
expiry: int = None,
_overwintered: bool = None,
version_group_id: int = None,
timestamp: int = None,
branch_id: int = None,
@ -42,6 +43,7 @@ class TransactionType(p.MessageType):
self.extra_data = extra_data
self.extra_data_len = extra_data_len
self.expiry = expiry
self._overwintered = _overwintered
self.version_group_id = version_group_id
self.timestamp = timestamp
self.branch_id = branch_id
@ -59,6 +61,7 @@ class TransactionType(p.MessageType):
8: ('extra_data', p.BytesType, 0),
9: ('extra_data_len', p.UVarintType, 0),
10: ('expiry', p.UVarintType, 0),
11: ('_overwintered', p.BoolType, 0),
12: ('version_group_id', p.UVarintType, 0),
13: ('timestamp', p.UVarintType, 0),
14: ('branch_id', p.UVarintType, 0),

@ -114,6 +114,6 @@ else
fi
$func core/src/trezor/messages "$CORE_PROTOBUF_SOURCES" "$CORE_MESSAGES_IGNORE" TRUE --no-init-py
$func python/src/trezorlib/messages "$PYTHON_PROTOBUF_SOURCES" "$PYTHON_MESSAGES_IGNORE" FALSE -P ..protobuf
$func python/src/trezorlib/messages "$PYTHON_PROTOBUF_SOURCES" "$PYTHON_MESSAGES_IGNORE" FALSE --include-deprecated -P ..protobuf
exit $RETURN

Loading…
Cancel
Save