Compare commits

..

No commits in common. "master" and "v0.3.0" have entirely different histories.

38 changed files with 26223 additions and 5723 deletions

View file

@ -42,7 +42,7 @@ network=mainnet
[lightning]
backend=lnd
lnd_tls_cert_path=~/.lnd/tls.cert
lnd_macaroon_path=~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon
lnd_macaroon_path=~/.lnd/data/chain/bitcoin/testnet/admin.macaroon
[bitcoin]
rpc_host=localhost

View file

@ -9,6 +9,7 @@ rpc_host=localhost
rpc_port=18332
rpc_user=devuser
rpc_pass=devpass
zeromq_hashblock_port=28334
[tor]
proxy_ip=localhost

View file

@ -1,29 +0,0 @@
[node]
network=testnet
sqk_dir_path=/home/yzernik/.sqk-other
[lightning]
external_host=localhost
lnd_rpc_host=localhost
lnd_rpc_port=10003
lnd_tls_cert_path=/home/yzernik/.polar/networks/1/volumes/lnd/alice/tls.cert
lnd_macaroon_path=/home/yzernik/.polar/networks/1/volumes/lnd/alice/data/chain/bitcoin/regtest/admin.macaroon
[bitcoin]
rpc_host=localhost
rpc_port=18445
rpc_user=polaruser
rpc_pass=polarpass
[tor]
proxy_ip=localhost
proxy_port=9150
[webadmin]
enabled=true
username=devuser
password=devpass
port=12995
[server]
port=18558

View file

@ -3,16 +3,15 @@ network=testnet
[lightning]
external_host=localhost
lnd_rpc_host=localhost
lnd_rpc_port=10004
lnd_tls_cert_path=/home/yzernik/.polar/networks/1/volumes/lnd/bob/tls.cert
lnd_macaroon_path=/home/yzernik/.polar/networks/1/volumes/lnd/bob/data/chain/bitcoin/regtest/admin.macaroon
lnd_tls_cert_path=~/.lnd/tls.cert
lnd_macaroon_path=~/.lnd/data/chain/bitcoin/testnet/admin.macaroon
[bitcoin]
rpc_host=localhost
rpc_port=18445
rpc_user=polaruser
rpc_pass=polarpass
rpc_port=18332
rpc_user=devuser
rpc_pass=devpass
zeromq_hashblock_port=28334
[tor]
proxy_ip=localhost

View file

@ -1,4 +1,4 @@
FROM golang:1.18-alpine as builder
FROM golang:1.12-alpine as builder
MAINTAINER Olaoluwa Osuntokun <laolu@lightning.network>

View file

@ -14,6 +14,7 @@ rpc_host=bitcoin-core
rpc_port=18332
rpc_user=devuser
rpc_pass=devpass
zeromq_hashblock_port=28334
[tor]
proxy_ip=tor-node

View file

@ -12,6 +12,7 @@ rpc_host=bitcoin-core
rpc_port=18332
rpc_user=devuser
rpc_pass=devpass
zeromq_hashblock_port=28334
[tor]
proxy_ip=tor-node

View file

@ -5,7 +5,7 @@ services:
image: ruimarinho/bitcoin-core:0.21.1
container_name: bitcoin-core
volumes:
- bitcoin:/home/bitcoin/.bitcoin
- ~/.bitcoin:/home/bitcoin/.bitcoin
ports:
- 8332:8332
- 18332:18332
@ -25,7 +25,7 @@ services:
depends_on:
- "tor-node"
volumes:
- lnd_client_dir:/root/.lnd
- ~/.lnd:/root/.lnd
- tor-dir:/var/lib/tor
ports:
- 10009:10009
@ -69,7 +69,7 @@ services:
- 10010:10009
- 9835:9835
volumes:
- clightning_client_dir:/root/.lightning
- ~/.lightning:/root/.lightning
- tor-dir:/var/lib/tor
links:
- "bitcoin-core:bitcoin-core"
@ -151,14 +151,8 @@ services:
entrypoint: ["./entrypoint.sh"]
volumes:
bitcoin:
driver: local
lnd_client_dir:
driver: local
lnd_server_dir:
driver: local
clightning_client_dir:
driver: local
clightning_server_dir:
driver: local
squeaknode_dir:

View file

