Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/trezor/trezord
:warning: OBSOLETE. DO NOT USE! TREZOR Communication Daemon
https://github.com/trezor/trezord
bitcoin bridge daemon trezor
Last synced: 3 months ago
JSON representation
:warning: OBSOLETE. DO NOT USE! TREZOR Communication Daemon
- Host: GitHub
- URL: https://github.com/trezor/trezord
- Owner: trezor-graveyard
- License: lgpl-3.0
- Created: 2014-04-25T17:57:15.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2018-02-08T13:27:14.000Z (almost 7 years ago)
- Last Synced: 2024-05-09T08:16:00.337Z (6 months ago)
- Topics: bitcoin, bridge, daemon, trezor
- Language: C++
- Homepage:
- Size: 7.47 MB
- Stars: 56
- Watchers: 15
- Forks: 35
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
# trezord
[![Build Status](https://travis-ci.org/trezor/trezord.svg?branch=master)](https://travis-ci.org/trezor/trezord) [![gitter](https://badges.gitter.im/trezor/community.svg)](https://gitter.im/trezor/community)
TREZOR Communication Daemon aka TREZOR Bridge
**DO NOT USE! This version has been obsoleted by a new generation of TREZOR Bridge available from here: [trezor/trezord-go](https://github.com/trezor/trezord-go)**
## What trezord does
`trezord` (short for TREZOR Daemon), or TREZOR Bridge, is a small piece of software, used for websites (such as our own [TREZOR Wallet](https://wallet.trezor.io)), to talk with TREZOR devices.
`trezord` starts a local webserver, with which both external applications and local applications can communicate. This webserver then communicates with TREZOR devices and returns their replies as JSON. `trezord` also manages access to devices - two applications cannot use the same device at the same time.
Communicating with devices using `trezord` is more high-level than communicating with devices directly - `trezord` abstracts away USB communication, Protobuf serialization and platform differences. However, you still need to process individual messages.
**For development of web apps for TREZOR, it is recommended to use [trezor.js](https://github.com/trezor/trezor.js) javascript API, which has separate javascript calls for most common usecases; or [TREZOR Connect](https://github.com/trezor/connect), which is even more high level.** (`trezor.js` communicates with `trezord` under the hood.)
## API documentation
`trezord` starts server on `localhost`, with port `21324`. You can use `https`, by using `https://localback.net:21324` which redirects to localhost. You can call this web address with standard AJAX calls from websites (see the note about whitelisting).
Server supports following API calls:
| url
method | parameters | result type | description |
|-------------|------------|-------------|-------------|
| `/`
GET | | {`version`: string,
`configured`: boolean,
`validUntil`: timestamp} | Returns current version of bridge and info about configuration.
See `/configure` for more info. |
| `/configure`
POST | request body: config, as hex string | {} | Before any advanced call, configuration file needs to be loaded to bridge.
Configuration file is signed by SatoshiLabs and the validity of the signature is limited.
Current config should be [in this repo](https://github.com/trezor/webwallet-data/blob/master/config_signed.bin), or [on AWS here](https://wallet.trezor.io/data/config_signed.bin). |
| `/enumerate`
GET | | Array<{`path`: string,
`session`: string | null}> | Lists devices.
`path` uniquely defines device between more connected devices. It might or might not be unique over time; on some platform it changes, on others given USB port always returns the same path.
If `session` is null, nobody else is using the device; if it's string, it identifies who is using it. |
| `/listen`
POST | request body: previous, as JSON | like `enumerate` | Listen to changes and returns either on change or after 30 second timeout. Compares change from `previous` that is sent as a parameter. "Change" is both connecting/disconnecting and session change. |
| `/acquire/PATH/PREVIOUS`
POST | `PATH`: path of device
`PREVNOUS`: previous session (or string "null") | {`session`: string} | Acquires the device at `PATH`. By "acquiring" the device, you are claiming the device for yourself.
Before acquiring, checks that the current session is `PREVIOUS`.
If two applications call `acquire` on a newly connected device at the same time, only one of them succeed. |
| `/release/SESSION`
POST | `SESSION`: session to release | {} | Releases the device with the given session.
By "releasing" the device, you claim that you don't want to use the device anymore. |
| `/call/SESSION`
POST | `SESSION`: session to call
request body: JSON
{`type`: string, `message`: object} | {`type`: string, `body`: object} | Calls the message and returns the response from TREZOR.
Messages are defined in [this protobuf file](https://github.com/trezor/trezor-common/blob/master/protob/messages.proto).
`type` in request is, for example, `GetFeatures`; `type` in response is, for example, `Features` |### Whitelisting
You cannot connect to `trezord` from anywhere on the internet. Your URL needs to be specifically whitelisted; whitelist is in the signed config file, that is sent during `configure/` call.
`localhost` is specifically whitelisted, so you can experiment on `http://localhost`. If you want to add your url in order to make a TREZOR web app, [make a pull request to this file](https://github.com/trezor/trezor-common/blob/master/signer/config.json).
## Download latest binary
Latest build packages are on https://wallet.trezor.io/data/bridge/latest/index.html
## Checking out sources
```
git clone https://github.com/trezor/trezord.git
cd trezord
git submodule update --init
```## Building
Change into `release/linux` or `release/windows` directory and run: `make`.
Or run `build.sh` to build locally using local dependencies.
In the latter case, here is a rough list of Debian package build dependencies:
`build-essential cmake curl libcurl4-gnutls-dev libprotobuf-dev pkg-config libusb-1.0-0 libusb-1.0-0-dev libmicrohttpd-dev libboost-all-dev protobuf-compiler`
or Fedora (as of 26) build dependencies:
`boost-devel-static protobuf-compiler cmake gcc-c++ libcurl-devel protobuf-devel libusbx-devel libmicrohttpd-devel protobuf-static`
Also you might need to regenerate protobuf files if you are using protobuf-3.x:
```
cd src/config
wget https://raw.githubusercontent.com/trezor/trezor-common/master/protob/config.proto
protoc -I/usr/include -I. --cpp_out=. config.proto
```