@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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const dbInstance = require('./db.js');
|
|
2
|
+
|
|
3
|
+
async function loadOrCreateOrderBook(orderBookKey) {
|
|
4
|
+
const orderBooksDB = dbInstance.getDatabase('orderBooks');
|
|
5
|
+
const orderBookData = await orderBooksDB.findOneAsync({ _id: orderBookKey });
|
|
6
|
+
|
|
7
|
+
let orderBooks = {};
|
|
8
|
+
|
|
9
|
+
if (orderBookData) {
|
|
10
|
+
orderBooks[orderBookKey] = JSON.parse(orderBookData.value);
|
|
11
|
+
console.log('Order book data:', JSON.stringify(orderBookData.value));
|
|
12
|
+
} else {
|
|
13
|
+
// If no data found, create a new order book
|
|
14
|
+
orderBooks[orderBookKey] = { buy: [], sell: [] };
|
|
15
|
+
console.log('No existing order book. Created new:', orderBooks[orderBookKey]);
|
|
16
|
+
|
|
17
|
+
// Implement your saveOrderBook logic here if needed
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return orderBooks[orderBookKey];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Example usage
|
|
24
|
+
async function main() {
|
|
25
|
+
const orderBookKey = '3-4'; // Replace with your actual order book key
|
|
26
|
+
const data = await loadOrCreateOrderBook(orderBookKey);
|
|
27
|
+
console.log('Loaded or created order book:', data);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
main().catch(console.error);
|
|
31
|
+
/*
|
|
32
|
+
// Adds a token order to the order book
|
|
33
|
+
async addTokenOrder(order) {
|
|
34
|
+
// Determine the correct orderbook key
|
|
35
|
+
const normalizedOrderBookKey = this.normalizeOrderBookKey(order.offeredPropertyId, order.desiredPropertyId);
|
|
36
|
+
console.log('Normalized Order Book Key:', normalizedOrderBookKey);
|
|
37
|
+
|
|
38
|
+
// Create an instance of Orderbook for the pair and load its data
|
|
39
|
+
const orderbook = new Orderbook(normalizedOrderBookKey);
|
|
40
|
+
await orderbook.loadOrCreateOrderBook();
|
|
41
|
+
|
|
42
|
+
// Determine if the order is a sell order
|
|
43
|
+
const isSellOrder = order.offeredPropertyId < order.desiredPropertyId;
|
|
44
|
+
|
|
45
|
+
// Add the order to the orderbook
|
|
46
|
+
const orderConfirmation = await orderbook.insertOrder(order, isSellOrder);
|
|
47
|
+
console.log('Order Insertion Confirmation:', orderConfirmation);
|
|
48
|
+
|
|
49
|
+
// Match orders in the orderbook
|
|
50
|
+
const matchResult = await orderbook.matchOrders();
|
|
51
|
+
console.log('Match Result:', matchResult);
|
|
52
|
+
|
|
53
|
+
// Save the updated orderbook back to the database
|
|
54
|
+
await orderbook.saveOrderBook(normalizeOrderBookKey);
|
|
55
|
+
|
|
56
|
+
return matchResult;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
normalizeOrderBookKey(propertyId1, propertyId2) {
|
|
60
|
+
// Ensure lower property ID is first in the key
|
|
61
|
+
return propertyId1 < propertyId2 ? `${propertyId1}-${propertyId2}` : `${propertyId2}-${propertyId1}`;
|
|
62
|
+
}*/
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const assert = require('assert'); // Assertion library
|
|
2
|
+
const sinon = require('sinon'); // Mocking library (if needed)
|
|
3
|
+
const TradeLayerManager = require('./path/to/TradeLayerManager'); // The module under test
|
|
4
|
+
|
|
5
|
+
describe('TradeLayerManager', function() {
|
|
6
|
+
let tradeLayerManager;
|
|
7
|
+
let mockDependencies; // Mock any dependencies
|
|
8
|
+
|
|
9
|
+
beforeEach(function() {
|
|
10
|
+
// Set up for each test
|
|
11
|
+
tradeLayerManager = new TradeLayerManager();
|
|
12
|
+
mockDependencies = sinon.stub(/* ... */);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(function() {
|
|
16
|
+
// Clean up after each test
|
|
17
|
+
sinon.restore();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
describe('calculateTradeRebates', function() {
|
|
22
|
+
it('should calculate trade rebates correctly based on cumulative volume', function() {
|
|
23
|
+
// Simulate different cumulative volume scenarios
|
|
24
|
+
const lowVolumeRebate = tradeLayerManager.calculateTradeRebates(lowCumulativeVolume);
|
|
25
|
+
const highVolumeRebate = tradeLayerManager.calculateTradeRebates(highCumulativeVolume);
|
|
26
|
+
|
|
27
|
+
// Assert that rebates are within expected limits
|
|
28
|
+
assert(lowVolumeRebate >= minRebate && lowVolumeRebate <= maxRebate);
|
|
29
|
+
assert(highVolumeRebate >= minRebate && highVolumeRebate <= maxRebate);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const txUtils = require('./txUtils'); // Make sure this path matches where txUtils.js is located
|
|
2
|
+
|
|
3
|
+
async function createRedeemTransaction() {
|
|
4
|
+
const thisAddress = 'tltc1qfffvwpftp8w3kv6gg6273ejtsfnu2dara5x4tr'; // Replace with your address
|
|
5
|
+
const params = {
|
|
6
|
+
propertyIdUsed: 5, // Replace with the actual property ID
|
|
7
|
+
contractIdUsed: 4, // Replace with the actual contract ID
|
|
8
|
+
amount: 1.8, // Replace with the amount to mint
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
try {
|
|
13
|
+
const redeemTransaction = await txUtils.createRedeemTransaction(thisAddress, params);
|
|
14
|
+
console.log('Redeem Transaction Created:', redeemTransaction);
|
|
15
|
+
// Here you would send the transaction using a web3 library or your preferred method
|
|
16
|
+
} catch (error) {
|
|
17
|
+
console.error('Error creating redeem transaction:', error);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Call the function to create the transaction
|
|
22
|
+
createRedeemTransaction();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const TxUtils = require('./TxUtils'); // Import your TxUtils class
|
|
2
|
+
|
|
3
|
+
async function runTestTokenTrades() {
|
|
4
|
+
// Define some sample data for testing
|
|
5
|
+
const testAdminAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'; // Replace with actual admin address
|
|
6
|
+
const counterparty = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'//tltc1qfffvwpftp8w3kv6gg6273ejtsfnu2dara5x4tr'
|
|
7
|
+
function randomNumber(min, max) {
|
|
8
|
+
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
var random = randomNumber(1,10)
|
|
12
|
+
var random2 = randomNumber(1,10)
|
|
13
|
+
|
|
14
|
+
// Sample data for token trades
|
|
15
|
+
const trades = [
|
|
16
|
+
{ offeredPropertyId: 5, desiredPropertyId: 4, amountOffered: 9, amountExpected: 7}//random2}
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
// Iterate over each trade and create a transaction
|
|
20
|
+
for (let trade of trades) {
|
|
21
|
+
try {
|
|
22
|
+
console.log(`Creating trade: Offered Property ID ${trade.offeredPropertyId}, Desired Property ID ${trade.desiredPropertyId}`);
|
|
23
|
+
const txId = await TxUtils.tokenTradeTransaction(
|
|
24
|
+
counterparty,
|
|
25
|
+
trade.offeredPropertyId,
|
|
26
|
+
trade.desiredPropertyId,
|
|
27
|
+
trade.amountOffered,
|
|
28
|
+
trade.amountExpected
|
|
29
|
+
);
|
|
30
|
+
console.log(`Transaction ID: ${txId}`);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error(`Error creating trade for offered property ${trade.offeredPropertyId} and desired property ${trade.desiredPropertyId}:`, error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
runTestTokenTrades()
|
|
38
|
+
.then(() => console.log('Test token trade transactions completed.'))
|
|
39
|
+
.catch(error => console.error('Error running test token trades:', error));
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const Litecoin = require('litecoin'); // Replace with actual library import
|
|
2
|
+
const util = require('util');
|
|
3
|
+
const litecore = require('bitcore-lib-ltc');
|
|
4
|
+
const txUtils = require('C:/projects/tradelayer.js/txUtilsA.js')
|
|
5
|
+
const fee = 1000
|
|
6
|
+
|
|
7
|
+
const client = new Litecoin.Client({
|
|
8
|
+
host: '127.0.0.1',
|
|
9
|
+
port: 18332,
|
|
10
|
+
user: 'user',
|
|
11
|
+
pass: 'pass',
|
|
12
|
+
timeout: 10000
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const sendrawtransactionAsync = util.promisify(client.cmd.bind(client, 'sendrawtransaction'));
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
//var privateKey = new litecore.PrivateKey('tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
async function main(){
|
|
22
|
+
// Define the minimum amount in satoshis
|
|
23
|
+
const minAmountSatoshis = 15000; // Adjust this value as needed
|
|
24
|
+
|
|
25
|
+
// Find a suitable UTXO
|
|
26
|
+
var utxo = await txUtils.findSuitableUTXO('tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8', minAmountSatoshis);
|
|
27
|
+
console.log(utxo)
|
|
28
|
+
var transaction = new litecore.Transaction()
|
|
29
|
+
.from(utxo)
|
|
30
|
+
.to('tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8', 14000)
|
|
31
|
+
.addData('litecore rocks')
|
|
32
|
+
.change('tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8')
|
|
33
|
+
.fee(fee)
|
|
34
|
+
.sign('cNGCJhHBSQM2Kedc8Zc6x9VYe9dQuvanqfS61D3tczZnDD3HwYUW');
|
|
35
|
+
const serializedTx = transaction.serialize();
|
|
36
|
+
const txid = await sendrawtransactionAsync(serializedTx);
|
|
37
|
+
console.log(txid)
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
main()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const TxUtils = require('./txUtils.js'); // Make sure this path matches where txUtils.js is located
|
|
2
|
+
const Channels = require('./channels.js')
|
|
3
|
+
|
|
4
|
+
async function generateTradeTransaction() {
|
|
5
|
+
const params = {
|
|
6
|
+
propertyId: 's-5-4',
|
|
7
|
+
amount: 1,
|
|
8
|
+
columnA: 0, // Placeholder, will look this up
|
|
9
|
+
satsExpected: 100000,
|
|
10
|
+
tokenOutput: 3,
|
|
11
|
+
payToAddress: 1
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
// Determine the correct column for the property
|
|
15
|
+
const channel = await Channels.getChannel('tltc1qn3src8lgu50gxhndn5hnd6zrc9yv2364wu858m');
|
|
16
|
+
const isColumnA = channel['A'][params.propertyId] !== undefined;
|
|
17
|
+
params.columnA = isColumnA ? 1 : 0;
|
|
18
|
+
|
|
19
|
+
const senderChannel = 'tltc1qn3src8lgu50gxhndn5hnd6zrc9yv2364wu858m';
|
|
20
|
+
const senderLTC = 'tltc1qfffvwpftp8w3kv6gg6273ejtsfnu2dara5x4tr';
|
|
21
|
+
|
|
22
|
+
const signedTx = await TxUtils.tradeUTXO(params, senderChannel, senderLTC);
|
|
23
|
+
|
|
24
|
+
console.log('Signed Transaction:', signedTx);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
generateTradeTransaction();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// save as testTradeHistory.js
|
|
2
|
+
const axios = require('axios')
|
|
3
|
+
|
|
4
|
+
async function run() {
|
|
5
|
+
const url = "http://localhost:3000/tl_tokenTradeHistoryForAddress";
|
|
6
|
+
|
|
7
|
+
const params = {
|
|
8
|
+
propertyId1: 0,
|
|
9
|
+
propertyId2: 1,
|
|
10
|
+
address: "tltc1q89kkgaslk0lt8l90jkl3cgwg7dkkszn73u4d2t"
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
const res = await axios.get(url, { params });
|
|
15
|
+
console.log("Response:", res.data);
|
|
16
|
+
} catch (err) {
|
|
17
|
+
console.error("Error calling API:");
|
|
18
|
+
if (err.response) {
|
|
19
|
+
console.error("Status:", err.response.status);
|
|
20
|
+
console.error("Headers:", err.response.headers);
|
|
21
|
+
console.error("Body:", err.response.data);
|
|
22
|
+
}
|
|
23
|
+
console.error("Stack trace:", err.stack);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
run();
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const crypto = require('crypto');
|
|
2
|
+
const TxUtils = require('../src/txUtils.js'); // Assuming TxUtils contains necessary functions
|
|
3
|
+
|
|
4
|
+
async function generateTrades(adminAddress) {
|
|
5
|
+
const contractId = 4; // Contract ID for the trades
|
|
6
|
+
const propertyId = 3; // Property ID used in the trades
|
|
7
|
+
const btcPrice = 50000; // Base price for BTC
|
|
8
|
+
const priceVariation = 100; // Price variation range (+/-)
|
|
9
|
+
|
|
10
|
+
for (let i = 0; i < 1; i++) { // Generate 10 random trades
|
|
11
|
+
const priceOffset = Math.floor(Math.random() * priceVariation) - (priceVariation / 2);
|
|
12
|
+
const tradePrice = btcPrice + priceOffset; // Randomize trade price
|
|
13
|
+
const amount = Math.floor(Math.random() * 3) + 1; // Random amount between 1 and 10
|
|
14
|
+
|
|
15
|
+
// Prepare trade parameters
|
|
16
|
+
const tradeParams = {
|
|
17
|
+
contractId: contractId,
|
|
18
|
+
amount: amount,
|
|
19
|
+
price: tradePrice,
|
|
20
|
+
sell: false // TrueAssuming all trades are '' orders
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Create trade transaction
|
|
24
|
+
await TxUtils.createContractOnChainTradeTransaction(adminAddress, tradeParams, 18);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Address for the trades
|
|
29
|
+
const adminAddress = 'tltc1qtee90ysf57393hfqyn79syj9mkekm7hq0epqzw'//'tltc1qfffvwpftp8w3kv6gg6273ejtsfnu2dara5x4tr'
|
|
30
|
+
//tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'
|
|
31
|
+
//'//tltc1q7r6x4v67n8vnaftnz8pk33yvf9t9gpynuwdfgk'
|
|
32
|
+
//tltc1q8xw3vsvkv77dpj59nqn30rxlc9m3xjw76cgrac'
|
|
33
|
+
//"tltc1q7r6x4v67n8vnaftnz8pk33yvf9t9gpynuwdfgk";
|
|
34
|
+
//
|
|
35
|
+
// Execute the function to generate trades
|
|
36
|
+
generateTrades(adminAddress).then(() => {
|
|
37
|
+
console.log('Trades generated successfully');
|
|
38
|
+
}).catch(error => {
|
|
39
|
+
console.error('Error generating trades:', error);
|
|
40
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const TradeHistory = require('./tradeHistoryManager.js');
|
|
3
|
+
|
|
4
|
+
async function runExample() {
|
|
5
|
+
const tradeHistoryManager = new TradeHistory();
|
|
6
|
+
const address = 'tltc1q7r6x4v67n8vnaftnz8pk33yvf9t9gpynuwdfgk';
|
|
7
|
+
const address2 = 'tltc1q8xw3vsvkv77dpj59nqn30rxlc9m3xjw76cgrac';
|
|
8
|
+
const address3 = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8';
|
|
9
|
+
const contractId = 1;
|
|
10
|
+
|
|
11
|
+
// Display position history for the given address and contract ID
|
|
12
|
+
const positionHistory = await tradeHistoryManager.trackPositionHistory(address, contractId);
|
|
13
|
+
console.log(`Position History for Address ${address} and Contract ID ${contractId}:`);
|
|
14
|
+
console.table(positionHistory);
|
|
15
|
+
|
|
16
|
+
const positionHistory2 = await tradeHistoryManager.trackPositionHistory(address2, contractId);
|
|
17
|
+
console.log(`Position History for Address ${address2} and Contract ID ${contractId}:`);
|
|
18
|
+
console.table(positionHistory2);
|
|
19
|
+
|
|
20
|
+
const positionHistory3 = await tradeHistoryManager.trackPositionHistory(address3, contractId);
|
|
21
|
+
console.log(`Position History for Address ${address3} and Contract ID ${contractId}:`);
|
|
22
|
+
console.table(positionHistory3);
|
|
23
|
+
|
|
24
|
+
// Get categorized trades
|
|
25
|
+
/*const categorizedTrades = await tradeHistoryManager.getCategorizedTrades(address, contractId);
|
|
26
|
+
console.log("Open Trades:", categorizedTrades.openTrades);
|
|
27
|
+
console.log("Close Trades:", categorizedTrades.closeTrades);
|
|
28
|
+
|
|
29
|
+
// Example usage
|
|
30
|
+
const avgEntryPrices = tradeHistoryManager.computeAverageEntryPrices(categorizedTrades.openTrades);
|
|
31
|
+
console.log("Average Entry Prices:", avgEntryPrices);*/
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Call the async function
|
|
35
|
+
runExample();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Import the Database class from db.js
|
|
2
|
+
const Database = require('./db');
|
|
3
|
+
|
|
4
|
+
// Get the tradeHistory database instance
|
|
5
|
+
const tradeHistoryDB = Database.getDatabase('tradeHistory');
|
|
6
|
+
|
|
7
|
+
// Example: Find all documents in the tradeHistory database and display them
|
|
8
|
+
tradeHistoryDB.findAsync({ type: 'contract' }) // Adjust the query to exclude blockHeight
|
|
9
|
+
.then(tradeHistoryData => {
|
|
10
|
+
console.log('Trade History Data:');
|
|
11
|
+
console.log(tradeHistoryData);
|
|
12
|
+
})
|
|
13
|
+
.catch(error => {
|
|
14
|
+
console.error('Error fetching trade history data:', error);
|
|
15
|
+
});
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
const litecoin = require('litecoin');
|
|
2
|
+
|
|
3
|
+
const util = require('util');
|
|
4
|
+
|
|
5
|
+
const clientConfig = /*test ?*/ {
|
|
6
|
+
host: '127.0.0.1',
|
|
7
|
+
port: 18332,
|
|
8
|
+
user: 'user',
|
|
9
|
+
pass: 'pass',
|
|
10
|
+
timeout: 10000
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
const client = new litecoin.Client(clientConfig);
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const decoderawtransactionAsync = util.promisify(client.cmd.bind(client, 'decoderawtransaction'));
|
|
18
|
+
const getTransactionAsync = util.promisify(client.cmd.bind(client, 'gettransaction'));
|
|
19
|
+
const getBlockCountAsync = util.promisify(client.cmd.bind(client, 'getblockcount'))
|
|
20
|
+
|
|
21
|
+
async function processBlockData(blockData, blockHeight) {
|
|
22
|
+
let txDetails =[]
|
|
23
|
+
for (const txId of blockData.tx) {
|
|
24
|
+
//console.log('txId '+txId)
|
|
25
|
+
if(txId=="883cf77e4d1f5e32969849ca7db9b626f5363af9edf866972de2076313df7f95"){
|
|
26
|
+
//console.log('mmmkay')
|
|
27
|
+
const txHex = await fetchTransactionData(txId);
|
|
28
|
+
const txData = await DecodeRawTransaction(txHex);
|
|
29
|
+
if (txData != null && txData!= undefined && txData.marker === 'tl') {
|
|
30
|
+
const payload = txData.payload;
|
|
31
|
+
//const thisTx = await processTransaction(payload, txId, txData.marker);
|
|
32
|
+
//txDetails.push(thisTx)
|
|
33
|
+
console.log('payload '+payload)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return txDetails
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function fetchBlockData(height) {
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
client.getBlockHash(height, (error, blockHash) => {
|
|
43
|
+
if (error) {
|
|
44
|
+
reject(error);
|
|
45
|
+
} else {
|
|
46
|
+
client.getBlock(blockHash, (error, block) => {
|
|
47
|
+
if (error) {
|
|
48
|
+
reject(error);
|
|
49
|
+
} else {
|
|
50
|
+
resolve(block);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function fetchTransactionData(txId) {
|
|
59
|
+
//console.log('fetching tx data '+txId)
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
client.getRawTransaction(txId, true, (error, transaction) => {
|
|
62
|
+
if (error) {
|
|
63
|
+
console.log('blah '+error);
|
|
64
|
+
reject(error);
|
|
65
|
+
} else {
|
|
66
|
+
resolve(transaction.hex);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function DecodeRawTransaction(rawTx) {
|
|
73
|
+
try {
|
|
74
|
+
const decodedTx = await decoderawtransactionAsync(rawTx);
|
|
75
|
+
//console.log(JSON.stringify(decodedTx))
|
|
76
|
+
|
|
77
|
+
const opReturnOutput = decodedTx.vout.find(output => output.scriptPubKey.type === 'nulldata');
|
|
78
|
+
if (opReturnOutput) {
|
|
79
|
+
const opReturnData = opReturnOutput.scriptPubKey.hex;
|
|
80
|
+
console.log('OP_RETURN Data:', opReturnData);
|
|
81
|
+
// Extract and log the "tl" marker
|
|
82
|
+
let markerHex = opReturnData.substring(4, 8); // '746c' for 'tl'
|
|
83
|
+
let marker = Buffer.from(markerHex, 'hex').toString();
|
|
84
|
+
let payloadStart= 8
|
|
85
|
+
|
|
86
|
+
if (marker != 'tl'&&marker.includes('t')) {
|
|
87
|
+
console.log('Entering weird OP_Return pacing block');
|
|
88
|
+
console.log('Current marker:', marker);
|
|
89
|
+
try {
|
|
90
|
+
console.log('weird OP_Return pacing', opReturnData.substring(6, 10));
|
|
91
|
+
markerHex = opReturnData.substring(6, 10);
|
|
92
|
+
marker = Buffer.from(markerHex, 'hex').toString();
|
|
93
|
+
payloadStart = 10;
|
|
94
|
+
if(marker != 'tl'){
|
|
95
|
+
markerHex = opReturnData.substring(5, 9);
|
|
96
|
+
marker = Buffer.from(markerHex, 'hex').toString();
|
|
97
|
+
if(marker != 'tl'){
|
|
98
|
+
return null
|
|
99
|
+
}
|
|
100
|
+
payloadStart = 9;
|
|
101
|
+
}
|
|
102
|
+
console.log('fixed?', marker);
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.error('Error in processing:', error);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Extract and log the actual payload
|
|
108
|
+
const payloadHex = opReturnData.substring(payloadStart);
|
|
109
|
+
const payload = Buffer.from(payloadHex, 'hex').toString();
|
|
110
|
+
console.log(markerHex+' '+marker+' '+payload)
|
|
111
|
+
if(marker=='tl'){console.log('Pre-decoded and Decoded Payload:', opReturnData + ' ' + payload+ ' decoding the whole thing '+Buffer.from(opReturnData, 'hex').toString())};
|
|
112
|
+
return { marker, payload , decodedTx};
|
|
113
|
+
} else {
|
|
114
|
+
//console.log('No OP_RETURN output found.');
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
// Process decoded transaction logic here...
|
|
118
|
+
return decodedTx;
|
|
119
|
+
} catch (error) {
|
|
120
|
+
//console.error('Error decoding raw transaction:', error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async function doEit(){
|
|
125
|
+
|
|
126
|
+
const height = 3432676
|
|
127
|
+
let blockData = await fetchBlockData(height);
|
|
128
|
+
|
|
129
|
+
let txDetails = await processBlockData(blockData, height);
|
|
130
|
+
|
|
131
|
+
console.log('ok n ow' +JSON.stringify(txDetails))
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
doEit()
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const crypto = require("crypto");
|
|
2
|
+
|
|
3
|
+
// Network parameters
|
|
4
|
+
const networks = {
|
|
5
|
+
bitcoin: {
|
|
6
|
+
P2PKH: 0x00,
|
|
7
|
+
P2SH: 0x05,
|
|
8
|
+
bech32: "bc",
|
|
9
|
+
},
|
|
10
|
+
litecoin: {
|
|
11
|
+
P2PKH: 0x30,
|
|
12
|
+
P2SH: 0x32,
|
|
13
|
+
bech32: "ltc",
|
|
14
|
+
},
|
|
15
|
+
dogecoin: {
|
|
16
|
+
P2PKH: 0x1E,
|
|
17
|
+
P2SH: 0x16,
|
|
18
|
+
},
|
|
19
|
+
testnet: {
|
|
20
|
+
bitcoin: {
|
|
21
|
+
P2PKH: 0x6F,
|
|
22
|
+
P2SH: 0xC4,
|
|
23
|
+
bech32: "tb",
|
|
24
|
+
},
|
|
25
|
+
litecoin: {
|
|
26
|
+
P2PKH: 0x6F,
|
|
27
|
+
P2SH: 0x3A,
|
|
28
|
+
bech32: "tltc",
|
|
29
|
+
},
|
|
30
|
+
dogecoin: {
|
|
31
|
+
P2PKH: 0x71,
|
|
32
|
+
P2SH: 0xC4,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// Base58 alphabet
|
|
38
|
+
const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
39
|
+
|
|
40
|
+
// Base58 decoding
|
|
41
|
+
function decodeBase58(address) {
|
|
42
|
+
let decoded = BigInt(0);
|
|
43
|
+
for (const char of address) {
|
|
44
|
+
const index = BASE58_ALPHABET.indexOf(char);
|
|
45
|
+
if (index === -1) {
|
|
46
|
+
throw new Error("Invalid Base58 character");
|
|
47
|
+
}
|
|
48
|
+
decoded = decoded * BigInt(58) + BigInt(index);
|
|
49
|
+
}
|
|
50
|
+
const hex = decoded.toString(16);
|
|
51
|
+
const padding = address.match(/^1+/) ? address.match(/^1+/)[0].length : 0;
|
|
52
|
+
return Buffer.from("00".repeat(padding) + hex.padStart(50, "0"), "hex");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Validate checksum for Base58 addresses
|
|
56
|
+
function validateBase58Checksum(address, versionByte) {
|
|
57
|
+
try {
|
|
58
|
+
const decoded = decodeBase58(address);
|
|
59
|
+
const version = decoded[0];
|
|
60
|
+
const checksum = decoded.slice(-4);
|
|
61
|
+
const body = decoded.slice(0, -4);
|
|
62
|
+
const validChecksum = crypto
|
|
63
|
+
.createHash("sha256")
|
|
64
|
+
.update(crypto.createHash("sha256").update(body).digest())
|
|
65
|
+
.digest()
|
|
66
|
+
.slice(0, 4);
|
|
67
|
+
return version === versionByte && checksum.equals(validChecksum);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const {bech32} = require("bech32");
|
|
74
|
+
|
|
75
|
+
// Validate Bech32 addresses with checksum
|
|
76
|
+
function validateBech32(address, hrp) {
|
|
77
|
+
try {
|
|
78
|
+
const { prefix } = bech32.decode(address); // Decode Bech32 address
|
|
79
|
+
return prefix === hrp; // Check if the prefix matches
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return false; // Invalid Bech32 address
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
// Main validation function
|
|
87
|
+
function validateAddress(address) {
|
|
88
|
+
if (!address || typeof address !== "string") {
|
|
89
|
+
throw new Error("Invalid address provided");
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Select the network based on the address prefix
|
|
93
|
+
let network = null;
|
|
94
|
+
|
|
95
|
+
for (const [networkName, netConfig] of Object.entries(networks)) {
|
|
96
|
+
const { P2PKH, P2SH, bech32 } = netConfig;
|
|
97
|
+
|
|
98
|
+
// Match based on the prefix
|
|
99
|
+
if (
|
|
100
|
+
(address.startsWith("1") && P2PKH === 0x00) || // Bitcoin P2PKH
|
|
101
|
+
(address.startsWith("L") && P2PKH === 0x30) || // Litecoin P2PKH
|
|
102
|
+
(address.startsWith("D") && P2PKH === 0x1E) || // Dogecoin P2PKH
|
|
103
|
+
(address.startsWith("m") || address.startsWith("n") || address.startsWith("2")) || // Testnets
|
|
104
|
+
(address.startsWith("3") && P2SH === 0x05) || // Bitcoin P2SH
|
|
105
|
+
(address.startsWith("M") && P2SH === 0x32) || // Litecoin P2SH
|
|
106
|
+
(bech32 && address.toLowerCase().startsWith(bech32))
|
|
107
|
+
) {
|
|
108
|
+
network = netConfig;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (!network) {
|
|
114
|
+
return false; // Address prefix doesn't match any network
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const { P2PKH, P2SH, bech32 } = network;
|
|
118
|
+
|
|
119
|
+
if (address.startsWith("1") || address.startsWith("L") || address.startsWith("D") || address.startsWith("m") || address.startsWith("n")) {
|
|
120
|
+
// Validate P2PKH
|
|
121
|
+
return validateBase58Checksum(address, P2PKH);
|
|
122
|
+
} else if (address.startsWith("3") || address.startsWith("M") || address.startsWith("2")) {
|
|
123
|
+
// Validate P2SH
|
|
124
|
+
return validateBase58Checksum(address, P2SH);
|
|
125
|
+
} else if (bech32 && address.toLowerCase().startsWith(bech32)) {
|
|
126
|
+
// Validate Bech32
|
|
127
|
+
return validateBech32(address, bech32);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return false; // Invalid address format
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
let first = validateAddress('DNWszyeJFD3qX51cCCDZcBKxnTpbN2N8Sh')
|
|
134
|
+
let second = validateAddress('DNWszyeJFD3qX51cCCDZcBKxnTpbm1N8Sh')
|
|
135
|
+
|
|
136
|
+
console.log('first and second '+first +' '+second)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const assert = require('assert');
|
|
2
|
+
const TradeLayerManager = require('./vesting.js');
|
|
3
|
+
const TallyMap = require('./tally.js');
|
|
4
|
+
const InsuranceFund = require('./insurance.js');
|
|
5
|
+
const Property = require('./property.js');
|
|
6
|
+
const ContractsRegistry = require('./contractRegistry.js');
|
|
7
|
+
|
|
8
|
+
describe('TradeLayerManager', function() {
|
|
9
|
+
let tradeLayerManager;
|
|
10
|
+
let tallyMap;
|
|
11
|
+
let insuranceFund;
|
|
12
|
+
let property;
|
|
13
|
+
let contractsRegistry;
|
|
14
|
+
|
|
15
|
+
before(function() {
|
|
16
|
+
// Mock dependencies
|
|
17
|
+
tallyMap = new TallyMap();
|
|
18
|
+
insuranceFund = new InsuranceFund();
|
|
19
|
+
property = new Property();
|
|
20
|
+
contractsRegistry = new ContractsRegistry();
|
|
21
|
+
|
|
22
|
+
tradeLayerManager = new TradeLayerManager(tallyMap, insuranceFund, property, contractsRegistry);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should initialize tokens correctly', function() {
|
|
26
|
+
tradeLayerManager.initializeTokens();
|
|
27
|
+
const TLBalance = tallyMap.getTally(tradeLayerManager.adminAddress, 1);
|
|
28
|
+
const TLVESTBalance = tallyMap.getTally(tradeLayerManager.adminAddress, 2);
|
|
29
|
+
|
|
30
|
+
assert.strictEqual(TLBalance, 1500000);
|
|
31
|
+
assert.strictEqual(TLVESTBalance, 1500000);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Additional tests for other methods like initializeContractSeries, updateVesting, etc.
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Run this using: mocha tradeLayerManagerTest.js
|