From c39f81f68387f30ad242fe1c38dfe7e249d3aba3 Mon Sep 17 00:00:00 2001 From: kexkey Date: Sat, 22 Sep 2018 14:49:26 -0400 Subject: [PATCH] First push from Satoshi Portal's own cyphernode --- CONTRIBUTING.md | 96 ++++ cron_docker/Dockerfile | 11 + cron_docker/README.md | 13 + cron_docker/callbacks_cron | 3 + cron_docker/env.properties | 1 + doc/API.md | 515 +++++++++++++++++ doc/INSTALL.md | 118 ++++ docker-compose.yml | 75 +++ proxy_docker/Dockerfile | 56 ++ proxy_docker/README.md | 520 ++++++++++++++++++ proxy_docker/app/bin/README.md | 5 + proxy_docker/app/bin/lightning-cli_arm | Bin 0 -> 366680 bytes proxy_docker/app/bin/lightning-cli_x86 | Bin 0 -> 347736 bytes proxy_docker/app/config/config.properties | 3 + .../config/spender_btcnode_curlcfg.properties | 1 + .../config/watcher_btcnode_curlcfg.properties | 1 + proxy_docker/app/data/watching.sql | 55 ++ proxy_docker/app/script/bitcoin.sh | 46 ++ proxy_docker/app/script/blockchainrpc.sh | 79 +++ proxy_docker/app/script/call_lightningd.sh | 102 ++++ proxy_docker/app/script/callbacks_job.sh | 148 +++++ proxy_docker/app/script/computefees.sh | 112 ++++ proxy_docker/app/script/confirmation.sh | 150 +++++ proxy_docker/app/script/getactivewatches.sh | 64 +++ proxy_docker/app/script/importaddress.sh | 21 + proxy_docker/app/script/manage_missed_conf.sh | 86 +++ proxy_docker/app/script/requesthandler.sh | 238 ++++++++ proxy_docker/app/script/responsetoclient.sh | 21 + proxy_docker/app/script/sendtobitcoinnode.sh | 59 ++ proxy_docker/app/script/sql.sh | 12 + proxy_docker/app/script/startproxy.sh | 15 + proxy_docker/app/script/tests-cb.sh | 9 + proxy_docker/app/script/tests.sh | 322 +++++++++++ proxy_docker/app/script/trace.sh | 15 + proxy_docker/app/script/unwatchrequest.sh | 27 + proxy_docker/app/script/utils.sh | 17 + proxy_docker/app/script/walletoperations.sh | 193 +++++++ proxy_docker/app/script/watchrequest.sh | 75 +++ proxy_docker/env.properties | 11 + pycoin_docker/Dockerfile | 31 ++ pycoin_docker/README.md | 16 + pycoin_docker/env.properties | 2 + pycoin_docker/script/pycoin.sh | 47 ++ pycoin_docker/script/requesthandler.sh | 84 +++ pycoin_docker/script/responsetoclient.sh | 21 + pycoin_docker/script/startpycoin.sh | 6 + pycoin_docker/script/trace.sh | 15 + 47 files changed, 3517 insertions(+) create mode 100644 CONTRIBUTING.md create mode 100644 cron_docker/Dockerfile create mode 100644 cron_docker/README.md create mode 100644 cron_docker/callbacks_cron create mode 100644 cron_docker/env.properties create mode 100644 doc/API.md create mode 100644 doc/INSTALL.md create mode 100644 docker-compose.yml create mode 100644 proxy_docker/Dockerfile create mode 100644 proxy_docker/README.md create mode 100644 proxy_docker/app/bin/README.md create mode 100644 proxy_docker/app/bin/lightning-cli_arm create mode 100644 proxy_docker/app/bin/lightning-cli_x86 create mode 100644 proxy_docker/app/config/config.properties create mode 100644 proxy_docker/app/config/spender_btcnode_curlcfg.properties create mode 100644 proxy_docker/app/config/watcher_btcnode_curlcfg.properties create mode 100644 proxy_docker/app/data/watching.sql create mode 100644 proxy_docker/app/script/bitcoin.sh create mode 100644 proxy_docker/app/script/blockchainrpc.sh create mode 100644 proxy_docker/app/script/call_lightningd.sh create mode 100644 proxy_docker/app/script/callbacks_job.sh create mode 100644 proxy_docker/app/script/computefees.sh create mode 100644 proxy_docker/app/script/confirmation.sh create mode 100644 proxy_docker/app/script/getactivewatches.sh create mode 100644 proxy_docker/app/script/importaddress.sh create mode 100644 proxy_docker/app/script/manage_missed_conf.sh create mode 100644 proxy_docker/app/script/requesthandler.sh create mode 100644 proxy_docker/app/script/responsetoclient.sh create mode 100644 proxy_docker/app/script/sendtobitcoinnode.sh create mode 100644 proxy_docker/app/script/sql.sh create mode 100644 proxy_docker/app/script/startproxy.sh create mode 100644 proxy_docker/app/script/tests-cb.sh create mode 100644 proxy_docker/app/script/tests.sh create mode 100644 proxy_docker/app/script/trace.sh create mode 100644 proxy_docker/app/script/unwatchrequest.sh create mode 100644 proxy_docker/app/script/utils.sh create mode 100644 proxy_docker/app/script/walletoperations.sh create mode 100644 proxy_docker/app/script/watchrequest.sh create mode 100644 proxy_docker/env.properties create mode 100644 pycoin_docker/Dockerfile create mode 100644 pycoin_docker/README.md create mode 100644 pycoin_docker/env.properties create mode 100644 pycoin_docker/script/pycoin.sh create mode 100644 pycoin_docker/script/requesthandler.sh create mode 100644 pycoin_docker/script/responsetoclient.sh create mode 100644 pycoin_docker/script/startpycoin.sh create mode 100644 pycoin_docker/script/trace.sh diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..ef0084d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,96 @@ +# Contributions are welcome! + +There are a lot to contribute. Bugfixes, improvements, new features, documentation, tests, etc. Let's be a team! + +# How to contribute + +## Cyphernode Architecture + +Cyphernode is an assembly of Docker containers being called by a request dispatcher. + +- The request dispatcher (requesthandler.sh) is the HTTP entry point. +- The request dispatcher is stateful: it keeps some data to be more effective on next calls. +- The request dispatcher is where Cyphernode scales with new features: add your switch, dispatch requests to your stuff. + +We are trying to construct each container so that it can be used separately, as a standalone reusable component. + +Important to us: + +- Be as optimized as possible, using Alpine when possible and having the smallest Docker image size possible +- Reuse existing software: built-in shell commands, well-established pieces of software, etc. +- Use open-source software +- Don't reinvent the wheel +- Expose the less possible surface + +## Center element: proxy_docker + +The proxy_docker is the container receiving and dispatching calls from clients. When adding a feature to Cyphernode, it is the first part to be modified to integrate the new feature. + +### proxy_docker/app/script/requesthandler.sh + +You will find in there the switch statement used to dispatch the requests. Just add a case block with your command, using other cases as examples for POST or GET requests. + +### proxy_docker/app/config + +You will find there config files. config.properties should be used to centralize configs. spender and watcher properties are used to obfuscate credentials on curl calls. + +### proxy_docker/app/data + +watching.sql contains the data model. Called "watching" because in the beginning of the project, it was only used for watching addresses. Now could be used to index the blockchain (build an explorer) and add more features. + +## cron_docker + +If you have jobs to be scheduled, use this container. Just add an executable and add it to the crontab. + +Currently used to make sure callbacks have been called for missed transactions. + +## docker-compose + +Deployment flexibility: +- distribute your components all over the world using docker-compose.yml constraints in a swarm +- scales your system with load-balancers +- automatically restarts a component if it crashes + +# What to contribute + +## TODO + +- Stress/load tests + - How does netcat behave on high traffic + - sqlite3 tweaks for dealing with threaded calls +- Security check +- Installation scripts: + - Configuration (config files) + - Deployment (docker-compose) + - Launcher app with lunanode + +## Improvements + +- wget is included in Alpine, we could use it instead of curl if we don't have to POST over HTTPS +- Make sure everything is thread-safe + - There's currently a flock in do_callbacks, do we need one elsewhere? +- Using inter-containers direct calls (through docker.sock?) instead of HTTP? +- Possibility to automate additions of new endpoints? + - With name, type (GET/POST), function name and script file, it's possible +- Autoconfig pruned property (in config.properties) by using getblockchaininfo RPC call +- Compile lightning-cli during configuration process (if not too slow) instead of precompile it +- Add results of gettransaction RPC calls in the DB (like already done for getrawtransaction results) and check DB before calling the node + - only when confirmations > 0 in DB + +## Features + +- Timestamping (OTS) +- Electrum Server features +- Web Admin Panel + - Using Trezor/Coldcard for authentication/signing + - Multi-authorization: SuperAdmin, Accounting (transactions, etc.), Marketing (usage, etc.), etc. +- Web Wallet + - Using Trezor/Coldcard for authentication/signing +- Index the blockchain +- PGP features: signing, verifying, etc. +- Full blockchain explorer +- e-mail notifications when things happen (monitoring): + - less than X BTC in the spending wallet + - more than Y% CPU used for more than Z minutes on the proxy container + - bitcoind instance unreachable + - any error diff --git a/cron_docker/Dockerfile b/cron_docker/Dockerfile new file mode 100644 index 0000000..1a3b755 --- /dev/null +++ b/cron_docker/Dockerfile @@ -0,0 +1,11 @@ +FROM alpine + +RUN apk add --update --no-cache \ + curl + +COPY callbacks_cron /etc/periodic/15min/callbacks_cron + +RUN chmod +x /etc/periodic/15min/callbacks_cron + +ENTRYPOINT ["crond"] +CMD ["-f"] diff --git a/cron_docker/README.md b/cron_docker/README.md new file mode 100644 index 0000000..65af613 --- /dev/null +++ b/cron_docker/README.md @@ -0,0 +1,13 @@ +# Cyphernode CRON container + +## Configure your container by modifying `env.properties` file + +```properties +PROXY_URL=cyphernode:8888/executecallbacks +``` + +## Building docker image + +```shell +docker build -t proxycronimg . +``` diff --git a/cron_docker/callbacks_cron b/cron_docker/callbacks_cron new file mode 100644 index 0000000..68b888b --- /dev/null +++ b/cron_docker/callbacks_cron @@ -0,0 +1,3 @@ +#!/bin/sh + +curl ${PROXY_URL} diff --git a/cron_docker/env.properties b/cron_docker/env.properties new file mode 100644 index 0000000..7c46889 --- /dev/null +++ b/cron_docker/env.properties @@ -0,0 +1 @@ +PROXY_URL=cyphernode:8888/executecallbacks diff --git a/doc/API.md b/doc/API.md new file mode 100644 index 0000000..ebfeeea --- /dev/null +++ b/doc/API.md @@ -0,0 +1,515 @@ +# Cyphernode + +## Current API + +### Watch a Bitcoin Address (called by application) + +Inserts the address and callbacks in the DB and imports the address to the Watching wallet. + +```http +POST http://cyphernode:8888/watch +with body... +{"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","unconfirmedCallbackURL":"192.168.111.233:1111/callback0conf","confirmedCallbackURL":"192.168.111.233:1111/callback1conf"} +``` + +Proxy response: + +```json +{ + "id": "291", + "event": "watch", + "imported": "1", + "inserted": "1", + "address": "2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp", + "unconfirmedCallbackURL": "192.168.133.233:1111/callback0conf", + "confirmedCallbackURL": "192.168.133.233:1111/callback1conf", + "estimatesmartfee2blocks": "0.000010", + "estimatesmartfee6blocks": "0.000010", + "estimatesmartfee36blocks": "0.000010", + "estimatesmartfee144blocks": "0.000010" +} +``` + +### Un-watch a previously watched Bitcoin Address (called by application) + +Updates the watched address row in DB so that callbacks won't be called on tx confirmations for that address. + +```http +GET http://cyphernode:8888/unwatch/2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp +``` + +Proxy response: + +```json +{ + "event": "unwatch", + "address": "2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp" +} +``` + +### Get a list of Bitcoin addresses being watched (called by application) + +Returns the list of currently watched addresses and callback information. + +```http +GET http://cyphernode:8888/getactivewatches +``` + +Proxy response: + +```json +{ + "watches": [ + { + "id":"291", + "address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp", + "imported":"1", + "unconfirmedCallbackURL":"192.168.133.233:1111/callback0conf", + "confirmedCallbackURL":"192.168.133.233:1111/callback1conf", + "watching_since":"2018-09-06 21:14:03"} + ] +} +``` + +### Confirm a Transaction on Watched Address (called by Bitcoin node on transaction confirmations) + +Confirms a transaction on an imported address. The Watching Bitcoin node will notify Cyphernode (thanks to walletnotify in bitcoin.conf) by calling this endpoint with txid when a tx is new or updated on an address. If address is still being watched (flag in DB), the corresponding callbacks will be called. + +```http +GET http://cyphernode:8888/conf/b081ca7724386f549cf0c16f71db6affeb52ff7a0d9b606fb2e5c43faffd3387 +``` + +Proxy response: + +```json +{ + "result":"confirmed" +} +``` + +### Get the Best Block Hash (called by application) + +Returns the best block hash of the watching Bitcoin node. + +```http +GET http://cyphernode:8888/getbestblockhash +``` + +Proxy response: + +```json +{ + "result":"00000000000000262588c21afbf9e1da151daf10b11215d501271163f26ea74a", + "error":null, + "id":null +} +``` + +### Get Block Info (called by application) + +Returns block info for the supplied block hash. + +```http +GET http://cyphernode:8888/getblockinfo/000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea +``` + +Proxy response: + +```json +{ + "result": + { + "hash":"000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea", + "confirmations":124329, + "strippedsize":8067, + "size":8067, + "weight":32268, + "height":1288528, + "version":536870912, + "versionHex":"20000000", + "merkleroot":"f1596255c357713c9827a739b17c8445cdcb81c4d336e24516c66f714a8f7030", + "tx":["65759382e7047f89f7e80676026c10401d47ce47ea997138251c59ca58f28a03","4d2d0cdd89061ce4bb8bdf5502aec9799e5065d205e8ab75c6598bd90a0e6e4c",[...],"a6d2fda52467aa7ca1271529ded5510bd12ad58f99f73fe995f50691aea4eb06"], + "time":1521404668, + "mediantime":1521398617, + "nonce":4209349744, + "bits":"1d00ffff", + "difficulty":1, + "chainwork":"000000000000000000000000000000000000000000000037e37554821063611f", + "nTx":32, + "previousblockhash":"000000005b55cefec377f7f73e656fef835a928b6eeb2060a89e7eb23a573c49", + "nextblockhash":"000000000ab13797b6dddd5e28d2ed62b937cd65ecf49b1f9d75108b9ea500f9" + }, + "error":null, + "id":null +} +``` + +### Get the Best Block Info (called by application) + +Returns best block info: calls getblockinfo with bestblockhash. + +```http +GET http://cyphernode:8888/getbestblockinfo +``` + +Proxy response: + +```json +{ + "result": + { + "hash":"000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea", + "confirmations":124329, + "strippedsize":8067, + "size":8067, + "weight":32268, + "height":1288528, + "version":536870912, + "versionHex":"20000000", + "merkleroot":"f1596255c357713c9827a739b17c8445cdcb81c4d336e24516c66f714a8f7030", + "tx":["65759382e7047f89f7e80676026c10401d47ce47ea997138251c59ca58f28a03","4d2d0cdd89061ce4bb8bdf5502aec9799e5065d205e8ab75c6598bd90a0e6e4c",[...],"a6d2fda52467aa7ca1271529ded5510bd12ad58f99f73fe995f50691aea4eb06"], + "time":1521404668, + "mediantime":1521398617, + "nonce":4209349744, + "bits":"1d00ffff", + "difficulty":1, + "chainwork":"000000000000000000000000000000000000000000000037e37554821063611f", + "nTx":32, + "previousblockhash":"000000005b55cefec377f7f73e656fef835a928b6eeb2060a89e7eb23a573c49", + "nextblockhash":"000000000ab13797b6dddd5e28d2ed62b937cd65ecf49b1f9d75108b9ea500f9" + }, + "error":null, + "id":null +} +``` + +### Get a transaction details (node's getrawtransaction) (called by application) + +Calls getrawtransaction RPC for the supplied txid. + +```http +GET http://cyphernode:8888/gettransaction/af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648 +``` + +Proxy response: + +```json +{ + "result": + { + "txid":"af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648", + "hash":"af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648", + "version":1, + "size":223, + "vsize":223, + "locktime":0, + "vin":[ + { + "txid":"53a0e2ffa456b97d3944b652bba771221e60f4d852546bd6b351d33261b3e8b6", + "vout":0, + "scriptSig": + { + "asm":"30440220127c4adc1cf985cd884c383e69440ce4d48a0c4fdce6bf9d70faa0ee8092acb80220632cb6c99ded7f261814e602fc8fa8e7fe8cb6a95d45c497846b8624f7d19b3c[ALL] 03df001c8b58ac42b6cbfc2223b8efaa7e9a1911e529bd2c8b7f90140079034e75", + "hex":"4730440220127c4adc1cf985cd884c383e69440ce4d48a0c4fdce6bf9d70faa0ee8092acb80220632cb6c99ded7f261814e602fc8fa8e7fe8cb6a95d45c497846b8624f7d19b3c012103df001c8b58ac42b6cbfc2223b8efaa7e9a1911e529bd2c8b7f90140079034e75" + }, + "sequence":4294967295 + } + ], + "vout":[ + { + "value":0.84000000, + "n":0, + "scriptPubKey": + { + "asm":"OP_HASH160 c449a7fafb3b13b2952e064f2c3c58e851bb9430 OP_EQUAL", + "hex":"a914c449a7fafb3b13b2952e064f2c3c58e851bb943087", + "reqSigs":1, + "type":"scripthash", + "addresses":[ + "2NB96fbwy8eoHttuZTtbwvvhEYrBwz494ov" + ] + } + }, + { + "value":0.01890000, + "n":1, + "scriptPubKey": + { + "asm":"OP_DUP OP_HASH160 b0379374df5eab8be9a21ee96711712bdb781a95 OP_EQUALVERIFY OP_CHECKSIG", + "hex":"76a914b0379374df5eab8be9a21ee96711712bdb781a9588ac", + "reqSigs":1, + "type":"pubkeyhash", + "addresses":[ + "mwahoJcaVuy2TiMtGDZV9PaujFeD9z1a1q" + ] + } + } + ], + "hex":"0100000001b6e8b36132d351b3d66b5452d8f4601e2271a7bb52b644397db9[...]4df5eab8be9a21ee96711712bdb781a9588ac00000000", + "blockhash":"000000009249e7d725cc087cb781ade1dbfaf2bd777822948d5fccd4044f8299", + "confirmations":1106162, + "time":1415240575, + "blocktime":1415240575 + }, + "error":null, + "id":null +} +``` + +### Try missed callbacks (called by proxycronnode, a CRON job that retries if something went wrong) +[See cron_docker](../cron_docker) + +Looks in DB for watched addresses, ask the watching Bitcoin node if those addresses got payments, if so it executes the callbacks that would be usually executed when "conf" is called by the node. This is useful if the watching node went down or there was a network glitch when a transaction on a watched address got confirmed. + +```http +GET http://cyphernode:8888/executecallbacks +``` + +Proxy response: EMPTY + +### Get spending wallet's balance (called by application) + +Calls getbalance RPC on the spending wallet. + +```http +GET http://cyphernode:8888/getbalance +``` + +Proxy response: + +```json +{ + "balance":1.51911837 +} +``` + +### Get a new Bitcoin address from spending wallet (called by application) + +Calls getnewaddress RPC on the spending wallet. Used to refill the spending wallet from cold wallet (ie Trezor). + +```http +GET http://cyphernode:8888/getnewaddress +``` + +Proxy response: + +```json +{ + "address":"2NEC972DZpRM7SfuJUG9rYEix2P9A8qsNKF" +} +``` + +### Spend coins from spending wallet (called by application) + +Calls sendtoaddress RPC on the spending wallet with supplied info. + +```http +POST http://cyphernode:8888/spend +with body... +{"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} +``` + +Proxy response: + +```json +{ + "status": "accepted", + "hash": "af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648" +} +``` + +### Add an output to the next batched transaction (called by application) + +Inserts output information in the DB. Used when batchspend is called later. + +```http +POST http://cyphernode:8888/addtobatch +with body... +{"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} +``` + +Proxy response: EMPTY + +### Spend a batched transaction with outputs added with addtobatch (called by application) + +Calls sendmany RPC on spending wallet with the unspent "addtobatch" inserted outputs. Will be useful during next bull run. + +```http +GET http://cyphernode:8888/batchspend +``` + +Proxy response: + +```json +{ + "status": "accepted", + "hash": "af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648" +} +``` + +### Get derived address(es) using path in config and provided index (called by application) + +Derives addresses for supplied index. Must be used with derivation.pub32 and derivation.path properties in config.properties. + +```http +GET http://cyphernode:8888/deriveindex/25-30 +GET http://cyphernode:8888/deriveindex/34 +``` + +Proxy response: + +```json +{ + "addresses":[ + {"address":"2N6Q9kBcLtNswgMSLSQ5oduhbctk7hxEJW8"}, + {"address":"2NFLhFghAPKEPuZCKoeXYYxuaBxhKXbmhBV"}, + {"address":"2N7gepbQtRM5Hm4PTjvGadj9wAwEwnAsKiP"}, + {"address":"2Mth8XDZpXkY9d95tort8HYEAuEesow2tF6"}, + {"address":"2MwqEmAXhUw6H7bJwMhD13HGWVEj2HgFiNH"}, + {"address":"2N2Y4BVRdrRFhweub2ehHXveGZC3nryMEJw"} + ] +} +``` + +### Get derived address(es) using provided path and index (called by application) + +Derives addresses for supplied pub32 and path. config.properties' derivation.pub32 and derivation.path are not used. + +```http +POST http://cyphernode:8888/derivepubpath +with body... +{"pub32":"tpubD6NzVbkrYhZ4YR3QK2tyfMMvBghAvqtNaNK1LTyDWcRHLcMUm3ZN2cGm5BS3MhCRCeCkXQkTXXjiJgqxpqXK7PeUSp86DTTgkLpcjMtpKWk","path":"0/25-30"} + +or + +{"pub32":"upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb","path":"0/34"} + +or + +{"pub32":"vpub5SLqN2bLY4WeZF3kL4VqiWF1itbf3A6oRrq9aPf16AZMVWYCuN9TxpAZwCzVgW94TNzZPNc9XAHD4As6pdnExBtCDGYRmNJrcJ4eV9hNqcv","path":"0/25-30"} +``` + +Proxy response: + +```json +{ + "addresses":[ + {"address":"mz3bWMW3BWGT9YGDjJwS8TfhJMMtZ91Frm"}, + {"address":"mkjmKEX3KJrVpiqLSSxKB6jjgm3WhPnrv8"}, + {"address":"mk43Tmf6E5nsmETTaNMTZK9TikaeVJRJ4a"}, + {"address":"n1SEcVHHKpHyNr695JpXNdH6b9cWQ26qkt"}, + {"address":"mzWqwZkA31kYVy1kpMoZgvfzSDyGgEi7Yg"}, + {"address":"mp5jtEDNa88xfSQGs5yYQGk7guGWvaG4ci"} + ] +} +``` + +### Get info from Lightning Network node (called by application) + +Calls getinfo from lightningd. Useful to let your users know where to connect to. + +```http +GET http://cyphernode:8888/ln_getinfo +``` + +Proxy response: + +```json +{ + "id": "03lightningnode", + "alias": "SatoshiPortal08", + "color": "008000", + "address": [ + ], + "binding": [ + { + "type": "ipv6", + "address": "::", + "port": 9735 + }, + { + "type": "ipv4", + "address": "0.0.0.0", + "port": 9735 + } + ], + "version": "v0.6.1rc1-40-gae61f64", + "blockheight": 1412861, + "network": "testnet" +} +``` + +### Create a Lightning Network invoice (called by application) + +Returns a LN invoice. Label must be unique. Description will be used by your user for payment. Expiry is in seconds. + +```http +POST http://cyphernode:8888/ln_create_invoice +with body... +{"msatoshi":10000,"label":"koNCcrSvhX3dmyFhW","description":"Bylls order #10649","expiry":900} +``` + +Proxy response: + +```json +{ + "payment_hash": "fd27edf261d4b089c3478dece4f2c92c8c68db7be3999e89d452d39c083ad00f", + "expires_at": 1536593926, + "bolt11": "lntb100n1pdedryzpp5l5n7munp6jcgns683hkwfukf9jxx3kmmuwveazw52tfeczp66q8sdqagfukcmrnyphhyer9wgszxvfsxc6rjxqzuycqp2ak5feh7x7wkkt76uc5ptzcv90jhzhs5swzefv9344hnv74c25dvsstx7l24y46sx5tnkenu480pe06wtly2h5lrj63vszzgrxt4grkcqcltquj" +} +``` + +### Pay a Lightning Network invoice (called by application) + +Make a LN payment. expected_msatoshi and expected_description are respectively the amount and description you gave your user for her to create the invoice; they must match the given bolt11 invoice supplied by your user. + +```http +POST http://cyphernode:8888/ln_pay +with body... +{"bolt11":"lntb1pdca82tpp5gv8mn5jqlj6xztpnt4r472zcyrwf3y2c3cvm4uzg2gqcnj90f83qdp2gf5hgcm0d9hzqnm4w3kx2apqdaexgetjyq3nwvpcxgcqp2g3d86wwdfvyxcz7kce7d3n26d2rw3wf5tzpm2m5fl2z3mm8msa3xk8nv2y32gmzlhwjved980mcmkgq83u9wafq9n4w28amnmwzujgqpmapcr3","expected_msatoshi":10000,"expected_description":"Bitcoin Outlet order #7082"} +``` + +Proxy response: + +```json +{ + "id": 9, + "payment_hash": "85b8e69733202e126620e7745be9e23a6b544b758145d86848f3e513e6e1ca42", + "destination": "03whatever", + "msatoshi": 50000000, + "msatoshi_sent": 10000, + "created_at": 1537025047, + "status": "complete", + "payment_preimage": "fececdc787a007a721a1945b70cb022149cc2ee4268964c99ba37a877bded664", + "description": "Bitcoin Outlet order #7082", + "getroute_tries": 1, + "sendpay_tries": 1, + "route": [ + { + "id": "03whatever", + "channel": "1413467:78:0", + "msatoshi": 10000, + "delay": 10 + } + ], + "failures": [ + ] +} + +``` + +### Get a new Bitcoin address from the Lightning Network node (to fund it) (called by application) + +Returns a Bitcoin bech32 address to fund your LN wallet. + +```http +GET http://cyphernode:8888/ln_newaddr +``` + +Proxy response: + +```json +{ + "address": "tb1q9n8jfwe9qvlgczfxa5n4pe7haarqflzerqfhk9" +} +``` diff --git a/doc/INSTALL.md b/doc/INSTALL.md new file mode 100644 index 0000000..fe374c0 --- /dev/null +++ b/doc/INSTALL.md @@ -0,0 +1,118 @@ +# Cyphernode + +Indirection layer between client and Bitcoin-related services. + +Here's the plan: + +- The containers are not publicly exposing ports. +- Everything is accessible exclusively within the encrypted overlay network. +- If your system is distributed: + - ...should be doubly encrypted by an OpenVPN tunnel + - ...the hosts should be secured and the VPN tunnel should have limited scope by iptables rules on each host. +- We can have different Bitcoin Nodes for watching and spending, giving the flexibility to have different security models one each. +- Only the Proxy has Bitcoin Node RPC credentials. +- The Proxy is exclusively accessible by the Overlay network's containers. +- To manually manage the Proxy (and have access to it), one has to gain access to the Docker host servers as a docker user. +- **Coming soon**: added security to use the spending features of the Proxy with Trezor and Coldcard. + +## Setting up + +Default setup assumes your Bitcoin Node is already running somewhere. The reason is that it takes a lot of disk space and often already exists in your infrastructure, why not reusing it. After all, full blockchain sync takes a while. + +You could also just uncomment it in the docker-compose file. If you run it in pruned mode, say so in config.properties. The computefees feature won't work in pruned mode. + +### Set the swarm +(10.8.0.2 is the host's VPN IP address) + +```shell +debian@dev:~/dev/Cyphernode$ docker swarm init --task-history-limit 1 --advertise-addr 10.8.0.2 +Swarm initialized: current node (hufy324d291dyakizsuvjd0uw) is now a manager. + +To add a worker to this swarm, run the following command: + + docker swarm join --token SWMTKN-1-2pxouynn9g8si42e8g9ujwy0v9po45axx367fy0fkjhzo3l1z8-75nirjfkobl7htvpfh986pyz3 10.8.0.2:2377 + +To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. +``` + +### Create the Overlay Network and make sure your app joins it! +(if your app is not a Docker container, you will have to expose Cyphernode's port and secure it! In that case, use a reverse proxy with TLS) + +```shell +debian@dev:~/dev/Cyphernode$ docker network create --driver=overlay --attachable --opt encrypted cyphernodenet +debian@dev:~/dev/Cyphernode$ docker network connect cyphernodenet yourappcontainer +``` + +### Configuration + +```shell +debian@dev:~/dev/Cyphernode$ vi proxy_docker/env.properties +debian@dev:~/dev/Cyphernode$ vi proxy_docker/app/config/derivation.properties +debian@dev:~/dev/Cyphernode$ vi proxy_docker/app/config/watcher_btcnode_curlcfg.properties +debian@dev:~/dev/Cyphernode$ vi proxy_docker/app/config/spender_btcnode_curlcfg.properties +debian@dev:~/dev/Cyphernode$ vi proxy_docker/app/config/config.properties +debian@dev:~/dev/Cyphernode$ vi cron_docker/env.properties +debian@dev:~/dev/Cyphernode$ vi pycoin_docker/env.properties +``` + +### Build cron image + +[See how to build proxycron image](../cron_docker) + +### Build btcproxy image + +[See how to build btcproxy image](../proxy_docker) + +### Build pycoin image + +[See how to build pycoin image](../pycoin_docker) + +### Build clightning image + +[See how to build clightning image](https://github.com/SatoshiPortal/dockers/tree/master/rpi/LN/c-lightning) + +### Deploy + +```shell +debian@dev:~/dev/Cyphernode$ docker stack deploy --compose-file docker-compose.yml cyphernodestack +Creating service cyphernodestack_cyphernode +Creating service cyphernodestack_proxycronnode +Creating service cyphernodestack_pycoinnode +Creating service cyphernodestack_clightningnode +``` + +## Off-site Bitcoin Node + +### Join swarm created on Cyphernode server + +```shell +pi@SP-BTC01:~ $ docker swarm join --token SWMTKN-1-2pxouynn9g8si42e8g9ujwy0v9po45axx367fy0fkjhzo3l1z8-75nirjfkobl7htvpfh986pyz3 10.8.0.2:2377 +``` + +### Build node container image + +[See how to build Bitcoin Node image](https://github.com/SatoshiPortal/dockers/tree/master/rpi/bitcoin-core) + +### Run node or connect already-running node + +```shell +pi@SP-BTC01:~ $ docker run -d --rm --mount type=bind,source="$HOME/.bitcoin",target="/bitcoinuser/.bitcoin" --name btcnode --network cyphernodenet btcnode +``` + +```shell +pi@SP-BTC01:~ $ docker network connect cyphernodenet btcnode +``` + +## Test deployment (from any host) + +```shell +echo "GET /getbestblockinfo" | docker run --rm -i --network=cyphernodenet alpine nc cyphernode:8888 - +echo "GET /getbalance" | docker run --rm -i --network=cyphernodenet alpine nc cyphernode:8888 - +echo "GET /getbestblockhash" | docker run --rm -i --network=cyphernodenet alpine nc cyphernode:8888 - +echo "GET /getblockinfo/00000000a64e0d1ae0c39166f4e8717a672daf3d61bf7bbb41b0f487fcae74d2" | docker run --rm -i --network=cyphernodenet alpine nc cyphernode:8888 - +curl -v -H "Content-Type: application/json" -d '{"address":"2MsWyaQ8APbnqasFpWopqUKqsdpiVY3EwLE","amount":0.2}' cyphernode:8888/spend +echo "GET /ln_getinfo" | docker run --rm -i --network=cyphernodenet alpine nc cyphernode:8888 - +echo "GET /ln_newaddr" | docker run --rm -i --network=cyphernodenet alpine nc cyphernode:8888 - +curl -v -H "Content-Type: application/json" -d '{"msatoshi":10000,"label":"koNCcrSvhX3dmyFhW","description":"Bylls order #10649","expiry":900}' cyphernode:8888/ln_create_invoice +curl -v -H "Content-Type: application/json" -d '{"bolt11":"lntb1pdca82tpp5gv8mn5jqlj6xztpnt4r472zcyrwf3y2c3cvm4uzg2gqcnj90f83qdp2gf5hgcm0d9hzqnm4w3kx2apqdaexgetjyq3nwvpcxgcqp2g3d86wwdfvyxcz7kce7d3n26d2rw3wf5tzpm2m5fl2z3mm8msa3xk8nv2y32gmzlhwjved980mcmkgq83u9wafq9n4w28amnmwzujgqpmapcr3","msatoshi":10000,"description":"Bitcoin Outlet order #7082"}' cyphernode:8888/ln_pay +``` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c28490d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,75 @@ +version: "3" + +services: + cyphernode: + # Bitcoin Mini Proxy + env_file: + - proxy_docker/env.properties + image: btcproxyimg +# ports: +# - "8888:8888" + volumes: + # Variable substitutions don't work + # Match with DB_PATH in proxy_docker/env.properties + - "~/btcproxydb:/proxyuser/db" + - "~/.lightning:/proxyuser/.lightning" + deploy: + placement: + constraints: [node.hostname==dev] + networks: + - cyphernodenet + + proxycronnode: + # Async jobs + env_file: + - cron_docker/env.properties + image: proxycronimg + deploy: + placement: + constraints: [node.hostname==dev] + networks: + - cyphernodenet + + pycoinnode: + # Pycoin + env_file: + - pycoin_docker/env.properties + image: pycoinimg +# ports: +# - "7777:7777" + deploy: + placement: + constraints: [node.hostname==dev] + networks: + - cyphernodenet + + clightningnode: + # c-lightning lightning network node + image: clnimg + ports: + - "9735:9735" + volumes: + - "~/.lightning:/lnuser/.lightning" + deploy: + placement: + constraints: [node.hostname==dev] + networks: + - cyphernodenet + +# spbtcnode: + # Bitcoin node +# image: btcnode +# ports: +# - "18333:18333" +# - "18332:18332" +# - "29000:29000" +# - "8333:8333" +# - "8332:8332" +# volumes: +# - "~/.bitcoin:/bitcoinuser/.bitcoin" +# networks: +# - cyphernodenet + +networks: + cyphernodenet: + external: true diff --git a/proxy_docker/Dockerfile b/proxy_docker/Dockerfile new file mode 100644 index 0000000..ad7bc0a --- /dev/null +++ b/proxy_docker/Dockerfile @@ -0,0 +1,56 @@ +FROM alpine + +ARG USER_ID +ARG GROUP_ID +ENV USERNAME proxyuser +ENV HOME /${USERNAME} +ENV USER_ID ${USER_ID:-1000} +ENV GROUP_ID ${GROUP_ID:-1000} + +RUN addgroup -g ${GROUP_ID} ${USERNAME} \ + && adduser -u ${USER_ID} -G ${USERNAME} -D -s /bin/sh -h ${HOME} ${USERNAME} + +RUN apk add --update --no-cache \ + sqlite \ + jq \ + curl + +COPY --chown=proxyuser app/script/callbacks_job.sh ${HOME}/callbacks_job.sh +COPY --chown=proxyuser app/script/blockchainrpc.sh ${HOME}/blockchainrpc.sh +COPY --chown=proxyuser app/script/call_lightningd.sh ${HOME}/call_lightningd.sh +COPY --chown=proxyuser app/script/bitcoin.sh ${HOME}/bitcoin.sh +COPY --chown=proxyuser app/script/requesthandler.sh ${HOME}/requesthandler.sh +COPY --chown=proxyuser app/script/watchrequest.sh ${HOME}/watchrequest.sh +COPY --chown=proxyuser app/script/walletoperations.sh ${HOME}/walletoperations.sh +COPY --chown=proxyuser app/script/confirmation.sh ${HOME}/confirmation.sh +COPY --chown=proxyuser app/config/watcher_btcnode_curlcfg.properties ${HOME}/watcher_btcnode_curlcfg.properties +COPY --chown=proxyuser app/config/spender_btcnode_curlcfg.properties ${HOME}/spender_btcnode_curlcfg.properties +COPY --chown=proxyuser app/config/config.properties ${HOME}/config.properties +COPY --chown=proxyuser app/script/startproxy.sh ${HOME}/startproxy.sh +COPY --chown=proxyuser app/script/trace.sh ${HOME}/trace.sh +COPY --chown=proxyuser app/script/sendtobitcoinnode.sh ${HOME}/sendtobitcoinnode.sh +COPY --chown=proxyuser app/script/responsetoclient.sh ${HOME}/responsetoclient.sh +COPY --chown=proxyuser app/script/importaddress.sh ${HOME}/importaddress.sh +COPY --chown=proxyuser app/script/sql.sh ${HOME}/sql.sh +COPY --chown=proxyuser app/data/watching.sql ${HOME}/watching.sql +COPY --chown=proxyuser app/script/computefees.sh ${HOME}/computefees.sh +COPY --chown=proxyuser app/script/unwatchrequest.sh ${HOME}/unwatchrequest.sh +COPY --chown=proxyuser app/script/getactivewatches.sh ${HOME}/getactivewatches.sh +COPY --chown=proxyuser app/script/utils.sh ${HOME}/utils.sh +COPY --chown=proxyuser app/script/manage_missed_conf.sh ${HOME}/manage_missed_conf.sh +COPY --chown=proxyuser app/script/tests.sh ${HOME}/tests.sh +COPY --chown=proxyuser app/script/tests-cb.sh ${HOME}/tests-cb.sh +COPY --chown=proxyuser app/bin/lightning-cli_x86 ${HOME}/lightning-cli + +USER ${USERNAME} +WORKDIR ${HOME} + +RUN chmod +x startproxy.sh requesthandler.sh \ + && chmod 600 watcher_btcnode_curlcfg.properties \ + && chmod 600 spender_btcnode_curlcfg.properties \ + && chmod 600 config.properties \ + && mkdir db + +VOLUME ["${HOME}/db", "${HOME}/.lightning"] + +ENTRYPOINT ["./startproxy.sh"] diff --git a/proxy_docker/README.md b/proxy_docker/README.md new file mode 100644 index 0000000..5f34389 --- /dev/null +++ b/proxy_docker/README.md @@ -0,0 +1,520 @@ +# Cyphernode Proxy + +We assume you are the user pi on a Raspberry Pi. + +## Create proxyuser that will run the processes + +Log in your host and: + +```shell +sudo useradd proxyuser +``` + +## Configure your container by modifying `env.properties` file + +```properties +TRACING=1 +WATCHER_BTC_NODE_RPC_URL=btcnode:18332/wallet/watching01.dat +SPENDER_BTC_NODE_RPC_URL=btcnode:18332/wallet/spending01.dat +PROXY_LISTENING_PORT=8888 +# Variable substitutions don't work +DB_PATH=/proxyuser/db +DB_FILE=/proxyuser/db/proxydb +# Pycoin container +PYCOIN_CONTAINER=pycoinnode:7777 +# OTS container +OTS_CONTAINER=otsnode:6666 +``` + +## Set your Watching Bitcoin node RPC credentials in `app/config/watcher_btcnode_curlcfg.properties` + +```properties +user=rpc_username:rpc_password +``` + +## Set your Spending Bitcoin node RPC credentials in `app/config/spender_btcnode_curlcfg.properties` + +```properties +user=rpc_username:rpc_password +``` + +## Set your address derivation information in `app/config/derivation.properties` + +```properties +derivation.xpub=upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb +derivation.path=0/n +watchingnode.pruned=false +``` + +## Building docker image + +```shell +docker build -t btcproxyimg --build-arg USER_ID=$(id -u proxyuser) --build-arg GROUP_ID=$(id -g proxyuser) . +``` + +## Create sqlite3 database path and give rights + +```shell +mkdir ~/btcproxydb ; sudo chown -R proxyuser:pi ~/btcproxydb ; sudo chmod g+ws ~/btcproxydb +``` + +## What you MUST have in your Watching Bitcoin node's bitcoin.conf file +(or something similar) +(*Not in the Spending Bitcoin node!*) + +```properties +walletnotify=curl cyphernode:8888/conf/%s +``` + +## Current API + +### Watch a Bitcoin Address (called by application) + +```http +POST http://cyphernode:8888/watch +with body... +{"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","unconfirmedCallbackURL":"192.168.111.233:1111/callback0conf","confirmedCallbackURL":"192.168.111.233:1111/callback1conf"} +``` + +Proxy response: + +```json +{ + "id": "291", + "event": "watch", + "imported": "1", + "inserted": "1", + "address": "2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp", + "unconfirmedCallbackURL": "192.168.133.233:1111/callback0conf", + "confirmedCallbackURL": "192.168.133.233:1111/callback1conf", + "estimatesmartfee2blocks": "0.000010", + "estimatesmartfee6blocks": "0.000010", + "estimatesmartfee36blocks": "0.000010", + "estimatesmartfee144blocks": "0.000010" +} +``` + +### Un-watch a previously watched Bitcoin Address (called by application) + +```http +GET http://cyphernode:8888/unwatch/2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp +``` + +Proxy response: + +```json +{ + "event": "unwatch", + "address": "2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp" +} +``` + +### Get a list of Bitcoin addresses being watched (called by application) + +```http +GET http://cyphernode:8888/getactivewatches +``` + +Proxy response: + +```json +{ + "watches": [ + { + "id":"291", + "address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp", + "imported":"1", + "unconfirmedCallbackURL":"192.168.133.233:1111/callback0conf", + "confirmedCallbackURL":"192.168.133.233:1111/callback1conf", + "watching_since":"2018-09-06 21:14:03"} + ] +} +``` + +### Confirm a Transaction on Watched Address (called by Bitcoin node on transaction confirmations) + +```http +GET http://cyphernode:8888/conf/b081ca7724386f549cf0c16f71db6affeb52ff7a0d9b606fb2e5c43faffd3387 +``` + +Proxy response: + +```json +{ + "result":"confirmed" +} +``` + +### Get the Best Block Hash (called by application) + +```http +GET http://cyphernode:8888/getbestblockhash +``` + +Proxy response: + +```json +{ + "result":"00000000000000262588c21afbf9e1da151daf10b11215d501271163f26ea74a", + "error":null, + "id":null +} +``` + +### Get Block Info (called by application) + +```http +GET http://cyphernode:8888/getblockinfo/000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea +``` + +Proxy response: + +```json +{ + "result": + { + "hash":"000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea", + "confirmations":124329, + "strippedsize":8067, + "size":8067, + "weight":32268, + "height":1288528, + "version":536870912, + "versionHex":"20000000", + "merkleroot":"f1596255c357713c9827a739b17c8445cdcb81c4d336e24516c66f714a8f7030", + "tx":["65759382e7047f89f7e80676026c10401d47ce47ea997138251c59ca58f28a03","4d2d0cdd89061ce4bb8bdf5502aec9799e5065d205e8ab75c6598bd90a0e6e4c",[...],"a6d2fda52467aa7ca1271529ded5510bd12ad58f99f73fe995f50691aea4eb06"], + "time":1521404668, + "mediantime":1521398617, + "nonce":4209349744, + "bits":"1d00ffff", + "difficulty":1, + "chainwork":"000000000000000000000000000000000000000000000037e37554821063611f", + "nTx":32, + "previousblockhash":"000000005b55cefec377f7f73e656fef835a928b6eeb2060a89e7eb23a573c49", + "nextblockhash":"000000000ab13797b6dddd5e28d2ed62b937cd65ecf49b1f9d75108b9ea500f9" + }, + "error":null, + "id":null +} +``` + +### Get the Best Block Info (called by application) + +```http +GET http://cyphernode:8888/getbestblockinfo +``` + +Proxy response: + +```json +{ + "result": + { + "hash":"000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea", + "confirmations":124329, + "strippedsize":8067, + "size":8067, + "weight":32268, + "height":1288528, + "version":536870912, + "versionHex":"20000000", + "merkleroot":"f1596255c357713c9827a739b17c8445cdcb81c4d336e24516c66f714a8f7030", + "tx":["65759382e7047f89f7e80676026c10401d47ce47ea997138251c59ca58f28a03","4d2d0cdd89061ce4bb8bdf5502aec9799e5065d205e8ab75c6598bd90a0e6e4c",[...],"a6d2fda52467aa7ca1271529ded5510bd12ad58f99f73fe995f50691aea4eb06"], + "time":1521404668, + "mediantime":1521398617, + "nonce":4209349744, + "bits":"1d00ffff", + "difficulty":1, + "chainwork":"000000000000000000000000000000000000000000000037e37554821063611f", + "nTx":32, + "previousblockhash":"000000005b55cefec377f7f73e656fef835a928b6eeb2060a89e7eb23a573c49", + "nextblockhash":"000000000ab13797b6dddd5e28d2ed62b937cd65ecf49b1f9d75108b9ea500f9" + }, + "error":null, + "id":null +} +``` + +### Get a transaction details (node's getrawtransaction) (called by application) + +```http +GET http://cyphernode:8888/gettransaction/af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648 +``` + +Proxy response: + +```json +{ + "result": + { + "txid":"af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648", + "hash":"af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648", + "version":1, + "size":223, + "vsize":223, + "locktime":0, + "vin":[ + { + "txid":"53a0e2ffa456b97d3944b652bba771221e60f4d852546bd6b351d33261b3e8b6", + "vout":0, + "scriptSig": + { + "asm":"30440220127c4adc1cf985cd884c383e69440ce4d48a0c4fdce6bf9d70faa0ee8092acb80220632cb6c99ded7f261814e602fc8fa8e7fe8cb6a95d45c497846b8624f7d19b3c[ALL] 03df001c8b58ac42b6cbfc2223b8efaa7e9a1911e529bd2c8b7f90140079034e75", + "hex":"4730440220127c4adc1cf985cd884c383e69440ce4d48a0c4fdce6bf9d70faa0ee8092acb80220632cb6c99ded7f261814e602fc8fa8e7fe8cb6a95d45c497846b8624f7d19b3c012103df001c8b58ac42b6cbfc2223b8efaa7e9a1911e529bd2c8b7f90140079034e75" + }, + "sequence":4294967295 + } + ], + "vout":[ + { + "value":0.84000000, + "n":0, + "scriptPubKey": + { + "asm":"OP_HASH160 c449a7fafb3b13b2952e064f2c3c58e851bb9430 OP_EQUAL", + "hex":"a914c449a7fafb3b13b2952e064f2c3c58e851bb943087", + "reqSigs":1, + "type":"scripthash", + "addresses":[ + "2NB96fbwy8eoHttuZTtbwvvhEYrBwz494ov" + ] + } + }, + { + "value":0.01890000, + "n":1, + "scriptPubKey": + { + "asm":"OP_DUP OP_HASH160 b0379374df5eab8be9a21ee96711712bdb781a95 OP_EQUALVERIFY OP_CHECKSIG", + "hex":"76a914b0379374df5eab8be9a21ee96711712bdb781a9588ac", + "reqSigs":1, + "type":"pubkeyhash", + "addresses":[ + "mwahoJcaVuy2TiMtGDZV9PaujFeD9z1a1q" + ] + } + } + ], + "hex":"0100000001b6e8b36132d351b3d66b5452d8f4601e2271a7bb52b644397db9[...]4df5eab8be9a21ee96711712bdb781a9588ac00000000", + "blockhash":"000000009249e7d725cc087cb781ade1dbfaf2bd777822948d5fccd4044f8299", + "confirmations":1106162, + "time":1415240575, + "blocktime":1415240575 + }, + "error":null, + "id":null +} +``` + +### Try missed callbacks (called by proxycronnode, a CRON job that retries if something went wrong) +[See cron_docker](../cron_docker) + +```http +GET http://cyphernode:8888/executecallbacks +``` + +Proxy response: EMPTY + +### Get spending wallet's balance (called by application) + +```http +GET http://cyphernode:8888/getbalance +``` + +Proxy response: + +```json +{ + "balance":1.51911837 +} +``` + +### Get a new Bitcoin address from spending wallet (called by application) + +```http +GET http://cyphernode:8888/getnewaddress +``` + +Proxy response: + +```json +{ + "address":"2NEC972DZpRM7SfuJUG9rYEix2P9A8qsNKF" +} +``` + +### Spend coins from spending wallet (called by application) + +```http +POST http://cyphernode:8888/spend +with body... +{"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} +``` + +Proxy response: + +```json +{ + "status": "accepted", + "hash": "af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648" +} +``` + +### Add an output to the next batched transaction (called by application) + +```http +POST http://cyphernode:8888/addtobatch +with body... +{"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} +``` + +Proxy response: EMPTY + +### Spend a batched transaction with outputs added with addtobatch (called by application) + +```http +GET http://cyphernode:8888/batchspend +``` + +Proxy response: + +```json +{ + "status": "accepted", + "hash": "af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648" +} +``` + +### Get derived address(es) using path in config and provided index (called by application) + +```http +GET http://cyphernode:8888/deriveindex/25-30 +GET http://cyphernode:8888/deriveindex/34 +``` + +Proxy response: + +```json +{ + "addresses":[ + {"address":"2N6Q9kBcLtNswgMSLSQ5oduhbctk7hxEJW8"}, + {"address":"2NFLhFghAPKEPuZCKoeXYYxuaBxhKXbmhBV"}, + {"address":"2N7gepbQtRM5Hm4PTjvGadj9wAwEwnAsKiP"}, + {"address":"2Mth8XDZpXkY9d95tort8HYEAuEesow2tF6"}, + {"address":"2MwqEmAXhUw6H7bJwMhD13HGWVEj2HgFiNH"}, + {"address":"2N2Y4BVRdrRFhweub2ehHXveGZC3nryMEJw"} + ] +} +``` + +### Get derived address(es) using provided path and index (called by application) + +```http +POST http://cyphernode:8888/derivepubpath +with body... +{"pub32":"tpubD6NzVbkrYhZ4YR3QK2tyfMMvBghAvqtNaNK1LTyDWcRHLcMUm3ZN2cGm5BS3MhCRCeCkXQkTXXjiJgqxpqXK7PeUSp86DTTgkLpcjMtpKWk","path":"0/25-30"} + +or + +{"pub32":"upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb","path":"0/34"} + +or + +{"pub32":"vpub5SLqN2bLY4WeZF3kL4VqiWF1itbf3A6oRrq9aPf16AZMVWYCuN9TxpAZwCzVgW94TNzZPNc9XAHD4As6pdnExBtCDGYRmNJrcJ4eV9hNqcv","path":"0/25-30"} +``` + +Proxy response: + +```json +{ + "addresses":[ + {"address":"mz3bWMW3BWGT9YGDjJwS8TfhJMMtZ91Frm"}, + {"address":"mkjmKEX3KJrVpiqLSSxKB6jjgm3WhPnrv8"}, + {"address":"mk43Tmf6E5nsmETTaNMTZK9TikaeVJRJ4a"}, + {"address":"n1SEcVHHKpHyNr695JpXNdH6b9cWQ26qkt"}, + {"address":"mzWqwZkA31kYVy1kpMoZgvfzSDyGgEi7Yg"}, + {"address":"mp5jtEDNa88xfSQGs5yYQGk7guGWvaG4ci"} + ] +} +``` + +### Get info from Lightning Network node (called by application) + +```http +GET http://cyphernode:8888/ln_getinfo +``` + +Proxy response: + +```json +{ + "id": "03bb990f43e6a6eccb223288d32fcb91209b12370c0a8bf5cdf4ad7bc11e33f253", + "alias": "SatoshiPortal01", + "color": "008000", + "address": [ + ], + "binding": [ + { + "type": "ipv6", + "address": "::", + "port": 9735 + }, + { + "type": "ipv4", + "address": "0.0.0.0", + "port": 9735 + } + ], + "version": "v0.6.1rc1-40-gae61f64", + "blockheight": 1412861, + "network": "testnet" +} +``` + +### Create a Lightning Network invoice (called by application) + +```http +POST http://cyphernode:8888/ln_create_invoice +with body... +{"msatoshi":10000,"label":"koNCcrSvhX3dmyFhW","description":"Bylls order #10649","expiry":900} +``` + +Proxy response: + +```json +{ + "payment_hash": "fd27edf261d4b089c3478dece4f2c92c8c68db7be3999e89d452d39c083ad00f", + "expires_at": 1536593926, + "bolt11": "lntb100n1pdedryzpp5l5n7munp6jcgns683hkwfukf9jxx3kmmuwveazw52tfeczp66q8sdqagfukcmrnyphhyer9wgszxvfsxc6rjxqzuycqp2ak5feh7x7wkkt76uc5ptzcv90jhzhs5swzefv9344hnv74c25dvsstx7l24y46sx5tnkenu480pe06wtly2h5lrj63vszzgrxt4grkcqcltquj" +} +``` + +### Pay a Lightning Network invoice (called by application) + +```http +POST http://cyphernode:8888/ln_pay +with body... +{"bolt11":"lntb1pdca82tpp5gv8mn5jqlj6xztpnt4r472zcyrwf3y2c3cvm4uzg2gqcnj90f83qdp2gf5hgcm0d9hzqnm4w3kx2apqdaexgetjyq3nwvpcxgcqp2g3d86wwdfvyxcz7kce7d3n26d2rw3wf5tzpm2m5fl2z3mm8msa3xk8nv2y32gmzlhwjved980mcmkgq83u9wafq9n4w28amnmwzujgqpmapcr3","expected_msatoshi":10000,"expected_description":"Bitcoin Outlet order #7082"} +``` + +Proxy response: + +```json +{ + "": "" +} +``` + +### Get a new Bitcoin address from the Lightning Network node (to fund it) (called by application) + +```http +GET http://cyphernode:8888/ln_newaddr +``` + +Proxy response: + +```json +{ + "address": "tb1q9n8jfwe9qvlgczfxa5n4pe7haarqflzerqfhk9" +} +``` diff --git a/proxy_docker/app/bin/README.md b/proxy_docker/app/bin/README.md new file mode 100644 index 0000000..5b6177a --- /dev/null +++ b/proxy_docker/app/bin/README.md @@ -0,0 +1,5 @@ +# Nota bene + +lightning-cli binary has been pre-compiled in an Alpine docker container. + +Use lightning-cli_arm for armhf architecture, lightning-cli_x86 for x86_64. diff --git a/proxy_docker/app/bin/lightning-cli_arm b/proxy_docker/app/bin/lightning-cli_arm new file mode 100644 index 0000000000000000000000000000000000000000..8f2e064ac6d7ff78f8d84af16bdf37abb363707c GIT binary patch literal 366680 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 QUwF^ck`;kSVz~Xk0Sr~7L;wH) literal 0 HcmV?d00001 diff --git a/proxy_docker/app/bin/lightning-cli_x86 b/proxy_docker/app/bin/lightning-cli_x86 new file mode 100644 index 0000000000000000000000000000000000000000..bf3e61695d2c8914ca2d6081a9036ea3b7f15ffa GIT binary patch literal 347736 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 and callback1conf NOT NULL and watching') + trace "[do_callbacks] callbacks1conf=${callbacks}" + + for row in ${callbacks} + do + build_callback ${row} + returncode=$? + if [ "${returncode}" -eq 0 ]; then + address=$(echo "${row}" | cut -d '|' -f2) + sql "UPDATE watching SET calledback1conf=1, watching=0 WHERE address=\"${address}\"" + trace_rc $? + fi + done + ) 200>./.callbacks.lock +} + +build_callback() +{ + trace "Entering build_callback()..." + + local row=$@ + local id + local url + local data + local address + local txid + local vout_n + local sent_amount + local confirmations + local ts_firstseen + local fee + local size + local vsize + local blockhash + local blocktime + local blockheight + + # callback0conf, address, txid, vout, amount, confirmations, timereceived, fee, size, vsize, blockhash, blockheight, blocktime, w.id + + trace "[build_callback] row=${row}" + id=$(echo "${row}" | cut -d '|' -f14) + trace "[build_callback] id=${id}" + url=$(echo "${row}" | cut -d '|' -f1) + trace "[build_callback] url=${url}" + address=$(echo "${row}" | cut -d '|' -f2) + trace "[build_callback] address=${address}" + txid=$(echo "${row}" | cut -d '|' -f3) + trace "[build_callback] txid=${txid}" + vout_n=$(echo "${row}" | cut -d '|' -f4) + trace "[build_callback] vout_n=${vout_n}" + sent_amount=$(echo "${row}" | cut -d '|' -f5) + trace "[build_callback] sent_amount=${sent_amount}" + confirmations=$(echo "${row}" | cut -d '|' -f6) + trace "[build_callback] confirmations=${confirmations}" + ts_firstseen=$(echo "${row}" | cut -d '|' -f7) + trace "[build_callback] ts_firstseen=${ts_firstseen}" + + # If node in pruned mode, we can't calculate the fees and then we don't want + # to send 0.00000000 as fees but empty string to distinguish. + fee=$(echo "${row}" | cut -d '|' -f8) + if [ -n "${fee}" ]; then + fee=$(echo "${fee}" | awk '{ printf "%.8f", $0 }') + fi + trace "[build_callback] fee=${fee}" + size=$(echo "${row}" | cut -d '|' -f9) + trace "[build_callback] size=${size}" + vsize=$(echo "${row}" | cut -d '|' -f10) + trace "[build_callback] vsize=${vsize}" + is_replaceable=$(echo "${row}" | cut -d '|' -f15) + trace "[build_callback] is_replaceable=${is_replaceable}" + blockhash=$(echo "${row}" | cut -d '|' -f11) + trace "[build_callback] blockhash=${blockhash}" + blockheight=$(echo "${row}" | cut -d '|' -f12) + trace "[build_callback] blockheight=${blockheight}" + blocktime=$(echo "${row}" | cut -d '|' -f13) + trace "[build_callback] blocktime=${blocktime}" + + data="{\"id\":\"${id}\"," + data="${data}\"address\":\"${address}\"," + data="${data}\"hash\":\"${txid}\"," + data="${data}\"vout_n\":${vout_n}," + data="${data}\"sent_amount\":${sent_amount}," + data="${data}\"confirmations\":${confirmations}," + data="${data}\"received\":\"$(date -Is -d @${ts_firstseen})\"," + data="${data}\"size\":${size}," + data="${data}\"vsize\":${vsize}," + data="${data}\"fees\":${fee}," + data="${data}\"is_replaceable\":${is_replaceable}," + data="${data}\"blockhash\":\"${blockhash}\"," + if [ -z ${blocktime} ]; then + data="${data}\"blocktime\":\"\"," + else + data="${data}\"blocktime\":\"$(date -Is -d @${blocktime})\"," + fi + data="${data}\"blockheight\":\"${blockheight}\"}" + trace "[build_callback] data=${data}" + + curl_callback "${url}" "${data}" + return $? +} + +curl_callback() +{ + trace "Entering curl_callback()..." + + local url=${1} + local data=${2} + + trace "[curl_callback] curl -H \"Content-Type: application/json\" -d \"${data}\" ${url}" + curl -H "Content-Type: application/json" -H "X-Forwarded-Proto: https" -d "${data}" ${url} + local returncode=$? + trace_rc ${returncode} + + return ${returncode} +} + +case "${0}" in *callbacks_job.sh) do_callbacks $@;; esac diff --git a/proxy_docker/app/script/computefees.sh b/proxy_docker/app/script/computefees.sh new file mode 100644 index 0000000..1948cef --- /dev/null +++ b/proxy_docker/app/script/computefees.sh @@ -0,0 +1,112 @@ +#!/bin/sh + +. ./trace.sh +. ./sendtobitcoinnode.sh +. ./sql.sh +. ./blockchainrpc.sh + +compute_fees() +{ + local pruned=$(get_prop "watchingnode.pruned") + if [ "${pruned}" = "true" ]; then + trace "[compute_fees] pruned=${pruned}" + # We want null instead of 0.00000000 in this case. + echo "null" + exit 0 + fi + + local txid=${1} + + local tx_raw_details=$(cat rawtx-${txid}.blob) + trace "[compute_fees] tx_raw_details=${tx_raw_details}" + local vin_total_amount=$(compute_vin_total_amount "${tx_raw_details}") + + local vout_total_amount=0 + local vout_value + local vout_values=$(echo "${tx_raw_details}" | jq ".result.vout[].value") + for vout_value in ${vout_values} + do + vout_total_amount=$(awk "BEGIN { printf(\"%.8f\", ${vout_total_amount}+${vout_value}); exit }") + done + + trace "[compute_fees] vin total amount=${vin_total_amount}" + trace "[compute_fees] vout total amount=${vout_total_amount}" + + local fees=$(awk "BEGIN { printf(\"%.8f\", ${vin_total_amount}-${vout_total_amount}); exit }") + trace "[compute_fees] fees=${fees}" + + echo ${fees} +} + +compute_vin_total_amount() +{ + trace "Entering compute_vin_total_amount()..." + + local main_tx=${1} +# local vin_txids=$(echo ${main_tx} | jq '.result.vin[].txid') + local vin_txids_vout=$(echo ${main_tx} | jq '.result.vin[] | ((.txid + "-") + (.vout | tostring))') + trace "[compute_vin_total_amount] vin_txids_vout=${vin_txids_vout}" + local returncode + local vin_txid_vout + local vin_txid + local vin_raw_tx + local vin_vout_amount=0 + local vout + local vin_total_amount=0 + local vin_hash + local vin_confirmations + local vin_timereceived + local vin_vsize + local vin_blockhash + local vin_blockheight + local vin_blocktime + local txid_already_inserted=true + + for vin_txid_vout in ${vin_txids_vout} + do +# vin_txid=$(echo ${vin_txid} | tr -d '"') + vin_txid=$(echo ${vin_txid_vout} | tr -d '"' | cut -d '-' -f1) + # Check if we already have the tx in our DB + vin_raw_tx=$(sql "SELECT raw_tx FROM tx WHERE txid=\"${vin_txid}\"") + if [ -z "${vin_raw_tx}" ]; then + txid_already_inserted=false + vin_raw_tx=$(get_rawtransaction "${vin_txid}") + returncode=$? + if [ "${returncode}" -ne 0 ]; then + return ${returncode} + fi + fi +# vout=$(echo ${main_tx} | jq ".result.vin[] | select(.txid == \"${vin_txid}\") | .vout") + vout=$(echo ${vin_txid_vout} | tr -d '"' | cut -d '-' -f2) + trace "[compute_vin_total_amount] vout=${vout}" + vin_vout_amount=$(echo ${vin_raw_tx} | jq ".result.vout[] | select(.n == ${vout}) | .value" | awk '{ printf "%.8f", $0 }') + trace "[compute_vin_total_amount] vin_vout_amount=${vin_vout_amount}" + vin_total_amount=$(awk "BEGIN { printf(\"%.8f\", ${vin_total_amount}+${vin_vout_amount}); exit}") + trace "[compute_vin_total_amount] vin_total_amount=${vin_total_amount}" + vin_hash=$(echo ${vin_raw_tx} | jq ".result.hash") + vin_confirmations=$(echo ${vin_raw_tx} | jq ".result.confirmations") + vin_timereceived=$(echo ${vin_raw_tx} | jq ".result.time") + vin_size=$(echo ${vin_raw_tx} | jq ".result.size") + vin_vsize=$(echo ${vin_raw_tx} | jq ".result.vsize") + vin_blockhash=$(echo ${vin_raw_tx} | jq ".result.blockhash") + vin_blockheight=$(echo ${vin_raw_tx} | jq ".result.blockheight") + vin_blocktime=$(echo ${vin_raw_tx} | jq ".result.blocktime") + + # Let's insert the vin tx in the DB just in case it would be useful + if ! ${txid_already_inserted}; then + # Sometimes raw tx are too long to be passed as paramater, so let's write + # it to a temp file for it to be read by sqlite3 and then delete the file + echo "${vin_raw_tx}" > rawtx-${vin_txid}.blob + sql "INSERT OR IGNORE INTO tx (txid, hash, confirmations, timereceived, size, vsize, blockhash, blockheight, blocktime, raw_tx) VALUES (\"${vin_txid}\", ${vin_hash}, ${vin_confirmations}, ${vin_timereceived}, ${vin_size}, ${vin_vsize}, ${vin_blockhash}, ${vin_blockheight}, ${vin_blocktime}, readfile('rawtx-${vin_txid}.blob'))" + trace_rc $? + rm rawtx-${vin_txid}.blob + txid_already_inserted=true + fi + done + + echo ${vin_total_amount} + + return 0 +} + +case "${0}" in *computefees.sh) compute_vin_total_amount $@;; esac diff --git a/proxy_docker/app/script/confirmation.sh b/proxy_docker/app/script/confirmation.sh new file mode 100644 index 0000000..076ff7d --- /dev/null +++ b/proxy_docker/app/script/confirmation.sh @@ -0,0 +1,150 @@ +#!/bin/sh + +. ./trace.sh +. ./sql.sh +. ./callbacks_job.sh +. ./sendtobitcoinnode.sh +. ./responsetoclient.sh +. ./computefees.sh +. ./blockchainrpc.sh + +confirmation_request() +{ + # We are receiving a HTTP request, let's find the TXID from it + + trace "Entering confirmation_request()..." + + local request=${1} + local txid=$(echo "${request}" | cut -d ' ' -f2 | cut -d '/' -f3) + + confirmation "${txid}" + return $? +} + +confirmation() +{ + trace "Entering confirmation()..." + + local txid=${1} + local tx_details=$(get_transaction ${txid}) + + ######################################################################################################## + # First of all, let's make sure we're working on watched addresses... + local address + local addresseswhere + local addresses=$(echo ${tx_details} | jq ".result.details[].address") + + local notfirst=false + local IFS=$'\n' + for address in ${addresses} + do + trace "[confirmation] address=${address}" + + if ${notfirst}; then + addresseswhere="${addresseswhere},${address}" + else + addresseswhere="${address}" + notfirst=true + fi + done + local rows=$(sql "SELECT id, address FROM watching WHERE address IN (${addresseswhere}) AND watching") + if [ ${#rows} -eq 0 ]; then + trace "[confirmation] No watched address in this tx!" + return 0 + fi + ######################################################################################################## + + local tx=$(sql "SELECT id FROM tx WHERE txid=\"${txid}\"") + local id_inserted + local tx_raw_details=$(get_rawtransaction ${txid}) + local tx_nb_conf=$(echo ${tx_details} | jq '.result.confirmations') + + # Sometimes raw tx are too long to be passed as paramater, so let's write + # it to a temp file for it to be read by sqlite3 and then delete the file + echo "${tx_raw_details}" > rawtx-${txid}.blob + + if [ -z ${tx} ]; then + # TX not found in our DB. + # 0-conf or missed conf (managed or while spending) or spending an unconfirmed + # (note: spending an unconfirmed TX must be avoided or we'll get here spending an unprocessed watching) + + # Let's first insert the tx in our DB + + local tx_hash=$(echo ${tx_raw_details} | jq '.result.hash') + local tx_ts_firstseen=$(echo ${tx_details} | jq '.result.timereceived') + local tx_amount=$(echo ${tx_details} | jq '.result.amount') + + local tx_size=$(echo ${tx_raw_details} | jq '.result.size') + local tx_vsize=$(echo ${tx_raw_details} | jq '.result.vsize') + local tx_replaceable=$(echo ${tx_details} | jq '.result."bip125-replaceable"') + tx_replaceable=$([ ${tx_replaceable} = "yes" ] && echo 1 || echo 0) + + local fees=$(compute_fees "${txid}") + trace "[confirmation] fees=${fees}" + + # If we missed 0-conf... + local tx_blockhash=$(echo ${tx_details} | jq '.result.blockhash') + local tx_blockheight=$(echo ${tx_details} | jq '.result.blockheight') + local tx_blocktime=$(echo ${tx_details} | jq '.result.blocktime') + + sql "INSERT OR IGNORE INTO tx (txid, hash, confirmations, timereceived, fee, size, vsize, is_replaceable, blockhash, blockheight, blocktime, raw_tx) VALUES (\"${txid}\", ${tx_hash}, ${tx_nb_conf}, ${tx_ts_firstseen}, ${fees}, ${tx_size}, ${tx_vsize}, ${tx_replaceable}, ${tx_blockhash}, ${tx_blockheight}, ${tx_blocktime}, readfile('rawtx-${txid}.blob'))" + trace_rc $? + + id_inserted=$(sql "SELECT id FROM tx WHERE txid='${txid}'") + trace_rc $? + + else + # TX found in our DB. + # 1-conf or spending watched address (in this case, we probably missed conf) + + local tx_blockhash=$(echo ${tx_details} | jq '.result.blockhash') + local tx_blockheight=$(echo ${tx_details} | jq '.result.blockheight') + local tx_blocktime=$(echo ${tx_details} | jq '.result.blocktime') + + sql "UPDATE tx SET + confirmations=${tx_nb_conf}, + blockhash=${tx_blockhash}, + blockheight=${tx_blockheight}, + blocktime=${tx_blocktime}, + raw_tx=readfile('rawtx-${txid}.blob') + WHERE txid=\"${txid}\"" + trace_rc $? + + id_inserted=${tx} + + fi + # Delete the temp file containing the raw tx (see above) + rm rawtx-${txid}.blob + + ######################################################################################################## + # Let's now insert in the join table if not already done + tx=$(sql "SELECT tx_id FROM watching_tx WHERE tx_id=\"${tx}\"") + + if [ -z "${tx}" ]; then + trace "[confirmation] For this tx, there's no watching_tx row, let's create" + local watching_id + + # If the tx is batched and pays multiple watched addresses, we have to insert + # those additional addresses in watching_tx! + for row in ${rows} + do + watching_id=$(echo "${row}" | cut -d '|' -f1) + address=$(echo "${row}" | cut -d '|' -f2) + tx_vout_n=$(echo ${tx_details} | jq ".result.details[] | select(.address==\"${address}\") | .vout") + tx_vout_amount=$(echo ${tx_details} | jq ".result.details[] | select(.address==\"${address}\") | .amount") + sql "INSERT OR IGNORE INTO watching_tx (watching_id, tx_id, vout, amount) VALUES (${watching_id}, ${id_inserted}, ${tx_vout_n}, ${tx_vout_amount})" + trace_rc $? + done + else + trace "[confirmation] For this tx, there's already watching_tx rows" + fi + ######################################################################################################## + + do_callbacks + + echo '{"result":"confirmed"}' + + return 0 +} + +case "${0}" in *confirmation.sh) confirmation $@;; esac diff --git a/proxy_docker/app/script/getactivewatches.sh b/proxy_docker/app/script/getactivewatches.sh new file mode 100644 index 0000000..f2187b0 --- /dev/null +++ b/proxy_docker/app/script/getactivewatches.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +. ./trace.sh +. ./sql.sh + +getactivewatches() +{ + trace "Entering getactivewatches()..." + + local watches + watches=$(sql "SELECT id, address, imported, callback0conf, callback1conf, inserted_ts FROM watching WHERE watching AND NOT calledback1conf") + returncode=$? + trace_rc ${returncode} + + local id + local address + local imported + local inserted + local cb0conf_url + local cb1conf_url + local timestamp + local notfirst=false + + echo -n "{\"watches\":[" + + local IFS=$'\n' + for row in ${watches} + do + if ${notfirst}; then + echo "," + else + notfirst=true + fi + trace "[getactivewatches] row=${row}" + id=$(echo "${row}" | cut -d '|' -f1) + trace "[getactivewatches] id=${id}" + address=$(echo "${row}" | cut -d '|' -f2) + trace "[getactivewatches] address=${address}" + imported=$(echo "${row}" | cut -d '|' -f3) + trace "[getactivewatches] imported=${imported}" + cb0conf_url=$(echo "${row}" | cut -d '|' -f4) + trace "[getactivewatches] cb0conf_url=${cb0conf_url}" + cb1conf_url=$(echo "${row}" | cut -d '|' -f5) + trace "[getactivewatches] cb1conf_url=${cb1conf_url}" + timestamp=$(echo "${row}" | cut -d '|' -f6) + trace "[getactivewatches] timestamp=${timestamp}" + + data="{\"id\":\"${id}\"," + data="${data}\"address\":\"${address}\"," + data="${data}\"imported\":\"${imported}\"," + data="${data}\"unconfirmedCallbackURL\":\"${cb0conf_url}\"," + data="${data}\"confirmedCallbackURL\":\"${cb1conf_url}\"," + data="${data}\"watching_since\":\"${timestamp}\"}" + trace "[getactivewatches] data=${data}" + + echo -n "${data}" + done + + echo "]}" + + return ${returncode} +} + +case "${0}" in *getactivewatches.sh) getactivewatches;; esac diff --git a/proxy_docker/app/script/importaddress.sh b/proxy_docker/app/script/importaddress.sh new file mode 100644 index 0000000..fce18ee --- /dev/null +++ b/proxy_docker/app/script/importaddress.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +. ./trace.sh +. ./sendtobitcoinnode.sh + +importaddress_rpc() +{ + trace "[Entering importaddress_rpc()]" + + local address=${1} + local data="{\"method\":\"importaddress\",\"params\":[\"${address}\",\"\",false]}" + local result + result=$(send_to_watcher_node ${data}) + local returncode=$? + + echo "${result}" + + return ${returncode} +} + +case "${0}" in *importaddress.sh) importaddress_rpc $@;; esac diff --git a/proxy_docker/app/script/manage_missed_conf.sh b/proxy_docker/app/script/manage_missed_conf.sh new file mode 100644 index 0000000..610e776 --- /dev/null +++ b/proxy_docker/app/script/manage_missed_conf.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +. ./trace.sh +. ./sql.sh +. ./importaddress.sh +. ./confirmation.sh + +manage_not_imported() +{ + # When we tried to import watched addresses in the watching node, + # if it didn't succeed, we try again here. + + trace "[Entering manage_not_imported()]" + + local watches=$(sql 'SELECT address FROM watching WHERE watching AND NOT imported') + trace "[manage_not_imported] watches=${watches}" + + local result + local returncode + local IFS=$'\n' + for address in ${watches} + do + result=$(importaddress_rpc "${address}") + returncode=$? + trace_rc ${returncode} + if [ "${returncode}" -eq 0 ]; then + sql "UPDATE watching SET imported=1 WHERE address=\"${address}\"" + fi + done + + return 0 +} + +manage_missed_conf() +{ + # Maybe we missed confirmations, because we were down or no network or + # whatever, so we look at what might be missed and do confirmations. + + trace "[Entering manage_missed_conf()]" + +# local watches=$(sql 'SELECT address FROM watching WHERE txid IS NULL AND watching AND imported') + #local watches=$(sql 'SELECT address FROM watching LEFT JOIN watching_tx ON id = watching_id WHERE watching AND imported AND tx_id IS NULL') + local watches=$(sql 'SELECT address FROM watching w LEFT JOIN watching_tx ON w.id = watching_id LEFT JOIN tx t ON t.id = tx_id WHERE watching AND imported AND (tx_id IS NULL OR t.confirmations=0)') + trace "[manage_missed_conf] watches=${watches}" + if [ ${#watches} -eq 0 ]; then + trace "[manage_missed_conf] Nothing missed!" + return 0 + fi + + local addresses + local data + local result + local returncode + local IFS=$'\n' + for address in ${watches} + do + if [ -z ${addresses} ]; then + addresses="[\"${address}\"" + else + addresses="${addresses},\"${address}\"" + fi + done + addresses="${addresses}]" + + # Watching addresses with UTXO are transactions being watched that went through without us knowing it, we missed the conf + data="{\"method\":\"listunspent\",\"params\":[0, 9999999, ${addresses}]}" + local unspents + unspents=$(send_to_watcher_node ${data}) + returncode=$? + trace_rc ${returncode} + if [ "${returncode}" -ne 0 ]; then + return ${returncode} + fi + +# | tr -d '"' + local txids=$(echo ${unspents} | jq ".result[].txid" | tr -d '"') + for txid in ${txids} + do + confirmation "${txid}" + done + + return 0 + +} + +case "${0}" in *manage_missed_conf.sh) manage_not_imported $@; manage_missed_conf $@;; esac diff --git a/proxy_docker/app/script/requesthandler.sh b/proxy_docker/app/script/requesthandler.sh new file mode 100644 index 0000000..1605f32 --- /dev/null +++ b/proxy_docker/app/script/requesthandler.sh @@ -0,0 +1,238 @@ +#!/bin/sh +# +# +# +# + +. ./sendtobitcoinnode.sh +. ./callbacks_job.sh +. ./watchrequest.sh +. ./unwatchrequest.sh +. ./getactivewatches.sh +. ./confirmation.sh +. ./blockchainrpc.sh +. ./responsetoclient.sh +. ./trace.sh +. ./manage_missed_conf.sh +. ./walletoperations.sh +. ./bitcoin.sh +. ./call_lightningd.sh + +main() +{ + trace "Entering main()..." + + local step=0 + local cmd + local http_method + local line + local content_length + local response + local returncode + + while read line; do + line=$(echo "${line}" | tr -d '\r\n') + trace "[main] line=${line}" + + if [ "${cmd}" = "" ]; then + # First line! + # Looking for something like: + # GET /cmd/params HTTP/1.1 + # POST / HTTP/1.1 + cmd=$(echo "${line}" | cut -d '/' -f2 | cut -d ' ' -f1) + trace "[main] cmd=${cmd}" + http_method=$(echo "${line}" | cut -d ' ' -f1) + trace "[main] http_method=${http_method}" + if [ "${http_method}" = "GET" ]; then + step=1 + fi + fi + if [ "${line}" = "" ]; then + trace "[main] empty line" + if [ ${step} -eq 1 ]; then + trace "[main] body part finished, disconnecting" + break + else + trace "[main] headers part finished, body incoming" + step=1 + fi + fi + # line=content-length: 406 + case "${line}" in *[cC][oO][nN][tT][eE][nN][tT]-[lL][eE][nN][gG][tT][hH]*) + content_length=$(echo ${line} | cut -d ':' -f2) + trace "[main] content_length=${content_length}"; + ;; + esac + if [ ${step} -eq 1 ]; then + trace "[main] step=${step}" + if [ "${http_method}" = "POST" ]; then + read -n ${content_length} line + trace "[main] line=${line}" + fi + case "${cmd}" in + watch) + # POST http://192.168.111.152:8080/watch + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","unconfirmedCallbackURL":"192.168.111.233:1111/callback0conf","confirmedCallbackURL":"192.168.111.233:1111/callback1conf"} + + response=$(watchrequest "${line}") + response_to_client "${response}" ${?} + break + ;; + unwatch) + # curl (GET) 192.168.111.152:8080/unwatch/2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp + + response=$(unwatchrequest "${line}") + response_to_client "${response}" ${?} + break + ;; + getactivewatches) + # curl (GET) 192.168.111.152:8080/getactivewatches + + response=$(getactivewatches) + response_to_client "${response}" ${?} + break + ;; + conf) + # curl (GET) 192.168.111.152:8080/conf/b081ca7724386f549cf0c16f71db6affeb52ff7a0d9b606fb2e5c43faffd3387 + + response=$(confirmation_request "${line}") + response_to_client "${response}" ${?} + break + ;; + getbestblockhash) + # curl (GET) http://192.168.111.152:8080/getbestblockhash + + response=$(get_best_block_hash) + response_to_client "${response}" ${?} + break + ;; + getblockinfo) + # curl (GET) http://192.168.111.152:8080/getblockinfo/000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea + + response=$(get_block_info $(echo "${line}" | cut -d ' ' -f2 | cut -d '/' -f3)) + response_to_client "${response}" ${?} + break + ;; + gettransaction) + # curl (GET) http://192.168.111.152:8080/gettransaction/af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648 + + response=$(get_rawtransaction $(echo "${line}" | cut -d ' ' -f2 | cut -d '/' -f3)) + response_to_client "${response}" ${?} + break + ;; + getbestblockinfo) + # curl (GET) http://192.168.111.152:8080/getbestblockinfo + + response=$(get_best_block_info) + response_to_client "${response}" ${?} + break + ;; + executecallbacks) + # curl (GET) http://192.168.111.152:8080/executecallbacks + + manage_not_imported + manage_missed_conf + response=$(do_callbacks) + response_to_client "${response}" ${?} + break + ;; + getbalance) + # curl (GET) http://192.168.111.152:8080/getbalance + + response=$(getbalance) + response_to_client "${response}" ${?} + break + ;; + getnewaddress) + # curl (GET) http://192.168.111.152:8080/getnewaddress + + response=$(getnewaddress) + response_to_client "${response}" ${?} + break + ;; + spend) + # POST http://192.168.111.152:8080/spend + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} + + response=$(spend "${line}") + response_to_client "${response}" ${?} + break + ;; + addtobatch) + # POST http://192.168.111.152:8080/addtobatch + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} + + response=$(addtobatching $(echo "${line}" | jq ".address" | tr -d '"') $(echo "${line}" | jq ".amount")) + response_to_client "${response}" ${?} + break + ;; + batchspend) + # GET http://192.168.111.152:8080/batchspend + + response=$(batchspend "${line}") + response_to_client "${response}" ${?} + break + ;; + deriveindex) + # curl GET http://192.168.111.152:8080/deriveindex/25-30 + # curl GET http://192.168.111.152:8080/deriveindex/34 + + response=$(deriveindex $(echo "${line}" | cut -d ' ' -f2 | cut -d '/' -f3)) + response_to_client "${response}" ${?} + break + ;; + derivepubpath) + # POST http://192.168.111.152:8080/derivepubpath + # BODY {"pub32":"tpubD6NzVbkrYhZ4YR3QK2tyfMMvBghAvqtNaNK1LTyDWcRHLcMUm3ZN2cGm5BS3MhCRCeCkXQkTXXjiJgqxpqXK7PeUSp86DTTgkLpcjMtpKWk","path":"0/25-30"} + # BODY {"pub32":"upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb","path":"0/25-30"} + # BODY {"pub32":"vpub5SLqN2bLY4WeZF3kL4VqiWF1itbf3A6oRrq9aPf16AZMVWYCuN9TxpAZwCzVgW94TNzZPNc9XAHD4As6pdnExBtCDGYRmNJrcJ4eV9hNqcv","path":"0/25-30"} + + response=$(send_to_pycoin "${line}") + response_to_client "${response}" ${?} + break + ;; + ln_getinfo) + # GET http://192.168.111.152:8080/ln_getinfo + + response=$(ln_getinfo) + response_to_client "${response}" ${?} + break + ;; + ln_create_invoice) + # POST http://192.168.111.152:8080/ln_create_invoice + # BODY {"msatoshi":"10000","label":"koNCcrSvhX3dmyFhW","description":"Bylls order #10649","expiry":"900"} + + response=$(ln_create_invoice "${line}") + response_to_client "${response}" ${?} + break + ;; + ln_pay) + # POST http://192.168.111.152:8080/ln_pay + # BODY {"bolt11":"lntb1pdca82tpp5gv8mn5jqlj6xztpnt4r472zcyrwf3y2c3cvm4uzg2gqcnj90f83qdp2gf5hgcm0d9hzqnm4w3kx2apqdaexgetjyq3nwvpcxgcqp2g3d86wwdfvyxcz7kce7d3n26d2rw3wf5tzpm2m5fl2z3mm8msa3xk8nv2y32gmzlhwjved980mcmkgq83u9wafq9n4w28amnmwzujgqpmapcr3","expected_msatoshi":"10000","expected_description":"Bitcoin Outlet order #7082"} + + response=$(ln_pay "${line}") + response_to_client "${response}" ${?} + break + ;; + ln_newaddr) + # GET http://192.168.111.152:8080/ln_newaddr + + response=$(ln_newaddr) + response_to_client "${response}" ${?} + break + ;; + esac + break + fi + done + trace "[main] exiting" + return 0 +} + +export NODE_RPC_URL=$BTC_NODE_RPC_URL +export TRACING +export DB_PATH +export DB_FILE + +main +exit $? diff --git a/proxy_docker/app/script/responsetoclient.sh b/proxy_docker/app/script/responsetoclient.sh new file mode 100644 index 0000000..c907e76 --- /dev/null +++ b/proxy_docker/app/script/responsetoclient.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +. ./trace.sh + +response_to_client() +{ + trace "Entering response_to_client()..." + + local response=${1} + local returncode=${2} + + ([ -z "${returncode}" ] || [ "${returncode}" -eq "0" ]) && echo -ne "HTTP/1.1 200 OK\r\n" + [ -n "${returncode}" ] && [ "${returncode}" -ne "0" ] && echo -ne "HTTP/1.1 400 Bad Request\r\n" + + echo -e "Content-Type: application/json\r\nContent-Length: ${#response}\r\n\r\n${response}" + + # Small delay needed for the data to be processed correctly by peer + sleep 0.2s +} + +case "${0}" in *responsetoclient.sh) response_to_client $@;; esac diff --git a/proxy_docker/app/script/sendtobitcoinnode.sh b/proxy_docker/app/script/sendtobitcoinnode.sh new file mode 100644 index 0000000..daf66ef --- /dev/null +++ b/proxy_docker/app/script/sendtobitcoinnode.sh @@ -0,0 +1,59 @@ +#!/bin/sh + +. ./trace.sh + +send_to_watcher_node() +{ + trace "Entering send_to_watcher_node()..." + send_to_bitcoin_node ${WATCHER_NODE_RPC_URL} watcher_btcnode_curlcfg.properties $@ + local returncode=$? + trace_rc ${returncode} + return ${returncode} +} + +send_to_spender_node() +{ + trace "Entering send_to_spender_node()..." + send_to_bitcoin_node ${SPENDER_NODE_RPC_URL} spender_btcnode_curlcfg.properties $@ + local returncode=$? + trace_rc ${returncode} + return ${returncode} +} + +send_to_bitcoin_node() +{ + trace "Entering send_to_bitcoin_node()..." + local returncode + local result + local errorstring + local node_url=${1} + local configfile=${2} + local data=${3} + + trace "[send_to_bitcoin_node] curl -s --config ${configfile} -H \"Content-Type: application/json\" -d \"${data}\" ${node_url}" + result=$(curl -s --config ${configfile} -H "Content-Type: application/json" -d "${data}" ${node_url}) + returncode=$? + trace_rc ${returncode} + trace "[send_to_bitcoin_node] result=${result}" + + if [ "${returncode}" -eq 0 ]; then + # Node responded, let's see if we got an error message from the node + # jq -e will have a return code of 1 if the supplied tag is null. + errorstring=$(echo "${result}" | jq -e ".error") + if [ "$?" -eq "0" ]; then + # Error tag not null, so there's an error + trace "[send_to_bitcoin_node] Node responded, error found in response: ${errorstring}" + returncode=1 + else + trace "[send_to_bitcoin_node] Node responded, no error found in response, yayy!" + fi + fi + + # Output response to stdout before exiting with return code + echo "${result}" + + trace_rc ${returncode} + return ${returncode} +} + +case "${0}" in *sendtobitcoinnode.sh) send_to_bitcoin_node $@;; esac diff --git a/proxy_docker/app/script/sql.sh b/proxy_docker/app/script/sql.sh new file mode 100644 index 0000000..75214e0 --- /dev/null +++ b/proxy_docker/app/script/sql.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +. ./trace.sh + +sql() +{ + trace "sqlite3 ${DB_FILE} '${1}'" + sqlite3 -cmd ".timeout 20000" ${DB_FILE} "${1}" + return $? +} + +case "${0}" in *sql.sh) sql $@;; esac diff --git a/proxy_docker/app/script/startproxy.sh b/proxy_docker/app/script/startproxy.sh new file mode 100644 index 0000000..8f9cd94 --- /dev/null +++ b/proxy_docker/app/script/startproxy.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +export PROXY_LISTENING_PORT +export WATCHER_NODE_RPC_URL=$WATCHER_BTC_NODE_RPC_URL +export SPENDER_NODE_RPC_URL=$SPENDER_BTC_NODE_RPC_URL +export TRACING +export DB_PATH +export DB_FILE + +if [ ! -e ${DB_FILE} ]; then + echo "DB not found, creating..." > /dev/stderr + cat watching.sql | sqlite3 $DB_FILE +fi + +nc -vlkp${PROXY_LISTENING_PORT} -e ./requesthandler.sh diff --git a/proxy_docker/app/script/tests-cb.sh b/proxy_docker/app/script/tests-cb.sh new file mode 100644 index 0000000..4efe5a2 --- /dev/null +++ b/proxy_docker/app/script/tests-cb.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +read line +echo ${line} > /dev/stderr +echo -ne "HTTP/1.1 200 OK\r\n" +echo -e "Content-Type: application/json\r\nContent-Length: 0\r\n\r\n" + +# Small delay needed for the data to be processed correctly by peer +sleep 0.5s diff --git a/proxy_docker/app/script/tests.sh b/proxy_docker/app/script/tests.sh new file mode 100644 index 0000000..6db9b60 --- /dev/null +++ b/proxy_docker/app/script/tests.sh @@ -0,0 +1,322 @@ +#!/bin/sh + +tests() +{ + local address + local address1 + local address2 + local address3 + local response + + # getbestblockhash + # (GET) http://cyphernode:8888/getbestblockhash + + echo "Testing getbestblockhash..." + response=$(curl -s cyphernode:8888/getbestblockhash) + echo "response=${response}" + local blockhash=$(echo ${response} | jq ".result" | tr -d '\"') + echo "blockhash=${blockhash}" + if [ -z "${blockhash}" ]; then + exit 2 + fi + echo "Tested getbestblockhash." + + # getbestblockinfo + # curl (GET) http://cyphernode:8888/getbestblockinfo + + echo "Testing getbestblockinfo..." + response=$(curl -s cyphernode:8888/getbestblockinfo) + echo "response=${response}" + local blockhash2=$(echo ${response} | jq ".result.hash" | tr -d '\"') + echo "blockhash2=${blockhash2}" + if [ "${blockhash2}" != "${blockhash}" ]; then + exit 4 + fi + echo "Tested getbestblockinfo." + + # getblockinfo + # (GET) http://cyphernode:8888/getblockinfo/000000006f82a384c208ecfa04d05beea02d420f3f398ddda5c7f900de5718ea + + echo "Testing getblockinfo..." + response=$(curl -s cyphernode:8888/getblockinfo/${blockhash}) + echo "response=${response}" + blockhash2=$(echo ${response} | jq ".result.hash" | tr -d '\"') + echo "blockhash2=${blockhash2}" + if [ "${blockhash2}" != "${blockhash}" ]; then + exit 6 + fi + echo "Tested getblockinfo." + + # gettransaction + # (GET) http://cyphernode:8888/gettransaction/af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648 + + echo "Testing gettransaction..." + response=$(curl -s cyphernode:8888/gettransaction/af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648) + echo "response=${response}" + local txid=$(echo ${response} | jq ".result.txid" | tr -d '\"') + echo "txid=${txid}" + if [ "${txid}" != "af867c86000da76df7ddb1054b273ca9e034e8c89d049b5b2795f9f590f67648" ]; then + exit 8 + fi + echo "Tested gettransaction." + + # getnewaddress + # (GET) http://cyphernode:8888/getnewaddress + # returns {"address":"2MuiUu8AyuByAGYRDAqqhdYxt8gXcsQ1Ymw"} + + echo "Testing getnewaddress..." + response=$(curl -s cyphernode:8888/getnewaddress) + echo "response=${response}" + address1=$(echo ${response} | jq ".address" | tr -d '\"') + echo "address1=${address1}" + if [ -z "${address1}" ]; then + exit 10 + fi + address2=$(curl -s cyphernode:8888/getnewaddress | jq ".address" | tr -d '\"') + echo "address2=${address2}" + echo "Tested getnewaddress." + + # getbalance + # (GET) http://cyphernode:8888/getbalance + + echo "Testing getbalance..." + response=$(curl -s cyphernode:8888/getbalance) + echo "response=${response}" + local balance=$(echo ${response} | jq ".balance") + echo "balance=${balance}" + if [ -z "${balance}" ]; then + exit 12 + fi + echo "Tested getbalance." + + # watch + # POST http://cyphernode:8888/watch + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","unconfirmedCallbackURL":"192.168.122.233:1111/callback0conf","confirmedCallbackURL":"192.168.122.233:1111/callback1conf"} + + echo "Testing watch..." + local url1="$(hostname):1111/callback0conf" + local url2="$(hostname):1111/callback1conf" + echo "url1=${url1}" + echo "url2=${url2}" + response=$(curl -s -H "Content-Type: application/json" -d "{\"address\":\"${address1}\",\"unconfirmedCallbackURL\":\"${url1}\",\"confirmedCallbackURL\":\"${url2}\"}" cyphernode:8888/watch) + echo "response=${response}" + + local id=$(echo "${response}" | jq ".id" | tr -d '\"') + echo "id=${id}" + local event=$(echo "${response}" | jq ".event" | tr -d '\"') + echo "event=${event}" + if [ "${event}" != "watch" ]; then + exit 15 + fi + address=$(echo "${response}" | jq ".address" | tr -d '\"') + echo "address=${address}" + if [ "${address}" != "${address1}" ]; then + exit 20 + fi + local imported=$(echo "${response}" | jq ".imported" | tr -d '\"') + echo "imported=${imported}" + if [ "${imported}" != "1" ]; then + exit 30 + fi + local inserted=$(echo "${response}" | jq ".inserted" | tr -d '\"') + echo "inserted=${inserted}" + if [ "${inserted}" != "1" ]; then + exit 40 + fi + local unconfirmedCallbackURL=$(echo "${response}" | jq ".unconfirmedCallbackURL" | tr -d '\"') + echo "unconfirmedCallbackURL=${unconfirmedCallbackURL}" + if [ "${unconfirmedCallbackURL}" != "${url1}" ]; then + exit 60 + fi + local confirmedCallbackURL=$(echo "${response}" | jq ".confirmedCallbackURL" | tr -d '\"') + echo "confirmedCallbackURL=${confirmedCallbackURL}" + if [ "${confirmedCallbackURL}" != "${url2}" ]; then + exit 70 + fi + + # Let's watch another address just to be able to test unwatch later and test if found in getactivewatches + response=$(curl -s -H "Content-Type: application/json" -d "{\"address\":\"${address2}\",\"unconfirmedCallbackURL\":\"${url1}2\",\"confirmedCallbackURL\":\"${url2}2\"}" cyphernode:8888/watch) + echo "response=${response}" + echo "Tested watch." + + # getactivewatches + # (GET) http://cyphernode:8888/getactivewatches + + echo "Testing getactivewatches..." + response=$(curl -s cyphernode:8888/getactivewatches) + echo "response=${response}" + response=$(echo ${response} | jq ".watches[]") + echo "response=${response}" + local id2=$(echo ${response} | jq "select(.address == \"${address1}\") | .id" | tr -d '\"') + echo "id2=${id2}" + if [ "${id2}" != "${id}" ]; then + exit 80 + fi + id2=$(echo ${response} | jq "select(.address == \"${address2}\") | .id" | tr -d '\"') + echo "id2=${id2}" + if [ -z "${id2}" ]; then + exit 90 + fi + echo "Tested getactivewatches." + + # unwatch + # (GET) http://cyphernode:8888/unwatch/2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp + + echo "Testing unwatch..." + response=$(curl -s cyphernode:8888/unwatch/${address2}) + echo "response=${response}" + event=$(echo "${response}" | jq ".event" | tr -d '\"') + echo "event=${event}" + if [ "${event}" != "unwatch" ]; then + exit 100 + fi + address=$(echo "${response}" | jq ".address" | tr -d '\"') + echo "address=${address}" + if [ "${address}" != "${address2}" ]; then + exit 110 + fi + response=$(curl -s cyphernode:8888/getactivewatches) + echo "response=${response}" + response=$(echo "${response}" | jq ".watches[]") + echo "response=${response}" + id2=$(echo ${response} | jq "select(.address == \"${address2}\") | .id" | tr -d '\"') + echo "id2=${id2}" + if [ -n "${id2}" ]; then + exit 120 + fi + echo "Tested unwatch." + + # deriveindex + # (GET) http://cyphernode:8888/deriveindex/25-30 + # {"addresses":[{"address":"2N6Q9kBcLtNswgMSLSQ5oduhbctk7hxEJW8"},{"address":"2NFLhFghAPKEPuZCKoeXYYxuaBxhKXbmhBV"},{"address":"2N7gepbQtRM5Hm4PTjvGadj9wAwEwnAsKiP"},{"address":"2Mth8XDZpXkY9d95tort8HYEAuEesow2tF6"},{"address":"2MwqEmAXhUw6H7bJwMhD13HGWVEj2HgFiNH"},{"address":"2N2Y4BVRdrRFhweub2ehHXveGZC3nryMEJw"}]} + + echo "Testing deriveindex..." + response=$(curl -v cyphernode:8888/deriveindex/25-30) + echo "response=${response}" + local nbaddr=$(echo "${response}" | jq ".addresses | length") + if [ "${nbaddr}" -ne "6" ]; then + exit 130 + fi + address=$(echo "${response}" | jq ".addresses[2].address" | tr -d '\"') + if [ "${address}" != "2N7gepbQtRM5Hm4PTjvGadj9wAwEwnAsKiP" ]; then + exit 140 + fi + echo "Tested deriveindex." + + # derivepubpath + # (GET) http://cyphernode:8888/derivepubpath + # BODY {"pub32":"upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb","path":"0/25-30"} + # {"addresses":[{"address":"2N6Q9kBcLtNswgMSLSQ5oduhbctk7hxEJW8"},{"address":"2NFLhFghAPKEPuZCKoeXYYxuaBxhKXbmhBV"},{"address":"2N7gepbQtRM5Hm4PTjvGadj9wAwEwnAsKiP"},{"address":"2Mth8XDZpXkY9d95tort8HYEAuEesow2tF6"},{"address":"2MwqEmAXhUw6H7bJwMhD13HGWVEj2HgFiNH"},{"address":"2N2Y4BVRdrRFhweub2ehHXveGZC3nryMEJw"}]} + + echo "Testing derivepubpath..." + response=$(curl -v -H "Content-Type: application/json" -d "{\"pub32\":\"upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb\",\"path\":\"0/25-30\"}" cyphernode:8888/derivepubpath) + echo "response=${response}" + local nbaddr=$(echo "${response}" | jq ".addresses | length") + if [ "${nbaddr}" -ne "6" ]; then + exit 150 + fi + address=$(echo "${response}" | jq ".addresses[2].address" | tr -d '\"') + if [ "${address}" != "2N7gepbQtRM5Hm4PTjvGadj9wAwEwnAsKiP" ]; then + exit 160 + fi + echo "Tested derivepubpath." + + # spend + # POST http://cyphernode:8888/spend + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} + + # By spending to a watched address, we will test the spending feature and trigger the confirmation to test + # confirmations of watched addresses... Cleva!!! + + echo "Testing spend, conf and callbacks..." + response=$(curl -v -H "Content-Type: application/json" -d "{\"address\":\"${address1}\",\"amount\":0.00001}" cyphernode:8888/spend) + echo "response=${response}" + wait_for_callbacks + echo "Tested spend, conf and callbacks." + + # addtobatch + # POST http://cyphernode:8888/addtobatch + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} + + # By spending to a watched address, we will test the spending feature and trigger the confirmation to test + # confirmations of watched addresses... Cleva!!! + +# echo "Testing addtobatch..." +# response=$(curl -v -H "Content-Type: application/json" -d "{\"address\":\"${address1}\",\"amount\":0.00001}" cyphernode:8888/spend) +# echo "response=${response}" +# wait_for_callbacks +# echo "Tested addtobatch ." + + + + + # conf + # (GET) http://cyphernode:8888/conf/b081ca7724386f549cf0c16f71db6affeb52ff7a0d9b606fb2e5c43faffd3387 + + # Let's trigger tx confirmation even if not confirmed. Will be funny. Should take care of + # multiple confirmations of the same state. + + + + # executecallbacks + # (GET) http://cyphernode::8080/executecallbacks + + #echo "GET /getbestblockinfo" | nc cyphernode:8888 - | sed -En "s/^(\{.*)/\1/p" | jq + + + + + # spend + # POST http://cyphernode:8888/spend + # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233} + + #curl -v -H "Content-Type: application/json" -d '{"address":"2MsWyaQ8APbnqasFpWopqUKqsdpiVY3EwLE","amount":0.0001}' cyphernode:8888/spend + + # ln_getinfo + # (GET) http://cyphernode:8888/ln_getinfo + + echo "Testing ln_getinfo..." + response=$(curl -s cyphernode:8888/ln_getinfo) + echo "response=${response}" + local port=$(echo ${response} | jq ".binding[] | select(.type == \"ipv4\") | .port") + echo "port=${port}" + if [ "${port}" != "9735" ]; then + exit 170 + fi + echo "Tested ln_getinfo." + + # ln_newaddr + # (GET) http://cyphernode:8888/ln_newaddr + + echo "Testing ln_newaddr..." + response=$(curl -s cyphernode:8888/ln_newaddr) + echo "response=${response}" + address=$(echo ${response} | jq ".address") + echo "address=${address}" + if [ -z "${address}" ]; then + exit 180 + fi + echo "Tested ln_newaddr." + + # ln_create_invoice + # POST http://cyphernode:8888/ln_create_invoice + # BODY {"msatoshi":"10000","label":"koNCcrSvhX3dmyFhW","description":"Bylls order #10649","expiry":"10"} + + #echo "Testing ln_create_invoice..." + #response=$(curl -v -H "Content-Type: application/json" -d "{\"msatoshi\":10000,\"label\":\"koNCcrSvhX3dmyFhW\",\"description\":\"Bylls order #10649\",\"expiry\":10}" cyphernode:8888/ln_create_invoice) + #echo "response=${response}" + + #echo "Tested ln_create_invoice." + + # ln_pay + + +} + +wait_for_callbacks() +{ + nc -vlp1111 -e ./tests-cb.sh + nc -vlp1111 -e ./tests-cb.sh +} + +tests diff --git a/proxy_docker/app/script/trace.sh b/proxy_docker/app/script/trace.sh new file mode 100644 index 0000000..9ff1b50 --- /dev/null +++ b/proxy_docker/app/script/trace.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +trace() +{ + if [ -n "${TRACING}" ]; then + echo "$(date -Is) ${1}" > /dev/stderr + fi +} + +trace_rc() +{ + if [ -n "${TRACING}" ]; then + echo "$(date -Is) Last return code: ${1}" > /dev/stderr + fi +} diff --git a/proxy_docker/app/script/unwatchrequest.sh b/proxy_docker/app/script/unwatchrequest.sh new file mode 100644 index 0000000..0302259 --- /dev/null +++ b/proxy_docker/app/script/unwatchrequest.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +. ./trace.sh +. ./sql.sh + +unwatchrequest() +{ + trace "Entering unwatchrequest()..." + + local request=${1} + local address=$(echo "${request}" | cut -d ' ' -f2 | cut -d '/' -f3) + local returncode + trace "[unwatchrequest] Unwatch request on address ${address})" + + sql "UPDATE watching SET watching=0 WHERE address=\"${address}\"" + returncode=$? + trace_rc ${returncode} + + data="{\"event\":\"unwatch\",\"address\":\"${address}\"}" + trace "[unwatchrequest] responding=${data}" + + echo "${data}" + + return ${returncode} +} + +case "${0}" in *unwatchrequest.sh) unwatchrequest $@;; esac diff --git a/proxy_docker/app/script/utils.sh b/proxy_docker/app/script/utils.sh new file mode 100644 index 0000000..7c739e8 --- /dev/null +++ b/proxy_docker/app/script/utils.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +. ./trace.sh + +get_prop() +{ + trace "Entering get_prop()..." + + local property=${1} + trace "[get_prop] property=${property}" + + local value=$(grep "${property}" config.properties | cut -d'=' -f2) + + trace "[get_prop] value=${value}" + + echo ${value} +} diff --git a/proxy_docker/app/script/walletoperations.sh b/proxy_docker/app/script/walletoperations.sh new file mode 100644 index 0000000..6ae21f7 --- /dev/null +++ b/proxy_docker/app/script/walletoperations.sh @@ -0,0 +1,193 @@ +#!/bin/sh + +. ./trace.sh +. ./sendtobitcoinnode.sh + +spend() +{ + trace "Entering spend()..." + + local data + local request=${1} + local address=$(echo "${request}" | jq ".address" | tr -d '"') + trace "[spend] address=${address}" + local amount=$(echo "${request}" | jq ".amount" | awk '{ printf "%.8f", $0 }') + trace "[spend] amount=${amount}" + local response + local id_inserted + + response=$(send_to_spender_node "{\"method\":\"sendtoaddress\",\"params\":[\"${address}\",${amount}]}") + local returncode=$? + trace_rc ${returncode} + trace "[spend] response=${response}" + + if [ "${returncode}" -eq 0 ]; then + local txid=$(echo ${response} | jq ".result" | tr -d '"') + trace "[spend] txid=${txid}" + + # Let's insert the txid in our little DB to manage the confirmation and tell it's not a watching address +# sql "INSERT OR IGNORE INTO watching (watching, txid) VALUES (0, ${txid})" + sql "INSERT OR IGNORE INTO tx (txid) VALUES (\"${txid}\")" + trace_rc $? + id_inserted=$(sql "SELECT id FROM tx WHERE txid=\"${txid}\"") + trace_rc $? + sql "INSERT OR IGNORE INTO recipient (address, amount, tx_id) VALUES (\"${address}\", ${amount}, ${id_inserted})" + trace_rc $? + + data="{\"status\":\"accepted\"" + data="${data},\"hash\":\"${txid}\"}" + else + local message=$(echo "${response}" | jq -e ".error.message") + data="{\"message\":${message}}" + fi + + trace "[spend] responding=${data}" + echo "${data}" + + return ${returncode} +} + +getbalance() +{ + trace "Entering getbalance()..." + + local response + local data='{"method":"getbalance"}' + response=$(send_to_spender_node "${data}") + local returncode=$? + trace_rc ${returncode} + trace "[getbalance] response=${response}" + + if [ "${returncode}" -eq 0 ]; then + local balance=$(echo ${response} | jq ".result") + trace "[getbalance] balance=${balance}" + + data="{\"balance\":${balance}}" + else + trace "[getbalance] Coudn't get balance!" + data="" + fi + + trace "[getbalance] responding=${data}" + echo "${data}" + + return ${returncode} +} + +getnewaddress() +{ + trace "Entering getnewaddress()..." + + local response + local data='{"method":"getnewaddress"}' + response=$(send_to_spender_node "${data}") + local returncode=$? + trace_rc ${returncode} + trace "[getnewaddress] response=${response}" + + if [ "${returncode}" -eq 0 ]; then + local address=$(echo ${response} | jq ".result") + trace "[getnewaddress] address=${address}" + + data="{\"address\":${address}}" + else + trace "[getnewaddress] Coudn't get a new address!" + data="" + fi + + trace "[getnewaddress] responding=${data}" + echo "${data}" + + return ${returncode} +} + +addtobatching() +{ + trace "Entering addtobatching()..." + + local address=${1} + trace "[addtobatching] address=${address}" + local amount=${2} + trace "[addtobatching] amount=${amount}" + + sql "INSERT OR IGNORE INTO recipient (address, amount) VALUES (\"${address}\", ${amount})" + returncode=$? + trace_rc ${returncode} + + return ${returncode} +} + +batchspend() +{ + trace "Entering batchspend()..." + + local data + local response + local recipientswhere + local recipientsjson + local id_inserted + + # We will batch all the addresses in DB without a TXID + local batching=$(sql 'SELECT address, amount FROM recipient WHERE tx_id IS NULL') + trace "[batchspend] batching=${batching}" + + local returncode + local address + local amount + local notfirst=false + local IFS=$'\n' + for row in ${batching} + do + trace "[batchspend] row=${row}" + address=$(echo "${row}" | cut -d '|' -f1) + trace "[batchspend] address=${address}" + amount=$(echo "${row}" | cut -d '|' -f2) + trace "[batchspend] amount=${amount}" + + if ${notfirst}; then + recipientswhere="${recipientswhere}," + recipientsjson="${recipientsjson}," + else + notfirst=true + fi + + recipientswhere="${recipientswhere}\"${address}\"" + recipientsjson="${recipientsjson}\"${address}\":${amount}" + done + + response=$(send_to_spender_node "{\"method\":\"sendmany\",\"params\":[\"\", {${recipientsjson}}]}") + returncode=$? + trace_rc ${returncode} + trace "[batchspend] response=${response}" + + if [ "${returncode}" -eq 0 ]; then + local txid=$(echo ${response} | jq ".result" | tr -d '"') + trace "[batchspend] txid=${txid}" + + # Let's insert the txid in our little DB to manage the confirmation and tell it's not a watching address +# sql "INSERT OR IGNORE INTO watching (watching, txid) VALUES (0, ${txid})" +# trace_rc $? + sql "INSERT OR IGNORE INTO tx (txid) VALUES (\"${txid}\")" + returncode=$? + trace_rc ${returncode} + if [ "${returncode}" -eq 0 ]; then + id_inserted=$(sql "SELECT id FROM tx WHERE txid=\"${txid}\"") + trace "[batchspend] id_inserted: ${id_inserted}" + sql "UPDATE recipient SET tx_id=${id_inserted} WHERE address IN (${recipientswhere})" + trace_rc $? + fi + + data="{\"status\":\"accepted\"" + data="${data},\"hash\":\"${txid}\"}" + else + local message=$(echo "${response}" | jq -e ".error.message") + data="{\"message\":${message}}" + fi + + trace "[batchspend] responding=${data}" + echo "${data}" + + return ${returncode} +} + +#case "${0}" in *walletoperations.sh) getbalance $@;; esac diff --git a/proxy_docker/app/script/watchrequest.sh b/proxy_docker/app/script/watchrequest.sh new file mode 100644 index 0000000..e056d8c --- /dev/null +++ b/proxy_docker/app/script/watchrequest.sh @@ -0,0 +1,75 @@ +#!/bin/sh + +. ./trace.sh +. ./importaddress.sh +. ./sql.sh +. ./sendtobitcoinnode.sh + +watchrequest() +{ + trace "Entering watchrequest()..." + + local returncode + local request=${1} + local address=$(echo "${request}" | jq ".address" | tr -d '"') + local cb0conf_url=$(echo "${request}" | jq ".unconfirmedCallbackURL" | tr -d '"') + local cb1conf_url=$(echo "${request}" | jq ".confirmedCallbackURL" | tr -d '"') + local imported + local inserted + local id_inserted + local result + trace "[watchrequest] Watch request on address (${address}), cb 0-conf (${cb0conf_url}), cb 1-conf (${cb1conf_url})" + + result=$(importaddress_rpc "${address}") + returncode=$? + trace_rc ${returncode} + if [ "${returncode}" -eq 0 ]; then + imported=1 + else + imported=0 + fi + +# sql "INSERT OR IGNORE INTO watching (address, watching, callback0conf, callback1conf, imported) VALUES (\"${address}\", 1, \"${cb0conf_url}\", \"${cb1conf_url}\", ${imported})" + sql "INSERT OR IGNORE INTO watching (address, watching, callback0conf, callback1conf, imported) VALUES (\"${address}\", 1, \"${cb0conf_url}\", \"${cb1conf_url}\", ${imported})" + returncode=$? + trace_rc ${returncode} + if [ "${returncode}" -eq 0 ]; then + inserted=1 + id_inserted=$(sql "SELECT id FROM watching WHERE address='${address}'") + trace "[watchrequest] id_inserted: ${id_inserted}" + else + inserted=0 + fi + + local fees2blocks + local fees6blocks + local fees36blocks + local fees144blocks + fees2blocks=$(getestimatesmartfee 2) + trace_rc $? + fees6blocks=$(getestimatesmartfee 6) + trace_rc $? + fees36blocks=$(getestimatesmartfee 36) + trace_rc $? + fees144blocks=$(getestimatesmartfee 144) + trace_rc $? + + local data="{\"id\":\"${id_inserted}\", + \"event\":\"watch\", + \"imported\":\"${imported}\", + \"inserted\":\"${inserted}\", + \"address\":\"${address}\", + \"unconfirmedCallbackURL\":\"${cb0conf_url}\", + \"confirmedCallbackURL\":\"${cb1conf_url}\", + \"estimatesmartfee2blocks\":\"${fees2blocks}\", + \"estimatesmartfee6blocks\":\"${fees6blocks}\", + \"estimatesmartfee36blocks\":\"${fees36blocks}\", + \"estimatesmartfee144blocks\":\"${fees144blocks}\"}" + trace "[watchrequest] responding=${data}" + + echo "${data}" + + return ${returncode} +} + +case "${0}" in *watchrequest.sh) watchrequest $@;; esac diff --git a/proxy_docker/env.properties b/proxy_docker/env.properties new file mode 100644 index 0000000..3e7dcbf --- /dev/null +++ b/proxy_docker/env.properties @@ -0,0 +1,11 @@ +TRACING=1 +WATCHER_BTC_NODE_RPC_URL=btcnode:18332/wallet/watching01.dat +SPENDER_BTC_NODE_RPC_URL=btcnode:18332/wallet/spending01.dat +PROXY_LISTENING_PORT=8888 +# Variable substitutions don't work +DB_PATH=/proxyuser/db +DB_FILE=/proxyuser/db/proxydb +# Pycoin container +PYCOIN_CONTAINER=pycoinnode:7777 +# OTS container +OTS_CONTAINER=otsnode:6666 diff --git a/pycoin_docker/Dockerfile b/pycoin_docker/Dockerfile new file mode 100644 index 0000000..410f5af --- /dev/null +++ b/pycoin_docker/Dockerfile @@ -0,0 +1,31 @@ +#FROM resin/raspberry-pi-alpine-python:3.6 +FROM python:3.6-alpine + +ARG USER_ID +ARG GROUP_ID +ENV USERNAME proxyuser +ENV HOME /${USERNAME} +ENV USER_ID ${USER_ID:-1000} +ENV GROUP_ID ${GROUP_ID:-1000} + +RUN addgroup -g ${GROUP_ID} ${USERNAME} \ + && adduser -u ${USER_ID} -G ${USERNAME} -D -s /bin/sh -h ${HOME} ${USERNAME} + +RUN apk add --update --no-cache git jq \ +&& pip install --no-cache-dir pycoin \ +&& cd \ +&& git clone https://github.com/Kexkey/pycoin.git \ +&& cp -rf pycoin/pycoin/* /usr/local/lib/python3.6/site-packages/pycoin + +COPY --chown=proxyuser script/pycoin.sh ${HOME}/pycoin.sh +COPY --chown=proxyuser script/requesthandler.sh ${HOME}/requesthandler.sh +COPY --chown=proxyuser script/responsetoclient.sh ${HOME}/responsetoclient.sh +COPY --chown=proxyuser script/startpycoin.sh ${HOME}/startpycoin.sh +COPY --chown=proxyuser script/trace.sh ${HOME}/trace.sh + +USER ${USERNAME} +WORKDIR ${HOME} + +RUN chmod +x startpycoin.sh requesthandler.sh + +ENTRYPOINT ["./startpycoin.sh"] diff --git a/pycoin_docker/README.md b/pycoin_docker/README.md new file mode 100644 index 0000000..6e2c6dc --- /dev/null +++ b/pycoin_docker/README.md @@ -0,0 +1,16 @@ +# Build image + +```shell +docker build -t pycoinimg --build-arg USER_ID=$(id -u proxyuser) --build-arg GROUP_ID=$(id -g proxyuser) . +``` + +# Usefull examples + +See https://github.com/shivaenigma/pycoin + +List SegWit addresses for path 0/24-30 for a pub32: + +```shell +curl -H "Content-Type: application/json" -d '{"pub32":"tpubD6NzVbkrYhZ4YR3QK2tyfMMvBghAvqtNaNK1LTyDWcRHLcMUm3ZN2cGm5BS3MhCRCeCkXQkTXXjiJgqxpqXK7PeUSp86DTTgkLpcjMtpKWk","path":"0/25-30"}' http://localhost:7777/derive +curl -H "Content-Type: application/json" -d '{"pub32":"vpub5SLqN2bLY4WeZF3kL4VqiWF1itbf3A6oRrq9aPf16AZMVWYCuN9TxpAZwCzVgW94TNzZPNc9XAHD4As6pdnExBtCDGYRmNJrcJ4eV9hNqcv","path":"0/25-30"}' http://localhost:7777/derive +``` diff --git a/pycoin_docker/env.properties b/pycoin_docker/env.properties new file mode 100644 index 0000000..aa2e68f --- /dev/null +++ b/pycoin_docker/env.properties @@ -0,0 +1,2 @@ +TRACING=1 +PYCOIN_LISTENING_PORT=7777 diff --git a/pycoin_docker/script/pycoin.sh b/pycoin_docker/script/pycoin.sh new file mode 100644 index 0000000..d9d8e4e --- /dev/null +++ b/pycoin_docker/script/pycoin.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +. ./trace.sh + +derive() +{ + trace "Entering derive()..." + + local request=${1} + local pub32=$(echo "${request}" | jq ".pub32" | tr -d '"') + local path=$(echo "${request}" | jq ".path" | tr -d '"') + + local result + local returncode + trace "[derive] path=${path}" + trace "[derive] pub32=${pub32}" + + result=$(ku -n BTC -s ${path} -a E:${pub32}) + + returncode=$? + trace_rc ${returncode} + trace "[derive] result=${result}" + + local notfirst=false + + echo -n "{\"addresses\":[" + + local IFS=$'\n' + for address in ${result} + do + if ${notfirst}; then + echo "," + else + notfirst=true + fi + trace "[derive] address=${address}" + + data="{\"address\":\"${address}\"}" + trace "[derive] data=${data}" + + echo -n "${data}" + done + + echo "]}" + + return ${returncode} +} diff --git a/pycoin_docker/script/requesthandler.sh b/pycoin_docker/script/requesthandler.sh new file mode 100644 index 0000000..b5e12dc --- /dev/null +++ b/pycoin_docker/script/requesthandler.sh @@ -0,0 +1,84 @@ +#!/bin/sh +# +# +# +# + +. ./pycoin.sh +. ./responsetoclient.sh +. ./trace.sh + +main() +{ + trace "Entering main()..." + + local step=0 + local cmd + local http_method + local line + local content_length + local response + local returncode + + while read line; do + line=$(echo "${line}" | tr -d '\r\n') + trace "[main] line=${line}" + + if [ "${cmd}" = "" ]; then + # First line! + # Looking for something like: + # GET /cmd/params HTTP/1.1 + # POST / HTTP/1.1 + cmd=$(echo "${line}" | cut -d '/' -f2 | cut -d ' ' -f1) + trace "[main] cmd=${cmd}" + http_method=$(echo "${line}" | cut -d ' ' -f1) + trace "[main] http_method=${http_method}" + if [ "${http_method}" = "GET" ]; then + step=1 + fi + fi + if [ "${line}" = "" ]; then + trace "[main] empty line" + if [ ${step} -eq 1 ]; then + trace "[main] body part finished, disconnecting" + break + else + trace "[main] headers part finished, body incoming" + step=1 + fi + fi + # line=content-length: 406 + case "${line}" in *[cC][oO][nN][tT][eE][nN][tT]-[lL][eE][nN][gG][tT][hH]*) + content_length=$(echo ${line} | cut -d ':' -f2) + trace "[main] content_length=${content_length}"; + ;; + esac + if [ ${step} -eq 1 ]; then + trace "[main] step=${step}" + if [ "${http_method}" = "POST" ]; then + read -n ${content_length} line + trace "[main] line=${line}" + fi + case "${cmd}" in + derive) + # POST http://192.168.111.152:7777/derive + # BODY {"pub32":"tpubD6NzVbkrYhZ4YR3QK2tyfMMvBghAvqtNaNK1LTyDWcRHLcMUm3ZN2cGm5BS3MhCRCeCkXQkTXXjiJgqxpqXK7PeUSp86DTTgkLpcjMtpKWk","path":"0/25-30"} + # BODY {"pub32":"upub5GtUcgGed1aGH4HKQ3vMYrsmLXwmHhS1AeX33ZvDgZiyvkGhNTvGd2TA5Lr4v239Fzjj4ZY48t6wTtXUy2yRgapf37QHgt6KWEZ6bgsCLpb","path":"0/25-30"} + # BODY {"pub32":"vpub5SLqN2bLY4WeZF3kL4VqiWF1itbf3A6oRrq9aPf16AZMVWYCuN9TxpAZwCzVgW94TNzZPNc9XAHD4As6pdnExBtCDGYRmNJrcJ4eV9hNqcv","path":"0/25-30"} + + response=$(derive "${line}") + response_to_client "${response}" ${?} + break + ;; + esac + break + fi + done + trace "[main] exiting" + return 0 +} + +export TRACING + +main +exit $? diff --git a/pycoin_docker/script/responsetoclient.sh b/pycoin_docker/script/responsetoclient.sh new file mode 100644 index 0000000..c907e76 --- /dev/null +++ b/pycoin_docker/script/responsetoclient.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +. ./trace.sh + +response_to_client() +{ + trace "Entering response_to_client()..." + + local response=${1} + local returncode=${2} + + ([ -z "${returncode}" ] || [ "${returncode}" -eq "0" ]) && echo -ne "HTTP/1.1 200 OK\r\n" + [ -n "${returncode}" ] && [ "${returncode}" -ne "0" ] && echo -ne "HTTP/1.1 400 Bad Request\r\n" + + echo -e "Content-Type: application/json\r\nContent-Length: ${#response}\r\n\r\n${response}" + + # Small delay needed for the data to be processed correctly by peer + sleep 0.2s +} + +case "${0}" in *responsetoclient.sh) response_to_client $@;; esac diff --git a/pycoin_docker/script/startpycoin.sh b/pycoin_docker/script/startpycoin.sh new file mode 100644 index 0000000..e9fa212 --- /dev/null +++ b/pycoin_docker/script/startpycoin.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +export TRACING +export PYCOIN_LISTENING_PORT + +nc -vlkp${PYCOIN_LISTENING_PORT} -e ./requesthandler.sh diff --git a/pycoin_docker/script/trace.sh b/pycoin_docker/script/trace.sh new file mode 100644 index 0000000..9ff1b50 --- /dev/null +++ b/pycoin_docker/script/trace.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +trace() +{ + if [ -n "${TRACING}" ]; then + echo "$(date -Is) ${1}" > /dev/stderr + fi +} + +trace_rc() +{ + if [ -n "${TRACING}" ]; then + echo "$(date -Is) Last return code: ${1}" > /dev/stderr + fi +}