diff --git a/cyphernodeconf_docker/templates/gatekeeper/api.properties b/cyphernodeconf_docker/templates/gatekeeper/api.properties index 2a50779..81eccfe 100644 --- a/cyphernodeconf_docker/templates/gatekeeper/api.properties +++ b/cyphernodeconf_docker/templates/gatekeeper/api.properties @@ -39,6 +39,7 @@ action_ln_getroute=watcher action_ln_listpays=watcher action_ln_paystatus=watcher action_bitcoin_estimatesmartfee=watcher +action_validateaddress=watcher # Spender can do what the watcher can do, plus: action_get_txns_spending=spender diff --git a/doc/API.v0.md b/doc/API.v0.md index c695e5f..7abf53d 100644 --- a/doc/API.v0.md +++ b/doc/API.v0.md @@ -752,6 +752,36 @@ Proxy response: } ``` +### Validate a Bitcoin address + +Returns the detailed information about the given address. + +```http +GET http://cyphernode:8888/validateaddress/address +GET http://cyphernode:8888/validateaddress/tb1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqp3mvzv +``` + +Proxy response for a valid address: + +```json +{ + "isvalid": true, + "address": "tb1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqp3mvzv", + "scriptPubKey": "5120a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c", + "iswitness": true, + "witness_version": 1, + "witness_program": "a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c" +} +``` + +Proxy response for an invalid address: + +```json +{ + "isvalid": false +} +``` + ### Spend coins from spending wallet (called by your application) Calls sendtoaddress RPC on the spending wallet with supplied info. Can supply an eventMessage to be published on successful spending. eventMessage should be base64 encoded to avoid dealing with escaping special characters. diff --git a/doc/openapi/v0/cyphernode-api.yaml b/doc/openapi/v0/cyphernode-api.yaml index 6a401ef..b794adb 100644 --- a/doc/openapi/v0/cyphernode-api.yaml +++ b/doc/openapi/v0/cyphernode-api.yaml @@ -1184,6 +1184,54 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiResponseTemporarilyUnavailable' + /validateaddress/{address}: + get: + parameters: + - in: "path" + name: "address" + description: "address string to validate" + required: true + schema: + type: "string" + tags: + - "bitcoin" + - "core features" + summary: "Get the detailed information about the given address" + description: "Returns the detailed information about the given address" + operationId: "validateAddress" + responses: + '200': + description: "operation successful" + content: + application/json: + schema: + type: "object" + required: + - "isvalid" + properties: + isvalid: + type: "boolean" + address: + $ref: '#/components/schemas/TypeAddressString' + scriptPubKey: + type: "string" + isscript: + type: "boolean" + iswitness: + type: "boolean" + witness_version: + type: "number" + witness_program: + type: "string" + '403': + $ref: '#/components/schemas/ApiResponseNotAllowed' + '503': + description: "Resource temporarily unavailable" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponseTemporarilyUnavailable' + /spend: post: tags: @@ -3052,9 +3100,9 @@ components: type: "string" pattern: "^[a-fA-F0-9]+$" TypeAddressString: - description: "base58 check encoded address" + description: "base58 or base32 check encoded address" type: "string" - pattern: "^[a-km-zA-HJ-NP-Z1-9]{26,35}$" + pattern: "^(bc1|tb1|bcrt1)[ac-hj-np-z02-9]{9,71}|[123mn][a-km-zA-HJ-NP-Z1-9]{26,33}$" TypeXpubString: description: "base58 check encoded xpub" type: "string" diff --git a/proxy_docker/app/script/requesthandler.sh b/proxy_docker/app/script/requesthandler.sh index cba8db8..1eaec2d 100644 --- a/proxy_docker/app/script/requesthandler.sh +++ b/proxy_docker/app/script/requesthandler.sh @@ -349,6 +349,13 @@ main() { response_to_client "${response}" ${?} break ;; + validateaddress) + # GET http://192.168.111.152:8080/validateaddress/tb1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqp3mvzv + + response=$(validateaddress $(echo "${line}" | cut -d ' ' -f2 | cut -d '/' -f3)) + response_to_client "${response}" ${?} + break + ;; spend) # POST http://192.168.111.152:8080/spend # BODY {"address":"2N8DcqzfkYi8CkYzvNNS5amoq3SbAcQNXKp","amount":0.00233,"eventMessage":"eyJ3aGF0ZXZlciI6MTIzfQo=","confTarget":6,"replaceable":true,"subtractfeefromamount":false}