mirror of
https://github.com/RoboSats/robosats.git
synced 2025-01-19 04:31:35 +00:00
Add bitcoin RPC methods for onchain address validation (#198)
* Added params to connect to bitcoin core daemon. Needed by api.utils.validate_onchain_address() * Fixes issue#194 * Modified BITCOIND_RPCUSER and BITCOIND_RPCPASSWORD to default development environment * Modified BITCOIND_RPCURL port number to default development environment
This commit is contained in:
parent
8e451da5d3
commit
3ae6087a87
@ -8,6 +8,11 @@ LND_CERT_BASE64='LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLVENDQWRDZ0F3SUJBZ0l
|
|||||||
# base64 ~/.lnd/data/chain/bitcoin/testnet/admin.macaroon | tr -d '\n'
|
# base64 ~/.lnd/data/chain/bitcoin/testnet/admin.macaroon | tr -d '\n'
|
||||||
LND_MACAROON_BASE64='AgEDbG5kAvgBAwoQsyI+PK+fyb7F2UyTeZ4seRIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaIQoIbWFjYXJvb24SCGdlbmVyYXRlEgRyZWFkEgV3cml0ZRoWCgdtZXNzYWdlEgRyZWFkEgV3cml0ZRoXCghvZmZjaGFpbhIEcmVhZBIFd3JpdGUaFgoHb25jaGFpbhIEcmVhZBIFd3JpdGUaFAoFcGVlcnMSBHJlYWQSBXdyaXRlGhgKBnNpZ25lchIIZ2VuZXJhdGUSBHJlYWQAAAYgMt90uD6v4truTadWCjlppoeJ4hZrL1SBb09Y+4WOiI0='
|
LND_MACAROON_BASE64='AgEDbG5kAvgBAwoQsyI+PK+fyb7F2UyTeZ4seRIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaIQoIbWFjYXJvb24SCGdlbmVyYXRlEgRyZWFkEgV3cml0ZRoWCgdtZXNzYWdlEgRyZWFkEgV3cml0ZRoXCghvZmZjaGFpbhIEcmVhZBIFd3JpdGUaFgoHb25jaGFpbhIEcmVhZBIFd3JpdGUaFAoFcGVlcnMSBHJlYWQSBXdyaXRlGhgKBnNpZ25lchIIZ2VuZXJhdGUSBHJlYWQAAAYgMt90uD6v4truTadWCjlppoeJ4hZrL1SBb09Y+4WOiI0='
|
||||||
|
|
||||||
|
# Bitcoin Core Daemon RPC, used to validate addresses
|
||||||
|
BITCOIND_RPCURL = 'http://127.0.0.1:18332'
|
||||||
|
BITCOIND_RPCUSER = 'robodev'
|
||||||
|
BITCOIND_RPCPASSWORD = 'robodev'
|
||||||
|
|
||||||
# Postgresql Database
|
# Postgresql Database
|
||||||
POSTGRES_NAME='postgres'
|
POSTGRES_NAME='postgres'
|
||||||
POSTGRES_USER='postgres'
|
POSTGRES_USER='postgres'
|
||||||
|
73
api/utils.py
73
api/utils.py
@ -1,9 +1,14 @@
|
|||||||
import requests, ring, os
|
import json
|
||||||
from decouple import config
|
import os
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import coinaddrvalidator as addr
|
import requests
|
||||||
|
import ring
|
||||||
|
from decouple import config
|
||||||
|
|
||||||
from api.models import Order
|
from api.models import Order
|
||||||
|
|
||||||
|
|
||||||
def get_tor_session():
|
def get_tor_session():
|
||||||
session = requests.session()
|
session = requests.session()
|
||||||
# Tor uses the 9050 port as the default socks port
|
# Tor uses the 9050 port as the default socks port
|
||||||
@ -11,36 +16,48 @@ def get_tor_session():
|
|||||||
'https': 'socks5://127.0.0.1:9050'}
|
'https': 'socks5://127.0.0.1:9050'}
|
||||||
return session
|
return session
|
||||||
|
|
||||||
|
|
||||||
|
def bitcoind_rpc(method, params=None):
|
||||||
|
"""
|
||||||
|
Makes a RPC call to bitcoin core daemon
|
||||||
|
:param method: RPC method to call
|
||||||
|
:param params: list of params required by the calling RPC method
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
BITCOIND_RPCURL = config('BITCOIND_RPCURL')
|
||||||
|
BITCOIND_RPCUSER = config('BITCOIND_RPCUSER')
|
||||||
|
BITCOIND_RPCPASSWORD = config('BITCOIND_RPCPASSWORD')
|
||||||
|
|
||||||
|
if params is None:
|
||||||
|
params = []
|
||||||
|
|
||||||
|
payload = json.dumps(
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": "robosats",
|
||||||
|
"method": method,
|
||||||
|
"params": params
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return requests.post(BITCOIND_RPCURL, auth=(BITCOIND_RPCUSER, BITCOIND_RPCPASSWORD), data=payload).json()['result']
|
||||||
|
|
||||||
|
|
||||||
def validate_onchain_address(address):
|
def validate_onchain_address(address):
|
||||||
'''
|
"""
|
||||||
Validates an onchain address
|
Validates an onchain address
|
||||||
'''
|
"""
|
||||||
|
|
||||||
validation = addr.validate('btc', address.encode('utf-8'))
|
try:
|
||||||
|
validation = bitcoind_rpc('validateaddress', [address])
|
||||||
|
if not validation['isvalid']:
|
||||||
|
return False, {"bad_address": validation['error']}
|
||||||
|
except:
|
||||||
|
# TODO: log the exception ?
|
||||||
|
return False, {"bad_address": 'Unable to validate address, check bitcoind backend'}
|
||||||
|
|
||||||
if not validation.valid:
|
return True, None
|
||||||
return False, {
|
|
||||||
"bad_address":
|
|
||||||
"Does not look like a valid address"
|
|
||||||
}
|
|
||||||
|
|
||||||
NETWORK = str(config('NETWORK'))
|
|
||||||
if NETWORK == 'mainnet':
|
|
||||||
if validation.network == 'main':
|
|
||||||
return True, None
|
|
||||||
else:
|
|
||||||
return False, {
|
|
||||||
"bad_address":
|
|
||||||
"This is not a bitcoin mainnet address"
|
|
||||||
}
|
|
||||||
elif NETWORK == 'testnet':
|
|
||||||
if validation.network == 'test':
|
|
||||||
return True, None
|
|
||||||
else:
|
|
||||||
return False, {
|
|
||||||
"bad_address":
|
|
||||||
"This is not a bitcoin testnet address"
|
|
||||||
}
|
|
||||||
|
|
||||||
market_cache = {}
|
market_cache = {}
|
||||||
@ring.dict(market_cache, expire=3) # keeps in cache for 3 seconds
|
@ring.dict(market_cache, expire=3) # keeps in cache for 3 seconds
|
||||||
|
Loading…
Reference in New Issue
Block a user