@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,610 @@
1
+ const BigNumber = require('bignumber.js');
2
+ const base94 = require('./base94.js');
3
+ const base256 = require('./base256.js');
4
+ const marker = 'tl';
5
+
6
+ const Encode = {
7
+
8
+ encodeAmount: (amt) => {
9
+ const scaledAmt = new BigNumber(amt).times(1e8);
10
+ const isWholeNumber = amt % 1 === 0;
11
+
12
+ return isWholeNumber
13
+ ? amt?.toString(36) ?? '0' // Base36 encoding for whole numbers
14
+ : scaledAmt.integerValue()?.toString(36) ?? '0' + '~'; // Base36 with `~` flag for decimals
15
+ },
16
+ // Encode Simple Token Issue Transaction
17
+ encodeActivateTradeLayer(params) {
18
+ const txTypeEncoded = Array.isArray(params.txTypeToActivate)
19
+ ? params.txTypeToActivate.join(';')
20
+ : params.txTypeToActivate;
21
+ const base36hex = BigInt('0x' + params.codeHash)?.toString(36) ?? '0'; // Hex to Base 36
22
+ //const base94Encoded = base94.hexToBase94(params.codeHash);
23
+ const type = 0;
24
+ return marker + type + txTypeEncoded + ',' + base36hex//base94Encoded;
25
+ },
26
+
27
+
28
+ // Encode Token Issue Transaction
29
+ encodeTokenIssue(params) {
30
+ const payload = [
31
+ params.initialAmount?.toString(36) ?? '0',
32
+ params.ticker,
33
+ params.whitelists.map(val => val?.toString(36) ?? '0').join(','),
34
+ params.managed ? '1' : '0', //turn into enum
35
+ params.backupAddress,
36
+ params.nft ? '1' : '0',
37
+ ];
38
+ const type = 1;
39
+ const typeStr = type?.toString(36) ?? '0';
40
+ return marker + typeStr + payload.join(',');
41
+ },
42
+
43
+ // Encode Send Transaction
44
+ encodeSend(params){
45
+ const { sendAll, address, propertyId, amount } = params;
46
+
47
+ if (sendAll) return `1;${address}`;
48
+
49
+ // Function to encode amounts using bimodal encoding
50
+ const encodeAmount = (amt) => {
51
+ const scaledAmt = new BigNumber(amt).times(1e8);
52
+ const isWholeNumber = Boolean(amt%1==0);
53
+
54
+ return isWholeNumber
55
+ ? amt?.toString(36) ?? '0' // Normal base36 encoding
56
+ : scaledAmt.integerValue()?.toString(36) ?? '0' + '~'; // Base36 with `~` flag
57
+ };
58
+
59
+ if (Array.isArray(propertyId) && Array.isArray(amount)) {
60
+ const payload = [
61
+ '0',
62
+ '',
63
+ propertyId.map(id => id?.toString(36) ?? '0').join(','),
64
+ amount.map(encodeAmount).join(',')
65
+ ];
66
+ return payload.join(';');
67
+ } else {
68
+ const amountValue = Array.isArray(amount) ? amount[0] : amount;
69
+ const payload = [
70
+ '0',
71
+ address,
72
+ propertyId?.toString(36) ?? '0',
73
+ encodeAmount(amountValue)
74
+ ];
75
+ const txNumber = 2;
76
+ const txNumber36 = txNumber?.toString(36) ?? '0';
77
+ return `tl${txNumber36}${payload.join(';')}`;
78
+ }
79
+ },
80
+
81
+ encodePropertyId(propertyId) {
82
+ if (typeof propertyId === 'string' && propertyId.startsWith('s-')) {
83
+ const [_, collateralId, contractId] = propertyId.split('-');
84
+ const encodedCollateralId = parseInt(collateralId)?.toString(36) ?? '0';
85
+ const encodedContractId = parseInt(contractId)?.toString(36) ?? '0';
86
+ return `s-${encodedCollateralId}-${encodedContractId}`;
87
+ } else {
88
+ return propertyId?.toString(36) ?? '0';
89
+ }
90
+ },
91
+
92
+ // Encode Trade Token for UTXO Transaction
93
+ encodeTradeTokenForUTXO: (params) => {
94
+ const amount = new BigNumber(params.amount).times(1e8).toNumber();
95
+ const sats = new BigNumber(params.satsExpected).times(1e8).toNumber();
96
+ const isColoredOutput = params.isColoredOutput ? '1' : '0';
97
+ const payload = [
98
+ params.propertyId?.toString(36) ?? '0',
99
+ amount?.toString(36) ?? '0',
100
+ params.columnA,
101
+ sats?.toString(36) ?? '0',
102
+ params.tokenOutput,
103
+ params.payToAddress,
104
+ isColoredOutput,
105
+ ];
106
+ const type = 3;
107
+ const typeStr = type?.toString(36) ?? '0';
108
+ return marker + typeStr + payload.join(',');
109
+ },
110
+
111
+ // Encode Commit Token Transaction
112
+ encodeCommit: (params) => {
113
+ const amount = new BigNumber(params.amount).times(1e8)?.toString(36) ?? '0';
114
+ const channelAddress = params.channelAddress.length > 42 ? `ref:${params.ref || 0}` : params.channelAddress;
115
+ const payEnabled = params.payEnabled ? '1' : '0';
116
+ let clearLists = '';
117
+ if (params.clearLists) {
118
+ if (Array.isArray(params.clearLists)) {
119
+ clearLists = `[${params.clearLists.map(num => num?.toString(36) ?? '0').join(',')}]`;
120
+ } else {
121
+ clearLists = params.clearLists?.toString(36) ?? '0';
122
+ }
123
+ }
124
+
125
+ const isColoredOutput = params.isColoredOutput ? '1' : '0';
126
+ const payload = [
127
+ params.propertyId?.toString(36) ?? '0',
128
+ amount,
129
+ channelAddress,
130
+ payEnabled,
131
+ clearLists,
132
+ isColoredOutput,
133
+ ];
134
+ const type = 4;
135
+ const typeStr = type?.toString(36) ?? '0';
136
+ return marker + typeStr + payload.join(',');
137
+ },
138
+
139
+ // Encode On-chain Token for Token Transaction
140
+ encodeOnChainTokenForToken: (params) => {
141
+ const amountOffered = new BigNumber(params.amountOffered).times(1e8).toNumber();
142
+ const amountExpected = new BigNumber(params.amountExpected).times(1e8).toNumber();
143
+ const payload = [
144
+ params.propertyIdOffered?.toString(36) ?? '0',
145
+ params.propertyIdDesired?.toString(36) ?? '0',
146
+ amountOffered?.toString(36) ?? '0',
147
+ amountExpected?.toString(36) ?? '0',
148
+ params.stop ? '1' : '0',
149
+ params.post ? '1' : '0',
150
+ ];
151
+ const type = 5;
152
+ const typeStr = type?.toString(36) ?? '0';
153
+ return marker + typeStr + payload.join(',');
154
+ },
155
+
156
+ // Encode function to handle cancel orders
157
+ encodeCancelOrder: (params) => {
158
+ let encodedTx = params.isContract;
159
+
160
+ if (params.isContract) {
161
+ encodedTx += `,${params.contractId?.toString(36) ?? '0'},${params.cancelAll ? 1 : 0}`;
162
+ } else {
163
+ encodedTx += `,${params.offeredPropertyId?.toString(36) ?? '0'},${params.desiredPropertyId?.toString(36) ?? '0'},${params.cancelAll ? 1 : 0}`;
164
+ }
165
+
166
+ let priceEncoded;
167
+ if (params.cancelParams && params.cancelParams.price !== undefined) {
168
+ if (params.isContract == 0 || params.isContract == false) {
169
+ priceEncoded = new BigNumber(params.cancelParams.price).times(8)?.toString(36) ?? '0';
170
+ } else if (params.isContract == 1 || params.isContract == true) {
171
+ priceEncoded = params.cancelParams.price?.toString(36) ?? '0';
172
+ }
173
+
174
+ encodedTx += `,${priceEncoded}`;
175
+ encodedTx += `,${params.cancelParams.side?.toString(36) ?? '0'}`;
176
+ }
177
+
178
+ if (params.cancelParams && params.cancelParams.txid) {
179
+ encodedTx += `,${params.cancelParams.txid}`;
180
+ }
181
+
182
+ const type = 6;
183
+ const typeStr = type?.toString(36) ?? '0';
184
+ return marker + typeStr + encodedTx;
185
+ },
186
+
187
+
188
+ // Encode Create Whitelist Transaction
189
+ encodeCreateWhitelist: (params) => {
190
+ const payload = [
191
+ params.backupAddress,
192
+ params.name,
193
+ params.url,
194
+ params.description,
195
+ ];
196
+ const type = 7;
197
+ const typeStr = type?.toString(36) ?? '0';
198
+ return marker + typeStr + payload.join(',');
199
+ },
200
+
201
+ encodeUpdateAdmin: (params) => {
202
+ const payload = [
203
+ params.newAddress,
204
+ params.whitelist ? '1' : '0',
205
+ params.oracle ? '1' : '0',
206
+ params.token ? '1' : '0',
207
+ params.id?.toString(36) ?? '0',
208
+ params.updateBackup ? '1' : '0'
209
+ ];
210
+ const type = 8;
211
+ const typeStr = type?.toString(36) ?? '0';
212
+ return marker + typeStr + payload.join(',');
213
+ },
214
+
215
+ // Encode Issue Or Revoke Attestation Transaction
216
+ encodeIssueOrRevokeAttestation: (params) => {
217
+ const payload = [
218
+ params.revoke,
219
+ params.id?.toString(36) ?? '0',
220
+ params.targetAddress,
221
+ params.metaData
222
+ ];
223
+ const type = 9;
224
+ const typeStr = type?.toString(36) ?? '0';
225
+ return marker + typeStr + payload.join(',');
226
+ },
227
+
228
+ // Encode AMM Pool Transaction
229
+ encodeAMMPool: (params) => {
230
+ const payload = [
231
+ params.isRedeem,
232
+ params.isContract,
233
+ params.id,
234
+ params.amount,
235
+ params.id2,
236
+ params.amount2,
237
+ ];
238
+ const type = 10;
239
+ const typeStr = type?.toString(36) ?? '0';
240
+ return marker + typeStr + payload.join(',');
241
+ },
242
+
243
+ // Encode Create Oracle Transaction
244
+ encodeCreateOracle: (params) => {
245
+ const payload = [
246
+ params.ticker,
247
+ params.url,
248
+ params.backupAddress,
249
+ params.whitelists.map(whitelist => whitelist?.toString(36) ?? '0').join(','),
250
+ params.lag?.toString(36) ?? '0',
251
+ params.enum
252
+ ];
253
+ const type = 13;
254
+ const typeStr = type?.toString(36) ?? '0';
255
+ return marker + typeStr + payload.join(',');
256
+ },
257
+
258
+ // Encode Grant Managed Token Transaction
259
+ encodeGrantManagedToken: (params) => {
260
+ const amountGranted = new BigNumber(params.amountGranted).times(1e8).toNumber();
261
+ const payload = [
262
+ params.propertyid?.toString(36) ?? '0',
263
+ amountGranted?.toString(36) ?? '0',
264
+ params.addressToGrantTo,
265
+ params?.dlcHash
266
+ ];
267
+ const type = 11;
268
+ const typeStr = type?.toString(36) ?? '0';
269
+ return marker + typeStr + payload.join(',');
270
+ },
271
+
272
+ // Encode Redeem Managed Token Transaction
273
+ encodeRedeemManagedToken: (params) => {
274
+ const amountGranted = new BigNumber(params.amountGranted).times(1e8).toNumber();
275
+ const payload = [
276
+ params.propertyid?.toString(36) ?? '0',
277
+ amountGranted?.toString(36) ?? '0',
278
+ params.addressToGrantTo,
279
+ ];
280
+ const type = 12;
281
+ const typeStr = type?.toString(36) ?? '0';
282
+ return marker + typeStr + payload.join(',');
283
+ },
284
+
285
+ // Encode Publish Oracle Data Transaction
286
+ encodePublishOracleData: (params) => {
287
+ const formattedPrice = new BigNumber(params.price).times(1e4).toNumber()
288
+ const payload = [
289
+ params.oracleid?.toString(36) ?? '0',
290
+ formattedPrice?.toString(36) ?? '0',
291
+ ];
292
+ if (params.high !== undefined) {
293
+ payload.push(params.high?.toString(36) ?? '0');
294
+ }
295
+ if (params.low !== undefined) {
296
+ payload.push(params.low?.toString(36) ?? '0');
297
+ }
298
+ if (params.close !== undefined) {
299
+ payload.push(params.close?.toString(36) ?? '0');
300
+ }
301
+ const type = 14;
302
+ const typeStr = type?.toString(36) ?? '0';
303
+ return marker + typeStr + payload.join(',');
304
+ },
305
+
306
+ // Encode Close Oracle Transaction
307
+ encodeCloseOracle(id) {
308
+ const type = 15
309
+ const typeStr =type?.toString(36) ?? '0'
310
+ return marker+typeStr?.toString(36) ?? '0'+id?.toString(36) ?? '0'; // No parameters
311
+ },
312
+
313
+ encodeCreateFutureContractSeries: (params) => {
314
+ const onChainData = params.onChainData && params.onChainData.length > 0 ?
315
+ params.onChainData.map(data => `${data[0][0]?.toString(36) ?? '0'}:${data[0][1]?.toString(36) ?? '0'}`).join(';')
316
+ : '';
317
+
318
+ const payload = [
319
+ params.native ? '1' : '0',
320
+ params.underlyingOracleId?.toString(36) ?? '0',
321
+ onChainData, // Use '' if empty or falsy; adjust as needed
322
+ params.notionalPropertyId?.toString(36) ?? '0',
323
+ params.notionalValue?.toString(36) ?? '0',
324
+ params.collateralPropertyId?.toString(36) ?? '0',
325
+ params.leverage,
326
+ params.expiryPeriod !== undefined ? params.expiryPeriod?.toString(36) ?? '0' : '0',
327
+ params.series?.toString(36) ?? '0',
328
+ params.inverse ? '1' : '0',
329
+ params.fee !== undefined ? params.fee ? '1' : '0' : '0'
330
+ ];
331
+ const type = 16;
332
+ const typeStr = type?.toString(36) ?? '0';
333
+ return marker + typeStr + payload.join(',');
334
+ },
335
+
336
+ // Encode Exercise Derivative Transaction
337
+ encodeExerciseDerivative: (params) => {
338
+ const payload = [
339
+ params.derivativeContractId?.toString(36) ?? '0',
340
+ params.amount?.toString(36) ?? '0',
341
+ ];
342
+ const type = 17;
343
+ const typeStr = type?.toString(36) ?? '0';
344
+ return marker + typeStr + payload.join(',');
345
+ },
346
+
347
+ // Encode Trade Contract On-chain Transaction
348
+ // **✅ Encode Trade Contract Onchain**
349
+ encodeTradeContractOnchain: (params) => {
350
+ console.log('encoding payload for trade '+JSON.stringify(params))
351
+ const payload = [
352
+ params.contractId?.toString(36) ?? '0',
353
+ new BigNumber(params.price).times(1e8).integerValue().toString(36),
354
+ params.amount?.toString(36) ?? '0',
355
+ params.sell ? '1' : '0',
356
+ params.insurance ? '1' : '0',
357
+ params.reduce ? '1' : '0',
358
+ params.post ? '1' : '0',
359
+ params.stop ? '1' : '0'
360
+ ];
361
+ const type = 18;
362
+ const typeStr = type?.toString(36) ?? '0';
363
+ return marker + typeStr + payload.join(',');
364
+ },
365
+
366
+ // Encode Trade Contract in Channel Transaction
367
+ encodeTradeContractChannel: (params) => {
368
+ const payload = [
369
+ params.contractId?.toString(36) ?? '0',
370
+ new BigNumber(params.price).times(1e8).integerValue().toString(36),
371
+ params.amount?.toString(36) ?? '0',
372
+ params.columnAIsSeller ? '1' : '0',
373
+ params.expiryBlock?.toString(36) ?? '0',
374
+ params.insurance ? '1' : '0',
375
+ params.columnAIsMaker ? '1' : '0'
376
+ ];
377
+ const type = 19;
378
+ const typeStr = type?.toString(36) ?? '0';
379
+ return marker + typeStr + payload.join(',');
380
+ },
381
+
382
+ // Encode Trade Tokens in Channel Transaction
383
+ encodeTradeTokensChannel: (params) => {
384
+ const amountOffered = new BigNumber(params.amountOffered1).times(1e8).toNumber();
385
+ const amountDesired = new BigNumber(params.amountDesired2).times(1e8).toNumber();
386
+ const payload = [
387
+ params.propertyId1?.toString(36) ?? '0',
388
+ params.propertyId2?.toString(36) ?? '0',
389
+ amountOffered?.toString(36) ?? '0',
390
+ amountDesired?.toString(36) ?? '0',
391
+ params.columnAIsOfferer ? '1' : '0',
392
+ params.expiryBlock?.toString(36) ?? '0',
393
+ params.columnAIsMaker ? '1' : '0',
394
+ params.Id1ColoredOutput ? '1' : '0',
395
+ params.Id2ColoredOutput ? '1' : '0'
396
+ ];
397
+ const type = 20;
398
+ const typeStr = type?.toString(36) ?? '0';
399
+ return marker + typeStr + payload.join(',');
400
+ },
401
+
402
+ // Encode Withdrawal Transaction
403
+ encodeWithdrawal: (params) => {
404
+ const amounts = new BigNumber(params.amountOffered).times(1e8).toNumber().toString();
405
+ const withdrawAll = params.withdrawAll;
406
+ const propertyIds = params.propertyId?.toString(36) ?? '0';
407
+ const column = params.column; // 0 is A, 1 is B
408
+ const channelAddress = params.channelAddress.length > 42 ? `ref:${params.ref || 0}` : params.channelAddress;
409
+ const payload = [withdrawAll, propertyIds, amounts, column, channelAddress].join(',');
410
+ const type = 21;
411
+ const typeStr = type?.toString(36) ?? '0';
412
+ return marker + typeStr + payload;
413
+ },
414
+
415
+ // Encode Transfer Transaction
416
+ encodeTransfer: (params) => {
417
+ const propertyId = params.propertyId?.toString(36) ?? '0';
418
+ const amounts = new BigNumber(params.amount).times(1e8)?.toString(36) ?? '0';
419
+ const isColumnA = params.isColumnA ? 1 : 0;
420
+ const pay = params.pay ? 1 : 0;
421
+ const payRef = params.payRef || '';
422
+ const destinationAddr = params.destinationAddr.length > 42 ? `ref:${params.ref || 0}` : params.destinationAddr;
423
+ const payload = [propertyId, amounts, isColumnA, destinationAddr, pay, payRef].join(',');
424
+ const type = 22;
425
+ const typeStr = type?.toString(36) ?? '0';
426
+ return marker + typeStr + payload;
427
+ },
428
+
429
+ // Encode Settle Channel PNL Transaction
430
+ encodeSettleChannelPNL: (params) => {
431
+ const base256Encoded1 = Base256Converter.hexToBase256(params.tradeid);
432
+ const base256Encoded2 = Base256Converter.hexToBase256(params.settleid);
433
+ const base94Encoded = Base94Converter.decimalToBase94(params.markPrice);
434
+ const payload = [
435
+ base256Encoded1,
436
+ base256Encoded2,
437
+ base94Encoded,
438
+ params.close ? '1' : '0'
439
+ ];
440
+ const type = 23;
441
+ const typeStr = type?.toString(36) ?? '0';
442
+ return marker + typeStr + payload.join(',');
443
+ },
444
+
445
+ // Encode Mint Synthetic Transaction
446
+ encodeMintSynthetic: (params) => {
447
+ const payload = [
448
+ params.propertyIdUsed?.toString(36) ?? '0',
449
+ params.contractIdUsed?.toString(36) ?? '0',
450
+ params.amount?.toString(36) ?? '0',
451
+ ];
452
+ const type = 24;
453
+ const typeStr = type?.toString(36) ?? '0';
454
+ return marker + typeStr + payload.join(',');
455
+ },
456
+
457
+ // Encode Redeem Synthetic Transaction
458
+ encodeRedeemSynthetic: (params) =>{
459
+ const payload = [
460
+ params.propertyIdUsed?.toString(36) ?? '0',
461
+ params.contractIdUsed?.toString(36) ?? '0',
462
+ params.amount?.toString(36) ?? '0',
463
+ ];
464
+ const type = 25;
465
+ const typeStr = type?.toString(36) ?? '0';
466
+ return marker + typeStr + payload.join(',');
467
+ },
468
+
469
+ // Encode Pay to Tokens Transaction
470
+ encodePayToTokens: (params) =>{
471
+ const payload = [
472
+ params.propertyIdTarget?.toString(36) ?? '0',
473
+ params.propertyIdUsed?.toString(36) ?? '0',
474
+ params.amount?.toString(36) ?? '0',
475
+ ];
476
+ const type = 26;
477
+ const typeStr = type?.toString(36) ?? '0';
478
+ return marker + typeStr + payload.join(',');
479
+ },
480
+
481
+ // Encode Create Option Chain Transaction
482
+ encodeOptionTrade: (params) => {
483
+ // params: { ticker, price, amount, seller, expiryBlock, isMaker, comboTicker?, comboPrice?, comboAmount? }
484
+ const payload = [
485
+ params.contractId,
486
+ Encode.encodeAmount(params.price)?.toString(36) ?? '0',
487
+ params.amount?.toString(36) ?? '0',
488
+ params.columnAIsSeller,
489
+ params.expiryBlock?.toString(36) ?? '0',
490
+ params.columnAIsMaker ? '1' : '0'
491
+ ];
492
+
493
+ if (params.comboTicker && params.comboAmount) {
494
+ payload.push(params.comboTicker);
495
+ payload.push(Encode.encodeAmount(params.comboPrice)?.toString(36) ?? '0');
496
+ payload.push(params.comboAmount?.toString(36) ?? '0');
497
+ }
498
+
499
+ const type = 27;
500
+ const typeStr = type?.toString(36) ?? '0';
501
+ return marker + typeStr + payload.join(',');
502
+ },
503
+
504
+ // Encode Trade Bai Urbun Transaction
505
+ encodeTradeBaiUrbun: (params) => {
506
+ const payload = [
507
+ params.propertyIdDownPayment?.toString(36) ?? '0',
508
+ params.propertyIdToBeSold?.toString(36) ?? '0',
509
+ params.price?.toString(36) ?? '0',
510
+ params.amount?.toString(36) ?? '0',
511
+ params.expiryBlock?.toString(36) ?? '0',
512
+ params.tradeExpiryBlock?.toString(36) ?? '0',
513
+ ];
514
+ const type = 28;
515
+ const typeStr = type?.toString(36) ?? '0';
516
+ return marker + typeStr + payload.join(',');
517
+ },
518
+
519
+ // Encode Trade Murabaha Transaction
520
+ encodeTradeMurabaha: (params) => {
521
+ const payload = [
522
+ params.propertyIdDownPayment?.toString(36) ?? '0',
523
+ params.downPaymentPercent?.toString(36) ?? '0',
524
+ params.propertyIdToBeSold?.toString(36) ?? '0',
525
+ params.price?.toString(36) ?? '0',
526
+ params.amount?.toString(36) ?? '0',
527
+ params.expiryBlock?.toString(36) ?? '0',
528
+ params.installmentInterval?.toString(36) ?? '0',
529
+ params.tradeExpiryBlock?.toString(36) ?? '0',
530
+ ];
531
+ const type = 29;
532
+ const typeStr = type?.toString(36) ?? '0';
533
+ return marker + typeStr + payload.join(',');
534
+ },
535
+
536
+ // Encode Issue Invoice Transaction
537
+ encodeStakeFraudProof: (params) => {
538
+ const payload = [
539
+ params.propertyIdToReceivePayment?.toString(36) ?? '0',
540
+ params.amount?.toString(36) ?? '0',
541
+ params.dueDateBlock?.toString(36) ?? '0',
542
+ params.optionalPropertyIdCollateral ? params.optionalPropertyIdCollateral?.toString(36) ?? '0' : '0',
543
+ params.receivesPayToToken ? '1' : '0',
544
+ ];
545
+ const type = 30;
546
+ const typeStr = type?.toString(36) ?? '0';
547
+ return marker + typeStr + payload.join(',');
548
+ },
549
+
550
+ encodeBatchSettlement: (params)=> {},
551
+ // Encode Batch Move Zk Rollup Transaction
552
+ encodeBatchMoveZkRollup: (params) => {
553
+ // Assuming params.payments is an array of payment objects
554
+ const paymentsPayload = params.payments.map(payment => {
555
+ const paymentDetails = [
556
+ payment.fromAddress,
557
+ payment.propertyIds.map(id => id?.toString(36) ?? '0').join(':'),
558
+ payment.amounts.map(amt => amt?.toString(36) ?? '0').join(':'),
559
+ payment.toAddress,
560
+ payment.sentPropertyIds.map(id => id?.toString(36) ?? '0').join(':'),
561
+ payment.sentAmounts.map(amt => amt?.toString(36) ?? '0').join(':'),
562
+ ];
563
+ return paymentDetails.join(',');
564
+ }).join(';');
565
+ const payload = [
566
+ params.proof,
567
+ paymentsPayload,
568
+ JSON.stringify(params.miscLogic),
569
+ JSON.stringify(params.miscData),
570
+ ];
571
+ return payload.join('|');
572
+ },
573
+
574
+
575
+ // Encode Create Derivative of LRC20 or RGB
576
+ encodeColoredCoin: (params) => {
577
+ const payload = [
578
+ params.encodeDecodeRecode, //0, decode, 1 encode, 2 repairs a channel theft/unauthorized UTXO movement
579
+ params.propertyId?.toString(36) ?? '0', //the TL account token being encoded
580
+ params.SatsRatio?.toString(36) ?? '0', //how many sats of the account token are rounded to be encoded in 1 UTXO sat e.g. 100, 1000, 10000000
581
+ params.homeAddress //optional param to cite an addr such as a bridge or AMM depositee where this can recode if interrupted
582
+ ];
583
+ return payload.join(',');
584
+ },
585
+
586
+
587
+ // Encode cross TL chain bridging tx
588
+ encodeAbstractionBridge: (params) => {
589
+ const payload = [
590
+ params.propertyId?.toString(36) ?? '0',
591
+ params.amount?.toString(36) ?? '0',
592
+ params.destinationAddr
593
+ ];
594
+ return payload.join(',');
595
+ },
596
+
597
+ encodeBindSmartContract:(params)=> {
598
+ const payload = [
599
+ params.contractHash,
600
+ params.type,
601
+ params.hostChain
602
+ ];
603
+ //these are all going to be corroborated by an additional ordinal reveal,
604
+ //containing the code of the contract, the OP_Return should be included
605
+ return payload.join(',');
606
+ }
607
+
608
+ }
609
+
610
+ module.exports = Encode;