@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.
Files changed (249) hide show
  1. package/.claude/settings.local.json +13 -0
  2. package/.claude/skills/tl-algo/SKILL.md +255 -0
  3. package/.gitattributes +2 -0
  4. package/.github/workflows/publish.yaml +26 -0
  5. package/4mm.js +163 -0
  6. package/LICENSE +21 -0
  7. package/NPMSwapRefactor.zip +0 -0
  8. package/README.md +217 -0
  9. package/address.sh +26 -0
  10. package/algoAPI.js +581 -0
  11. package/analyzepsbt.js +92 -0
  12. package/apiEx.js +99 -0
  13. package/bb_hyperscalper.js +290 -0
  14. package/bbo_demo.js +111 -0
  15. package/buyer.js +622 -0
  16. package/client.js +50 -0
  17. package/createTxTest.js +26 -0
  18. package/createWallet.js +75 -0
  19. package/daytrader.js +531 -0
  20. package/decodeTest.js +69 -0
  21. package/fundingManager.js +144 -0
  22. package/index.js +4 -0
  23. package/listener.js +27 -0
  24. package/litecoreTxBuilder.js +1128 -0
  25. package/mmEx.js +356 -0
  26. package/networks.js +51 -0
  27. package/orderbook.js +200 -0
  28. package/package.json +34 -0
  29. package/perTradeQueue.js +36 -0
  30. package/projectsTLNPMTLNPM/package-lock.json +162 -0
  31. package/projectsTLNPMTLNPM/package.json +5 -0
  32. package/quick.js +32 -0
  33. package/quickFut.js +37 -0
  34. package/quickSell.js +37 -0
  35. package/relayerClient.js +117 -0
  36. package/run4mm.js +80 -0
  37. package/run_bbo_tracker.js +241 -0
  38. package/seller.js +443 -0
  39. package/session.js +45 -0
  40. package/setup-lin-ltc.sh +139 -0
  41. package/setup-lin.sh +203 -0
  42. package/setup-win-ltc.bat +108 -0
  43. package/setup-win.bat +167 -0
  44. package/spam_screamer_futures.js +222 -0
  45. package/tradelayer.js/.gitattributes +2 -0
  46. package/tradelayer.js/README.md +2 -0
  47. package/tradelayer.js/oldTests/activationTest.js +6 -0
  48. package/tradelayer.js/oldTests/base58.test.js +23 -0
  49. package/tradelayer.js/oldTests/base64Decode.test.js +16 -0
  50. package/tradelayer.js/oldTests/blocksRefactor.js +140 -0
  51. package/tradelayer.js/oldTests/checkVestBalance.js +25 -0
  52. package/tradelayer.js/oldTests/consensusHashProto.js +151 -0
  53. package/tradelayer.js/oldTests/contractOrderbook.js +243 -0
  54. package/tradelayer.js/oldTests/createPayload.js +0 -0
  55. package/tradelayer.js/oldTests/createTestnetAddr.js +43 -0
  56. package/tradelayer.js/oldTests/decode.js +205 -0
  57. package/tradelayer.js/oldTests/decodeTest.js +50 -0
  58. package/tradelayer.js/oldTests/displayTallyMap.js +19 -0
  59. package/tradelayer.js/oldTests/encodeDecode.js +340 -0
  60. package/tradelayer.js/oldTests/expressTest.js +29 -0
  61. package/tradelayer.js/oldTests/extractBlocksVanilla.js +214 -0
  62. package/tradelayer.js/oldTests/extractBlocksVanillaa.js +179 -0
  63. package/tradelayer.js/oldTests/extractPubkeyTest.js +60 -0
  64. package/tradelayer.js/oldTests/fillInputCacheProto.js +111 -0
  65. package/tradelayer.js/oldTests/getRawTxTest.js +22 -0
  66. package/tradelayer.js/oldTests/indexTest.js +26 -0
  67. package/tradelayer.js/oldTests/initTokensTest.js +32 -0
  68. package/tradelayer.js/oldTests/interfaceChild.js +129 -0
  69. package/tradelayer.js/oldTests/listenerChild.js +112 -0
  70. package/tradelayer.js/oldTests/opdecode.js +26 -0
  71. package/tradelayer.js/oldTests/options.js +79 -0
  72. package/tradelayer.js/oldTests/optxtest.js +116 -0
  73. package/tradelayer.js/oldTests/optxtest1.js +64 -0
  74. package/tradelayer.js/oldTests/oracle.test.js +32 -0
  75. package/tradelayer.js/oldTests/orderbook.test.js +36 -0
  76. package/tradelayer.js/oldTests/parsing.js +93 -0
  77. package/tradelayer.js/oldTests/payload.js +13 -0
  78. package/tradelayer.js/oldTests/persistenceUnitTest.js +23 -0
  79. package/tradelayer.js/oldTests/property.test.js +53 -0
  80. package/tradelayer.js/oldTests/propertyLevel.js +75 -0
  81. package/tradelayer.js/oldTests/propertyTest.js +32 -0
  82. package/tradelayer.js/oldTests/queryAddressTest.js +17 -0
  83. package/tradelayer.js/oldTests/salter.js +14 -0
  84. package/tradelayer.js/oldTests/tally.js +81 -0
  85. package/tradelayer.js/oldTests/tally.test.js +48 -0
  86. package/tradelayer.js/oldTests/tally2.js +124 -0
  87. package/tradelayer.js/oldTests/tally3.js +142 -0
  88. package/tradelayer.js/oldTests/tallyDiag.js +38 -0
  89. package/tradelayer.js/oldTests/testGetRaw.js +40 -0
  90. package/tradelayer.js/oldTests/testHexConvert.js +47 -0
  91. package/tradelayer.js/oldTests/testNewEncoding.js +96 -0
  92. package/tradelayer.js/oldTests/testNewEncoding2.js +113 -0
  93. package/tradelayer.js/oldTests/testNewEncoding3 +112 -0
  94. package/tradelayer.js/oldTests/testNewEncoding3.js +168 -0
  95. package/tradelayer.js/oldTests/testOPReturn.js +102 -0
  96. package/tradelayer.js/oldTests/testPayload.js +23 -0
  97. package/tradelayer.js/oldTests/testRaw.js +50 -0
  98. package/tradelayer.js/oldTests/testSendTooMuch.js +20 -0
  99. package/tradelayer.js/oldTests/testTxBuild +28 -0
  100. package/tradelayer.js/oldTests/testTxBuild.js +42 -0
  101. package/tradelayer.js/oldTests/tokenOrderbook.js +243 -0
  102. package/tradelayer.js/oldTests/txUtilsA.js +515 -0
  103. package/tradelayer.js/oldTests/validityUnitTest.js +53 -0
  104. package/tradelayer.js/oldTests/vaults.js +72 -0
  105. package/tradelayer.js/oldTests/volumeIndex.js +117 -0
  106. package/tradelayer.js/oldTests/volumeIndex2.js +88 -0
  107. package/tradelayer.js/output_base64.txt +1 -0
  108. package/tradelayer.js/package-lock.json +9967 -0
  109. package/tradelayer.js/package.json +61 -0
  110. package/tradelayer.js/server/index.js +88 -0
  111. package/tradelayer.js/server/litecoind.exe +0 -0
  112. package/tradelayer.js/src/activation.js +303 -0
  113. package/tradelayer.js/src/adjuster.js +77 -0
  114. package/tradelayer.js/src/amm.js +400 -0
  115. package/tradelayer.js/src/base256.js +55 -0
  116. package/tradelayer.js/src/base94.js +79 -0
  117. package/tradelayer.js/src/channels.js +1163 -0
  118. package/tradelayer.js/src/clearing.js +3109 -0
  119. package/tradelayer.js/src/clearlist.js +364 -0
  120. package/tradelayer.js/src/client.js +295 -0
  121. package/tradelayer.js/src/consensus.js +613 -0
  122. package/tradelayer.js/src/contractRegistry.js +964 -0
  123. package/tradelayer.js/src/db.js +89 -0
  124. package/tradelayer.js/src/init.js +24 -0
  125. package/tradelayer.js/src/insurance.js +347 -0
  126. package/tradelayer.js/src/interface.js +218 -0
  127. package/tradelayer.js/src/interfaceExpress.js +178 -0
  128. package/tradelayer.js/src/iou.js +509 -0
  129. package/tradelayer.js/src/listener.js +226 -0
  130. package/tradelayer.js/src/logic.js +1702 -0
  131. package/tradelayer.js/src/main.js +927 -0
  132. package/tradelayer.js/src/marginMap.js +2165 -0
  133. package/tradelayer.js/src/options.js +126 -0
  134. package/tradelayer.js/src/oracle.js +394 -0
  135. package/tradelayer.js/src/orderbook.js +4123 -0
  136. package/tradelayer.js/src/persistence.js +554 -0
  137. package/tradelayer.js/src/property.js +411 -0
  138. package/tradelayer.js/src/reOrg.js +41 -0
  139. package/tradelayer.js/src/scaling.js +145 -0
  140. package/tradelayer.js/src/tally.js +1275 -0
  141. package/tradelayer.js/src/tradeHistoryManager.js +552 -0
  142. package/tradelayer.js/src/txDecoder.js +584 -0
  143. package/tradelayer.js/src/txEncoder.js +610 -0
  144. package/tradelayer.js/src/txIndex.js +502 -0
  145. package/tradelayer.js/src/txUtils.js +1392 -0
  146. package/tradelayer.js/src/types.js +429 -0
  147. package/tradelayer.js/src/validity.js +3077 -0
  148. package/tradelayer.js/src/vaults.js +430 -0
  149. package/tradelayer.js/src/vesting.js +491 -0
  150. package/tradelayer.js/src/volumeIndex.js +618 -0
  151. package/tradelayer.js/src/walletInterface.js +220 -0
  152. package/tradelayer.js/src/walletListener.js +665 -0
  153. package/tradelayer.js/tests/256decode.js +82 -0
  154. package/tradelayer.js/tests/UTXOracle.js +205 -0
  155. package/tradelayer.js/tests/base94test.js +23 -0
  156. package/tradelayer.js/tests/cancelTxTest.js +62 -0
  157. package/tradelayer.js/tests/contractInterfaceTest.js +48 -0
  158. package/tradelayer.js/tests/decimalTest.js +65 -0
  159. package/tradelayer.js/tests/decoderTest.js +100 -0
  160. package/tradelayer.js/tests/deltaCount.js +47 -0
  161. package/tradelayer.js/tests/deltaCount2.js +60 -0
  162. package/tradelayer.js/tests/interfaceTest.js +37 -0
  163. package/tradelayer.js/tests/mainTest.js +53 -0
  164. package/tradelayer.js/tests/makeActivationTest.js +24 -0
  165. package/tradelayer.js/tests/maxHeightTest.js +49 -0
  166. package/tradelayer.js/tests/reverseHash.js +72 -0
  167. package/tradelayer.js/tests/sensitiveConsoleOutput.txt +267 -0
  168. package/tradelayer.js/tests/tallyTest.js +40 -0
  169. package/tradelayer.js/tests/testBuybacks.js +46 -0
  170. package/tradelayer.js/tests/testCodeHash.js +49 -0
  171. package/tradelayer.js/tests/testConsensusHash.js +91 -0
  172. package/tradelayer.js/tests/testDecode.js +30 -0
  173. package/tradelayer.js/tests/testEncodingLengths.js +129 -0
  174. package/tradelayer.js/tests/testGetTx +32 -0
  175. package/tradelayer.js/tests/testGetTx.js +32 -0
  176. package/tradelayer.js/tests/testHexHash.js +32 -0
  177. package/tradelayer.js/tests/testIndexHash.js +35 -0
  178. package/tradelayer.js/tests/testInitContracts.js +38 -0
  179. package/tradelayer.js/tests/testMaxConsensus.js +12 -0
  180. package/tradelayer.js/tests/testMaxSynth.js +44 -0
  181. package/tradelayer.js/tests/testMint.js +21 -0
  182. package/tradelayer.js/tests/testNetwork.js +33 -0
  183. package/tradelayer.js/tests/testOrderbookLoad.js +62 -0
  184. package/tradelayer.js/tests/testRebates.js +32 -0
  185. package/tradelayer.js/tests/testRedeem.js +22 -0
  186. package/tradelayer.js/tests/testTokenTrade.js +39 -0
  187. package/tradelayer.js/tests/testTxBuild.js +42 -0
  188. package/tradelayer.js/tests/testUTXOTrade.js +27 -0
  189. package/tradelayer.js/tests/tokenTradeHistory.js +27 -0
  190. package/tradelayer.js/tests/tradeFutures.js +40 -0
  191. package/tradelayer.js/tests/tradeHistoryExample.js +35 -0
  192. package/tradelayer.js/tests/tradeHistoryLoad.js +15 -0
  193. package/tradelayer.js/tests/txScanTest.js +134 -0
  194. package/tradelayer.js/tests/validateTest.js +136 -0
  195. package/tradelayer.js/tests/vestingTest.js +37 -0
  196. package/tradelayer.js/utils/activateMainnet.js +59 -0
  197. package/tradelayer.js/utils/activateMainnetDoge.js +63 -0
  198. package/tradelayer.js/utils/autocompactdb.js +23 -0
  199. package/tradelayer.js/utils/base64toHex.js +32 -0
  200. package/tradelayer.js/utils/broadcastDoge.js +38 -0
  201. package/tradelayer.js/utils/calcRedeem.js +19 -0
  202. package/tradelayer.js/utils/checkNetwork.js +27 -0
  203. package/tradelayer.js/utils/createAddress.js +48 -0
  204. package/tradelayer.js/utils/createAttestation.js +133 -0
  205. package/tradelayer.js/utils/createContract.js +118 -0
  206. package/tradelayer.js/utils/createOracle.js +94 -0
  207. package/tradelayer.js/utils/createwallet.js +20 -0
  208. package/tradelayer.js/utils/crossFuturesTrades.js +57 -0
  209. package/tradelayer.js/utils/crossTokenTrades.js +62 -0
  210. package/tradelayer.js/utils/dumpPriv.js +29 -0
  211. package/tradelayer.js/utils/generateChannel.js +34 -0
  212. package/tradelayer.js/utils/getInfo.js +21 -0
  213. package/tradelayer.js/utils/hardWipe.js +20 -0
  214. package/tradelayer.js/utils/hexTo64.js +16 -0
  215. package/tradelayer.js/utils/importAddress.js +28 -0
  216. package/tradelayer.js/utils/importpriv.js +20 -0
  217. package/tradelayer.js/utils/issueOracleContract.js +67 -0
  218. package/tradelayer.js/utils/issueTokens.js +41 -0
  219. package/tradelayer.js/utils/listunspent.js +66 -0
  220. package/tradelayer.js/utils/litecoinClient.js +30 -0
  221. package/tradelayer.js/utils/loadwallet.js +20 -0
  222. package/tradelayer.js/utils/publishOracle.js +113 -0
  223. package/tradelayer.js/utils/sendActivation.js +21 -0
  224. package/tradelayer.js/utils/sendChannelContractTrade.js +34 -0
  225. package/tradelayer.js/utils/sendChannelTokenTrade.js +34 -0
  226. package/tradelayer.js/utils/sendCommit.js +24 -0
  227. package/tradelayer.js/utils/sendDoge.js +62 -0
  228. package/tradelayer.js/utils/sendDogeMain.js +67 -0
  229. package/tradelayer.js/utils/sendDogeTx.js +46 -0
  230. package/tradelayer.js/utils/sendLTC.js +63 -0
  231. package/tradelayer.js/utils/sendMainnet.js +62 -0
  232. package/tradelayer.js/utils/sendTransfer.js +19 -0
  233. package/tradelayer.js/utils/sendVestTest.js +88 -0
  234. package/tradelayer.js/utils/sendWithdrawal.js +26 -0
  235. package/tradelayer.js/utils/simpleStart.js +8 -0
  236. package/tradelayer.js/utils/startStop.js +27 -0
  237. package/tradelayer.js/utils/structuredTrades.js +136 -0
  238. package/tradelayer.js/utils/verifySignature.js +90 -0
  239. package/tradelayer.js/utils/verifyWitnessAndScriptPubkey.js +41 -0
  240. package/tradelayer.js/utils/walletCache.js +172 -0
  241. package/tradelayer.js/utils/walletContractInterface.js +48 -0
  242. package/tradelayer.js/utils/walletFetchTxs.js +66 -0
  243. package/tradelayer.js/utils/walletUtils.js +97 -0
  244. package/tradelayer.js/utils/wipeDB.js +55 -0
  245. package/tradelayer.js/utils/wipeDBNotTx.js +50 -0
  246. package/txEncoder.js +529 -0
  247. package/utility.js +28 -0
  248. package/verifymessage.js +38 -0
  249. 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