@tradelayerprotocol/tradelayer 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +13 -0
- package/.claude/skills/tl-algo/SKILL.md +255 -0
- package/.gitattributes +2 -0
- package/.github/workflows/publish.yaml +26 -0
- package/4mm.js +163 -0
- package/LICENSE +21 -0
- package/NPMSwapRefactor.zip +0 -0
- package/README.md +217 -0
- package/address.sh +26 -0
- package/algoAPI.js +581 -0
- package/analyzepsbt.js +92 -0
- package/apiEx.js +99 -0
- package/bb_hyperscalper.js +290 -0
- package/bbo_demo.js +111 -0
- package/buyer.js +622 -0
- package/client.js +50 -0
- package/createTxTest.js +26 -0
- package/createWallet.js +75 -0
- package/daytrader.js +531 -0
- package/decodeTest.js +69 -0
- package/fundingManager.js +144 -0
- package/index.js +4 -0
- package/listener.js +27 -0
- package/litecoreTxBuilder.js +1128 -0
- package/mmEx.js +356 -0
- package/networks.js +51 -0
- package/orderbook.js +200 -0
- package/package.json +34 -0
- package/perTradeQueue.js +36 -0
- package/projectsTLNPMTLNPM/package-lock.json +162 -0
- package/projectsTLNPMTLNPM/package.json +5 -0
- package/quick.js +32 -0
- package/quickFut.js +37 -0
- package/quickSell.js +37 -0
- package/relayerClient.js +117 -0
- package/run4mm.js +80 -0
- package/run_bbo_tracker.js +241 -0
- package/seller.js +443 -0
- package/session.js +45 -0
- package/setup-lin-ltc.sh +139 -0
- package/setup-lin.sh +203 -0
- package/setup-win-ltc.bat +108 -0
- package/setup-win.bat +167 -0
- package/spam_screamer_futures.js +222 -0
- package/tradelayer.js/.gitattributes +2 -0
- package/tradelayer.js/README.md +2 -0
- package/tradelayer.js/oldTests/activationTest.js +6 -0
- package/tradelayer.js/oldTests/base58.test.js +23 -0
- package/tradelayer.js/oldTests/base64Decode.test.js +16 -0
- package/tradelayer.js/oldTests/blocksRefactor.js +140 -0
- package/tradelayer.js/oldTests/checkVestBalance.js +25 -0
- package/tradelayer.js/oldTests/consensusHashProto.js +151 -0
- package/tradelayer.js/oldTests/contractOrderbook.js +243 -0
- package/tradelayer.js/oldTests/createPayload.js +0 -0
- package/tradelayer.js/oldTests/createTestnetAddr.js +43 -0
- package/tradelayer.js/oldTests/decode.js +205 -0
- package/tradelayer.js/oldTests/decodeTest.js +50 -0
- package/tradelayer.js/oldTests/displayTallyMap.js +19 -0
- package/tradelayer.js/oldTests/encodeDecode.js +340 -0
- package/tradelayer.js/oldTests/expressTest.js +29 -0
- package/tradelayer.js/oldTests/extractBlocksVanilla.js +214 -0
- package/tradelayer.js/oldTests/extractBlocksVanillaa.js +179 -0
- package/tradelayer.js/oldTests/extractPubkeyTest.js +60 -0
- package/tradelayer.js/oldTests/fillInputCacheProto.js +111 -0
- package/tradelayer.js/oldTests/getRawTxTest.js +22 -0
- package/tradelayer.js/oldTests/indexTest.js +26 -0
- package/tradelayer.js/oldTests/initTokensTest.js +32 -0
- package/tradelayer.js/oldTests/interfaceChild.js +129 -0
- package/tradelayer.js/oldTests/listenerChild.js +112 -0
- package/tradelayer.js/oldTests/opdecode.js +26 -0
- package/tradelayer.js/oldTests/options.js +79 -0
- package/tradelayer.js/oldTests/optxtest.js +116 -0
- package/tradelayer.js/oldTests/optxtest1.js +64 -0
- package/tradelayer.js/oldTests/oracle.test.js +32 -0
- package/tradelayer.js/oldTests/orderbook.test.js +36 -0
- package/tradelayer.js/oldTests/parsing.js +93 -0
- package/tradelayer.js/oldTests/payload.js +13 -0
- package/tradelayer.js/oldTests/persistenceUnitTest.js +23 -0
- package/tradelayer.js/oldTests/property.test.js +53 -0
- package/tradelayer.js/oldTests/propertyLevel.js +75 -0
- package/tradelayer.js/oldTests/propertyTest.js +32 -0
- package/tradelayer.js/oldTests/queryAddressTest.js +17 -0
- package/tradelayer.js/oldTests/salter.js +14 -0
- package/tradelayer.js/oldTests/tally.js +81 -0
- package/tradelayer.js/oldTests/tally.test.js +48 -0
- package/tradelayer.js/oldTests/tally2.js +124 -0
- package/tradelayer.js/oldTests/tally3.js +142 -0
- package/tradelayer.js/oldTests/tallyDiag.js +38 -0
- package/tradelayer.js/oldTests/testGetRaw.js +40 -0
- package/tradelayer.js/oldTests/testHexConvert.js +47 -0
- package/tradelayer.js/oldTests/testNewEncoding.js +96 -0
- package/tradelayer.js/oldTests/testNewEncoding2.js +113 -0
- package/tradelayer.js/oldTests/testNewEncoding3 +112 -0
- package/tradelayer.js/oldTests/testNewEncoding3.js +168 -0
- package/tradelayer.js/oldTests/testOPReturn.js +102 -0
- package/tradelayer.js/oldTests/testPayload.js +23 -0
- package/tradelayer.js/oldTests/testRaw.js +50 -0
- package/tradelayer.js/oldTests/testSendTooMuch.js +20 -0
- package/tradelayer.js/oldTests/testTxBuild +28 -0
- package/tradelayer.js/oldTests/testTxBuild.js +42 -0
- package/tradelayer.js/oldTests/tokenOrderbook.js +243 -0
- package/tradelayer.js/oldTests/txUtilsA.js +515 -0
- package/tradelayer.js/oldTests/validityUnitTest.js +53 -0
- package/tradelayer.js/oldTests/vaults.js +72 -0
- package/tradelayer.js/oldTests/volumeIndex.js +117 -0
- package/tradelayer.js/oldTests/volumeIndex2.js +88 -0
- package/tradelayer.js/output_base64.txt +1 -0
- package/tradelayer.js/package-lock.json +9967 -0
- package/tradelayer.js/package.json +61 -0
- package/tradelayer.js/server/index.js +88 -0
- package/tradelayer.js/server/litecoind.exe +0 -0
- package/tradelayer.js/src/activation.js +303 -0
- package/tradelayer.js/src/adjuster.js +77 -0
- package/tradelayer.js/src/amm.js +400 -0
- package/tradelayer.js/src/base256.js +55 -0
- package/tradelayer.js/src/base94.js +79 -0
- package/tradelayer.js/src/channels.js +1163 -0
- package/tradelayer.js/src/clearing.js +3109 -0
- package/tradelayer.js/src/clearlist.js +364 -0
- package/tradelayer.js/src/client.js +295 -0
- package/tradelayer.js/src/consensus.js +613 -0
- package/tradelayer.js/src/contractRegistry.js +964 -0
- package/tradelayer.js/src/db.js +89 -0
- package/tradelayer.js/src/init.js +24 -0
- package/tradelayer.js/src/insurance.js +347 -0
- package/tradelayer.js/src/interface.js +218 -0
- package/tradelayer.js/src/interfaceExpress.js +178 -0
- package/tradelayer.js/src/iou.js +509 -0
- package/tradelayer.js/src/listener.js +226 -0
- package/tradelayer.js/src/logic.js +1702 -0
- package/tradelayer.js/src/main.js +927 -0
- package/tradelayer.js/src/marginMap.js +2165 -0
- package/tradelayer.js/src/options.js +126 -0
- package/tradelayer.js/src/oracle.js +394 -0
- package/tradelayer.js/src/orderbook.js +4123 -0
- package/tradelayer.js/src/persistence.js +554 -0
- package/tradelayer.js/src/property.js +411 -0
- package/tradelayer.js/src/reOrg.js +41 -0
- package/tradelayer.js/src/scaling.js +145 -0
- package/tradelayer.js/src/tally.js +1275 -0
- package/tradelayer.js/src/tradeHistoryManager.js +552 -0
- package/tradelayer.js/src/txDecoder.js +584 -0
- package/tradelayer.js/src/txEncoder.js +610 -0
- package/tradelayer.js/src/txIndex.js +502 -0
- package/tradelayer.js/src/txUtils.js +1392 -0
- package/tradelayer.js/src/types.js +429 -0
- package/tradelayer.js/src/validity.js +3077 -0
- package/tradelayer.js/src/vaults.js +430 -0
- package/tradelayer.js/src/vesting.js +491 -0
- package/tradelayer.js/src/volumeIndex.js +618 -0
- package/tradelayer.js/src/walletInterface.js +220 -0
- package/tradelayer.js/src/walletListener.js +665 -0
- package/tradelayer.js/tests/256decode.js +82 -0
- package/tradelayer.js/tests/UTXOracle.js +205 -0
- package/tradelayer.js/tests/base94test.js +23 -0
- package/tradelayer.js/tests/cancelTxTest.js +62 -0
- package/tradelayer.js/tests/contractInterfaceTest.js +48 -0
- package/tradelayer.js/tests/decimalTest.js +65 -0
- package/tradelayer.js/tests/decoderTest.js +100 -0
- package/tradelayer.js/tests/deltaCount.js +47 -0
- package/tradelayer.js/tests/deltaCount2.js +60 -0
- package/tradelayer.js/tests/interfaceTest.js +37 -0
- package/tradelayer.js/tests/mainTest.js +53 -0
- package/tradelayer.js/tests/makeActivationTest.js +24 -0
- package/tradelayer.js/tests/maxHeightTest.js +49 -0
- package/tradelayer.js/tests/reverseHash.js +72 -0
- package/tradelayer.js/tests/sensitiveConsoleOutput.txt +267 -0
- package/tradelayer.js/tests/tallyTest.js +40 -0
- package/tradelayer.js/tests/testBuybacks.js +46 -0
- package/tradelayer.js/tests/testCodeHash.js +49 -0
- package/tradelayer.js/tests/testConsensusHash.js +91 -0
- package/tradelayer.js/tests/testDecode.js +30 -0
- package/tradelayer.js/tests/testEncodingLengths.js +129 -0
- package/tradelayer.js/tests/testGetTx +32 -0
- package/tradelayer.js/tests/testGetTx.js +32 -0
- package/tradelayer.js/tests/testHexHash.js +32 -0
- package/tradelayer.js/tests/testIndexHash.js +35 -0
- package/tradelayer.js/tests/testInitContracts.js +38 -0
- package/tradelayer.js/tests/testMaxConsensus.js +12 -0
- package/tradelayer.js/tests/testMaxSynth.js +44 -0
- package/tradelayer.js/tests/testMint.js +21 -0
- package/tradelayer.js/tests/testNetwork.js +33 -0
- package/tradelayer.js/tests/testOrderbookLoad.js +62 -0
- package/tradelayer.js/tests/testRebates.js +32 -0
- package/tradelayer.js/tests/testRedeem.js +22 -0
- package/tradelayer.js/tests/testTokenTrade.js +39 -0
- package/tradelayer.js/tests/testTxBuild.js +42 -0
- package/tradelayer.js/tests/testUTXOTrade.js +27 -0
- package/tradelayer.js/tests/tokenTradeHistory.js +27 -0
- package/tradelayer.js/tests/tradeFutures.js +40 -0
- package/tradelayer.js/tests/tradeHistoryExample.js +35 -0
- package/tradelayer.js/tests/tradeHistoryLoad.js +15 -0
- package/tradelayer.js/tests/txScanTest.js +134 -0
- package/tradelayer.js/tests/validateTest.js +136 -0
- package/tradelayer.js/tests/vestingTest.js +37 -0
- package/tradelayer.js/utils/activateMainnet.js +59 -0
- package/tradelayer.js/utils/activateMainnetDoge.js +63 -0
- package/tradelayer.js/utils/autocompactdb.js +23 -0
- package/tradelayer.js/utils/base64toHex.js +32 -0
- package/tradelayer.js/utils/broadcastDoge.js +38 -0
- package/tradelayer.js/utils/calcRedeem.js +19 -0
- package/tradelayer.js/utils/checkNetwork.js +27 -0
- package/tradelayer.js/utils/createAddress.js +48 -0
- package/tradelayer.js/utils/createAttestation.js +133 -0
- package/tradelayer.js/utils/createContract.js +118 -0
- package/tradelayer.js/utils/createOracle.js +94 -0
- package/tradelayer.js/utils/createwallet.js +20 -0
- package/tradelayer.js/utils/crossFuturesTrades.js +57 -0
- package/tradelayer.js/utils/crossTokenTrades.js +62 -0
- package/tradelayer.js/utils/dumpPriv.js +29 -0
- package/tradelayer.js/utils/generateChannel.js +34 -0
- package/tradelayer.js/utils/getInfo.js +21 -0
- package/tradelayer.js/utils/hardWipe.js +20 -0
- package/tradelayer.js/utils/hexTo64.js +16 -0
- package/tradelayer.js/utils/importAddress.js +28 -0
- package/tradelayer.js/utils/importpriv.js +20 -0
- package/tradelayer.js/utils/issueOracleContract.js +67 -0
- package/tradelayer.js/utils/issueTokens.js +41 -0
- package/tradelayer.js/utils/listunspent.js +66 -0
- package/tradelayer.js/utils/litecoinClient.js +30 -0
- package/tradelayer.js/utils/loadwallet.js +20 -0
- package/tradelayer.js/utils/publishOracle.js +113 -0
- package/tradelayer.js/utils/sendActivation.js +21 -0
- package/tradelayer.js/utils/sendChannelContractTrade.js +34 -0
- package/tradelayer.js/utils/sendChannelTokenTrade.js +34 -0
- package/tradelayer.js/utils/sendCommit.js +24 -0
- package/tradelayer.js/utils/sendDoge.js +62 -0
- package/tradelayer.js/utils/sendDogeMain.js +67 -0
- package/tradelayer.js/utils/sendDogeTx.js +46 -0
- package/tradelayer.js/utils/sendLTC.js +63 -0
- package/tradelayer.js/utils/sendMainnet.js +62 -0
- package/tradelayer.js/utils/sendTransfer.js +19 -0
- package/tradelayer.js/utils/sendVestTest.js +88 -0
- package/tradelayer.js/utils/sendWithdrawal.js +26 -0
- package/tradelayer.js/utils/simpleStart.js +8 -0
- package/tradelayer.js/utils/startStop.js +27 -0
- package/tradelayer.js/utils/structuredTrades.js +136 -0
- package/tradelayer.js/utils/verifySignature.js +90 -0
- package/tradelayer.js/utils/verifyWitnessAndScriptPubkey.js +41 -0
- package/tradelayer.js/utils/walletCache.js +172 -0
- package/tradelayer.js/utils/walletContractInterface.js +48 -0
- package/tradelayer.js/utils/walletFetchTxs.js +66 -0
- package/tradelayer.js/utils/walletUtils.js +97 -0
- package/tradelayer.js/utils/wipeDB.js +55 -0
- package/tradelayer.js/utils/wipeDBNotTx.js +50 -0
- package/txEncoder.js +529 -0
- package/utility.js +28 -0
- package/verifymessage.js +38 -0
- package/ws-transport.js +311 -0
package/session.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class OrderbookSession {
|
|
2
|
+
constructor(socket, myInfo, txsService, client) {
|
|
3
|
+
this.socket = socket;
|
|
4
|
+
this.myInfo = myInfo;
|
|
5
|
+
this.txsService = txsService;
|
|
6
|
+
this.client = client;
|
|
7
|
+
this.handleOrderMatches();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
handleOrderMatches() {
|
|
11
|
+
this.socket.on('orderMatched', (matchData) => {
|
|
12
|
+
// Assume matchData contains buyer, seller, tradeInfo, type of trade, etc.
|
|
13
|
+
const { buyerInfo, sellerInfo, tradeInfo, typeTrade } = matchData;
|
|
14
|
+
|
|
15
|
+
// Check if we are the buyer or seller
|
|
16
|
+
if (this.myInfo.address === buyerInfo.address) {
|
|
17
|
+
this.initiateBuySwap(typeTrade, tradeInfo, buyerInfo, sellerInfo);
|
|
18
|
+
} else if (this.myInfo.address === sellerInfo.address) {
|
|
19
|
+
this.initiateSellSwap(typeTrade, tradeInfo, buyerInfo, sellerInfo);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
initiateBuySwap(typeTrade, tradeInfo, buyerInfo, sellerInfo) {
|
|
25
|
+
const buySwapper = new BuySwapper(typeTrade, tradeInfo, buyerInfo, sellerInfo, this.client, this.socket, this.txsService);
|
|
26
|
+
buySwapper.onReady().then((res) => {
|
|
27
|
+
if (res.error) {
|
|
28
|
+
console.error(`Buy Swap Failed: ${res.error}`);
|
|
29
|
+
} else {
|
|
30
|
+
console.log(`Buy Swap Complete: ${res.data}`);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
initiateSellSwap(typeTrade, tradeInfo, buyerInfo, sellerInfo) {
|
|
36
|
+
const sellSwapper = new SellSwapper(typeTrade, tradeInfo, sellerInfo, buyerInfo, this.client, this.socket, this.txsService);
|
|
37
|
+
sellSwapper.onReady().then((res) => {
|
|
38
|
+
if (res.error) {
|
|
39
|
+
console.error(`Sell Swap Failed: ${res.error}`);
|
|
40
|
+
} else {
|
|
41
|
+
console.log(`Sell Swap Complete: ${res.data}`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
package/setup-lin-ltc.sh
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Print a message to the user
|
|
4
|
+
echo "Starting setup for TradeLayer environment..."
|
|
5
|
+
|
|
6
|
+
# Install npm dependencies (for the NPM package)
|
|
7
|
+
echo "Installing NPM dependencies..."
|
|
8
|
+
npm install
|
|
9
|
+
|
|
10
|
+
#!/bin/bash
|
|
11
|
+
|
|
12
|
+
APP_DIR="/path/to/your/project/node_modules/tradelayer"
|
|
13
|
+
|
|
14
|
+
# write the .env for client.js bootstrap
|
|
15
|
+
cat > "$APP_DIR/.env" <<EOF
|
|
16
|
+
CHAIN=LTC
|
|
17
|
+
RPC_HOST=127.0.0.1
|
|
18
|
+
RPC_PORT=9332
|
|
19
|
+
RPC_USER=user
|
|
20
|
+
RPC_PASS=pass
|
|
21
|
+
AUTODETECT=0
|
|
22
|
+
TIMEOUT_MS=60000
|
|
23
|
+
EOF
|
|
24
|
+
|
|
25
|
+
echo ".env written to $APP_DIR/.env"
|
|
26
|
+
|
|
27
|
+
# Fetch litecoind binaries from official Litecoin GitHub
|
|
28
|
+
echo "Fetching litecoind binaries..."
|
|
29
|
+
LITECOIN_VERSION=0.21.3
|
|
30
|
+
wget https://download.litecoin.org/litecoin-${LITECOIN_VERSION}/linux/litecoin-${LITECOIN_VERSION}-x86_64-linux-gnu.tar.gz
|
|
31
|
+
|
|
32
|
+
# Extract the downloaded binaries
|
|
33
|
+
echo "Extracting litecoind binaries..."
|
|
34
|
+
tar -xzf litecoin-${LITECOIN_VERSION}-x86_64-linux-gnu.tar.gz
|
|
35
|
+
mv litecoin-${LITECOIN_VERSION} ~/litecoin
|
|
36
|
+
|
|
37
|
+
# Check if litecoin.conf exists, if not create it
|
|
38
|
+
chmod 755 $HOME/.litecoin
|
|
39
|
+
LITECOIN_CONF_DIR="$HOME/.litecoin" # Replace ~ with $HOME to ensure the correct home directory is used
|
|
40
|
+
LITECOIN_CONF_FILE=$LITECOIN_CONF_DIR/litecoin.conf
|
|
41
|
+
|
|
42
|
+
echo "Checking for litecoin.conf at: $LITECOIN_CONF_FILE"
|
|
43
|
+
|
|
44
|
+
if [ ! -f "$LITECOIN_CONF_FILE" ]; then
|
|
45
|
+
echo "Creating litecoin.conf file..."
|
|
46
|
+
mkdir -p "$LITECOIN_CONF_DIR" # Ensure the directory is created
|
|
47
|
+
echo "rpcuser=user" > "$LITECOIN_CONF_FILE"
|
|
48
|
+
echo "rpcpassword=pass" >> "$LITECOIN_CONF_FILE"
|
|
49
|
+
echo "rpcallowip=127.0.0.1" >> "$LITECOIN_CONF_FILE"
|
|
50
|
+
echo "testnet=1" >> "$LITECOIN_CONF_FILE"
|
|
51
|
+
echo "txindex=1" >> "$LITECOIN_CONF_FILE"
|
|
52
|
+
echo "[test]"
|
|
53
|
+
echo "rpcport=19322" >> "$LITECOIN_CONF_FILE"
|
|
54
|
+
echo "[main]"
|
|
55
|
+
echo "rpcport=9322" >> "$LITECOIN_CONF_FILE"
|
|
56
|
+
echo "litecoin.conf created successfully."
|
|
57
|
+
else
|
|
58
|
+
echo "litecoin.conf already exists."
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Clone the TradeLayer.js repository if it doesn't exist
|
|
62
|
+
echo "Checking for TradeLayer.js directory..."
|
|
63
|
+
if [ ! -d "tradelayer.js" ]; then
|
|
64
|
+
echo "Cloning TradeLayer.js repository..."
|
|
65
|
+
git clone https://github.com/patrickdugan/tradelayer.js.git
|
|
66
|
+
else
|
|
67
|
+
echo "TradeLayer.js directory already exists."
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# Navigate to the TradeLayer directory
|
|
71
|
+
cd tradelayer.js
|
|
72
|
+
|
|
73
|
+
# Check out the dtf-UTXO branch
|
|
74
|
+
echo "Checking out the dtf-UTXO branch..."
|
|
75
|
+
git checkout dtf-UTXO
|
|
76
|
+
|
|
77
|
+
# Run npm install in the TradeLayer.js directory
|
|
78
|
+
echo "Installing NPM dependencies for TradeLayer.js..."
|
|
79
|
+
npm install
|
|
80
|
+
|
|
81
|
+
# Run npm dedupe for the TradeLayer.js directory
|
|
82
|
+
echo "Removing redundant lib for TradeLayer.js..."
|
|
83
|
+
npm uninstall bitcore-lib-ltc
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# Start litecoind from the bin folder
|
|
87
|
+
echo "Starting litecoind..."
|
|
88
|
+
~/litecoin/bin/litecoind -daemon -server -testnet -rpcuser=user -rpcpassword=pass -rpcport=18332
|
|
89
|
+
|
|
90
|
+
# Function to check if litecoind is ready
|
|
91
|
+
check_litecoind() {
|
|
92
|
+
while true; do
|
|
93
|
+
sleep 10 # Wait before checking again
|
|
94
|
+
response=$(~/litecoin/bin/litecoin-cli -testnet -rpcport=18332 getblockchaininfo 2>/dev/null)
|
|
95
|
+
|
|
96
|
+
if [[ $? -eq 0 ]]; then
|
|
97
|
+
echo "litecoind is ready."
|
|
98
|
+
break
|
|
99
|
+
else
|
|
100
|
+
echo "Waiting for litecoind to initialize..."
|
|
101
|
+
fi
|
|
102
|
+
done
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# Wait for litecoind to be ready
|
|
106
|
+
check_litecoind
|
|
107
|
+
|
|
108
|
+
# Check if the wallet exists, if not create a new wallet
|
|
109
|
+
WALLET_NAME="mywallet" # You can customize the wallet name here
|
|
110
|
+
WALLET_FILE="$HOME/.litecoin/$WALLET_NAME"
|
|
111
|
+
|
|
112
|
+
echo "Checking for existing wallet at: $WALLET_FILE"
|
|
113
|
+
if [ ! -f "$WALLET_FILE" ]; then
|
|
114
|
+
echo "Creating new wallet..."
|
|
115
|
+
~/litecoin/bin/litecoin-cli -rpcport=18332 createwallet "$WALLET_NAME"
|
|
116
|
+
|
|
117
|
+
else
|
|
118
|
+
echo "Wallet already exists, loading wallet..."
|
|
119
|
+
~/litecoin/bin/litecoin-cli -rpcport=18332 loadwallet "$WALLET_NAME"
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
# Create a wallet address
|
|
123
|
+
echo "Creating wallet address..."
|
|
124
|
+
address=$(~/litecoin/bin/litecoin-cli -testnet -rpcport=19332 -rpcwallet="$WALLET_NAME" getnewaddress)
|
|
125
|
+
echo "Wallet address created: $address"
|
|
126
|
+
|
|
127
|
+
# Command to dump the entire wallet to a file
|
|
128
|
+
echo "Exporting wallet..."
|
|
129
|
+
~/litecoin/bin/litecoin-cli -testnet dumpwallet ./dumpfile.txt
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# Build TradeLayer API
|
|
134
|
+
echo "Building TradeLayer API..."
|
|
135
|
+
cd src
|
|
136
|
+
npm install # Ensure dependencies are installed
|
|
137
|
+
cd ..
|
|
138
|
+
|
|
139
|
+
echo "Setup complete!"
|
package/setup-lin.sh
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
########################################
|
|
5
|
+
# CONFIG — change these for your machine
|
|
6
|
+
########################################
|
|
7
|
+
PROJECT_ROOT="/path/to/your/project" # <- set to your project root
|
|
8
|
+
APP_DIR="$PROJECT_ROOT/node_modules/tradelayer"
|
|
9
|
+
BTC_VERSION="22.0" # Taproot-capable old-but-stable release
|
|
10
|
+
NETWORK="bitcoin-mainnet" # bitcoin-mainnet | bitcoin-testnet
|
|
11
|
+
|
|
12
|
+
# RPC creds for your algo (simple mode)
|
|
13
|
+
RPC_USER="user"
|
|
14
|
+
RPC_PASS="pass"
|
|
15
|
+
|
|
16
|
+
# Wallet name (created if missing)
|
|
17
|
+
WALLET_NAME="mywallet"
|
|
18
|
+
|
|
19
|
+
########################################
|
|
20
|
+
# Derived settings (do not edit)
|
|
21
|
+
########################################
|
|
22
|
+
if [[ "$NETWORK" == "bitcoin-testnet" ]]; then
|
|
23
|
+
IS_TESTNET=1
|
|
24
|
+
RPC_PORT=18332
|
|
25
|
+
NET_FLAG="-testnet"
|
|
26
|
+
CONF_SECTION="[test]"
|
|
27
|
+
else
|
|
28
|
+
IS_TESTNET=0
|
|
29
|
+
RPC_PORT=8332
|
|
30
|
+
NET_FLAG=""
|
|
31
|
+
CONF_SECTION="[main]"
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
DATADIR="$HOME/.bitcoin"
|
|
35
|
+
BITCOIN_CONF="$DATADIR/bitcoin.conf"
|
|
36
|
+
BITCOIN_URL="https://bitcoincore.org/bin/bitcoin-core-$BTC_VERSION/bitcoin-$BTC_VERSION-x86_64-linux-gnu.tar.gz"
|
|
37
|
+
PKG_TAR="bitcoin-$BTC_VERSION-x86_64-linux-gnu.tar.gz"
|
|
38
|
+
PKG_DIR="bitcoin-$BTC_VERSION"
|
|
39
|
+
|
|
40
|
+
echo "=== Starting setup for TradeLayer (Bitcoin) ==="
|
|
41
|
+
|
|
42
|
+
########################################
|
|
43
|
+
# 0) NPM deps (for your package / repo)
|
|
44
|
+
########################################
|
|
45
|
+
echo "Installing NPM dependencies (project root)…"
|
|
46
|
+
cd "$PROJECT_ROOT"
|
|
47
|
+
npm install
|
|
48
|
+
|
|
49
|
+
########################################
|
|
50
|
+
# 1) Write .env for the core module (BTC)
|
|
51
|
+
########################################
|
|
52
|
+
mkdir -p "$APP_DIR"
|
|
53
|
+
cat > "$APP_DIR/.env" <<EOF
|
|
54
|
+
CHAIN=BTC
|
|
55
|
+
RPC_HOST=127.0.0.1
|
|
56
|
+
RPC_PORT=$RPC_PORT
|
|
57
|
+
RPC_USER=$RPC_USER
|
|
58
|
+
RPC_PASS=$RPC_PASS
|
|
59
|
+
AUTODETECT=0
|
|
60
|
+
TIMEOUT_MS=60000
|
|
61
|
+
EOF
|
|
62
|
+
echo ".env written to $APP_DIR/.env"
|
|
63
|
+
|
|
64
|
+
########################################
|
|
65
|
+
# 2) Fetch & install Bitcoin Core $BTC_VERSION
|
|
66
|
+
########################################
|
|
67
|
+
echo "Fetching bitcoind binaries (v$BTC_VERSION)…"
|
|
68
|
+
cd "$HOME"
|
|
69
|
+
if [[ ! -f "$PKG_TAR" ]]; then
|
|
70
|
+
wget -q "$BITCOIN_URL"
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
echo "Extracting bitcoind…"
|
|
74
|
+
tar -xzf "$PKG_TAR"
|
|
75
|
+
sudo install -m 0755 -o root -g root "$PKG_DIR/bin/"* /usr/local/bin/
|
|
76
|
+
bitcoind -version
|
|
77
|
+
|
|
78
|
+
########################################
|
|
79
|
+
# 3) Write bitcoin.conf (simple RPC creds + prune)
|
|
80
|
+
########################################
|
|
81
|
+
echo "Configuring $BITCOIN_CONF …"
|
|
82
|
+
mkdir -p "$DATADIR"
|
|
83
|
+
# Create fresh if missing; otherwise ensure required keys exist/updated
|
|
84
|
+
if [[ ! -f "$BITCOIN_CONF" ]]; then
|
|
85
|
+
cat > "$BITCOIN_CONF" <<EOF
|
|
86
|
+
server=1
|
|
87
|
+
daemon=1
|
|
88
|
+
prune=2000
|
|
89
|
+
txindex=0
|
|
90
|
+
dbcache=450
|
|
91
|
+
|
|
92
|
+
rpcuser=$RPC_USER
|
|
93
|
+
rpcpassword=$RPC_PASS
|
|
94
|
+
|
|
95
|
+
$CONF_SECTION
|
|
96
|
+
rpcport=$RPC_PORT
|
|
97
|
+
EOF
|
|
98
|
+
echo "Created $BITCOIN_CONF"
|
|
99
|
+
else
|
|
100
|
+
# Ensure essential values are present/updated
|
|
101
|
+
grep -q '^server=' "$BITCOIN_CONF" || echo "server=1" >> "$BITCOIN_CONF"
|
|
102
|
+
grep -q '^daemon=' "$BITCOIN_CONF" || echo "daemon=1" >> "$BITCOIN_CONF"
|
|
103
|
+
grep -q '^prune=' "$BITCOIN_CONF" || echo "prune=2000" >> "$BITCOIN_CONF"
|
|
104
|
+
grep -q '^txindex=' "$BITCOIN_CONF" || echo "txindex=0" >> "$BITCOIN_CONF"
|
|
105
|
+
grep -q '^dbcache=' "$BITCOIN_CONF" || echo "dbcache=450" >> "$BITCOIN_CONF"
|
|
106
|
+
|
|
107
|
+
if grep -q '^rpcuser=' "$BITCOIN_CONF"; then
|
|
108
|
+
sed -i "s/^rpcuser=.*/rpcuser=$RPC_USER/" "$BITCOIN_CONF"
|
|
109
|
+
else
|
|
110
|
+
echo "rpcuser=$RPC_USER" >> "$BITCOIN_CONF"
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
if grep -q '^rpcpassword=' "$BITCOIN_CONF"; then
|
|
114
|
+
sed -i "s/^rpcpassword=.*/rpcpassword=$RPC_PASS/" "$BITCOIN_CONF"
|
|
115
|
+
else
|
|
116
|
+
echo "rpcpassword=$RPC_PASS" >> "$BITCOIN_CONF"
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# Ensure correct port under the right section
|
|
120
|
+
if ! grep -q "^\[test\]\|\[main\]" "$BITCOIN_CONF"; then
|
|
121
|
+
# add section if none present
|
|
122
|
+
echo "$CONF_SECTION" >> "$BITCOIN_CONF"
|
|
123
|
+
fi
|
|
124
|
+
# remove any existing rpcport in file and set current
|
|
125
|
+
sed -i "/^rpcport=/d" "$BITCOIN_CONF"
|
|
126
|
+
echo "rpcport=$RPC_PORT" >> "$BITCOIN_CONF"
|
|
127
|
+
|
|
128
|
+
echo "Updated $BITCOIN_CONF"
|
|
129
|
+
fi
|
|
130
|
+
|
|
131
|
+
########################################
|
|
132
|
+
# 4) Start bitcoind (mainnet or testnet)
|
|
133
|
+
########################################
|
|
134
|
+
echo "Starting bitcoind ($NETWORK) …"
|
|
135
|
+
# Stop any stray instance (ignore errors)
|
|
136
|
+
bitcoin-cli $NET_FLAG stop >/dev/null 2>&1 || true
|
|
137
|
+
pkill -f bitcoind >/dev/null 2>&1 || true
|
|
138
|
+
sleep 2
|
|
139
|
+
|
|
140
|
+
bitcoind -daemon $NET_FLAG
|
|
141
|
+
sleep 3
|
|
142
|
+
|
|
143
|
+
########################################
|
|
144
|
+
# 5) Wait until RPC is ready
|
|
145
|
+
########################################
|
|
146
|
+
echo "Waiting for bitcoind RPC @ 127.0.0.1:$RPC_PORT …"
|
|
147
|
+
until bitcoin-cli $NET_FLAG -rpcconnect=127.0.0.1 -rpcport=$RPC_PORT -rpcuser="$RPC_USER" -rpcpassword="$RPC_PASS" getblockchaininfo >/dev/null 2>&1; do
|
|
148
|
+
echo " … still initializing (will retry)…"
|
|
149
|
+
sleep 5
|
|
150
|
+
done
|
|
151
|
+
echo "bitcoind is ready."
|
|
152
|
+
|
|
153
|
+
########################################
|
|
154
|
+
# 6) Create or load wallet; print address
|
|
155
|
+
########################################
|
|
156
|
+
echo "Preparing wallet: $WALLET_NAME"
|
|
157
|
+
# listwallets returns a JSON array of loaded wallets
|
|
158
|
+
if ! bitcoin-cli $NET_FLAG -rpcport=$RPC_PORT -rpcuser="$RPC_USER" -rpcpassword="$RPC_PASS" listwallets | grep -q "\"$WALLET_NAME\""; then
|
|
159
|
+
# if wallet file exists on disk, load; else create
|
|
160
|
+
if bitcoin-cli $NET_FLAG -rpcport=$RPC_PORT -rpcuser="$RPC_USER" -rpcpassword="$RPC_PASS" listwalletdir | grep -q "\"$WALLET_NAME\""; then
|
|
161
|
+
echo "Loading existing wallet…"
|
|
162
|
+
bitcoin-cli $NET_FLAG -rpcport=$RPC_PORT -rpcuser="$RPC_USER" -rpcpassword="$RPC_PASS" loadwallet "$WALLET_NAME" >/dev/null
|
|
163
|
+
else
|
|
164
|
+
echo "Creating new wallet…"
|
|
165
|
+
bitcoin-cli $NET_FLAG -rpcport=$RPC_PORT -rpcuser="$RPC_USER" -rpcpassword="$RPC_PASS" createwallet "$WALLET_NAME" >/dev/null
|
|
166
|
+
fi
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
echo "Generating a new address…"
|
|
170
|
+
ADDR=$(bitcoin-cli $NET_FLAG -rpcport=$RPC_PORT -rpcuser="$RPC_USER" -rpcpassword="$RPC_PASS" -rpcwallet="$WALLET_NAME" getnewaddress "" bech32)
|
|
171
|
+
echo "Wallet address: $ADDR"
|
|
172
|
+
|
|
173
|
+
########################################
|
|
174
|
+
# 7) TradeLayer JS setup (your repo)
|
|
175
|
+
########################################
|
|
176
|
+
cd "$PROJECT_ROOT"
|
|
177
|
+
|
|
178
|
+
if [[ ! -d "tradelayer.js" ]]; then
|
|
179
|
+
echo "Cloning TradeLayer.js…"
|
|
180
|
+
git clone https://github.com/patrickdugan/tradelayer.js.git
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
cd tradelayer.js
|
|
184
|
+
echo "Checking out dtf-UTXO…"
|
|
185
|
+
git fetch --all
|
|
186
|
+
git checkout dtf-UTXO || true
|
|
187
|
+
|
|
188
|
+
echo "Installing TradeLayer.js deps…"
|
|
189
|
+
npm install
|
|
190
|
+
echo "Removing bitcore-lib-ltc (not needed for BTC case)…"
|
|
191
|
+
npm uninstall bitcore-lib-ltc || true
|
|
192
|
+
|
|
193
|
+
# Optionally build API
|
|
194
|
+
if [[ -d "src" ]]; then
|
|
195
|
+
echo "Building TradeLayer API…"
|
|
196
|
+
pushd src >/dev/null
|
|
197
|
+
npm install
|
|
198
|
+
popd >/dev/null
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
echo "=== Setup complete (Bitcoin, $NETWORK) ==="
|
|
202
|
+
echo "RPC: http://$RPC_USER:$RPC_PASS@127.0.0.1:$RPC_PORT/"
|
|
203
|
+
echo "Wallet: $WALLET_NAME Address: $ADDR"
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Print a message to the user
|
|
4
|
+
echo "Starting setup for TradeLayer environment..."
|
|
5
|
+
|
|
6
|
+
# Install npm dependencies (for the NPM package)
|
|
7
|
+
echo "Installing NPM dependencies..."
|
|
8
|
+
npm install
|
|
9
|
+
|
|
10
|
+
@echo off
|
|
11
|
+
REM Change this to your actual project path
|
|
12
|
+
set "APP_DIR=%~dp0node_modules\tradelayer"
|
|
13
|
+
|
|
14
|
+
REM Write .env file
|
|
15
|
+
(
|
|
16
|
+
echo CHAIN=LTC
|
|
17
|
+
echo RPC_HOST=127.0.0.1
|
|
18
|
+
echo RPC_PORT=9332
|
|
19
|
+
echo RPC_USER=user
|
|
20
|
+
echo RPC_PASS=pass
|
|
21
|
+
echo AUTODETECT=0
|
|
22
|
+
echo TIMEOUT_MS=60000
|
|
23
|
+
) > "%APP_DIR%\.env"
|
|
24
|
+
|
|
25
|
+
echo .env written to %APP_DIR%\.env
|
|
26
|
+
|
|
27
|
+
# Fetch litecoind binaries from official Litecoin GitHub
|
|
28
|
+
echo "Fetching litecoind binaries..."
|
|
29
|
+
LITECOIN_VERSION=0.21.3
|
|
30
|
+
wget https://download.litecoin.org/litecoin-${LITECOIN_VERSION}/linux/litecoin-${LITECOIN_VERSION}-x86_64-linux-gnu.tar.gz
|
|
31
|
+
|
|
32
|
+
# Extract the downloaded binaries
|
|
33
|
+
echo "Extracting litecoind binaries..."
|
|
34
|
+
tar -xzf litecoin-${LITECOIN_VERSION}-x86_64-linux-gnu.tar.gz
|
|
35
|
+
mv litecoin-${LITECOIN_VERSION} ~/litecoin
|
|
36
|
+
|
|
37
|
+
# Check if litecoin.conf exists, if not create it
|
|
38
|
+
LITECOIN_CONF_DIR=~/.litecoin
|
|
39
|
+
LITECOIN_CONF_FILE=$LITECOIN_CONF_DIR/litecoin.conf
|
|
40
|
+
|
|
41
|
+
if [ ! -f "$LITECOIN_CONF_FILE" ]; then
|
|
42
|
+
echo "Creating litecoin.conf file..."
|
|
43
|
+
mkdir -p $LITECOIN_CONF_DIR
|
|
44
|
+
echo "rpcuser=user" > $LITECOIN_CONF_FILE
|
|
45
|
+
echo "rpcpassword=pass" >> $LITECOIN_CONF_FILE
|
|
46
|
+
echo "rpcallowip=127.0.0.1" >> $LITECOIN_CONF_FILE
|
|
47
|
+
echo "[test]"
|
|
48
|
+
echo "rpcport=18322" >> "$LITECOIN_CONF_FILE"
|
|
49
|
+
echo "[main]"
|
|
50
|
+
echo "rpcport=8322" >> "$LITECOIN_CONF_FILE"
|
|
51
|
+
else
|
|
52
|
+
echo "litecoin.conf already exists."
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Clone the TradeLayer.js repository if it doesn't exist
|
|
56
|
+
echo "Checking for TradeLayer.js directory..."
|
|
57
|
+
if [ ! -d "tradelayer.js" ]; then
|
|
58
|
+
echo "Cloning TradeLayer.js repository..."
|
|
59
|
+
git clone https://github.com/patrickdugan/tradelayer.js.git
|
|
60
|
+
else
|
|
61
|
+
echo "TradeLayer.js directory already exists."
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Navigate to the TradeLayer directory
|
|
65
|
+
cd tradelayer.js
|
|
66
|
+
|
|
67
|
+
# Check out the dtf-UTXO branch
|
|
68
|
+
echo "Checking out the dtf-UTXO branch..."
|
|
69
|
+
git checkout dtf-UTXO
|
|
70
|
+
|
|
71
|
+
# Start litecoind from the bin folder
|
|
72
|
+
echo "Starting litecoind..."
|
|
73
|
+
~/litecoin/bin/litecoind -daemon -server -testnet -conf=$LITECOIN_CONF_FILE
|
|
74
|
+
|
|
75
|
+
# Function to check if litecoind is ready
|
|
76
|
+
check_litecoind() {
|
|
77
|
+
while true; do
|
|
78
|
+
sleep 5 # Wait before checking again
|
|
79
|
+
response=$(~/litecoin/bin/litecoin-cli -testnet getblockchaininfo 2>/dev/null)
|
|
80
|
+
|
|
81
|
+
if [[ $? -eq 0 ]]; then
|
|
82
|
+
echo "litecoind is ready."
|
|
83
|
+
break
|
|
84
|
+
else
|
|
85
|
+
echo "Waiting for litecoind to initialize..."
|
|
86
|
+
fi
|
|
87
|
+
done
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
# Wait for litecoind to be ready
|
|
91
|
+
check_litecoind
|
|
92
|
+
|
|
93
|
+
# Create an address and save it to .env
|
|
94
|
+
echo "Creating wallet address..."
|
|
95
|
+
address=$(~/litecoin/bin/litecoin-cli -testnet getnewaddress)
|
|
96
|
+
echo "Wallet address created: $address"
|
|
97
|
+
|
|
98
|
+
# Update .env file
|
|
99
|
+
echo "Updating .env file..."
|
|
100
|
+
echo "USER_ADDRESS=$address" >> .env
|
|
101
|
+
|
|
102
|
+
# Build TradeLayer API
|
|
103
|
+
echo "Building TradeLayer API..."
|
|
104
|
+
cd src
|
|
105
|
+
npm install # Ensure dependencies are installed
|
|
106
|
+
cd ..
|
|
107
|
+
|
|
108
|
+
echo "Setup complete!"
|
package/setup-win.bat
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableExtensions EnableDelayedExpansion
|
|
3
|
+
|
|
4
|
+
REM ================================
|
|
5
|
+
REM CONFIG — edit these as needed
|
|
6
|
+
REM ================================
|
|
7
|
+
set "PROJECT_ROOT=%~dp0"
|
|
8
|
+
set "APP_DIR=%PROJECT_ROOT%node_modules\tradelayer"
|
|
9
|
+
set "BTC_VERSION=22.0"
|
|
10
|
+
REM NETWORK can be mainnet or testnet
|
|
11
|
+
set "NETWORK=mainnet"
|
|
12
|
+
|
|
13
|
+
REM Simple RPC creds for your algo / core client
|
|
14
|
+
set "RPC_USER=user"
|
|
15
|
+
set "RPC_PASS=pass"
|
|
16
|
+
|
|
17
|
+
REM Wallet name
|
|
18
|
+
set "WALLET_NAME=mywallet"
|
|
19
|
+
|
|
20
|
+
REM ================================
|
|
21
|
+
REM Derived (do not edit)
|
|
22
|
+
REM ================================
|
|
23
|
+
if /I "%NETWORK%"=="testnet" (
|
|
24
|
+
set "NET_FLAG=-testnet"
|
|
25
|
+
set "RPC_PORT=18332"
|
|
26
|
+
) else (
|
|
27
|
+
set "NET_FLAG="
|
|
28
|
+
set "RPC_PORT=8332"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
set "BITCOIN_URL=https://bitcoincore.org/bin/bitcoin-core-%BTC_VERSION%/bitcoin-%BTC_VERSION%-win64.zip"
|
|
32
|
+
set "ZIP_FILE=%USERPROFILE%\Downloads\bitcoin-%BTC_VERSION%-win64.zip"
|
|
33
|
+
set "EXTRACT_DIR=%USERPROFILE%\bitcoin-%BTC_VERSION%"
|
|
34
|
+
set "BIN_DIR=%EXTRACT_DIR%\bin"
|
|
35
|
+
set "DATADIR=%APPDATA%\Bitcoin"
|
|
36
|
+
set "CONF_FILE=%DATADIR%\bitcoin.conf"
|
|
37
|
+
|
|
38
|
+
echo === Starting setup for TradeLayer (Bitcoin / Windows) ===
|
|
39
|
+
|
|
40
|
+
REM 0) Project deps
|
|
41
|
+
echo.
|
|
42
|
+
echo Installing NPM dependencies (project root)...
|
|
43
|
+
pushd "%PROJECT_ROOT%"
|
|
44
|
+
call npm install || goto :fail
|
|
45
|
+
popd
|
|
46
|
+
|
|
47
|
+
REM 1) Write .env for the tradelayer package (BTC)
|
|
48
|
+
echo.
|
|
49
|
+
echo Writing .env to "%APP_DIR%\.env" ...
|
|
50
|
+
if not exist "%APP_DIR%" mkdir "%APP_DIR%"
|
|
51
|
+
(
|
|
52
|
+
echo CHAIN=BTC
|
|
53
|
+
echo RPC_HOST=127.0.0.1
|
|
54
|
+
echo RPC_PORT=%RPC_PORT%
|
|
55
|
+
echo RPC_USER=%RPC_USER%
|
|
56
|
+
echo RPC_PASS=%RPC_PASS%
|
|
57
|
+
echo AUTODETECT=0
|
|
58
|
+
echo TIMEOUT_MS=60000
|
|
59
|
+
) > "%APP_DIR%\.env"
|
|
60
|
+
echo Done.
|
|
61
|
+
|
|
62
|
+
REM 2) Fetch & install Bitcoin Core
|
|
63
|
+
echo.
|
|
64
|
+
echo Fetching Bitcoin Core v%BTC_VERSION% for Win64 ...
|
|
65
|
+
if not exist "%ZIP_FILE%" (
|
|
66
|
+
powershell -NoProfile -Command "Invoke-WebRequest -Uri '%BITCOIN_URL%' -OutFile '%ZIP_FILE%'" || goto :fail
|
|
67
|
+
) else (
|
|
68
|
+
echo Zip already present at %ZIP_FILE%
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
echo Extracting Bitcoin Core to "%EXTRACT_DIR%" ...
|
|
72
|
+
if exist "%EXTRACT_DIR%" rmdir /s /q "%EXTRACT_DIR%"
|
|
73
|
+
powershell -NoProfile -Command "Expand-Archive -Path '%ZIP_FILE%' -DestinationPath '%EXTRACT_DIR%'" || goto :fail
|
|
74
|
+
|
|
75
|
+
REM 3) Write bitcoin.conf
|
|
76
|
+
echo.
|
|
77
|
+
echo Configuring %CONF_FILE% ...
|
|
78
|
+
if not exist "%DATADIR%" mkdir "%DATADIR%"
|
|
79
|
+
|
|
80
|
+
REM Create/overwrite minimal config with prune and rpc creds
|
|
81
|
+
(
|
|
82
|
+
echo server=1
|
|
83
|
+
echo prune=2000
|
|
84
|
+
echo txindex=0
|
|
85
|
+
echo dbcache=450
|
|
86
|
+
echo rpcuser=%RPC_USER%
|
|
87
|
+
echo rpcpassword=%RPC_PASS%
|
|
88
|
+
if /I "%NETWORK%"=="testnet" (
|
|
89
|
+
echo [test]
|
|
90
|
+
echo rpcport=%RPC_PORT%
|
|
91
|
+
) else (
|
|
92
|
+
echo [main]
|
|
93
|
+
echo rpcport=%RPC_PORT%
|
|
94
|
+
)
|
|
95
|
+
) > "%CONF_FILE%"
|
|
96
|
+
echo Wrote %CONF_FILE%
|
|
97
|
+
|
|
98
|
+
REM 4) Start bitcoind (note: no -daemon on Windows; use 'start')
|
|
99
|
+
echo.
|
|
100
|
+
echo Starting bitcoind (%NETWORK%) ...
|
|
101
|
+
REM Stop any stray instance
|
|
102
|
+
"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% stop >nul 2>&1
|
|
103
|
+
REM Give it a moment
|
|
104
|
+
timeout /t 2 /nobreak >nul
|
|
105
|
+
|
|
106
|
+
start "" "%BIN_DIR%\bitcoind.exe" %NET_FLAG%
|
|
107
|
+
|
|
108
|
+
REM 5) Wait until RPC is ready
|
|
109
|
+
echo Waiting for bitcoind RPC @ 127.0.0.1:%RPC_PORT% ...
|
|
110
|
+
:waitrpc
|
|
111
|
+
"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% -rpcconnect=127.0.0.1 -rpcport=%RPC_PORT% -rpcuser="%RPC_USER%" -rpcpassword="%RPC_PASS%" getblockchaininfo >nul 2>&1
|
|
112
|
+
if errorlevel 1 (
|
|
113
|
+
echo ... still initializing, retrying in 5s
|
|
114
|
+
timeout /t 5 /nobreak >nul
|
|
115
|
+
goto :waitrpc
|
|
116
|
+
)
|
|
117
|
+
echo bitcoind is ready.
|
|
118
|
+
|
|
119
|
+
REM 6) Create or load wallet; print a new address
|
|
120
|
+
echo.
|
|
121
|
+
echo Preparing wallet: %WALLET_NAME%
|
|
122
|
+
REM Is it already loaded?
|
|
123
|
+
for /f "usebackq tokens=*" %%A in (`"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% -rpcport=%RPC_PORT% -rpcuser="%RPC_USER%" -rpcpassword="%RPC_PASS%" listwallets 2^>nul`) do set "WALLETS=%%A"
|
|
124
|
+
echo %WALLETS% | find /I "\"%WALLET_NAME%\"" >nul
|
|
125
|
+
if errorlevel 1 (
|
|
126
|
+
REM Not loaded — does it exist on disk?
|
|
127
|
+
for /f "usebackq tokens=*" %%B in (`"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% -rpcport=%RPC_PORT% -rpcuser="%RPC_USER%" -rpcpassword="%RPC_PASS%" listwalletdir 2^>nul`) do set "WALLETDIR=%%B"
|
|
128
|
+
echo %WALLETDIR% | find /I "\"%WALLET_NAME%\"" >nul
|
|
129
|
+
if errorlevel 1 (
|
|
130
|
+
echo Creating new wallet ...
|
|
131
|
+
"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% -rpcport=%RPC_PORT% -rpcuser="%RPC_USER%" -rpcpassword="%RPC_PASS%" createwallet "%WALLET_NAME%" >nul
|
|
132
|
+
) else (
|
|
133
|
+
echo Loading existing wallet ...
|
|
134
|
+
"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% -rpcport=%RPC_PORT% -rpcuser="%RPC_USER%" -rpcpassword="%RPC_PASS%" loadwallet "%WALLET_NAME%" >nul
|
|
135
|
+
)
|
|
136
|
+
) else (
|
|
137
|
+
echo Wallet already loaded.
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
echo.
|
|
141
|
+
echo Generating a new bech32 address ...
|
|
142
|
+
for /f "usebackq tokens=*" %%C in (`"%BIN_DIR%\bitcoin-cli.exe" %NET_FLAG% -rpcport=%RPC_PORT% -rpcuser="%RPC_USER%" -rpcpassword="%RPC_PASS%" -rpcwallet="%WALLET_NAME%" getnewaddress "" bech32 2^>nul`) do set "ADDR=%%C"
|
|
143
|
+
echo Wallet address: %ADDR%
|
|
144
|
+
|
|
145
|
+
REM 7) Append address to .env
|
|
146
|
+
echo.
|
|
147
|
+
echo Appending USER_ADDRESS to .env ...
|
|
148
|
+
>> "%APP_DIR%\.env" echo USER_ADDRESS=%ADDR%
|
|
149
|
+
echo Done.
|
|
150
|
+
|
|
151
|
+
REM 8) (Optional) start your app
|
|
152
|
+
echo.
|
|
153
|
+
echo Starting your app (npm start) ...
|
|
154
|
+
pushd "%PROJECT_ROOT%"
|
|
155
|
+
call npm start
|
|
156
|
+
popd
|
|
157
|
+
|
|
158
|
+
echo.
|
|
159
|
+
echo === Setup complete (Bitcoin / %NETWORK%) ===
|
|
160
|
+
echo RPC: http://%RPC_USER%:%RPC_PASS%@127.0.0.1:%RPC_PORT%/
|
|
161
|
+
echo Wallet: %WALLET_NAME% Address: %ADDR%
|
|
162
|
+
goto :eof
|
|
163
|
+
|
|
164
|
+
:fail
|
|
165
|
+
echo.
|
|
166
|
+
echo *** ERROR: Setup failed. See messages above. ***
|
|
167
|
+
exit /b 1
|