|
|
|
# JSON REST service for Monero
|
|
|
|
|
|
|
|
Example of using [restbed](https://github.com/Corvusoft/restbed/) to
|
|
|
|
provide Monero related JSON REST service. For this purpose,
|
|
|
|
a service called Open Monero was developed.
|
|
|
|
|
|
|
|
## Open Monero
|
|
|
|
|
|
|
|
Open Monero is an open source implementation of backend of
|
|
|
|
https://mymonero.com/. The frontend, which includes HTML, CSS, JavaScript were adapted
|
|
|
|
from (and originally developed by) https://mymonero.com/.
|
|
|
|
|
|
|
|
Unlike MyMonero, Open Monero's backend is open sourced, free
|
|
|
|
to use, host and modify. Additionally, the following features were added/changed:
|
|
|
|
|
|
|
|
- google analytics, cloudflare, images and flash were removed.
|
|
|
|
- transaction fees were set to zero (MyMonero also has now them zero due to problem with its RingCT).
|
|
|
|
- the wallets generated use 25 word mnemonics, fully compatible with official monero wallets
|
|
|
|
(13 word mnemonics generated by MyMonero work as usual though).
|
|
|
|
- import wallet fee was reduced.
|
|
|
|
- added support of testnet network and mainnet network without relying transactions
|
|
|
|
- improved handling of mempool, coinbase, locked and unlocked transactions.
|
|
|
|
- added dynamic fees for testnet.
|
|
|
|
- minimum mixin set to 4.
|
|
|
|
|
|
|
|
## Screenshot
|
|
|
|
|
|
|
|
![Open Monero](https://raw.githubusercontent.com/moneroexamples/restbed-xmr/master/screenshot/screen1.png)
|
|
|
|
|
|
|
|
|
|
|
|
## Limitations
|
|
|
|
|
|
|
|
#### Performance
|
|
|
|
|
|
|
|
Open Monero is not as fast as MyMonero. This is because it is basic, easy to understand
|
|
|
|
and straight forward implementation of the backend. Thus, it does not use any catching
|
|
|
|
of transactions, blocks, complex database structures and SQL queries. Also, no ongoing
|
|
|
|
monitoring of user's transactions is happening, since viewkey is not stored. Transaction
|
|
|
|
search threads start when user logs in (viewkey and address are submitted to the search thread),
|
|
|
|
and finish shorty after logout. Once the search thread stops,
|
|
|
|
they can't be restarted without user logging in back, as Open Monero does not store viewkeys.
|
|
|
|
|
|
|
|
|
|
|
|
## Host it yourself
|
|
|
|
|
|
|
|
The Open Monero consists of four components that need to be setup for it to work:
|
|
|
|
|
|
|
|
- MySql/Mariadb database - it stores user address (viewkey is not stored!),
|
|
|
|
associated transactions, outputs, inputs and transaction import payments information.
|
|
|
|
- Frontend - it is virtually same as that of MyMonero, except before mentioned differences.
|
|
|
|
It consists of HTML, CSS, and JavaScript.
|
|
|
|
- Monero daemon - daemon must be running and fully sync, as this is
|
|
|
|
where all transaction data is fetched from and used. Daemon also commits txs
|
|
|
|
from the Open Monero into the Monero network.
|
|
|
|
- Backend - fully written in C++. It uses [restbed](https://github.com/Corvusoft/restbed/) to serve JSON REST to the frontend
|
|
|
|
and [mysql++](http://www.tangentsoft.net/mysql++/) to interface the database. It also accesses Monero blockchain and "talks"
|
|
|
|
with Monero deamon.
|
|
|
|
|
|
|
|
|
|
|
|
## Example setup on Ubuntu 16.04
|
|
|
|
|
|
|
|
Below are example and basic instructions on how to setup up and run Open Monero on Ubuntu 16.04.
|
|
|
|
|
|
|
|
|
|
|
|
#### Monero libraries
|
|
|
|
|
|
|
|
Monero's libraries and header files are setup is described here:
|
|
|
|
|
|
|
|
- [compile-monero-on-ubuntu-16-04](https://github.com/moneroexamples/compile-monero-09-on-ubuntu-16-04)
|
|
|
|
|
|
|
|
#### Compilation of the Open Monero (don't run it yet)
|
|
|
|
|
|
|
|
Download Open Monero and compile it. In fact we could postpone compilation to later, but
|
|
|
|
we can just do it now, to see if it compiles. But don't run it yet. It will not
|
|
|
|
work without database, setup frontend, and synced and running monero blockchain.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# need mysql++ libraries
|
|
|
|
sudo apt install libmysql++-dev
|
|
|
|
|
|
|
|
git clone https://github.com/moneroexamples/restbed-xmr.git
|
|
|
|
|
|
|
|
cd restbed-xmr
|
|
|
|
|
|
|
|
mkdir build && cd build
|
|
|
|
|
|
|
|
cmake ..
|
|
|
|
|
|
|
|
make
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Mysql/Mariadb
|
|
|
|
|
|
|
|
```bash
|
|
|
|
sudo apt update
|
|
|
|
sudo apt install mysql-server
|
|
|
|
sudo mysql_secure_installation
|
|
|
|
```
|
|
|
|
|
|
|
|
Download `openmonero.sql` provided and setup the `openmonero` database. `openmonero.sql` script will
|
|
|
|
drop current `openmonero` if exist. So don't run it, if you have already some important information
|
|
|
|
in the `openmonero` database.
|
|
|
|
|
|
|
|
Assuming we are still in `build` folder:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# apply it to mysql
|
|
|
|
mysql -p -u root < ../sql/openmonero.sql
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Lighttpd and frontend
|
|
|
|
|
|
|
|
```bash
|
|
|
|
sudo apt-get install lighttpd
|
|
|
|
```
|
|
|
|
Assuming we are still in `build` folder, copy frontend source files into lighttpd www folder.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
sudo cp -rvf ../html/ /var/www/html
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Run Open Monero
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Scrap notes
|
|
|
|
|
|
|
|
### Generate your own ssl certificate
|
|
|
|
|
|
|
|
Setting up https and ssl certificates in restbed
|
|
|
|
- https://github.com/Corvusoft/restbed/blob/34187502642144ab9f749ab40f5cdbd8cb17a54a/example/https_service/source/example.cpp
|
|
|
|
|
|
|
|
Based on the link above:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Create Certificate
|
|
|
|
cd /tmp
|
|
|
|
openssl genrsa -out server.key 1024
|
|
|
|
openssl req -new -key server.key -out server.csr
|
|
|
|
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
|
|
|
|
openssl dhparam -out dh2048.pem 2048
|
|
|
|
```
|
|
|
|
|
|
|
|
### Enable it in Firefox or Chrome
|
|
|
|
|
|
|
|
Firefox and chrome will not work with that certificate as they cant verify it.
|
|
|
|
To overcome this for development purposes on localhost, just open new tab in the browser used
|
|
|
|
and go to any link from the service, e.g., `https://localhost:1984/login`. Once you do this,
|
|
|
|
you should get warring about unsecured or un verified certificate. Then you just add it manually
|
|
|
|
as exception.
|
|
|
|
|
|
|
|
Also Open Monero generates uses 25 word seeds, which are fully comptabilite with `monero-wallet-cli`
|
|
|
|
and `monero-core`.
|
|
|
|
|
|
|
|
### Test connection using curl
|
|
|
|
|
|
|
|
Example of curl https request to the service
|
|
|
|
|
|
|
|
```bash
|
|
|
|
curl -k -X POST -d '{"withCredentials":true,"address":"41pJD13rU5r3KZsxzS65tL9zLMpZZCer8aWSi7wj8Xm99BAgXthcj2wgazxdTX9auFAmp3czfJUGH2S3UJfLwDWXUxc3ooC","view_key":"06d1f0f0fd766c75b52b9c597592d06f4bca5cd6dcd3e9bf1859bc78d0d5f80e","create_account":true}' https://localhost:1984/login
|
|
|
|
```
|
|
|
|
|
|
|
|
## Other examples
|
|
|
|
|
|
|
|
Other examples can be found on [github](https://github.com/moneroexamples?tab=repositories).
|
|
|
|
Please know that some of the examples/repositories are not
|
|
|
|
finished and may not work as intended.
|
|
|
|
|
|
|
|
## How can you help?
|
|
|
|
|
|
|
|
Constructive criticism, code and website edits are always good. They can be made through github.
|