@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,20 @@
1
+ const Litecoin = require('litecoin');
2
+ const async = require('async')
3
+ const util = require('util');
4
+
5
+ const client = new Litecoin.Client({
6
+ host: '127.0.0.1',
7
+ port: 18332,
8
+ user: 'user',
9
+ pass: 'pass',
10
+ timeout: 1000
11
+ });
12
+
13
+
14
+ const createWalletAsync = util.promisify(client.cmd.bind(client, 'createwallet'))
15
+ async function load(){
16
+
17
+ const createwallet = await createWalletAsync('wallet.dat')
18
+ }
19
+
20
+ load()
@@ -0,0 +1,57 @@
1
+ const TxUtils = require('./TxUtils'); // Import your TxUtils class
2
+
3
+ async function runTestTokenTrades() {
4
+ const testAdminAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'; // Replace with actual admin address
5
+ const counterparties = [
6
+ 'tltc1qfffvwpftp8w3kv6gg6273ejtsfnu2dara5x4tr',
7
+ 'tltc1qhgfrkv89lwp8vmygyqzt8ljvzn7g5z4sk9krw0',
8
+ 'tltc1qr5ewrtxgj3z54gv9l47xz3cwrp6js9pgfxad2h'
9
+ ];
10
+
11
+ function randomNumber(min, max) {
12
+ return Math.floor(Math.random() * (max - min + 1)) + min;
13
+ }
14
+
15
+ // Generate random trades
16
+ function generateRandomTrades(numTrades) {
17
+ const trades = [];
18
+ for (let i = 0; i < numTrades; i++) {
19
+ const random = randomNumber(1, 3);
20
+ const random2 = randomNumber(1, 10);
21
+ const counterparty = counterparties[i % counterparties.length];
22
+ trades.push({
23
+ contractId: 4,
24
+ amount: random,
25
+ price: random2,
26
+ side: true, // Assuming all trades are 'Buy' orders
27
+ address: counterparty,
28
+ insurance:false,
29
+ fee: false,
30
+ reduce: false,
31
+ post: false,
32
+ stop: false
33
+ });
34
+ }
35
+ return trades;
36
+ }
37
+
38
+ const trades = generateRandomTrades(10); // Generate 10 trades for each side
39
+
40
+ // Iterate over each trade and create a transaction
41
+ for (let trade of trades) {
42
+ try {
43
+ console.log(`Creating trade: Offered Property ID ${trade.offeredPropertyId}, Desired Property ID ${trade.desiredPropertyId}, Address: ${trade.address}`);
44
+ const txId = await TxUtils.createContractOnChainTradeTransaction(
45
+ trade.address,
46
+ trade
47
+ );
48
+ console.log(`Transaction ID: ${txId}`);
49
+ } catch (error) {
50
+ console.error(`Error creating trade for offered property ${trade.offeredPropertyId} and desired property ${trade.desiredPropertyId}:`, error);
51
+ }
52
+ }
53
+ }
54
+
55
+ runTestTokenTrades()
56
+ .then(() => console.log('Test token trade transactions completed.'))
57
+ .catch(error => console.error('Error running test token trades:', error));
@@ -0,0 +1,62 @@
1
+ const TxUtils = require('./TxUtils'); // Import your TxUtils class
2
+
3
+ async function runTestTokenTrades() {
4
+ const testAdminAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'; // Replace with actual admin address
5
+ const counterparties = [
6
+ 'tltc1qfffvwpftp8w3kv6gg6273ejtsfnu2dara5x4tr',
7
+ 'tltc1qhgfrkv89lwp8vmygyqzt8ljvzn7g5z4sk9krw0',
8
+ 'tltc1qr5ewrtxgj3z54gv9l47xz3cwrp6js9pgfxad2h'
9
+ ];
10
+
11
+ function randomNumber(min, max) {
12
+ return Math.floor(Math.random() * (max - min + 1)) + min;
13
+ }
14
+
15
+ // Generate random trades
16
+ function generateRandomTrades(numTrades) {
17
+ const trades = [];
18
+ for (let i = 0; i < numTrades; i++) {
19
+ const random = randomNumber(1, 10);
20
+ const random2 = randomNumber(1, 10);
21
+ const counterparty = counterparties[i % counterparties.length];
22
+ trades.push({
23
+ offeredPropertyId: 4,
24
+ desiredPropertyId: 5,
25
+ amountOffered: random,
26
+ amountExpected: random2,
27
+ address: testAdminAddress
28
+ });
29
+ trades.push({
30
+ offeredPropertyId: 5,
31
+ desiredPropertyId: 4,
32
+ amountOffered: random2,
33
+ amountExpected: random,
34
+ address: counterparty
35
+ });
36
+ }
37
+ return trades;
38
+ }
39
+
40
+ const trades = generateRandomTrades(10); // Generate 10 trades for each side
41
+
42
+ // Iterate over each trade and create a transaction
43
+ for (let trade of trades) {
44
+ try {
45
+ console.log(`Creating trade: Offered Property ID ${trade.offeredPropertyId}, Desired Property ID ${trade.desiredPropertyId}, Address: ${trade.address}`);
46
+ const txId = await TxUtils.tokenTradeTransaction(
47
+ trade.address,
48
+ trade.offeredPropertyId,
49
+ trade.desiredPropertyId,
50
+ trade.amountOffered,
51
+ trade.amountExpected
52
+ );
53
+ console.log(`Transaction ID: ${txId}`);
54
+ } catch (error) {
55
+ console.error(`Error creating trade for offered property ${trade.offeredPropertyId} and desired property ${trade.desiredPropertyId}:`, error);
56
+ }
57
+ }
58
+ }
59
+
60
+ runTestTokenTrades()
61
+ .then(() => console.log('Test token trade transactions completed.'))
62
+ .catch(error => console.error('Error running test token trades:', error));
@@ -0,0 +1,29 @@
1
+
2
+
3
+ const litecoin = require('litecoin');
4
+
5
+ // Configure your Litecoin client connection
6
+ const clientConfig = {
7
+ host: '127.0.0.1',
8
+ port: 18332, // Testnet port; use 9332 for Mainnet
9
+ user: 'user',
10
+ pass: 'pass',
11
+ timeout: 30000
12
+ };
13
+
14
+ const client = new litecoin.Client(clientConfig);
15
+
16
+ // Function to dump the private key
17
+ function dumpPrivKey(address) {
18
+ client.cmd('dumpprivkey', address, function(err, privateKey, resHeaders) {
19
+ if (err) {
20
+ console.error('Error dumping private key:', err);
21
+ return;
22
+ }
23
+ console.log(`Private key for address ${address}: ${privateKey}`);
24
+ });
25
+ }
26
+
27
+ // Replace with the address you want to get the private key for
28
+ const address = 'LNmiS6p8z3KuHHx3q6Jf6x6TfcyptE68oP';
29
+ dumpPrivKey(address);
@@ -0,0 +1,34 @@
1
+ const litecore = require('bitcore-lib-ltc');
2
+ const { TradeChannels } = require('./tradeChannels.js');
3
+
4
+ async function setupTradeChannel(privateKeyA, privateKeyB) {
5
+ const tradeChannels = new TradeChannels();
6
+
7
+ // Extract public keys from the private keys
8
+ const publicKeyA = new litecore.PrivateKey(privateKeyA).toPublicKey();
9
+ const publicKeyB = new litecore.PrivateKey(privateKeyB).toPublicKey();
10
+
11
+ // Create multisig address from public keys
12
+ const multisigAddress = new litecore.Address([publicKeyA, publicKeyB], 2).toString();
13
+
14
+ // Create a new trade channel with the multisig address as the channel ID
15
+ const tradeChannel = tradeChannels.createChannel(multisigAddress, 'addressA', 'addressB');
16
+
17
+ // Commit transactions to the channel
18
+ let commitTx1 = await commitTransaction('addressA', 'addressB', propertyId1, amount1, privateKeyA);
19
+ let commitTx2 = await commitTransaction('addressB', 'addressA', propertyId2, amount2, privateKeyB);
20
+
21
+ // Add commitments to the channel
22
+ tradeChannel.addCommitment(commitTx1);
23
+ tradeChannel.addCommitment(commitTx2);
24
+
25
+ // Return the trade channel for further processing
26
+ return tradeChannel;
27
+ }
28
+
29
+ // Example usage with test private keys
30
+ const privateKeyA = '...'; // Replace with private key for address A
31
+ const privateKeyB = '...'; // Replace with private key for address B
32
+ setupTradeChannel(privateKeyA, privateKeyB).then(tradeChannel => {
33
+ console.log('Trade Channel Setup:', tradeChannel);
34
+ });
@@ -0,0 +1,21 @@
1
+ const Litecoin = require('litecoin');
2
+ const async = require('async')
3
+ const util = require('util');
4
+
5
+ const client = new Litecoin.Client({
6
+ host: '127.0.0.1',
7
+ port: 18332,
8
+ user: 'user',
9
+ pass: 'pass',
10
+ timeout: 1000
11
+ });
12
+
13
+
14
+ const getInfoAsync = util.promisify(client.cmd.bind(client, 'getblockchaininfo'))
15
+ async function load(){
16
+
17
+ const info = await getInfoAsync()
18
+ console.log(JSON.stringify(info))
19
+ }
20
+
21
+ load()
@@ -0,0 +1,20 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const dbDir = './nedb-data'; // Change to your database directory
5
+
6
+ // Function to delete all files in the directory
7
+ function wipeDatabase() {
8
+ fs.readdir(dbDir, (err, files) => {
9
+ if (err) throw err;
10
+
11
+ for (const file of files) {
12
+ fs.unlink(path.join(dbDir, file), err => {
13
+ if (err) throw err;
14
+ });
15
+ }
16
+ console.log('Database wiped successfully.');
17
+ });
18
+ }
19
+
20
+ wipeDatabase();
@@ -0,0 +1,16 @@
1
+ const fs = require('fs');
2
+
3
+ function hexToBase64(hex) {
4
+ // Convert hex to a buffer, then encode it to base64
5
+ const buffer = Buffer.from(hex, 'hex');
6
+ return buffer.toString('base64');
7
+ }
8
+
9
+ // Example usage
10
+ const hexString = '010000000148a578b5c7aae54b1f33f480d992054371884ba8efe3fb4f9f7f7dd2ffc8a932000000006a47304402206f0318f343860c21ea1ede8b3186b5b5da8448d313da0fa04ad4144388730ee0022062d0466bf1e844db42b448d8a78050e3a86413fa9f8d6209f5a6897c9c9b177c012102b72f530678baac030e896f5f6b1ffaf334dea4b10c8aff3923a335053f43ce93ffffffff020065cd1d000000001976a914be98d27a5fc1fb73d7cb487da7d56d49feacfd3588ac0000000000000000406a3e746c30303b313b323b333b342c33356735726a31343972776d71367835356567703730757867717239396c769c6f3661366433316b7a6163676a3762313900000000';
11
+
12
+ const base64String = hexToBase64(hexString);
13
+ console.log('Base64:', base64String);
14
+
15
+ // Optionally, write the base64 string to a file for easy transcription
16
+ fs.writeFileSync('output_base64.txt', base64String);
@@ -0,0 +1,28 @@
1
+ const litecoin = require('litecoin');
2
+
3
+ const clientConfig = {
4
+ host: '127.0.0.1',
5
+ port: 18332,
6
+ user: 'user', // Replace with your RPC username
7
+ pass: 'pass', // Replace with your RPC password
8
+ timeout: 10000
9
+ };
10
+
11
+ const client = new litecoin.Client(clientConfig);
12
+
13
+ // Function to import an address
14
+ function importAddress(address) {
15
+ client.cmd('importaddress', address, '', false, function(err, response, resHeaders) {
16
+ if (err) {
17
+ console.error('Error importing address:', err);
18
+ return;
19
+ }
20
+ console.log('Address imported successfully:', response);
21
+ });
22
+ }
23
+
24
+ // Replace with the address you want to import
25
+ const addressToImport = "mj4iTwbHiQX6objWNXHjerF2KQDFcPCdUx";
26
+
27
+ // Execute the function
28
+ importAddress(addressToImport);
@@ -0,0 +1,20 @@
1
+ const Litecoin = require('litecoin');
2
+ const async = require('async')
3
+ const util = require('util');
4
+
5
+ const client = new Litecoin.Client({
6
+ host: '127.0.0.1',
7
+ port: 18332,
8
+ user: 'user',
9
+ pass: 'pass',
10
+ timeout: 1000
11
+ });
12
+
13
+
14
+ const importPrivKeyAsync = util.promisify(client.cmd.bind(client, 'importprivkey'))
15
+ async function load(){
16
+
17
+ const imported = await importPrivKeyAsync('cNGCJhHBSQM2Kedc8Zc6x9VYe9dQuvanqfS61D3tczZnDD3HwYUW')
18
+ }
19
+
20
+ load()
@@ -0,0 +1,67 @@
1
+ const crypto = require('crypto');
2
+ const TxUtils = require('../src/txUtils.js'); // Assuming TxUtils contains the necessary transaction utility functions
3
+ const client = require('../src/client.js')
4
+
5
+ // Function to create a random ticker
6
+ function createRandomTicker(length = 5) {
7
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
8
+ let result = '';
9
+ for (let i = 0; i < length; i++) {
10
+ result += characters.charAt(Math.floor(Math.random() * characters.length));
11
+ }
12
+ return result;
13
+ }
14
+
15
+ // Function to generate a random number within a range
16
+ function randomNumber(min, max) {
17
+ return Math.floor(Math.random() * (max - min + 1)) + min;
18
+ }
19
+
20
+ // Function to create an oracle and then issue a contract
21
+ async function createOracleAndIssueContract() {
22
+
23
+ const instance = new client()
24
+ instance.init()
25
+ await new Promise(resolve => setTimeout(resolve, 700));
26
+
27
+ const adminAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'; // Replace with the actual admin address
28
+ const backupAddress = 'LNmiS6p8z3KuHHx3q6Jf6x6TfcyptE68oP'; // Replace with an actual backup address
29
+
30
+ // Create Oracle Parameters
31
+ const oracleTicker = "BTC/USD";
32
+ const oracleUrl = "bravenewcoin.com";
33
+
34
+ // Create Contract Series Parameters
35
+ const contractSeriesTicker = "BTC/USD-BLX";
36
+ const underlyingOracleId = 1; // Placeholder, replace with actual oracle ID after creation
37
+ const notionalPropertyId = null; // Random property ID for testing
38
+ const collateralPropertyId = 3; // Random collateral property ID for testing
39
+ const leverage = 10; // Example leverage
40
+ const expiryPeriod = 17532; // Example expiry period
41
+ const series = 5; // Number of contracts in the series
42
+
43
+ console.log(`Creating an oracle: ${oracleTicker}`);
44
+
45
+ try {
46
+ // Create Oracle
47
+ const oracleTxId = await TxUtils.createOracleTransaction(adminAddress, {
48
+ ticker: oracleTicker,
49
+ url: oracleUrl,
50
+ backupAddress: backupAddress,
51
+ whitelists: [],
52
+ lag: 1
53
+ }, 13);
54
+
55
+ console.log(`Oracle created successfully. Transaction ID: ${oracleTxId}`);
56
+
57
+ // Wait for oracle creation to be confirmed before issuing the contract
58
+ // This is just a placeholder, you should implement a proper wait/check mechanism
59
+ console.log('Waiting for oracle confirmation...');
60
+ await new Promise(resolve => setTimeout(resolve, 30000)); // 30 seconds delay
61
+ }catch(err){
62
+ console.log('err '+err)
63
+ }
64
+ }
65
+
66
+ // Call the function to create an oracle and issue a contract
67
+ createOracleAndIssueContract();
@@ -0,0 +1,41 @@
1
+ const crypto = require('crypto');
2
+ const TxUtils = require('./txUtils.js')
3
+ // Function to create a random ticker
4
+ function createRandomTicker(length = 5) {
5
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
6
+ let result = '';
7
+ for (let i = 0; i < length; i++) {
8
+ result += characters.charAt(Math.floor(Math.random() * characters.length));
9
+ }
10
+ return result;
11
+ }
12
+
13
+ // Function to generate a random number within a range
14
+ function randomNumber(min, max) {
15
+ return Math.floor(Math.random() * (max - min + 1)) + min;
16
+ }
17
+
18
+ // Function to issue a random token
19
+ async function issueRandomToken() {
20
+ const fromAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8';
21
+ const initialAmount = randomNumber(1000, 1000000); // Random amount between 1,000 and 1,000,000
22
+ const ticker = createRandomTicker();
23
+ const whitelists = []; // Assuming no whitelists for simplicity
24
+ const managed = false; // Managed flag set to false
25
+ const backupAddress = 'LNmiS6p8z3KuHHx3q6Jf6x6TfcyptE68oP'; // Replace with an actual backup address
26
+ const nft = true; // NFT flag set to false
27
+
28
+ console.log(`Issuing a new token:
29
+ - Ticker: ${ticker}
30
+ - Initial Amount: ${initialAmount}`);
31
+
32
+ try {
33
+ const txid = await TxUtils.issuePropertyTransaction(fromAddress, initialAmount, ticker, whitelists, managed, backupAddress, nft);
34
+ console.log(`Token issued successfully. Transaction ID: ${txid}`);
35
+ } catch (error) {
36
+ console.error('Error issuing token:', error);
37
+ }
38
+ }
39
+
40
+ // Call the function to issue a random token
41
+ issueRandomToken();
@@ -0,0 +1,66 @@
1
+ const async = require('async');
2
+ const util = require('util');
3
+ const litecore = require('bitcore-lib-ltc');
4
+ const litecoin = require('litecoin');
5
+
6
+ // Litecoin client configuration (make sure your daemon is running and the RPC parameters are correct)
7
+ const clientConfig = {
8
+ host: '127.0.0.1',
9
+ port: 18332,
10
+ user: 'user',
11
+ pass: 'pass',
12
+ timeout: 10000
13
+ };
14
+
15
+ const client = new litecoin.Client(clientConfig);
16
+
17
+ // Promisify client functions for `listunspent` and `getaddressesbylabel`
18
+ const listUnspentAsync = util.promisify(client.cmd.bind(client, 'listunspent'));
19
+ const getAddressesByLabelAsync = util.promisify(client.cmd.bind(client, 'getaddressesbylabel'));
20
+ const getListReceivedByAddressAsync = util.promisify(client.cmd.bind(client, 'listreceivedbyaddress'))
21
+ const getMempool = util.promisify(client.cmd.bind(client, 'getrawmempool'))
22
+ // Fetch UTXOs for all addresses in the wallet
23
+ async function listUnspentForAllAddresses() {
24
+
25
+ const allAddresses = await getListReceivedByAddressAsync(0, true)
26
+
27
+ console.log('all addresses '+JSON.stringify(allAddresses))
28
+
29
+ try {
30
+ // Fetch all wallet addresses with a label (e.g., "" means all addresses)
31
+ const label = "tl-wallet"; // Empty string means fetch all addresses
32
+ const addressesByLabel = await getAddressesByLabelAsync(label);
33
+
34
+
35
+ const addresses = Object.keys(addressesByLabel);
36
+
37
+ if (addresses.length === 0) {
38
+ console.log('No addresses found in the wallet.');
39
+ return;
40
+ }
41
+
42
+ console.log(`Found ${addresses.length} addresses in the wallet.`);
43
+
44
+ // Loop over each address and fetch its UTXOs
45
+ for (let address of addresses) {
46
+ console.log(`Fetching UTXOs for address: ${address}`);
47
+
48
+ const minConfirmations = 1;
49
+ const maxConfirmations = 9999999;
50
+ const utxos = await listUnspentAsync(minConfirmations, maxConfirmations, [address]);
51
+
52
+ if (utxos && utxos.length > 0) {
53
+ console.log(`UTXOs for ${address}:`, utxos);
54
+ } else {
55
+ console.log(`No UTXOs available for address: ${address}`);
56
+ }
57
+ }
58
+ const mempool = await getMempool(true)
59
+ console.log('checking mempool '+JSON.stringify(mempool))
60
+ } catch (error) {
61
+ console.error('Error fetching addresses or UTXOs:', error);
62
+ }
63
+ }
64
+
65
+ // Execute the function to list unspent outputs for all addresses in the wallet
66
+ listUnspentForAllAddresses();
@@ -0,0 +1,30 @@
1
+ const litecoin = require('litecoin');
2
+
3
+ class LitecoinClient {
4
+ static instance;
5
+
6
+ constructor() {
7
+ if (LitecoinClient.instance) {
8
+ return LitecoinClient.instance;
9
+ }
10
+
11
+ this.client = new litecoin.Client({
12
+ host: '127.0.0.1',
13
+ port: 18332, //for testnet
14
+ user: 'user',
15
+ pass: 'pass',
16
+ timeout: 10000
17
+ });
18
+
19
+ LitecoinClient.instance = this;
20
+ }
21
+
22
+ static getInstance() {
23
+ if (!LitecoinClient.instance) {
24
+ new LitecoinClient();
25
+ }
26
+ return LitecoinClient.instance.client;
27
+ }
28
+ }
29
+
30
+ module.exports = LitecoinClient;
@@ -0,0 +1,20 @@
1
+ const Litecoin = require('litecoin');
2
+ const async = require('async')
3
+ const util = require('util');
4
+
5
+ const client = new Litecoin.Client({
6
+ host: '127.0.0.1',
7
+ port: 18332,
8
+ user: 'user',
9
+ pass: 'pass',
10
+ timeout: 1000
11
+ });
12
+
13
+
14
+ const loadWalletAsync = util.promisify(client.cmd.bind(client, 'loadwallet'))
15
+ async function load(){
16
+
17
+ const loadwallet = await loadWalletAsync(''/*wallet.dat'*/)
18
+ }
19
+
20
+ load()
@@ -0,0 +1,113 @@
1
+ const litecoin = require('litecoin');
2
+ const axios = require('axios');
3
+ const util = require('util');
4
+ const litecore = require('bitcore-lib-ltc');
5
+ const encoder = require('../src/txEncoder.js');
6
+
7
+ const clientConfig = {
8
+ host: '127.0.0.1',
9
+ port: 18332, // Testnet RPC port
10
+ user: 'user',
11
+ pass: 'pass',
12
+ timeout: 10000
13
+ };
14
+
15
+ const client = new litecoin.Client(clientConfig);
16
+
17
+ // Promisify necessary RPC commands
18
+ const listUnspentAsync = util.promisify(client.cmd.bind(client, 'listunspent'));
19
+ const dumpPrivKeyAsync = util.promisify(client.cmd.bind(client, 'dumpprivkey'));
20
+ const sendrawtransactionAsync = util.promisify(client.cmd.bind(client, 'sendrawtransaction'));
21
+
22
+ const LTC_PRICE_API_URL = 'https://api.coingecko.com/api/v3/simple/price?ids=litecoin&vs_currencies=usd';
23
+
24
+ //'https://api.coingecko.com/api/v3/simple/price?ids=litecoin&vs_currencies=usd';
25
+
26
+ // Fetch the BTC price
27
+ async function fetchBTCPrice() {
28
+ try {
29
+ const response = await axios.get(LTC_PRICE_API_URL);
30
+ const price = response.data.litecoin.usd;
31
+ console.log('Fetched BTC Price:', price);
32
+ return price;
33
+ } catch (error) {
34
+ console.error('Error fetching BTC price:', error.message);
35
+ throw error;
36
+ }
37
+ }
38
+
39
+ // Build, sign, and send the transaction
40
+ async function buildSignAndSendTransaction(fromAddress, btcPrice) {
41
+ try {
42
+ console.log('Preparing transaction with BTC Price:', btcPrice);
43
+
44
+ // Dump private key and get UTXOs
45
+ const privateKeyWIF = await dumpPrivKeyAsync(fromAddress);
46
+ const privateKey = litecore.PrivateKey.fromWIF(privateKeyWIF);
47
+ const unspentOutputs = await listUnspentAsync(0, 9999999, [fromAddress]);
48
+ console.log('unspent '+JSON.stringify(unspentOutputs))
49
+ if (!unspentOutputs.length) throw new Error('No unspent outputs available.');
50
+
51
+ // Select the largest UTXO
52
+ const largestUTXO = unspentOutputs.reduce((prev, curr) => prev.amount > curr.amount ? prev : curr);
53
+ console.log('Using UTXO:', largestUTXO);
54
+ if(largestUTXO.spendable==true){
55
+ const utxo = {
56
+ txId: largestUTXO.txid,
57
+ outputIndex: largestUTXO.vout,
58
+ script: largestUTXO.scriptPubKey,
59
+ satoshis: Math.floor(largestUTXO.amount * 1e8)
60
+ };
61
+ }else{
62
+ const utxo = unspentOutputs
63
+ }
64
+
65
+
66
+ // Create the payload
67
+ const params = {
68
+ oracleid: 2,
69
+ price: 142,//btcPrice,
70
+ targetAddress: fromAddress
71
+ };
72
+
73
+ const payload = encoder.encodePublishOracleData(params);
74
+
75
+ // Create and sign the transaction
76
+ const transaction = new litecore.Transaction()
77
+ .from(largestUTXO) // Add UTXO as input
78
+ .addOutput(new litecore.Transaction.Output({
79
+ satoshis: 0, // OP_RETURN fee
80
+ script: litecore.Script.buildDataOut(payload) // Embed payload in OP_RETURN
81
+ }))
82
+ .change(fromAddress) // Send change back to sender
83
+ .sign(privateKey); // Sign transaction
84
+
85
+ console.log('Raw Transaction Hex:', transaction.toString());
86
+
87
+ // Broadcast the transaction
88
+ const txid = await sendrawtransactionAsync(transaction.serialize());
89
+ console.log(`Transaction broadcasted successfully. TXID: ${txid}`);
90
+ } catch (error) {
91
+ console.error('Error building/signing transaction:', error.message);
92
+ throw error;
93
+ }
94
+ }
95
+
96
+ // Main function to fetch BTC price and send the attestation
97
+ async function publishBTCPrice() {
98
+ try {
99
+ const fromAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'; // Admin address
100
+ const btcPrice = await fetchBTCPrice();
101
+ await buildSignAndSendTransaction(fromAddress, btcPrice);
102
+ } catch (error) {
103
+ console.error('Failed to publish BTC price:', error.message);
104
+ }
105
+ }
106
+
107
+ publishBTCPrice()
108
+
109
+ // Run the attestation script every 150 seconds
110
+ setInterval(() => {
111
+ console.log('Starting BTC price publish cycle...');
112
+ publishBTCPrice();
113
+ }, 150 * 1000); // 150 seconds in milliseconds