@ -26,6 +26,7 @@ bitcoin.rpc_user | string | | yes | "" | SQUEAKNODE_BITCOIN_RPC_USER | The usern
bitcoin.rpc_pass | string | | yes | "" | SQUEAKNODE_BITCOIN_RPC_PASS | The password to use for authentication on the bitcoin node.
bitcoin.rpc_use_ssl | boolean | [true, false] | yes | false | SQUEAKNODE_BITCOIN_USE_SSL | Use SSL for the connection to the bitcoin node.
bitcoin.rpc_ssl_cert | str | | yes | "" | SQUEAKNODE_BITCOIN_SSL_CERT | The path to the SSL cert to use for connection to the bitcoin node, if one is used.
bitcoin.zeromq_hashblock_port | int | | yes | 28334 | SQUEAKNODE_BITCOIN_ZEROMQ_HASHBLOCK_PORT | The port to use to subscribe with zeromq to new block hashes on the bitcoin node.
lightning.backend | string | | yes | "lnd" | SQUEAKNODE_LIGHTNING_BACKEND | The Lightning Network node implementation to use.
lightning.external_host | string | | yes | "" | SQUEAKNODE_LIGHTNING_EXTERNAL_HOST | The host of the lightning node to share with other peers.
lightning.external_port | int | | yes | | SQUEAKNODE_LIGHTNING_EXTERNAL_PORT | The port of the lightning node to share with other peers.

View file

