Skip to content

Commit e3992c6

Browse files
committed
feat: env var to override the node used for the faucet #257
1 parent 3c20ee4 commit e3992c6

File tree

4 files changed

+41
-2
lines changed

4 files changed

+41
-2
lines changed

.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ STACKS_BLOCKCHAIN_API_HOST=127.0.0.1
1313
STACKS_CORE_RPC_HOST=127.0.0.1
1414
STACKS_CORE_RPC_PORT=20443
1515

16+
# STACKS_FAUCET_NODE_HOST=<IP or hostname>
17+
# STACKS_FAUCET_NODE_PORT=<port number>
18+
1619
BTC_RPC_HOST=http://127.0.0.1
1720
BTC_RPC_PORT=18443
1821
BTC_RPC_USER=btc

src/api/routes/faucets.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
1+
import * as process from 'process';
12
import * as express from 'express';
23
import { addAsync, RouterWithAsync } from '@awaitjs/express';
34
import * as btc from 'bitcoinjs-lib';
45
import PQueue from 'p-queue';
56
import * as BN from 'bn.js';
6-
import { makeSTXTokenTransfer } from '@blockstack/stacks-transactions';
7+
import { makeSTXTokenTransfer, StacksNetwork } from '@blockstack/stacks-transactions';
78
import { makeBtcFaucetPayment, getBtcBalance } from '../../btc-faucet';
89
import { DataStore, DbFaucetRequestCurrency } from '../../datastore/common';
910
import { logger } from '../../helpers';
1011
import { testnetKeys, GetStacksTestnetNetwork } from './debug';
1112
import { StacksCoreRpcClient } from '../../core-rpc/client';
1213

14+
export function getStxFaucetNetwork(): StacksNetwork {
15+
const network = GetStacksTestnetNetwork();
16+
const faucetNodeHostOverride: string | undefined = process.env.STACKS_FAUCET_NODE_HOST;
17+
if (faucetNodeHostOverride) {
18+
const faucetNodePortOverride: string | undefined = process.env.STACKS_FAUCET_NODE_PORT;
19+
if (!faucetNodePortOverride) {
20+
const error = 'STACKS_FAUCET_NODE_HOST is specified but STACKS_FAUCET_NODE_PORT is missing';
21+
logger.error(error);
22+
throw new Error(error);
23+
}
24+
network.coreApiUrl = `http://${faucetNodeHostOverride}:${faucetNodePortOverride}`;
25+
}
26+
return network;
27+
}
28+
1329
export function createFaucetRouter(db: DataStore): RouterWithAsync {
1430
const router = addAsync(express.Router());
1531
router.use(express.urlencoded({ extended: true }));
@@ -93,7 +109,7 @@ export function createFaucetRouter(db: DataStore): RouterWithAsync {
93109
recipient: address,
94110
amount: new BN(stxAmount),
95111
senderKey: privateKey,
96-
network: GetStacksTestnetNetwork(),
112+
network: getStxFaucetNetwork(),
97113
memo: 'Faucet',
98114
});
99115

File renamed without changes.

src/tests/faucet-stx-tests.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as process from 'process';
2+
import { getStxFaucetNetwork } from '../api/routes/faucets';
3+
4+
describe('stx faucet', () => {
5+
test('faucet node env var override', () => {
6+
const faucetDefault = getStxFaucetNetwork();
7+
expect(faucetDefault.coreApiUrl).toBe('http://127.0.0.1:20443');
8+
9+
process.env.STACKS_FAUCET_NODE_HOST = '1.2.3.4';
10+
process.env.STACKS_FAUCET_NODE_PORT = '12345';
11+
12+
try {
13+
const faucetOverride = getStxFaucetNetwork();
14+
expect(faucetOverride.coreApiUrl).toBe('http://1.2.3.4:12345');
15+
} finally {
16+
delete process.env.STACKS_FAUCET_NODE_HOST;
17+
delete process.env.STACKS_FAUCET_NODE_PORT;
18+
}
19+
});
20+
});

0 commit comments

Comments
 (0)