# Wolf Progress Report December 5, 2023
## Gordian Depo First Preview Release
Two Rust repos are now available:
* [bc-depo-rust](https://github.com/BlockchainCommons/bc-depo-rust): The actual depo server
* [bc-depo-api-rust](https://github.com/BlockchainCommons/bc-depo-api-rust): A library used to encode depo requests and decode responses
## Version 2 CBOR Tags and UR Types
All the CBOR tags we were using in the `3xx` range have been deprecated (but still exist), and are now superseded by "version 2" tags. There were a couple motivations for these changes:
* It made sense for the new "version 3" output descriptor format to use existing CBOR definitions for HD Keys, EC Keys, Bitcoin addresses etc., but previously these used version 1 tags that would not be granted by IANA.
* We still want to maintain backward compatibility with software that uses the old tag values.
The implementation of these changes required a fair amount of work:
* All the new tags have been assigned the value (old value + 40000).
* Since there is a 1-to-1 correspondence between CBOR tags and UR type strings, new UR type strings have been assigned for the version 2 tags.
* Most of the new UR type strings are formed by dropping the `crypto-` prefix on the UR type.
* For example, the old `ur:crypto-seed` type and CBOR tag `#6.300` has been superseded by a new version 2 type `ur:seed` and CBOR tag `#6.40300`.
* The [Registry of UR Types](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-006-urtypes.md) has been updated to reflect these changes, documenting both the version 1 and version 2 tags.
* Our entire Swift codebase has been updated to reflect these changes.
* The Swift Codebase now allows a `CBORCodable` type to support a primary type and one or more secondary types. So the same code is used to read and write `ur:seed` and `ur:hdkey`, but will also transparently read version 1 `ur:crypto-seed` and `ur:crypto-hdkey`.
The documentation for these changes involved updating a number of BCR documents that referenced the version 1 CBOR tags and/or UR types. These updates involved updating all documentation and examples that reference the version 1 types and adding a note that the version 1 is deprecated but may be supported for backward compatibility. Other than the tag/type string changes, these specs remain unchanged and useful:
* [BCR-2020-006 Registry of UR Types](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-006-urtypes.md)
* [BCR-2020-007 HDKeys](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-007-hdkey.md)
* [BCR-2020-008 ECKeys](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-008-eckey.md)
* [BCR-2020-009 Address](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-009-address.md)
* [BCR-2020-011 SSKR](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-011-sskr.md)
* [BCR-2020-012 Bytewords](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-012-bytewords.md)
The notes on the following documents have been updated to reflect that while deprecated, they may be supported for backward compatibility:
* [BCR-2020-010](bcr-2020-010-output-desc.md) version 1 `crypto-output`
* [BCR-2020-015](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-015-account.md)`crypto-account`
## Version 3 Output Descriptor Definition
Pursuant to community discussion, a new [BCR-2023-010](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2023-010-output-descriptor.md) "UR Type Definition for Bitcoin Output Descriptors (Version 3)" has been added. It includes a discussion of the previous versions and the rationale for the new version. The type is `ur:output-descriptor` and the CBOR tag is `#6.40308`. The main important aspects of this version are:
* Pure CBOR (no use of Gordian Envelope)
* Support for additional metadata (name, note)
* Support for compact textual output descriptors, i.e., `wsh(sortedmulti(2,@0,@1,@2))` with the keys corresponding to the placeholders being provided in an array of CBOR-encoded values.
The older output descriptor formats have been marked as deprecated:
* Version 1 (CBOR) [BCR-2020-010](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-010-output-desc.md) has been marked as deprecated, but eligible for backward compatibility support.
* Version 2 (Envelope) [BCR-2023-007](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2023-007-envelope-output-desc.md) has been marked as deprecated, but not recommended for backward compatibility support due to no known deployments.
The Swift codebase has been updated to support input and output of Version 3 output descriptors.
Gordian SeedTool for iOS has been updated to version 1.6 (72).
* SeedTool now exports the version 3 `ur:output-descriptor` (#6.40308) type, as documented in [BCR-2023-010](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2023-010-output-descriptor.md).
* SeedTool now exports version 2 CBOR tags for several structures, while maintaining backwards-compatibility with version 1 CBOR tags. So instead of exporting `ur:crypto-seed` (#6.300), SeedTool now exports `ur:seed` (#6.40300), while still being able to import `ur:crypto-seed`. This also applies to `ur:crypto-sskr` (#6.303) which is now `ur:sskr` (#6.40303) and `ur:crypto-hdkey` (#6.303) which is now `ur:hdkey` (#6.40303).
SeedTool now exports version 2 CBOR tags for several structures, while maintaining backwards-compatibility with version 1 CBOR tags. So instead of exporting `ur:crypto-seed` (#6.300), SeedTool now exports `ur:seed` (#6.40300), while still being able to import `ur:crypto-seed`. This also applies to `ur:crypto-sskr` (#6.303) which is now `ur:sskr` (#6.40303) and `ur:crypto-hdkey` (#6.303) which is now `ur:hdkey` (#6.40303).
## Upcoming Tasks
- Document GSTP.
- Merge Carston's dCBOR I-D with our own.