@ -32,9 +32,9 @@ You can also run your own squeaknode on your host machine.
pip install .
```
- Copy the `~/.lnd` directory from the docker container to your host machine.
- Make sure that `~/.lnd` directory (created by docker container) has read permissions. You may need to change the permissions:
```
docker cp lnd_client:/root/.lnd/ ~/.lnd
sudo chmod -R 755 ~/.lnd/
```
- Run squeaknode with authentication disabled:

19371
frontend/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@
"google-protobuf": "^3.12.4",
"informed": "^4.6.1",
"jwt-decode": "^2.2.0",
"moment": "^2.29.4",
"moment": "^2.29.2",
"react": "^16.13.1",
"react-contenteditable": "^3.3.4",
"react-copy-to-clipboard": "^5.1.0",

View file

@ -61,26 +61,17 @@ const Peers = (props) => {
return 'IPV4';
};
const getExternalAddressStr = () => {
if (externalAddress) {
return `${externalAddress.getHost()}:${externalAddress.getPort()}`;
} else {
return '';
}
};
function removeHttp(url) {
return url.replace(/^https?:\/\//, '');
}
const savePeer = ({values}) => {
const network = getNetwork(values.useTor);
const strippedAddress = removeHttp(values.address);
const url = new URL(`http://${strippedAddress}`);
const strippedHost = removeHttp(values.host);
dispatch(setSavePeer({
name: values.name,
host: url.hostname,
port: url.port,
host: strippedHost,
port: values.port,
network: network,
}));
toggleSavePeerModal();
@ -101,7 +92,8 @@ const Peers = (props) => {
</div>
<div className="edit-input-wrap">
<Input class="informed-input" name="name" label="Peer Name (not required)" />
<Input class="informed-input" name="address" label="Address (host:port)" />
<Input class="informed-input" name="host" label="Host" />
<Input class="informed-input" name="port" type="number" label="Port" />
<Checkbox class="informed-input" name="useTor" label="Connect With Tor: " />
</div>
@ -127,14 +119,32 @@ const Peers = (props) => {
<div class="float-container">
<div class="float-child">
<div className="edit-input-wrap">
<Input class="informed-input" name="external-address" label="External Address" initialValue={externalAddress && `${getExternalAddressStr()}`} readOnly />
<Input class="informed-input" name="host" label="Host" initialValue={externalAddress && externalAddress.getHost()} readOnly />
</div>
</div>
<div class="float-child">
<CopyToClipboard
text={externalAddress && `${getExternalAddressStr()}`}
text={externalAddress && externalAddress.getHost()}
>
<a data-tip="Copy address">
<a data-tip="Copy host">
<button fullWidth={false}>
<ICON_CLIPBOARD />
</button>
</a>
</CopyToClipboard>
</div>
</div>
<div class="float-container">
<div class="float-child">
<div className="edit-input-wrap">
<Input class="informed-input" name="port" label="Port" initialValue={externalAddress && externalAddress.getPort()} readOnly/>
</div>
</div>
<div class="float-child">
<CopyToClipboard
text={externalAddress && externalAddress.getPort()}
>
<a data-tip="Copy port">
<button fullWidth={false}>
<ICON_CLIPBOARD />
</button>

File diff suppressed because it is too large Load diff

View file

@ -3,8 +3,8 @@
while true; do
client_address=$(docker exec -it test_lnd_client lncli --network=simnet newaddress np2wkh | jq .address -r)
MINING_ADDRESS=$client_address docker compose up -d btcd
MINING_ADDRESS=$client_address docker-compose up -d btcd
echo "Mining 1 blocks to address: $client_address ..."
docker compose run btcctl generate 400
docker-compose run btcctl generate 400
sleep 10
done

View file

@ -6,16 +6,16 @@ trap "kill 0" EXIT
function mine_blocks {
while true; do
printf "Mining 1 block to address: $MINING_ADDRESS ..."
docker compose run btcctl generate 1
docker-compose run btcctl generate 1
sleep 1
done
}
cd itests
docker compose down --volumes --remove-orphans
docker compose build
docker compose up -d
docker-compose down --volumes --remove-orphans
docker-compose build
docker-compose up -d
# Initialize the blockchain with miner rewards going to the test client.
@ -29,9 +29,9 @@ do
sleep 2
done
export MINING_ADDRESS="$client_address docker compose up -d btcd"
MINING_ADDRESS=$client_address docker-compose up -d btcd
echo "Mining 400 blocks to address: $client_address ..."
docker compose run btcctl generate 400
docker-compose run btcctl generate 400
echo "Finished mining blocks."
sleep 30
@ -40,7 +40,7 @@ mine_blocks &
echo "Background mining task is in background..."
echo "Running test.sh...."
docker compose run test ./test.sh
docker-compose run test ./test.sh
echo "Shutting down itest..."
# docker compose down
# docker-compose down

View file

@ -40,7 +40,6 @@ from tests.util import delete_squeak
from tests.util import download_squeak
from tests.util import download_squeak_secret_key
from tests.util import free_price
from tests.util import get_balance
from tests.util import get_external_address
from tests.util import get_hash
from tests.util import get_network
@ -608,18 +607,6 @@ def test_delete_peer(admin_stub, peer_id):
def test_send_coins(admin_stub, other_admin_stub):
new_address_response = admin_stub.LndNewAddress(ln.NewAddressRequest())
get_balance_response = get_balance(
other_admin_stub,
)
print("Get balance: {}".format(get_balance_response))
print("--------------------")
print("--------------------")
print("--------------------")
print("--------------------")
print("--------------------")
print("--------------------")
print("--------------------")
print("--------------------", flush=True)
send_coins_response = send_coins(
other_admin_stub, new_address_response.address, 55555555
)

View file

@ -437,13 +437,6 @@ def disconnect_peer(node_stub, pubkey):
)
def get_balance(node_stub):
get_balance_request = lnd_pb2.WalletBalanceRequest()
return node_stub.LndWalletBalance(
get_balance_request,
)
def send_coins(node_stub, addr, amount):
send_coins_request = lnd_pb2.SendCoinsRequest(
addr=addr,

View file

@ -20,4 +20,4 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
__version__ = '0.3.5'
__version__ = '0.3.0'

View file

@ -1,7 +1,7 @@
{
"files": {
"main.css": "/static/css/main.fe6c5463.css",
"main.js": "/static/js/main.f8361353.js",
"main.js": "/static/js/main.e69a9816.js",
"static/css/306.7f7715a0.chunk.css": "/static/css/306.7f7715a0.chunk.css",
"static/js/306.90b2a66c.chunk.js": "/static/js/306.90b2a66c.chunk.js",
"static/css/900.5027b0a1.chunk.css": "/static/css/900.5027b0a1.chunk.css",
@ -11,7 +11,7 @@
"static/media/icon.svg": "/static/media/icon.982210ec9275956e4d3cc77fa90167fd.svg",
"index.html": "/index.html",
"main.fe6c5463.css.map": "/static/css/main.fe6c5463.css.map",
"main.f8361353.js.map": "/static/js/main.f8361353.js.map",
"main.e69a9816.js.map": "/static/js/main.e69a9816.js.map",
"306.7f7715a0.chunk.css.map": "/static/css/306.7f7715a0.chunk.css.map",
"306.90b2a66c.chunk.js.map": "/static/js/306.90b2a66c.chunk.js.map",
"900.5027b0a1.chunk.css.map": "/static/css/900.5027b0a1.chunk.css.map",
@ -21,6 +21,6 @@
},
"entrypoints": [
"static/css/main.fe6c5463.css",
"static/js/main.f8361353.js"
"static/js/main.e69a9816.js"
]
}

View file

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#1da1f2"/><meta nam="description" content="Squeaknode!"/><meta name="og:title" content="Squeaknode"/><meta name="og:description" content="check out my the Squeaknode I made"/><link href="https://fonts.googleapis.com/css2?family=Assistant&display=swap" rel="stylesheet"><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Squeaknode</title><script defer="defer" src="/static/js/main.f8361353.js"></script><link href="/static/css/main.fe6c5463.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#1da1f2"/><meta nam="description" content="Squeaknode!"/><meta name="og:title" content="Squeaknode"/><meta name="og:description" content="check out my the Squeaknode I made"/><link href="https://fonts.googleapis.com/css2?family=Assistant&display=swap" rel="stylesheet"><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Squeaknode</title><script defer="defer" src="/static/js/main.e69a9816.js"></script><link href="/static/css/main.fe6c5463.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -40,7 +40,7 @@ DEFAULT_LOG_LEVEL = "INFO"
DEFAULT_MAX_SQUEAKS = 10000
DEFAULT_MAX_SQUEAKS_PER_PUBLIC_KEY_PER_BLOCK = 100
DEFAULT_SERVER_RPC_HOST = "0.0.0.0"
DEFAULT_SERVER_RPC_PORT = 8555
DEFAULT_SERVER_RPC_PORT = None
DEFAULT_EXTERNAL_PORT = 8555
DEFAULT_ADMIN_RPC_HOST = "0.0.0.0"
DEFAULT_ADMIN_RPC_PORT = 8994
@ -48,6 +48,7 @@ DEFAULT_WEBADMIN_HOST = "0.0.0.0"
DEFAULT_WEBADMIN_PORT = 12994
DEFAULT_BITCOIN_RPC_HOST = "localhost"
DEFAULT_BITCOIN_RPC_PORT = 18334
DEFAULT_BITCOIN_ZEROMQ_HASHBLOCK_PORT = 28334
BITCOIN_RPC_PORT = {
"mainnet": 8332,
"testnet": 18332,
@ -81,6 +82,8 @@ class BitcoinConfig(Config):
rpc_pass = key(cast=str, required=False, default="")
rpc_use_ssl = key(cast=bool, required=False, default=False)
rpc_ssl_cert = key(cast=str, required=False, default="")
zeromq_hashblock_port = key(cast=int, required=False,
default=DEFAULT_BITCOIN_ZEROMQ_HASHBLOCK_PORT)
@section('lightning')
@ -106,7 +109,7 @@ class TorConfig(Config):
class ServerConfig(Config):
enabled = key(cast=bool, required=False, default=True)
host = key(cast=str, required=False, default=DEFAULT_SERVER_RPC_HOST)
port = key(cast=int, required=False, default=0)
port = key(cast=int, required=False, default=DEFAULT_SERVER_RPC_PORT)
external_address = key(cast=str, required=False, default="")
external_port = key(cast=int, required=False,
default=DEFAULT_EXTERNAL_PORT)

View file

@ -26,13 +26,8 @@ from squeaknode.core.squeak_peer import SqueakPeer
def create_saved_peer(
peer_name: str,
peer_address: PeerAddress,
default_peer_port: int,
) -> SqueakPeer:
validate_saved_peer_name(peer_name)
if peer_address.port == 0:
peer_address = peer_address._replace(
port=default_peer_port,
)
return SqueakPeer(
peer_id=None,
peer_name=peer_name,

View file

@ -29,7 +29,7 @@ from squeaknode.db.models import Models
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config # type: ignore
config = context.config
# Interpret the config file for Python logging.
# This line sets up loggers basically.

View file

@ -91,9 +91,7 @@ class PaymentProcessorTask:
def process_subscribed_invoices(self):
while not self.stopped.is_set():
try:
# Use zero as starting settle index, so that no invoices are skipped.
# latest_settle_index = self.get_latest_settle_index()
latest_settle_index = 0
latest_settle_index = self.get_latest_settle_index()
logger.info("Starting payment subscription with settle index: {}".format(
latest_settle_index,
))

View file

@ -187,11 +187,7 @@ class SqueakController:
return self.squeak_store.get_squeak_profile_private_key(profile_id)
def create_peer(self, peer_name: str, peer_address: PeerAddress):
return self.squeak_store.create_peer(
peer_name,
peer_address,
self.config.server.port or 0,
)
return self.squeak_store.create_peer(peer_name, peer_address)
def get_peer(self, peer_id: int) -> Optional[SqueakPeer]:
return self.squeak_store.get_peer(peer_id)

View file

@ -228,7 +228,7 @@ class SqueakNode:
def create_peer_web_server(self):
self.peer_web_server = SqueakPeerWebServer(
self.config.server.host,
self.config.server.port or squeak.params.params.DEFAULT_PORT,
squeak.params.params.DEFAULT_PORT,
self.peer_handler,
)

View file

@ -389,11 +389,10 @@ class SqueakStore:
))
return get_profile_private_key(profile)
def create_peer(self, peer_name: str, peer_address: PeerAddress, default_peer_port):
def create_peer(self, peer_name: str, peer_address: PeerAddress):
squeak_peer = create_saved_peer(
peer_name,
peer_address,
default_peer_port,
)
return self.squeak_db.insert_peer(squeak_peer)

View file

@ -77,9 +77,8 @@ def create_app(handler):
@app.route('/offer/<hash>')
def offer(hash):
client_host = request.remote_addr
client_port = request.environ.get('REMOTE_PORT') or 0
try:
offer = handler.handle_get_offer(hash, client_host, client_port)
offer = handler.handle_get_offer(hash, client_host)
except NotFoundError:
return "Not found", 404
return jsonify({

View file

@ -75,12 +75,12 @@ class SqueakPeerServerHandler(object):
raise NotFoundError()
return secret_key
def handle_get_offer(self, squeak_hash_str, client_host, client_port) -> Offer:
def handle_get_offer(self, squeak_hash_str, client_host) -> Offer:
squeak_hash = bytes.fromhex(squeak_hash_str)
client_addr = PeerAddress(
network=Network.IPV4,
host=client_host,
port=client_port,
port=0,
)
offer = self.squeak_controller.get_packaged_offer(
squeak_hash,

View file

@ -31,11 +31,6 @@ def peer_name():
yield "fake_peer_name"
@pytest.fixture
def default_peer_port():
yield 9999
@pytest.fixture
def peer_address():
yield PeerAddress(
@ -63,37 +58,24 @@ def peer_address_with_no_port():
)
def test_create_saved_peer(peer_name, peer_address, default_peer_port):
def test_create_saved_peer(peer_name, peer_address):
peer = create_saved_peer(
peer_name,
peer_address,
default_peer_port,
)
assert peer.peer_name == peer_name
assert peer.address == peer_address
def test_create_saved_peer_empty_name(peer_address, default_peer_port):
create_saved_peer("", peer_address, default_peer_port)
def test_create_saved_peer_empty_name(peer_address):
create_saved_peer("", peer_address)
def test_create_saved_peer_no_port(peer_name, peer_address_with_no_port, default_peer_port):
peer = create_saved_peer(
peer_name,
peer_address_with_no_port,
default_peer_port,
)
assert peer.peer_name == peer_name
assert peer.address.port == default_peer_port
def test_create_saved_peer_use_tor(peer_name, peer_address_with_tor, default_peer_port):
def test_create_saved_peer_use_tor(peer_name, peer_address_with_tor):
peer = create_saved_peer(
peer_name,
peer_address_with_tor,
default_peer_port,
)
assert peer.peer_name == peer_name

View file

@ -167,5 +167,4 @@ def test_create_peer(squeak_store, squeak_controller, peer_address):
squeak_store.create_peer.assert_called_with(
"fake_peer_name",
peer_address,
0,
)

View file

@ -121,7 +121,6 @@ def gen_squeak_peer(peer_name):
return create_saved_peer(
peer_name,
peer_address,
0,
)