@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,113 @@
1
+ // Encode the transaction to base 256
2
+ function encodeOmniTransaction(type, params) {
3
+ const payload = [type];
4
+
5
+ switch (type) {
6
+ case 1:
7
+ payload.push(params.initialAmount.toString(16)); // Convert integer to hex
8
+ payload.push(params.ticker);
9
+ payload.push(params.whitelists || 0);
10
+ break;
11
+ case 2:
12
+ payload.push(params.propertyId.toString(16)); // Convert integer to hex
13
+ payload.push(params.amount.toString(16)); // Convert integer to hex
14
+ break;
15
+ case 3:
16
+ payload.push(params.propertyId.toString(16)); // Convert integer to hex
17
+ payload.push(params.amount.toString(16)); // Convert integer to hex
18
+ payload.push(params.satsExpected.toString(16)); // Convert integer to hex
19
+ break;
20
+ case 4:
21
+ payload.push(params.propertyId.toString(16)); // Convert integer to hex
22
+ payload.push(params.amount.toString(16)); // Convert integer to hex
23
+ break;
24
+ case 5:
25
+ payload.push(params.propertyId.toString(16)); // Convert integer to hex
26
+ payload.push(params.propertyIdDesired.toString(16)); // Convert integer to hex
27
+ payload.push(params.amountOffered.toString(16)); // Convert integer to hex
28
+ payload.push(params.amountExpected.toString(16)); // Convert integer to hex
29
+ break;
30
+ default:
31
+ throw new Error("Unknown transaction type");
32
+ }
33
+
34
+ // Join all the elements of the payload into a single string, separated by commas
35
+ const encodedPayload = payload.join(',');
36
+
37
+ return encodedPayload;
38
+ }
39
+
40
+ // Decode the base 256 payload to a transaction object
41
+ function decodeOmniTransaction(encodedPayload) {
42
+ if (encodedPayload.startsWith("tl")) {
43
+ encodedPayload = encodedPayload.substr(2); // Remove the "tl" marker
44
+ }
45
+
46
+ const parts = encodedPayload.split(',');
47
+
48
+ const type = parseInt(parts[0], 10); // Parse the type as a regular integer
49
+ const params = {};
50
+
51
+ let index = 1;
52
+
53
+ switch (type) {
54
+ case 1:
55
+ params.initialAmount = parseInt(parts[index], 16); // Convert hex to integer
56
+ index++;
57
+ params.ticker = parts[index];
58
+ index++;
59
+ params.whitelists = parts.slice(index).map(value => parseInt(value, 10));
60
+ break;
61
+ case 2:
62
+ params.propertyId = parseInt(parts[index], 16); // Convert hex to integer
63
+ index++;
64
+ params.amount = parseInt(parts[index], 16); // Convert hex to integer
65
+ break;
66
+ case 3:
67
+ params.propertyId = parseInt(parts[index], 16); // Convert hex to integer
68
+ index++;
69
+ params.amount = parseInt(parts[index], 16); // Convert hex to integer
70
+ index++;
71
+ params.satsExpected = parseInt(parts[index], 16); // Convert hex to integer
72
+ break;
73
+ case 4:
74
+ params.propertyId = parseInt(parts[index], 16); // Convert hex to integer
75
+ index++;
76
+ params.amount = parseInt(parts[index], 16); // Convert hex to integer
77
+ break;
78
+ case 5:
79
+ params.propertyId = parseInt(parts[index], 16); // Convert hex to integer
80
+ index++;
81
+ params.propertyIdDesired = parseInt(parts[index], 16); // Convert hex to integer
82
+ index++;
83
+ params.amountOffered = parseInt(parts[index], 16); // Convert hex to integer
84
+ index++;
85
+ params.amountExpected = parseInt(parts[index], 16); // Convert hex to integer
86
+ break;
87
+ default:
88
+ throw new Error("Unknown transaction type");
89
+ }
90
+
91
+ return { type, params };
92
+ }
93
+
94
+ // Logic test: Check if the encoded payload is <= 40 bytes
95
+ function isPayloadSizeValid(encodedPayload) {
96
+ return encodedPayload.length <= 40;
97
+ }
98
+
99
+ // Example Usage:
100
+ const tx = encodeOmniTransaction(1, {
101
+ propertyId: 12342,
102
+ initialAmount: 10000557964,
103
+ ticker: "TOKEN",
104
+ whitelists: [122, 234, 612, 1212312]
105
+ });
106
+
107
+ const encodedPayloadWithMarker = `tl${tx}`; // Prepend "tl" marker
108
+
109
+ console.log("Encoded Payload with Marker:", encodedPayloadWithMarker);
110
+ console.log("Is Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker));
111
+
112
+ const decodedTx = decodeOmniTransaction(encodedPayloadWithMarker.substr(2)); // Remove the "tl" marker when decoding
113
+ console.log("Decoded Transaction:", decodedTx);
@@ -0,0 +1,112 @@
1
+ const bs58 = require('bs58');
2
+
3
+ // Encode the transaction to base 256
4
+ function encodeOmniTransaction(type, params) {
5
+ const payload = [type];
6
+
7
+ switch (type) {
8
+ case 1:
9
+ payload.push(bs58.encode(Buffer.from(params.initialAmount.toString(), 'hex')));
10
+ payload.push(params.ticker.length); // Include the length of the ticker
11
+ payload.push(bs58.encode(Buffer.from(params.ticker, 'utf8'))); // Convert ticker to base 58
12
+ payload.push(params.whitelists || 0);
13
+ break;
14
+ case 2:
15
+ payload.push(bs58.encode(Buffer.from(params.propertyId.toString(), 'hex')));
16
+ payload.push(bs58.encode(Buffer.from(params.amount.toString(), 'hex')));
17
+ break;
18
+ case 3:
19
+ payload.push(bs58.encode(Buffer.from(params.propertyId.toString(), 'hex')));
20
+ payload.push(bs58.encode(Buffer.from(params.amount.toString(), 'hex')));
21
+ payload.push(bs58.encode(Buffer.from(params.satsExpected.toString(), 'hex')));
22
+ break;
23
+ case 4:
24
+ payload.push(bs58.encode(Buffer.from(params.propertyId.toString(), 'hex')));
25
+ payload.push(bs58.encode(Buffer.from(params.amount.toString(), 'hex')));
26
+ break;
27
+ case 5:
28
+ payload.push(bs58.encode(Buffer.from(params.propertyId.toString(), 'hex')));
29
+ payload.push(bs58.encode(Buffer.from(params.propertyIdDesired.toString(), 'hex')));
30
+ payload.push(bs58.encode(Buffer.from(params.amountOffered.toString(), 'hex')));
31
+ payload.push(bs58.encode(Buffer.from(params.amountExpected.toString(), 'hex')));
32
+ break;
33
+ default:
34
+ throw new Error("Unknown transaction type");
35
+ }
36
+
37
+ // Join all the elements of the payload into a single string, separated by commas
38
+ const encodedPayload = payload.map(item => item.toString()).join(',');
39
+
40
+ return encodedPayload;
41
+ }
42
+
43
+ // Decode the base 256 payload to a transaction object
44
+ function decodeOmniTransaction(encodedPayload) {
45
+ if (encodedPayload.startsWith("tl")) {
46
+ encodedPayload = encodedPayload.substr(2); // Remove the "tl" marker
47
+ }
48
+
49
+ const parts = encodedPayload.split(',');
50
+
51
+ const type = parseInt(parts[0], 10); // Parse the type as a regular integer
52
+ const params = {};
53
+
54
+ let index = 1;
55
+
56
+ switch (type) {
57
+ case 1:
58
+ params.initialAmount = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
59
+ index++;
60
+ const tickerLength = parseInt(parts[index], 10);
61
+ index++;
62
+ params.ticker = bs58.decode(parts[index]).toString('utf8');
63
+ index++;
64
+ params.whitelists = parseInt(parts[index], 10);
65
+ break;
66
+ case 2:
67
+ params.propertyId = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
68
+ index++;
69
+ params.amount = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
70
+ break;
71
+ case 3:
72
+ params.propertyId = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
73
+ index++;
74
+ params.amount = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
75
+ index++;
76
+ params.satsExpected = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
77
+ break;
78
+ case 4:
79
+ params.propertyId = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
80
+ index++;
81
+ params.amount = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
82
+ break;
83
+ case 5:
84
+ params.propertyId = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
85
+ index++;
86
+ params.propertyIdDesired = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
87
+ index++;
88
+ params.amountOffered = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
89
+ index++;
90
+ params.amountExpected = parseInt(bs58.decode(parts[index]).toString('hex'), 16);
91
+ break;
92
+ default:
93
+ throw new Error("Unknown transaction type");
94
+ }
95
+
96
+ return { type, params };
97
+ }
98
+
99
+ // Example Usage:
100
+ const tx = encodeOmniTransaction(1, {
101
+ initialAmount: 557964,
102
+ ticker: "TOKEN",
103
+ whitelists: [2, 4, 6, 12],
104
+ });
105
+
106
+ const encodedPayloadWithMarker = `tl${tx}`; // Prepend "tl" marker
107
+
108
+ console.log("Encoded Payload with Marker:", encodedPayloadWithMarker);
109
+ console.log("Is Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker));
110
+
111
+ const decodedTx = decodeOmniTransaction(encodedPayloadWithMarker.substr(2)); // Remove the "tl" marker when decoding
112
+ console.log("Decoded Transaction:", decodedTx);
@@ -0,0 +1,168 @@
1
+ f// Encode the transaction to base 256
2
+ function encodeOmniTransaction(type, params) {
3
+ const payload = [type];
4
+
5
+ switch (type) {
6
+ case 1:
7
+ payload.push(params.initialAmount.toString(36)); // Convert integer to hex
8
+ payload.push(params.ticker);
9
+ payload.push(params.whitelists.map(val => val.toString(36)).join(',')); // Convert integers to hex and join with commas
10
+ break;
11
+ case 2:
12
+ payload.push(params.propertyId.toString(36)); // Convert integer to hex
13
+ payload.push(params.amount.toString(36)); // Convert integer to hex
14
+ break;
15
+ case 3:
16
+ payload.push(params.propertyId.toString(36)); // Convert integer to hex
17
+ payload.push(params.amount.toString(36)); // Convert integer to hex
18
+ payload.push(params.satsExpected.toString(36)); // Convert integer to hex
19
+ break;
20
+ case 4:
21
+ payload.push(params.propertyId.toString(36)); // Convert integer to hex
22
+ payload.push(params.amount.toString(36)); // Convert integer to hex
23
+ break;
24
+ case 5:
25
+ payload.push(params.propertyId.toString(36)); // Convert integer to hex
26
+ payload.push(params.propertyIdDesired.toString(36)); // Convert integer to hex
27
+ payload.push(params.amountOffered.toString(36)); // Convert integer to hex
28
+ payload.push(params.amountExpected.toString(36)); // Convert integer to hex
29
+ break;
30
+ default:
31
+ throw new Error("Unknown transaction type");
32
+ }
33
+
34
+ // Join all the elements of the payload into a single string, separated by commas
35
+ const encodedPayload = payload.join(',');
36
+
37
+ return encodedPayload;
38
+ }
39
+
40
+ // Decode the base 256 payload to a transaction object
41
+ function decodeOmniTransaction(encodedPayload) {
42
+ if (encodedPayload.startsWith("tl")) {
43
+ encodedPayload = encodedPayload.substr(2); // Remove the "tl" marker
44
+ }
45
+
46
+ const parts = encodedPayload.split(',');
47
+
48
+ const type = parseInt(parts[0], 16); // Parse the type as a hex integer
49
+ const params = {};
50
+
51
+ let index = 1;
52
+
53
+ switch (type) {
54
+ case 1:
55
+ params.initialAmount = parseInt(parts[index], 36); // Convert hex to integer
56
+ index++;
57
+ params.ticker = parts[index];
58
+ index++;
59
+ params.whitelists = [];
60
+ while (index < parts.length) {
61
+ params.whitelists.push(parseInt(parts[index], 36)); // Convert hex to integer
62
+ index++;
63
+ }
64
+ break;
65
+ case 2:
66
+ params.propertyId = parseInt(parts[index], 36); // Convert hex to integer
67
+ index++;
68
+ params.amount = parseInt(parts[index], 36); // Convert hex to integer
69
+ break;
70
+ case 3:
71
+ params.propertyId = parseInt(parts[index], 36); // Convert hex to integer
72
+ index++;
73
+ params.amount = parseInt(parts[index], 36); // Convert hex to integer
74
+ index++;
75
+ params.satsExpected = parseInt(parts[index], 36); // Convert hex to integer
76
+ break;
77
+ case 4:
78
+ params.propertyId = parseInt(parts[index], 36); // Convert hex to integer
79
+ index++;
80
+ params.amount = parseInt(parts[index], 36); // Convert hex to integer
81
+ break;
82
+ case 5:
83
+ params.propertyId = parseInt(parts[index], 36); // Convert hex to integer
84
+ index++;
85
+ params.propertyIdDesired = parseInt(parts[index], 36); // Convert hex to integer
86
+ index++;
87
+ params.amountOffered = parseInt(parts[index], 36); // Convert hex to integer
88
+ index++;
89
+ params.amountExpected = parseInt(parts[index], 36); // Convert hex to integer
90
+ break;
91
+ default:
92
+ throw new Error("Unknown transaction type");
93
+ }
94
+
95
+ return { type, params };
96
+ }
97
+
98
+ // Logic test: Check if the encoded payload is <= 40 bytes
99
+ function isPayloadSizeValid(encodedPayload) {
100
+ return encodedPayload.length <= 40;
101
+ }
102
+
103
+ // Function to prepend "tl" marker to encoded payload
104
+ function prependTlMarker(encodedPayload) {
105
+ return `tl${encodedPayload}`;
106
+ }
107
+
108
+ // Test Cases
109
+ const tx1 = encodeOmniTransaction(1, {
110
+ propertyId: 12342,
111
+ initialAmount: 10000.557964,
112
+ ticker: "TOKEN",
113
+ whitelists: [122, 234, 612, 1212312]
114
+ });
115
+
116
+ const encodedPayloadWithMarker1 = prependTlMarker(tx1);
117
+
118
+ const tx2 = encodeOmniTransaction(2, {
119
+ propertyId: 54321,
120
+ amount: 87654321.00000000,
121
+ });
122
+
123
+ const encodedPayloadWithMarker2 = prependTlMarker(tx2);
124
+
125
+ const tx3 = encodeOmniTransaction(3, {
126
+ propertyId: 98765,
127
+ amount: 12345678.00000000,
128
+ satsExpected: 8765432,
129
+ });
130
+
131
+ const encodedPayloadWithMarker3 = prependTlMarker(tx3);
132
+
133
+ const tx4 = encodeOmniTransaction(4, {
134
+ propertyId: 13579,
135
+ amount: 246813579.00000000,
136
+ });
137
+
138
+ const encodedPayloadWithMarker4 = prependTlMarker(tx4);
139
+
140
+ const tx5 = encodeOmniTransaction(5, {
141
+ propertyId: 11111,
142
+ propertyIdDesired: 99999,
143
+ amountOffered: 123456789.00000000,
144
+ amountExpected: 87654322334.00000000,
145
+ });
146
+
147
+ const encodedPayloadWithMarker5 = prependTlMarker(tx5);
148
+
149
+ // Display Test Results
150
+ console.log("Encoded Transaction 1:", encodedPayloadWithMarker1);
151
+ console.log("Is Transaction 1 Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker1));
152
+ console.log("Decoded Transaction 1:", decodeOmniTransaction(encodedPayloadWithMarker1).params);
153
+
154
+ console.log("Encoded Transaction 2:", encodedPayloadWithMarker2);
155
+ console.log("Is Transaction 2 Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker2));
156
+ console.log("Decoded Transaction 2:", decodeOmniTransaction(encodedPayloadWithMarker2).params);
157
+
158
+ console.log("Encoded Transaction 3:", encodedPayloadWithMarker3);
159
+ console.log("Is Transaction 3 Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker3));
160
+ console.log("Decoded Transaction 3:", decodeOmniTransaction(encodedPayloadWithMarker3).params);
161
+
162
+ console.log("Encoded Transaction 4:", encodedPayloadWithMarker4);
163
+ console.log("Is Transaction 4 Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker4));
164
+ console.log("Decoded Transaction 4:", decodeOmniTransaction(encodedPayloadWithMarker4).params);
165
+
166
+ console.log("Encoded Transaction 5:", encodedPayloadWithMarker5);
167
+ console.log("Is Transaction 5 Payload Size Valid:", isPayloadSizeValid(encodedPayloadWithMarker5));
168
+ console.log("Decoded Transaction 5:", decodeOmniTransaction(encodedPayloadWithMarker5).params);
@@ -0,0 +1,102 @@
1
+ const litecoin = require('litecoin');
2
+
3
+ const client = new litecoin.Client({
4
+ host: '127.0.0.1',
5
+ port: 8332, // Litecoin RPC port (default is 9332)
6
+ user: 'user',
7
+ pass: 'pass',
8
+ timeout: 10000
9
+ });
10
+
11
+ var hasOPReturn= true;
12
+ var payload =""
13
+ var payload2= ""
14
+ var senderVout =0
15
+
16
+ const tx = "70d0cc07326bd1c55dbada54217d211933f1eef59fefd869aa12dfeb9fd6347d";
17
+
18
+ console.log("Fetching raw transaction...");
19
+
20
+ /*client.cmd('createwallet',function(err,wallet){
21
+ console.log(wallet)
22
+ })*/
23
+
24
+ client.getRawTransaction(tx, true, function (err, rawtx) {
25
+ if (err) {
26
+ console.error("Error:", err);
27
+ } else {
28
+ console.log(rawtx)
29
+ var confirmations=confirmations
30
+ for (let v = 0; v < rawtx.vout.length; v++) {
31
+ console.log(v)
32
+ var vout = rawtx.vout[v];
33
+ var ASMstring = vout.scriptPubKey.asm.slice(0,9);
34
+ payload2=JSON.stringify(rawtx.vout[2].scriptPubKey.asm)
35
+ console.log(ASMstring)
36
+ if (ASMstring === "OP_RETURN" && confirmations >= 1) {
37
+ hasOPReturn=true
38
+ var payload = vout.scriptPubKey.asm.slice(11,vout.scriptPubKey.asm.length);
39
+ console.log(payload)
40
+ var marker =decode(payload.slice(0,1))
41
+
42
+ var txObj = { tx: tx, payload: payload, marker: marker };
43
+ console.log(decodedPayload,marker,txObj)
44
+ if (marker === "om") {
45
+ marker = payload.slice(0,3)
46
+ txObj.marker=marker
47
+ payload=payload.slice(4,payload.length)
48
+ txObj.payload=payload
49
+ omniTxCount+=1
50
+ console.log("Omni tx "+omniTxCount)
51
+ thisBlockOm.push(txObj);
52
+ }
53
+ if (marker === "tl") {
54
+ payload=payload.slice(2,payload.length)
55
+ txObj.payload=payload
56
+ thisBlockTl.push(txObj);
57
+ }
58
+ } else if (ASMstring === "OP_RETURN" && confirmations === 0) {
59
+ hasOPReturn=true
60
+ var payload = vout.scriptPubKey.asm.split(' ');
61
+ var decodedPayload = decodeOPReturnPayload(payload);
62
+ var marker = decodedPayload.slice(0, 1);
63
+ var txObj = { tx: tx, payload: payload, decode: decode, marker: marker };
64
+ if (marker === "om" || marker === "tl") {
65
+ memPool.push(tx);
66
+ }
67
+ }
68
+ }
69
+ // Parse the sender (first input)
70
+ const sender = rawtx.vin[0].txid
71
+ const senderVout = rawtx.vin[0].vout
72
+
73
+ // Parse the reference address (second output)
74
+ const referenceAddress = rawtx.vout[1].scriptPubKey.addresses[0]
75
+ const referenceValue = rawtx.vout[1].value;
76
+
77
+ const changeAddress=rawtx.vout[0].scriptPubKey.addresses[0]
78
+ const changeValue = rawtx.vout[0].value;
79
+
80
+
81
+ console.log('Sender:', sender);
82
+ console.log('Reference Address:', referenceAddress);
83
+ console.log('Reference Value (Satoshi):', referenceValue);
84
+ console.log('Change Address:', changeAddress);
85
+ console.log('Change Value (Satoshi):', changeValue);
86
+
87
+ if (hasOPReturn) {
88
+ console.log('OP_Return Output Data:', payload2.slice(10,payload2.length-1) );
89
+ const stringBuffer = Buffer.from(payload2.slice(10,payload2.length-1), 'hex');
90
+ console.log(stringBuffer)
91
+ const text = stringBuffer.toString('utf8');
92
+ console.log("decoded hex: "+text);
93
+ } else {
94
+ console.log('No OP_Return Output found in the transaction.');
95
+ }
96
+
97
+ client.getRawTransaction(sender, true, function(err,rawtx){
98
+ var senderAddress=rawtx.vout[senderVout].scriptPubKey.addresses[0]
99
+ console.log("Sender Address "+senderAddress)
100
+ })
101
+ }
102
+ });
@@ -0,0 +1,23 @@
1
+ function testPayloadSeparation(hexPayload) {
2
+ // Decode from hex to plaintext
3
+ const asmBuffer = new Buffer(hexPayload, "hex");
4
+ const message = asmBuffer.toString();
5
+ console.log(message);
6
+ // Assuming the payload format is 'tlXX' where XX are digits
7
+ if (!plaintextPayload.startsWith('tl')) {
8
+ throw new Error('Invalid payload');
9
+ }
10
+
11
+ const marker = plaintextPayload.substring(0, 2); // 'tl'
12
+ const restOfPayload = plaintextPayload.substring(2); // '00' in this case
13
+
14
+ const transactionId = restOfPayload.charAt(0); // First '0'
15
+ const otherData = restOfPayload.substring(1); // Second '0'
16
+
17
+ console.log(`Marker: ${marker}`);
18
+ console.log(`Transaction ID: ${transactionId}`);
19
+ console.log(`Other Data: ${otherData}`);
20
+ }
21
+
22
+ // Example usage
23
+ testPayloadSeparation('808479860');
@@ -0,0 +1,50 @@
1
+ const Litecoin = require('litecoin'); // Replace with actual library import
2
+ const async = require('async')
3
+ const STANDARD_FEE = 0.0001; // Standard fee in LTC
4
+ const client = new Litecoin.Client({
5
+ host: '127.0.0.1',
6
+ port: 18332,
7
+ user: 'user',
8
+ pass: 'pass',
9
+ timeout: 10000
10
+ });
11
+
12
+ const util = require('util');
13
+ // ... rest of your setup ...
14
+
15
+ // Promisify the createRawTransaction function
16
+ client.createRawTransaction = util.promisify(client.createRawTransaction);
17
+
18
+ async function createRawTransaction() {
19
+ try {
20
+ const inputs = [{
21
+ "txid": "57dbb47d8db6249b720421d78052e6f168664f3c062f1fbe187270ff5edd4dc5",
22
+ "vout": 1
23
+ }];
24
+
25
+ // Specify the output with the address and amount (example amount here is 0.01 LTC)
26
+ const outputs = {
27
+ "tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8": 0.01
28
+ };
29
+
30
+ const rawTx = await client.createRawTransaction(inputs, outputs);
31
+ if (rawTx) {
32
+ console.log('Raw Transaction:', rawTx);
33
+ } else {
34
+ console.log('Raw Transaction is undefined. Check if litecoind is running and accepting RPC commands.');
35
+ }
36
+ return rawTx;
37
+ } catch (error) {
38
+ console.error('Error creating raw transaction:', error);
39
+ }
40
+ }
41
+
42
+ createRawTransaction();
43
+
44
+
45
+ /*client.createRawTransaction([{txid:"57dbb47d8db6249b720421d78052e6f168664f3c062f1fbe187270ff5edd4dc5",vout:1}],[{
46
+ "tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8": 0.01
47
+ }],function(err,data){
48
+ if(err){console.log(err)}
49
+ console.log(data)
50
+ })*/
@@ -0,0 +1,20 @@
1
+ const Logic = require('./Logic'); // Assuming Logic is the module with your business logic
2
+ const TxUtils = require('./TxUtils'); // Assuming TxUtils contains your utility functions
3
+
4
+ async function testSendLargeAmount() {
5
+ // Initialize components
6
+ const adminAddress = 'tltc1qa0kd2d39nmeph3hvcx8ytv65ztcywg5sazhtw8'; // Replace with actual admin address
7
+ const TLVESTPropertyId = 2; // Assuming TLVEST has property ID 2
8
+ const largeAmount = 2000000;
9
+ // Send a large amount of TLVEST from admin address
10
+ try {
11
+ const sendTxId = await TxUtils.sendTransaction(adminAddress, 'LNmiS6p8z3KuHHx3q6Jf6x6TfcyptE68oP', TLVESTPropertyId, largeAmount, false);
12
+ console.log('Send Transaction ID:', sendTxId);
13
+ } catch (error) {
14
+ console.log('Expected error:', error.message);
15
+ // Assertions (pseudo-code)
16
+ // assert(error.message.includes('Insufficient balance'), 'Transaction should be invalid due to insufficient balance');
17
+ }
18
+ }
19
+
20
+ testSendLargeAmount();
@@ -0,0 +1,28 @@
1
+ const Litecoin = require('litecoin'); // Replace with actual library import
2
+ const util = require('util');
3
+ const bitcore = require('bitcore-lib-ltc');
4
+
5
+ const client = new Litecoin.Client({
6
+ host: '127.0.0.1',
7
+ port: 18332,
8
+ user: 'user',
9
+ pass: 'pass',
10
+ timeout: 10000
11
+ });
12
+
13
+
14
+ var privateKey = new litecore.PrivateKey('L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy');
15
+ var utxo = {
16
+ "txId" : "115e8f72f39fad874cfab0deed11a80f24f967a84079fb56ddf53ea02e308986",
17
+ "outputIndex" : 0,
18
+ "address" : "17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV",
19
+ "script" : "76a91447862fe165e6121af80d5dde1ecb478ed170565b88ac",
20
+ "satoshis" : 50000
21
+ };
22
+
23
+ var transaction = new litecore.Transaction()
24
+ .from(utxo)
25
+ .to('tltc1qq95gckx4lg8c9pvcajh5kgg5ahdk5t6mjyyynl', 15000)
26
+ .sign(privateKey);
27
+
28
+
@@ -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()