2020-10-14 11:37:23 +00:00
# Hummingbird
### Java implementation of Uniform Resources (UR)
Hummingbird is a Java implementation of the [Uniform Resources (UR) ](https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-005-ur.md ) specification.
It is a direct port of the [URKit ](https://github.com/BlockchainCommons/URKit ) implementation by Wolf McNally.
It contains both the classes to represent a UR, and a UR encoder and decoder to encode and decode to/from the QR representations.
2020-10-14 13:36:17 +00:00
## Setup
2020-10-14 11:37:23 +00:00
Hummingbird is hosted in Maven Central and can be added as a dependency with the following:
```
2020-11-10 06:55:07 +00:00
implementation('com.sparrowwallet:hummingbird:1.3')
2020-10-14 11:37:23 +00:00
```
## Usage
Decoding a UR can be done as follows (here decoding a ``crypto-psbt`` UR type):
```java
URDecoder decoder = new URDecoder();
while(decoder.getResult() == null) {
//Loop adding QR fragments to the decoder until it has a result
String qrText = getFromNextQR();
decoder.receivePart(qrText);
}
URDecoder.Result urResult = decoder.getResult();
if(urResult.type == ResultType.SUCCESS) {
if(urResult.ur.getType().equals(UR.CRYPTO_PSBT_TYPE)) {
byte[] psbt = urResult.ur.toBytes();
}
}
```
Encoding a UR:
```java
final int MIN_FRAGMENT_LENGTH = 10;
final int MAX_FRAGMENT_LENGTH = 100;
2020-10-15 06:46:52 +00:00
String type = UR.BYTES_TYPE;
2020-10-14 11:37:23 +00:00
2020-10-15 06:46:52 +00:00
UR ur = UR.fromBytes(type, data);
2020-10-14 11:37:23 +00:00
UREncoder encoder = new UREncoder(ur, MAX_FRAGMENT_LENGTH, MIN_FRAGMENT_LENGTH, 0);
while(true) {
String fragment = encoder.nextPart();
//Show UR fragment as QR code...
}
```
## Testing
Hummingbird has a thorough testsuite ported from URKit. The tests can be run with:
```
./gradlew test
```
## License
Hummingbird is licensed under the Apache 2 software license.
2020-10-14 13:36:17 +00:00
## Dependencies
- [cbor-java ](https://github.com/c-rack/cbor-java/tree/master/src/main/java/co/nstant/in/cbor )