@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,55 @@
1
+ const Datastore = require('nedb');
2
+ const path = require('path');
3
+
4
+ const chain = 'ltc-test'; // Change this to 'btc' or 'doge' as needed
5
+ const baseDir = path.join(__dirname, '..', 'nedb-data', chain);
6
+
7
+ function clearDatastore(dbPath, dbName) {
8
+ const db = new Datastore({ filename: dbPath, autoload: true });
9
+ db.remove({}, { multi: true }, (err, numRemoved) => {
10
+ if (err) {
11
+ console.error(`Error clearing the ${dbName} database:`, err);
12
+ } else {
13
+ console.log(`Cleared ${numRemoved} entries from the ${dbName} database.`);
14
+ db.loadDatabase(loadErr => {
15
+ if (loadErr) {
16
+ console.error(`Error reloading the ${dbName} database:`, loadErr);
17
+ }
18
+ });
19
+ }
20
+ });
21
+ }
22
+
23
+
24
+ const txIndexDbPath = path.join(baseDir, 'txIndex.db');
25
+ clearDatastore(txIndexDbPath, 'txIndex');
26
+
27
+ const paths = {
28
+ propertyListDbPath: 'propertyList.db',
29
+ tallyMapDbPath: 'tallyMap.db',
30
+ activationsDbPath: 'activations.db',
31
+ consensusDbPath: 'consensus.db',
32
+ orderBooksDbPath: 'orderBooks.db',
33
+ insuranceDbPath: 'insurance.db',
34
+ oracleListDbPath: 'oracleList.db',
35
+ contractListDbPath: 'contractList.db',
36
+ tradeHistoryDbPath: 'tradeHistory.db',
37
+ oracleDataDbPath: 'oracleData.db',
38
+ marginMapDbPath: 'marginMaps.db',
39
+ tallyMapDeltasDbPath: 'tallyMapDelta.db',
40
+ marginMapDeltasDbPath: 'marginMapDelta.db',
41
+ channelsDbPath: 'channels.db',
42
+ withdrawalQueueDbPath: 'withdrawalQueue.db',
43
+ liquidationsDbPath: 'liquidations.db',
44
+ feeCacheDbPath: 'feeCache.db',
45
+ volumeIndexDbPath: 'volumeIndex.db',
46
+ clearListDbPath: 'clearLists.db',
47
+ attestationsDbPath: 'attestations.db',
48
+ vaultsDbPath: 'vaults.db',
49
+ syntheticTokensDbPath: 'syntheticTokens.db',
50
+
51
+ };
52
+
53
+ for (const [name, relativePath] of Object.entries(paths)) {
54
+ clearDatastore(path.join(baseDir, relativePath), name);
55
+ }
@@ -0,0 +1,50 @@
1
+ const Datastore = require('nedb');
2
+ const path = require('path');
3
+
4
+ const chain = 'ltc-test'; // Change this to 'btc' or 'doge' as needed
5
+ const baseDir = path.join(__dirname, '..', 'nedb-data', chain);
6
+
7
+ function clearDatastore(dbPath, dbName) {
8
+ const db = new Datastore({ filename: dbPath, autoload: true });
9
+ db.remove({}, { multi: true }, (err, numRemoved) => {
10
+ if (err) {
11
+ console.error(`Error clearing the ${dbName} database:`, err);
12
+ } else {
13
+ console.log(`Cleared ${numRemoved} entries from the ${dbName} database.`);
14
+ db.loadDatabase(loadErr => {
15
+ if (loadErr) {
16
+ console.error(`Error reloading the ${dbName} database:`, loadErr);
17
+ }
18
+ });
19
+ }
20
+ });
21
+ }
22
+
23
+ const paths = {
24
+ propertyListDbPath: 'propertyList.db',
25
+ tallyMapDbPath: 'tallyMap.db',
26
+ activationsDbPath: 'activations.db',
27
+ consensusDbPath: 'consensus.db',
28
+ orderBooksDbPath: 'orderBooks.db',
29
+ insuranceDbPath: 'insurance.db',
30
+ oracleListDbPath: 'oracleList.db',
31
+ contractListDbPath: 'contractList.db',
32
+ tradeHistoryDbPath: 'tradeHistory.db',
33
+ oracleDataDbPath: 'oracleData.db',
34
+ marginMapDbPath: 'marginMaps.db',
35
+ tallyMapDeltasDbPath: 'tallyMapDelta.db',
36
+ marginMapDeltasDbPath: 'marginMapDelta.db',
37
+ channelsDbPath: 'channels.db',
38
+ withdrawalQueueDbPath: 'withdrawalQueue.db',
39
+ liquidationsDbPath: 'liquidations.db',
40
+ feeCacheDbPath: 'feeCache.db',
41
+ volumeIndexDbPath: 'volumeIndex.db',
42
+ clearListDbPath: 'clearLists.db',
43
+ attestationsDbPath: 'attestations.db',
44
+ vaultsDbPath: 'vaults.db',
45
+ syntheticTokensDbPath: 'syntheticTokens.db',
46
+ };
47
+
48
+ for (const [name, relativePath] of Object.entries(paths)) {
49
+ clearDatastore(path.join(baseDir, relativePath), name);
50
+ }
package/txEncoder.js ADDED
@@ -0,0 +1,529 @@
1
+ const BigNumber = require('bignumber.js');
2
+
3
+ const marker = 'tl';
4
+
5
+ const Encode = {
6
+ // Encode Simple Token Issue Transaction
7
+ encodeActivateTradeLayer(params) {
8
+ const payload = [
9
+ params.txTypeToActivate.toString(36),
10
+ params.codeHash,
11
+ params.wasmHash
12
+ ];
13
+ const txNumber = 0; // Example starting tx type number
14
+ return marker + txNumber.toString(36) + payload.join(',');
15
+ },
16
+
17
+ // Encode Token Issue Transaction
18
+ encodeTokenIssue(params) {
19
+ const payload = [
20
+ params.initialAmount.toString(36),
21
+ params.ticker,
22
+ params.whitelists.map(val => val.toString(36)).join(','),
23
+ params.managed ? '1' : '0',
24
+ params.backupAddress,
25
+ params.nft ? '1' : '0'
26
+ ];
27
+ const txNumber = 1;
28
+ return marker + txNumber.toString(36) + payload.join(',');
29
+ },
30
+
31
+ // Encode Send Transaction
32
+
33
+ encodeSend(params){
34
+ const { sendAll, address, propertyId, amount } = params;
35
+
36
+ if (sendAll) return `1;${address}`;
37
+
38
+ // Function to encode amounts using bimodal encoding
39
+ const encodeAmount = (amt) => {
40
+ const scaledAmt = new BigNumber(amt).times(1e8);
41
+ const isWholeNumber = Boolean(amt%1==0);
42
+
43
+ return isWholeNumber
44
+ ? amt.toString(36) // Normal base36 encoding
45
+ : scaledAmt.integerValue().toString(36) + '~'; // Base36 with `~` flag
46
+ };
47
+
48
+ if (Array.isArray(propertyId) && Array.isArray(amount)) {
49
+ const payload = [
50
+ '0',
51
+ '',
52
+ propertyId.map(id => id.toString(36)).join(','),
53
+ amount.map(encodeAmount).join(',')
54
+ ];
55
+ return payload.join(';');
56
+ } else {
57
+ const amountValue = Array.isArray(amount) ? amount[0] : amount;
58
+ const payload = [
59
+ '0',
60
+ address,
61
+ propertyId.toString(36),
62
+ encodeAmount(amountValue)
63
+ ];
64
+ const txNumber = 2;
65
+ const txNumber36 = txNumber.toString(36);
66
+ return `tl${txNumber36}${payload.join(';')}`;
67
+ }
68
+ },
69
+
70
+ // Helper function to encode property ID
71
+ encodePropertyId(propertyId) {
72
+ if (typeof propertyId === 'string' && propertyId.startsWith('s-')) {
73
+ const [_, collateralId, contractId] = propertyId.split('-');
74
+ const encodedCollateralId = parseInt(collateralId).toString(36);
75
+ const encodedContractId = parseInt(contractId).toString(36);
76
+ return `s-${encodedCollateralId}-${encodedContractId}`;
77
+ } else {
78
+ return propertyId.toString(36);
79
+ }
80
+ },
81
+
82
+ // Encode Trade Token for UTXO Transaction
83
+ encodeTradeTokenForUTXO(params) {
84
+ const amount = new BigNumber(params.amountOffered).times(1e8).toString(36);
85
+ const payload = [
86
+ params.propertyId.toString(36),
87
+ amount,
88
+ params.columnA,
89
+ params.satsExpected.toString(36),
90
+ params.tokenOutput,
91
+ params.payToAddress
92
+ ].join(',');
93
+ const txNumber = 3;
94
+ return marker + txNumber.toString(36) + payload;
95
+ },
96
+
97
+ // Encode Commit Token Transaction
98
+ encodeCommit(params) {
99
+ const amount = new BigNumber(params.amount).times(1e8).toString(36);
100
+ const channelAddress = params.channelAddress.length > 42 ? `ref:${params.ref || 0}` : params.channelAddress;
101
+ const payload = [
102
+ params.propertyId.toString(36),
103
+ amount,
104
+ channelAddress
105
+ ].join(',');
106
+ const txNumber = 4;
107
+ return marker + txNumber.toString(36) + payload;
108
+ },
109
+
110
+ // Encode On-chain Token for Token Transaction
111
+ encodeOnChainTokenForToken(params) {
112
+ const amountOffered = new BigNumber(params.amountOffered).times(1e8).toString(36);
113
+ const amountExpected = new BigNumber(params.amountExpected).times(1e8).toString(36);
114
+ const payload = [
115
+ params.propertyIdOffered.toString(36),
116
+ params.propertyIdDesired.toString(36),
117
+ amountOffered,
118
+ amountExpected,
119
+ params.stop ? '1' : '0',
120
+ params.post ? '1' : '0'
121
+ ].join(',');
122
+ const txNumber = 5;
123
+ return marker + txNumber.toString(36) + payload;
124
+ },
125
+
126
+ // Encode Cancel Order Transaction
127
+ encodeCancelOrder(params) {
128
+ let encodedTx = params.isContract ? `1` : `0`;
129
+
130
+ if (params.isContract) {
131
+ encodedTx += `,${params.contractId.toString(36)},${params.cancelAll ? 1 : 0}`;
132
+ } else {
133
+ encodedTx += `,${params.offeredPropertyId.toString(36)},${params.desiredPropertyId.toString(36)},${params.cancelAll ? 1 : 0}`;
134
+ }
135
+
136
+ if (params.cancelParams && params.cancelParams.price !== undefined) {
137
+ const priceEncoded = params.isContract ? params.cancelParams.price.toString(36) : new BigNumber(params.cancelParams.price).times(8).toString(36);
138
+ encodedTx += `,${priceEncoded},${params.cancelParams.side.toString(36)}`;
139
+ }
140
+
141
+ if (params.cancelParams && params.cancelParams.txid) {
142
+ encodedTx += `,${params.cancelParams.txid}`;
143
+ }
144
+
145
+ const txNumber = 6;
146
+ return marker + txNumber.toString(36) + encodedTx;
147
+ },
148
+
149
+ encodeCreateWhitelist: (params) => {
150
+ const payload = [
151
+ params.backupAddress,
152
+ params.name,
153
+ params.url,
154
+ params.description
155
+ ];
156
+ const txNumber = 7; // Transaction type 7
157
+ return marker + txNumber.toString(36) + payload.join(',');
158
+ },
159
+
160
+ // Transaction type 8: Encode Update Whitelist Admin Transaction
161
+ encodeUpdateAdmin: (params) => {
162
+ const payload = [
163
+ params.newAddress,
164
+ params.whitelist ? '1' : '0',
165
+ params.oracle ? '1' : '0',
166
+ params.token ? '1' : '0',
167
+ params.id.toString(36),
168
+ params.updateBackup ? '1' : '0'
169
+ ];
170
+ const txNumber = 8; // Transaction type 8
171
+ return marker + txNumber.toString(36) + payload.join(',');
172
+ },
173
+
174
+ // Transaction type 9: Encode Issue Attestation Transaction
175
+ encodeIssueOrRevokeAttestation: (params) => {
176
+ const payload = [
177
+ params.revoke,
178
+ params.id,
179
+ params.targetAddress,
180
+ params.metaData
181
+ ];
182
+ const txNumber = 9; // Transaction type 9
183
+ return marker + txNumber.toString(36) + payload.join(',');
184
+ },
185
+
186
+ // Transaction type 10: Encode Revoke Attestation Transaction
187
+ encodeAMMPool: (params) => {
188
+ const payload = [
189
+ params.isRedeem,
190
+ params.isContract,
191
+ params.id,
192
+ params.amount,
193
+ params.id2,
194
+ params.amount2,
195
+ ];
196
+ const txNumber = 10; // Transaction type 10
197
+ return marker + txNumber.toString(36) + payload.join(',');
198
+ },
199
+
200
+ // Transaction type 11: Encode Create Oracle Transaction
201
+ encodeCreateOracle: (params) => {
202
+ const payload = [
203
+ params.ticker,
204
+ params.url,
205
+ params.backupAddress,
206
+ params.whitelists.map(whitelist => whitelist.toString(36)).join(','),
207
+ params.lag.toString(36)
208
+ ];
209
+ const txNumber = 11; // Transaction type 11
210
+ return marker + txNumber.toString(36) + payload.join(',');
211
+ },
212
+
213
+ // Transaction type 12: Encode Grant Managed Token Transaction
214
+ encodeGrantManagedToken: (params) => {
215
+ const amountGranted = new BigNumber(params.amountGranted).times(1e8).toString(36);
216
+ const payload = [
217
+ params.propertyid.toString(36),
218
+ amountGranted,
219
+ params.addressToGrantTo
220
+ ];
221
+ const txNumber = 12; // Transaction type 12
222
+ return marker + txNumber.toString(36) + payload.join(',');
223
+ },
224
+
225
+ // Transaction type 13: Encode Redeem Managed Token Transaction
226
+ encodeRedeemManagedToken: (params) => {
227
+ const amountGranted = new BigNumber(params.amountGranted).times(1e8).toString(36);
228
+ const payload = [
229
+ params.propertyid.toString(36),
230
+ amountGranted,
231
+ params.addressToGrantTo
232
+ ];
233
+ const txNumber = 13; // Transaction type 13
234
+ return marker + txNumber.toString(36) + payload.join(',');
235
+ },
236
+
237
+ // Transaction type 14: Encode Publish Oracle Data Transaction
238
+ encodePublishOracleData: (params) => {
239
+ const payload = [
240
+ params.oracleid.toString(36),
241
+ params.price.toString(36)
242
+ ];
243
+ if (params.high !== undefined) {
244
+ payload.push(params.high.toString(36));
245
+ }
246
+ if (params.low !== undefined) {
247
+ payload.push(params.low.toString(36));
248
+ }
249
+ if (params.close !== undefined) {
250
+ payload.push(params.close.toString(36));
251
+ }
252
+ const txNumber = 14; // Transaction type 14
253
+ return marker + txNumber.toString(36) + payload.join(',');
254
+ },
255
+
256
+ // Transaction type 15: Encode Close Oracle Transaction
257
+ encodeCloseOracle: (id) => {
258
+ const txNumber = 15; // Transaction type 15
259
+ return marker + txNumber.toString(36) + id.toString(36); // No other parameters
260
+ },
261
+
262
+ // Transaction type 16: Encode Create Future Contract Series Transaction
263
+ encodeCreateFutureContractSeries: (params) => {
264
+ const payload = [
265
+ params.native ? '1' : '0',
266
+ params.underlyingOracleId.toString(36),
267
+ params.onChainData.map(data => `${data[0].toString(36)}:${data[1].toString(36)}`).join(';'),
268
+ params.notionalPropertyId.toString(36),
269
+ params.notionalValue.toString(36),
270
+ params.collateralPropertyId.toString(36),
271
+ params.leverage,
272
+ params.expiryPeriod !== undefined ? params.expiryPeriod.toString(36) : '0',
273
+ params.series.toString(36),
274
+ params.inverse ? '1' : '0',
275
+ params.fee !== undefined ? params.fee ? '1' : '0' : '0'
276
+ ];
277
+ const txNumber = 16; // Transaction type 16
278
+ return marker + txNumber.toString(36) + payload.join(',');
279
+ },
280
+
281
+ // Transaction type 17: Encode Exercise Derivative Transaction
282
+ encodeExerciseDerivative: (params) => {
283
+ const payload = [
284
+ params.derivativeContractId.toString(36),
285
+ params.amount.toString(36),
286
+ ];
287
+ const txNumber = 17; // Transaction type 17
288
+ return marker + txNumber.toString(36) + payload.join(',');
289
+ },
290
+
291
+ // Transaction type 18: Encode Trade Contract On-chain Transaction
292
+ encodeTradeContractOnchain: (params) => {
293
+ const payload = [
294
+ params.contractId.toString(36),
295
+ params.price.toString(36),
296
+ params.amount.toString(36),
297
+ params.sell ? '1' : '0',
298
+ params.insurance ? '1' : '0',
299
+ params.reduce ? '1' : '0',
300
+ params.post ? '1' : '0',
301
+ params.stop ? '1' : '0'
302
+ ];
303
+ const txNumber = 18; // Transaction type 18
304
+ return marker + txNumber.toString(36) + payload.join(',');
305
+ },
306
+
307
+ // Transaction type 19: Encode Trade Contract in Channel Transaction
308
+ encodeTradeContractChannel: (params) => {
309
+ const payload = [
310
+ params.contractId.toString(36),
311
+ new BigNumber(params.price).times(1e8).integerValue(BigNumber.ROUND_HALF_UP).toString(36),
312
+ params.amount.toString(36),
313
+ params.columnAIsSeller ? '1' : '0',
314
+ params.expiryBlock.toString(36),
315
+ params.insurance ? '1' : '0',
316
+ ];
317
+ const txNumber = 19; // Transaction type 19
318
+ return marker + txNumber.toString(36) + payload.join(',');
319
+ },
320
+
321
+ // Transaction type 20: Encode Trade Tokens in Channel Transaction
322
+ encodeTradeTokensChannel: (params) => {
323
+ const amountOffered = new BigNumber(params.amountOffered1).times(1e8).toNumber();
324
+ const amountDesired = new BigNumber(params.amountDesired2).times(1e8).toNumber();
325
+ const payload = [
326
+ params.propertyId1.toString(36),
327
+ params.propertyId2.toString(36),
328
+ amountOffered.toString(36),
329
+ amountDesired.toString(36),
330
+ params.columnAIsOfferer ? '1' : '0',
331
+ params.expiryBlock.toString(36),
332
+ ];
333
+ const txNumber = 20; // Transaction type 20
334
+ return marker + txNumber.toString(36) + payload.join(',');
335
+ },
336
+
337
+ // Transaction type 21: Encode Withdrawal Transaction
338
+ encodeWithdrawal: (params) => {
339
+ const amounts = new BigNumber(params.amountOffered).times(1e8).toNumber().toString();
340
+ const withdrawAll = params.withdrawAll;
341
+ const propertyIds = params.propertyId.toString(36);
342
+ const column = params.column; // 0 is A, 1 is B
343
+ const payload = [withdrawAll, propertyIds, amounts, column, params.channelAddress];
344
+ const txNumber = 21; // Transaction type 21
345
+ return marker + txNumber.toString(36) + payload.join(',');
346
+ },
347
+
348
+ // Transaction type 22: Encode Transfer Transaction
349
+ encodeTransfer: (params) => {
350
+ const propertyId = params.propertyId.toString(36);
351
+ const amounts = new BigNumber(params.amount).times(1e8).toString(36);
352
+ const isColumnA = params.isColumnA ? 1 : 0;
353
+ const destinationAddr = params.destinationAddr.length > 42 ? `ref:${params.ref || 0}` : params.destinationAddr; // Handle long multisig addresses
354
+ const payload = [propertyId, amounts, isColumnA, destinationAddr];
355
+ const txNumber = 22; // Transaction type 22
356
+ return marker + txNumber.toString(36) + payload.join(',');
357
+ },
358
+
359
+ // Transaction type 23: Encode Settle Channel PNL Transaction
360
+ encodeSettleChannelPNL: (params) => {
361
+ const payload = [
362
+ params.txidNeutralized,
363
+ params.contractId.toString(36),
364
+ params.amountCancelled.toString(36),
365
+ params.propertyId.toString(36),
366
+ params.amountSettled.toString(36),
367
+ params.close ? '1' : '0',
368
+ params.propertyId2 ? params.propertyId2.toString(36) : '0',
369
+ params.amountDelivered ? params.amountDelivered.toString(36) : '0',
370
+ ];
371
+ const txNumber = 23; // Transaction type 23
372
+ return marker + txNumber.toString(36) + payload.join(',');
373
+ },
374
+
375
+ // Transaction type 24: Encode Mint Synthetic Transaction
376
+ encodeMintSynthetic: (params) => {
377
+ const payload = [
378
+ params.propertyIdUsed.toString(36),
379
+ params.contractIdUsed.toString(36),
380
+ params.amount.toString(36),
381
+ ];
382
+ const txNumber = 24; // Transaction type 24
383
+ return marker + txNumber.toString(36) + payload.join(',');
384
+ },
385
+
386
+ // Transaction type 25: Encode Redeem Synthetic Transaction
387
+ encodeRedeemSynthetic: (params) => {
388
+ const payload = [
389
+ params.propertyIdUsed.toString(36),
390
+ params.contractIdUsed.toString(36),
391
+ params.amount.toString(36),
392
+ ];
393
+ const txNumber = 25; // Transaction type 25
394
+ return marker + txNumber.toString(36) + payload.join(',');
395
+ },
396
+
397
+ // Transaction type 26: Encode Pay to Tokens Transaction
398
+ encodePayToTokens: (params) => {
399
+ const payload = [
400
+ params.propertyIdTarget.toString(36),
401
+ params.propertyIdUsed.toString(36),
402
+ params.amount.toString(36),
403
+ ];
404
+ const txNumber = 26; // Transaction type 26
405
+ return marker + txNumber.toString(36) + payload.join(',');
406
+ },
407
+
408
+ // Transaction type 27: Encode Create Option Chain Transaction
409
+ encodeCreateOptionChain: (params) => {
410
+ const payload = [
411
+ params.contractSeriesId.toString(36),
412
+ params.strikePercentInterval.toString(36),
413
+ params.europeanStyle ? '1' : '0',
414
+ ];
415
+ const txNumber = 27; // Transaction type 27
416
+ return marker + txNumber.toString(36) + payload.join(',');
417
+ },
418
+
419
+ // Transaction type 28: Encode Trade Bai Urbun Transaction
420
+ encodeTradeBaiUrbun: (params) => {
421
+ const payload = [
422
+ params.propertyIdDownPayment.toString(36),
423
+ params.propertyIdToBeSold.toString(36),
424
+ params.price.toString(36),
425
+ params.amount.toString(36),
426
+ params.expiryBlock.toString(36),
427
+ params.tradeExpiryBlock.toString(36),
428
+ ];
429
+ const txNumber = 28; // Transaction type 28
430
+ return marker + txNumber.toString(36) + payload.join(',');
431
+ },
432
+
433
+ // Transaction type 29: Encode Trade Murabaha Transaction
434
+ encodeTradeMurabaha: (params) => {
435
+ const payload = [
436
+ params.propertyIdDownPayment.toString(36),
437
+ params.downPaymentPercent.toString(36),
438
+ params.propertyIdToBeSold.toString(36),
439
+ params.price.toString(36),
440
+ params.amount.toString(36),
441
+ params.expiryBlock.toString(36),
442
+ params.installmentInterval.toString(36),
443
+ params.tradeExpiryBlock.toString(36),
444
+ ];
445
+ const txNumber = 29; // Transaction type 29
446
+ return marker + txNumber.toString(36) + payload.join(',');
447
+ },
448
+
449
+ // Transaction type 30: Encode Issue Invoice Transaction
450
+ encodeIssueInvoice: (params) => {
451
+ const payload = [
452
+ params.propertyIdToReceivePayment.toString(36),
453
+ params.amount.toString(36),
454
+ params.dueDateBlock.toString(36),
455
+ params.optionalPropertyIdCollateral ? params.optionalPropertyIdCollateral.toString(36) : '0',
456
+ params.receivesPayToToken ? '1' : '0',
457
+ ];
458
+ const txNumber = 30; // Transaction type 30
459
+ return marker + txNumber.toString(36) + payload.join(',');
460
+ },
461
+
462
+ // Transaction type 31: Encode Batch Move Zk Rollup Transaction
463
+ encodeBatchMoveZkRollup: (params) => {
464
+ // Assuming params.payments is an array of payment objects
465
+ const paymentsPayload = params.payments.map(payment => {
466
+ const paymentDetails = [
467
+ payment.fromAddress,
468
+ payment.propertyIds.map(id => id.toString(36)).join(':'),
469
+ payment.amounts.map(amt => amt.toString(36)).join(':'),
470
+ payment.toAddress,
471
+ payment.sentPropertyIds.map(id => id.toString(36)).join(':'),
472
+ payment.sentAmounts.map(amt => amt.toString(36)).join(':'),
473
+ ];
474
+ return paymentDetails.join(',');
475
+ }).join(';');
476
+ const payload = [
477
+ params.proof,
478
+ paymentsPayload,
479
+ JSON.stringify(params.miscLogic),
480
+ JSON.stringify(params.miscData),
481
+ ];
482
+ const txNumber = 31; // Transaction type 31
483
+ return marker + txNumber.toString(36) + payload.join('|');
484
+ },
485
+
486
+ // Transaction type 32: Encode Publish New Transaction Type
487
+ encodePublishNewTx: (params) => {
488
+ const txNumber = 32; // Transaction type 32
489
+ return marker + txNumber.toString(36) + params.ordinalRevealJSON; // Assuming this is a JSON string
490
+ },
491
+
492
+ // Transaction type 33: Encode Create Derivative of LRC20 or RGB
493
+ encodeColoredCoin: (params) => {
494
+ const payload = [
495
+ params.lrc20TokenSeriesId1.toString(36),
496
+ params.lrc20TokenSeriesId2.toString(36),
497
+ params.rgb ? '1' : '0',
498
+ ];
499
+ const txNumber = 33; // Transaction type 33
500
+ return marker + txNumber.toString(36) + payload.join(',');
501
+ },
502
+
503
+ // Transaction type 34: Encode Register OP_CTV Covenant
504
+ encodeRegisterOPCTVCovenant: (params) => {
505
+ const payload = [
506
+ params.redeem,
507
+ params.txid,
508
+ params.associatedPropertyId1 ? params.associatedPropertyId1.toString(36) : '0',
509
+ params.associatedPropertyId2 ? params.associatedPropertyId2.toString(36) : '0',
510
+ params.covenantType.toString(36),
511
+ ];
512
+ const txNumber = 34; // Transaction type 34
513
+ return marker + txNumber.toString(36) + payload.join(',');
514
+ },
515
+
516
+ // Transaction type 35: Encode Cross TL Chain Bridging Transaction
517
+ encodeCrossLayerBridge: (params) => {
518
+ const payload = [
519
+ params.propertyId.toString(36),
520
+ params.amount.toString(36),
521
+ params.destinationAddr
522
+ ];
523
+ const txNumber = 35; // Transaction type 35
524
+ return marker + txNumber.toString(36) + payload.join(',');
525
+ }
526
+
527
+ }
528
+
529
+ module.exports = Encode;
package/utility.js ADDED
@@ -0,0 +1,28 @@
1
+ const litecore = require('litecore-lib');
2
+
3
+ module.exports = {
4
+ buildTx(commitUTXO, toAddress, payload) {
5
+ const tx = new litecore.Transaction()
6
+ .from(commitUTXO)
7
+ .addOutput(new litecore.Transaction.Output({
8
+ script: litecore.Script.buildDataOut(payload),
9
+ satoshis: 0
10
+ }))
11
+ .to(toAddress, 1000); // Example value in satoshis
12
+ return tx;
13
+ },
14
+
15
+ signTx(tx, keypair) {
16
+ const privateKey = litecore.PrivateKey.fromWIF(keypair.wif);
17
+ return tx.sign(privateKey);
18
+ },
19
+
20
+ signPsbt(keypair, psbtHex) {
21
+ // Psbt signing logic
22
+ return psbtHex; // Placeholder
23
+ },
24
+
25
+ sendTx(signedTx) {
26
+ // Send tx logic using wallet listener
27
+ }
28
+ };