phantasma-sdk-ts 0.1.71

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 (478) hide show
  1. package/.eslintignore +13 -0
  2. package/.eslintrc.cjs +15 -0
  3. package/.github/workflows/npm-publish.yml +47 -0
  4. package/.prettierignore +13 -0
  5. package/.prettierrc +8 -0
  6. package/LICENSE +201 -0
  7. package/README.md +842 -0
  8. package/babel.config.js +6 -0
  9. package/core/index.d.ts +10 -0
  10. package/core/index.d.ts.map +1 -0
  11. package/core/index.js +25 -0
  12. package/core/interfaces/IContract.d.ts +27 -0
  13. package/core/interfaces/IContract.d.ts.map +1 -0
  14. package/core/interfaces/IContract.js +25 -0
  15. package/core/interfaces/IKeyPair.d.ts +7 -0
  16. package/core/interfaces/IKeyPair.d.ts.map +1 -0
  17. package/core/interfaces/IKeyPair.js +2 -0
  18. package/core/interfaces/ISerializable.d.ts +6 -0
  19. package/core/interfaces/ISerializable.d.ts.map +1 -0
  20. package/core/interfaces/ISerializable.js +9 -0
  21. package/core/interfaces/IStack.d.ts +7 -0
  22. package/core/interfaces/IStack.d.ts.map +1 -0
  23. package/core/interfaces/IStack.js +2 -0
  24. package/core/interfaces/IToken.d.ts +29 -0
  25. package/core/interfaces/IToken.d.ts.map +1 -0
  26. package/core/interfaces/IToken.js +22 -0
  27. package/core/interfaces/Signature.d.ts +21 -0
  28. package/core/interfaces/Signature.d.ts.map +1 -0
  29. package/core/interfaces/Signature.js +31 -0
  30. package/core/interfaces/index.d.ts +7 -0
  31. package/core/interfaces/index.d.ts.map +1 -0
  32. package/core/interfaces/index.js +22 -0
  33. package/core/ledger/Address-Transcode.d.ts +20 -0
  34. package/core/ledger/Address-Transcode.d.ts.map +1 -0
  35. package/core/ledger/Address-Transcode.js +70 -0
  36. package/core/ledger/Ledger-Commands.d.ts +76 -0
  37. package/core/ledger/Ledger-Commands.d.ts.map +1 -0
  38. package/core/ledger/Ledger-Commands.js +530 -0
  39. package/core/ledger/Ledger-Utils.d.ts +74 -0
  40. package/core/ledger/Ledger-Utils.d.ts.map +1 -0
  41. package/core/ledger/Ledger-Utils.js +609 -0
  42. package/core/ledger/LedgerConfig.d.ts +17 -0
  43. package/core/ledger/LedgerConfig.d.ts.map +1 -0
  44. package/core/ledger/LedgerConfig.js +2 -0
  45. package/core/ledger/Mnemonic.d.ts +35 -0
  46. package/core/ledger/Mnemonic.d.ts.map +1 -0
  47. package/core/ledger/Mnemonic.js +65 -0
  48. package/core/ledger/Transaction-Sign.d.ts +10 -0
  49. package/core/ledger/Transaction-Sign.d.ts.map +1 -0
  50. package/core/ledger/Transaction-Sign.js +149 -0
  51. package/core/ledger/Transaction-Transcode.d.ts +24 -0
  52. package/core/ledger/Transaction-Transcode.d.ts.map +1 -0
  53. package/core/ledger/Transaction-Transcode.js +47 -0
  54. package/core/ledger/index.d.ts +9 -0
  55. package/core/ledger/index.d.ts.map +1 -0
  56. package/core/ledger/index.js +24 -0
  57. package/core/ledger/interfaces/ApplicationNameResponse.d.ts +6 -0
  58. package/core/ledger/interfaces/ApplicationNameResponse.d.ts.map +1 -0
  59. package/core/ledger/interfaces/ApplicationNameResponse.js +2 -0
  60. package/core/ledger/interfaces/Device.d.ts +7 -0
  61. package/core/ledger/interfaces/Device.d.ts.map +1 -0
  62. package/core/ledger/interfaces/Device.js +2 -0
  63. package/core/ledger/interfaces/DeviceResponse.d.ts +7 -0
  64. package/core/ledger/interfaces/DeviceResponse.d.ts.map +1 -0
  65. package/core/ledger/interfaces/DeviceResponse.js +2 -0
  66. package/core/ledger/interfaces/Ledger.d.ts +2 -0
  67. package/core/ledger/interfaces/Ledger.d.ts.map +1 -0
  68. package/core/ledger/interfaces/Ledger.js +2 -0
  69. package/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.d.ts +12 -0
  70. package/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.d.ts.map +1 -0
  71. package/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.js +2 -0
  72. package/core/ledger/interfaces/LedgerConfig.d.ts +17 -0
  73. package/core/ledger/interfaces/LedgerConfig.d.ts.map +1 -0
  74. package/core/ledger/interfaces/LedgerConfig.js +2 -0
  75. package/core/ledger/interfaces/LedgerDeviceInfoResponse.d.ts +7 -0
  76. package/core/ledger/interfaces/LedgerDeviceInfoResponse.d.ts.map +1 -0
  77. package/core/ledger/interfaces/LedgerDeviceInfoResponse.js +2 -0
  78. package/core/ledger/interfaces/LedgerSendTransactionResponse.d.ts +5 -0
  79. package/core/ledger/interfaces/LedgerSendTransactionResponse.d.ts.map +1 -0
  80. package/core/ledger/interfaces/LedgerSendTransactionResponse.js +2 -0
  81. package/core/ledger/interfaces/LedgerSigner.d.ts +6 -0
  82. package/core/ledger/interfaces/LedgerSigner.d.ts.map +1 -0
  83. package/core/ledger/interfaces/LedgerSigner.js +2 -0
  84. package/core/ledger/interfaces/LedgerSignerData.d.ts +8 -0
  85. package/core/ledger/interfaces/LedgerSignerData.d.ts.map +1 -0
  86. package/core/ledger/interfaces/LedgerSignerData.js +2 -0
  87. package/core/ledger/interfaces/PublicKeyResponse.d.ts +6 -0
  88. package/core/ledger/interfaces/PublicKeyResponse.d.ts.map +1 -0
  89. package/core/ledger/interfaces/PublicKeyResponse.js +2 -0
  90. package/core/ledger/interfaces/SignResponse.d.ts +6 -0
  91. package/core/ledger/interfaces/SignResponse.d.ts.map +1 -0
  92. package/core/ledger/interfaces/SignResponse.js +2 -0
  93. package/core/ledger/interfaces/VersionResponse.d.ts +6 -0
  94. package/core/ledger/interfaces/VersionResponse.d.ts.map +1 -0
  95. package/core/ledger/interfaces/VersionResponse.js +2 -0
  96. package/core/ledger/interfaces/index.d.ts +14 -0
  97. package/core/ledger/interfaces/index.d.ts.map +1 -0
  98. package/core/ledger/interfaces/index.js +29 -0
  99. package/core/ledger/ledger-comm.d.ts +85 -0
  100. package/core/ledger/ledger-comm.d.ts.map +1 -0
  101. package/core/ledger/ledger-comm.js +613 -0
  102. package/core/link/easyConnect.d.ts +23 -0
  103. package/core/link/easyConnect.d.ts.map +1 -0
  104. package/core/link/easyConnect.js +237 -0
  105. package/core/link/easyScript.d.ts +13 -0
  106. package/core/link/easyScript.d.ts.map +1 -0
  107. package/core/link/easyScript.js +52 -0
  108. package/core/link/index.d.ts +2 -0
  109. package/core/link/index.d.ts.map +1 -0
  110. package/core/link/index.js +17 -0
  111. package/core/link/interfaces/IAccount.d.ts +13 -0
  112. package/core/link/interfaces/IAccount.d.ts.map +1 -0
  113. package/core/link/interfaces/IAccount.js +2 -0
  114. package/core/link/interfaces/IFile.d.ts +7 -0
  115. package/core/link/interfaces/IFile.d.ts.map +1 -0
  116. package/core/link/interfaces/IFile.js +2 -0
  117. package/core/link/interfaces/ProofOfWork.d.ts +9 -0
  118. package/core/link/interfaces/ProofOfWork.d.ts.map +1 -0
  119. package/core/link/interfaces/ProofOfWork.js +12 -0
  120. package/core/link/interfaces/index.d.ts +4 -0
  121. package/core/link/interfaces/index.d.ts.map +1 -0
  122. package/core/link/interfaces/index.js +19 -0
  123. package/core/link/phantasmaLink.d.ts +41 -0
  124. package/core/link/phantasmaLink.d.ts.map +1 -0
  125. package/core/link/phantasmaLink.js +479 -0
  126. package/core/rpc/index.d.ts +3 -0
  127. package/core/rpc/index.d.ts.map +1 -0
  128. package/core/rpc/index.js +18 -0
  129. package/core/rpc/interfaces/ABIContract.d.ts +6 -0
  130. package/core/rpc/interfaces/ABIContract.d.ts.map +1 -0
  131. package/core/rpc/interfaces/ABIContract.js +2 -0
  132. package/core/rpc/interfaces/ABIEvent.d.ts +7 -0
  133. package/core/rpc/interfaces/ABIEvent.d.ts.map +1 -0
  134. package/core/rpc/interfaces/ABIEvent.js +2 -0
  135. package/core/rpc/interfaces/ABIMethod.d.ts +7 -0
  136. package/core/rpc/interfaces/ABIMethod.d.ts.map +1 -0
  137. package/core/rpc/interfaces/ABIMethod.js +2 -0
  138. package/core/rpc/interfaces/ABIParameter.d.ts +5 -0
  139. package/core/rpc/interfaces/ABIParameter.d.ts.map +1 -0
  140. package/core/rpc/interfaces/ABIParameter.js +2 -0
  141. package/core/rpc/interfaces/Account.d.ts +16 -0
  142. package/core/rpc/interfaces/Account.d.ts.map +1 -0
  143. package/core/rpc/interfaces/Account.js +2 -0
  144. package/core/rpc/interfaces/AccountTransactions.d.ts +6 -0
  145. package/core/rpc/interfaces/AccountTransactions.d.ts.map +1 -0
  146. package/core/rpc/interfaces/AccountTransactions.js +2 -0
  147. package/core/rpc/interfaces/Archive.d.ts +11 -0
  148. package/core/rpc/interfaces/Archive.d.ts.map +1 -0
  149. package/core/rpc/interfaces/Archive.js +2 -0
  150. package/core/rpc/interfaces/Auction.d.ts +13 -0
  151. package/core/rpc/interfaces/Auction.d.ts.map +1 -0
  152. package/core/rpc/interfaces/Auction.js +2 -0
  153. package/core/rpc/interfaces/Balance.d.ts +8 -0
  154. package/core/rpc/interfaces/Balance.d.ts.map +1 -0
  155. package/core/rpc/interfaces/Balance.js +2 -0
  156. package/core/rpc/interfaces/Block.d.ts +17 -0
  157. package/core/rpc/interfaces/Block.d.ts.map +1 -0
  158. package/core/rpc/interfaces/Block.js +2 -0
  159. package/core/rpc/interfaces/Chain.d.ts +10 -0
  160. package/core/rpc/interfaces/Chain.d.ts.map +1 -0
  161. package/core/rpc/interfaces/Chain.js +2 -0
  162. package/core/rpc/interfaces/Channel.d.ts +13 -0
  163. package/core/rpc/interfaces/Channel.d.ts.map +1 -0
  164. package/core/rpc/interfaces/Channel.js +2 -0
  165. package/core/rpc/interfaces/Contract.d.ts +11 -0
  166. package/core/rpc/interfaces/Contract.d.ts.map +1 -0
  167. package/core/rpc/interfaces/Contract.js +2 -0
  168. package/core/rpc/interfaces/Dapp.d.ts +6 -0
  169. package/core/rpc/interfaces/Dapp.d.ts.map +1 -0
  170. package/core/rpc/interfaces/Dapp.js +2 -0
  171. package/core/rpc/interfaces/Event.d.ts +7 -0
  172. package/core/rpc/interfaces/Event.d.ts.map +1 -0
  173. package/core/rpc/interfaces/Event.js +2 -0
  174. package/core/rpc/interfaces/Governance.d.ts +5 -0
  175. package/core/rpc/interfaces/Governance.d.ts.map +1 -0
  176. package/core/rpc/interfaces/Governance.js +2 -0
  177. package/core/rpc/interfaces/Interop.d.ts +5 -0
  178. package/core/rpc/interfaces/Interop.d.ts.map +1 -0
  179. package/core/rpc/interfaces/Interop.js +2 -0
  180. package/core/rpc/interfaces/KeyValue.d.ts +5 -0
  181. package/core/rpc/interfaces/KeyValue.d.ts.map +1 -0
  182. package/core/rpc/interfaces/KeyValue.js +2 -0
  183. package/core/rpc/interfaces/Leaderboard.d.ts +6 -0
  184. package/core/rpc/interfaces/Leaderboard.d.ts.map +1 -0
  185. package/core/rpc/interfaces/Leaderboard.js +2 -0
  186. package/core/rpc/interfaces/LeaderboardRow.d.ts +5 -0
  187. package/core/rpc/interfaces/LeaderboardRow.d.ts.map +1 -0
  188. package/core/rpc/interfaces/LeaderboardRow.js +2 -0
  189. package/core/rpc/interfaces/NFT.d.ts +14 -0
  190. package/core/rpc/interfaces/NFT.d.ts.map +1 -0
  191. package/core/rpc/interfaces/NFT.js +2 -0
  192. package/core/rpc/interfaces/Nexus.d.ts +14 -0
  193. package/core/rpc/interfaces/Nexus.d.ts.map +1 -0
  194. package/core/rpc/interfaces/Nexus.js +2 -0
  195. package/core/rpc/interfaces/Oracle.d.ts +5 -0
  196. package/core/rpc/interfaces/Oracle.d.ts.map +1 -0
  197. package/core/rpc/interfaces/Oracle.js +2 -0
  198. package/core/rpc/interfaces/Organization.d.ts +6 -0
  199. package/core/rpc/interfaces/Organization.d.ts.map +1 -0
  200. package/core/rpc/interfaces/Organization.js +2 -0
  201. package/core/rpc/interfaces/Paginated.d.ts +8 -0
  202. package/core/rpc/interfaces/Paginated.d.ts.map +1 -0
  203. package/core/rpc/interfaces/Paginated.js +2 -0
  204. package/core/rpc/interfaces/Peer.d.ts +8 -0
  205. package/core/rpc/interfaces/Peer.d.ts.map +1 -0
  206. package/core/rpc/interfaces/Peer.js +2 -0
  207. package/core/rpc/interfaces/Platform.d.ts +9 -0
  208. package/core/rpc/interfaces/Platform.d.ts.map +1 -0
  209. package/core/rpc/interfaces/Platform.js +2 -0
  210. package/core/rpc/interfaces/Receipt.d.ts +10 -0
  211. package/core/rpc/interfaces/Receipt.d.ts.map +1 -0
  212. package/core/rpc/interfaces/Receipt.js +2 -0
  213. package/core/rpc/interfaces/Script.d.ts +9 -0
  214. package/core/rpc/interfaces/Script.d.ts.map +1 -0
  215. package/core/rpc/interfaces/Script.js +2 -0
  216. package/core/rpc/interfaces/SendRawTx.d.ts +5 -0
  217. package/core/rpc/interfaces/SendRawTx.d.ts.map +1 -0
  218. package/core/rpc/interfaces/SendRawTx.js +2 -0
  219. package/core/rpc/interfaces/SignatureResult.d.ts +5 -0
  220. package/core/rpc/interfaces/SignatureResult.d.ts.map +1 -0
  221. package/core/rpc/interfaces/SignatureResult.js +2 -0
  222. package/core/rpc/interfaces/Stake.d.ts +6 -0
  223. package/core/rpc/interfaces/Stake.d.ts.map +1 -0
  224. package/core/rpc/interfaces/Stake.js +2 -0
  225. package/core/rpc/interfaces/Storage.d.ts +8 -0
  226. package/core/rpc/interfaces/Storage.d.ts.map +1 -0
  227. package/core/rpc/interfaces/Storage.js +2 -0
  228. package/core/rpc/interfaces/Swap.d.ts +13 -0
  229. package/core/rpc/interfaces/Swap.d.ts.map +1 -0
  230. package/core/rpc/interfaces/Swap.js +2 -0
  231. package/core/rpc/interfaces/Token.d.ts +19 -0
  232. package/core/rpc/interfaces/Token.d.ts.map +1 -0
  233. package/core/rpc/interfaces/Token.js +2 -0
  234. package/core/rpc/interfaces/TokenData.d.ts +13 -0
  235. package/core/rpc/interfaces/TokenData.d.ts.map +1 -0
  236. package/core/rpc/interfaces/TokenData.js +2 -0
  237. package/core/rpc/interfaces/TokenExternal.d.ts +5 -0
  238. package/core/rpc/interfaces/TokenExternal.d.ts.map +1 -0
  239. package/core/rpc/interfaces/TokenExternal.js +2 -0
  240. package/core/rpc/interfaces/TokenPrice.d.ts +8 -0
  241. package/core/rpc/interfaces/TokenPrice.d.ts.map +1 -0
  242. package/core/rpc/interfaces/TokenPrice.js +2 -0
  243. package/core/rpc/interfaces/TokenSeries.d.ts +12 -0
  244. package/core/rpc/interfaces/TokenSeries.d.ts.map +1 -0
  245. package/core/rpc/interfaces/TokenSeries.js +2 -0
  246. package/core/rpc/interfaces/TransactionData.d.ts +23 -0
  247. package/core/rpc/interfaces/TransactionData.d.ts.map +1 -0
  248. package/core/rpc/interfaces/TransactionData.js +2 -0
  249. package/core/rpc/interfaces/Validator.d.ts +5 -0
  250. package/core/rpc/interfaces/Validator.d.ts.map +1 -0
  251. package/core/rpc/interfaces/Validator.js +2 -0
  252. package/core/rpc/interfaces/index.d.ts +42 -0
  253. package/core/rpc/interfaces/index.d.ts.map +1 -0
  254. package/core/rpc/interfaces/index.js +57 -0
  255. package/core/rpc/phantasma.d.ts +89 -0
  256. package/core/rpc/phantasma.d.ts.map +1 -0
  257. package/core/rpc/phantasma.js +900 -0
  258. package/core/tx/SignatureKind.js +9 -0
  259. package/core/tx/Transaction.d.ts +28 -0
  260. package/core/tx/Transaction.d.ts.map +1 -0
  261. package/core/tx/Transaction.js +209 -0
  262. package/core/tx/index.d.ts +3 -0
  263. package/core/tx/index.d.ts.map +1 -0
  264. package/core/tx/index.js +18 -0
  265. package/core/tx/utils.d.ts +10 -0
  266. package/core/tx/utils.d.ts.map +1 -0
  267. package/core/tx/utils.js +147 -0
  268. package/core/types/Address.d.ts +41 -0
  269. package/core/types/Address.d.ts.map +1 -0
  270. package/core/types/Address.js +276 -0
  271. package/core/types/Consensus.d.ts +61 -0
  272. package/core/types/Consensus.d.ts.map +1 -0
  273. package/core/types/Consensus.js +151 -0
  274. package/core/types/Contract.d.ts +60 -0
  275. package/core/types/Contract.d.ts.map +1 -0
  276. package/core/types/Contract.js +342 -0
  277. package/core/types/DomainSettings.d.ts +87 -0
  278. package/core/types/DomainSettings.d.ts.map +1 -0
  279. package/core/types/DomainSettings.js +107 -0
  280. package/core/types/Ed25519Signature.d.ts +16 -0
  281. package/core/types/Ed25519Signature.d.ts.map +1 -0
  282. package/core/types/Ed25519Signature.js +78 -0
  283. package/core/types/Entropy.d.ts +5 -0
  284. package/core/types/Entropy.d.ts.map +1 -0
  285. package/core/types/Entropy.js +24 -0
  286. package/core/types/Extensions/Base16.d.ts +7 -0
  287. package/core/types/Extensions/Base16.d.ts.map +1 -0
  288. package/core/types/Extensions/Base16.js +36 -0
  289. package/core/types/Extensions/BinaryReader.d.ts +17 -0
  290. package/core/types/Extensions/BinaryReader.d.ts.map +1 -0
  291. package/core/types/Extensions/BinaryReader.js +192 -0
  292. package/core/types/Extensions/BinaryWriter.d.ts +25 -0
  293. package/core/types/Extensions/BinaryWriter.d.ts.map +1 -0
  294. package/core/types/Extensions/BinaryWriter.js +191 -0
  295. package/core/types/Extensions/Describer.d.ts +5 -0
  296. package/core/types/Extensions/Describer.d.ts.map +1 -0
  297. package/core/types/Extensions/Describer.js +25 -0
  298. package/core/types/Extensions/PBinaryReader.d.ts +42 -0
  299. package/core/types/Extensions/PBinaryReader.d.ts.map +1 -0
  300. package/core/types/Extensions/PBinaryReader.js +269 -0
  301. package/core/types/Extensions/PBinaryWriter.d.ts +49 -0
  302. package/core/types/Extensions/PBinaryWriter.d.ts.map +1 -0
  303. package/core/types/Extensions/PBinaryWriter.js +250 -0
  304. package/core/types/Extensions/TableColumns.d.ts +5 -0
  305. package/core/types/Extensions/TableColumns.d.ts.map +1 -0
  306. package/core/types/Extensions/TableColumns.js +22 -0
  307. package/core/types/Extensions/index.d.ts +5 -0
  308. package/core/types/Extensions/index.d.ts.map +1 -0
  309. package/core/types/Extensions/index.js +20 -0
  310. package/core/types/PhantasmaKeys.d.ts +19 -0
  311. package/core/types/PhantasmaKeys.d.ts.map +1 -0
  312. package/core/types/PhantasmaKeys.js +92 -0
  313. package/core/types/Serialization.d.ts +22 -0
  314. package/core/types/Serialization.d.ts.map +1 -0
  315. package/core/types/Serialization.js +195 -0
  316. package/core/types/Stack.d.ts +16 -0
  317. package/core/types/Stack.d.ts.map +1 -0
  318. package/core/types/Stack.js +42 -0
  319. package/core/types/Timestamp.d.ts +26 -0
  320. package/core/types/Timestamp.d.ts.map +1 -0
  321. package/core/types/Timestamp.js +74 -0
  322. package/core/types/index.d.ts +12 -0
  323. package/core/types/index.d.ts.map +1 -0
  324. package/core/types/index.js +27 -0
  325. package/core/utils/index.d.ts +25 -0
  326. package/core/utils/index.d.ts.map +1 -0
  327. package/core/utils/index.js +236 -0
  328. package/core/vm/Contracts.d.ts +17 -0
  329. package/core/vm/Contracts.d.ts.map +1 -0
  330. package/core/vm/Contracts.js +20 -0
  331. package/core/vm/Decoder.d.ts +19 -0
  332. package/core/vm/Decoder.d.ts.map +1 -0
  333. package/core/vm/Decoder.js +175 -0
  334. package/core/vm/EventData.d.ts +97 -0
  335. package/core/vm/EventData.d.ts.map +1 -0
  336. package/core/vm/EventData.js +134 -0
  337. package/core/vm/Opcode.d.ts +57 -0
  338. package/core/vm/Opcode.d.ts.map +1 -0
  339. package/core/vm/Opcode.js +69 -0
  340. package/core/vm/ScriptBuilder.d.ts +65 -0
  341. package/core/vm/ScriptBuilder.d.ts.map +1 -0
  342. package/core/vm/ScriptBuilder.js +592 -0
  343. package/core/vm/VMObject.d.ts +55 -0
  344. package/core/vm/VMObject.d.ts.map +1 -0
  345. package/core/vm/VMObject.js +1101 -0
  346. package/core/vm/VMType.d.ts +12 -0
  347. package/core/vm/VMType.d.ts.map +1 -0
  348. package/core/vm/VMType.js +15 -0
  349. package/core/vm/index.d.ts +8 -0
  350. package/core/vm/index.d.ts.map +1 -0
  351. package/core/vm/index.js +23 -0
  352. package/html/TestWebPage.html +187 -0
  353. package/html/phantasma.js +60504 -0
  354. package/index.d.ts +5 -0
  355. package/index.d.ts.map +1 -0
  356. package/index.js +36 -0
  357. package/jest.config.js +5 -0
  358. package/package.json +67 -0
  359. package/src/core/index.ts +9 -0
  360. package/src/core/interfaces/IContract.ts +28 -0
  361. package/src/core/interfaces/IKeyPair.ts +14 -0
  362. package/src/core/interfaces/ISerializable.ts +6 -0
  363. package/src/core/interfaces/IStack.ts +6 -0
  364. package/src/core/interfaces/IToken.ts +31 -0
  365. package/src/core/interfaces/Signature.ts +32 -0
  366. package/src/core/interfaces/index.ts +6 -0
  367. package/src/core/ledger/Address-Transcode.ts +44 -0
  368. package/src/core/ledger/Ledger-Commands.ts +463 -0
  369. package/src/core/ledger/Ledger-Utils.ts +549 -0
  370. package/src/core/ledger/Mnemonic.ts +79 -0
  371. package/src/core/ledger/Transaction-Sign.ts +126 -0
  372. package/src/core/ledger/Transaction-Transcode.ts +56 -0
  373. package/src/core/ledger/index.ts +8 -0
  374. package/src/core/ledger/interfaces/ApplicationNameResponse.ts +5 -0
  375. package/src/core/ledger/interfaces/Device.ts +6 -0
  376. package/src/core/ledger/interfaces/DeviceResponse.ts +6 -0
  377. package/src/core/ledger/interfaces/Ledger.ts +10 -0
  378. package/src/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.ts +9 -0
  379. package/src/core/ledger/interfaces/LedgerConfig.ts +17 -0
  380. package/src/core/ledger/interfaces/LedgerDeviceInfoResponse.ts +7 -0
  381. package/src/core/ledger/interfaces/LedgerSendTransactionResponse.ts +4 -0
  382. package/src/core/ledger/interfaces/LedgerSigner.ts +6 -0
  383. package/src/core/ledger/interfaces/LedgerSignerData.ts +8 -0
  384. package/src/core/ledger/interfaces/PublicKeyResponse.ts +5 -0
  385. package/src/core/ledger/interfaces/SignResponse.ts +5 -0
  386. package/src/core/ledger/interfaces/VersionResponse.ts +5 -0
  387. package/src/core/ledger/interfaces/index.ts +13 -0
  388. package/src/core/link/easyConnect.ts +214 -0
  389. package/src/core/link/easyScript.ts +67 -0
  390. package/src/core/link/index.ts +1 -0
  391. package/src/core/link/interfaces/IAccount.ts +13 -0
  392. package/src/core/link/interfaces/IFile.ts +6 -0
  393. package/src/core/link/interfaces/ProofOfWork.ts +8 -0
  394. package/src/core/link/interfaces/index.ts +3 -0
  395. package/src/core/link/phantasmaLink.ts +561 -0
  396. package/src/core/rpc/index.ts +2 -0
  397. package/src/core/rpc/interfaces/ABIContract.ts +6 -0
  398. package/src/core/rpc/interfaces/ABIEvent.ts +6 -0
  399. package/src/core/rpc/interfaces/ABIMethod.ts +7 -0
  400. package/src/core/rpc/interfaces/ABIParameter.ts +4 -0
  401. package/src/core/rpc/interfaces/Account.ts +16 -0
  402. package/src/core/rpc/interfaces/AccountTransactions.ts +6 -0
  403. package/src/core/rpc/interfaces/Archive.ts +10 -0
  404. package/src/core/rpc/interfaces/Auction.ts +12 -0
  405. package/src/core/rpc/interfaces/Balance.ts +7 -0
  406. package/src/core/rpc/interfaces/Block.ts +17 -0
  407. package/src/core/rpc/interfaces/Chain.ts +9 -0
  408. package/src/core/rpc/interfaces/Channel.ts +12 -0
  409. package/src/core/rpc/interfaces/Contract.ts +11 -0
  410. package/src/core/rpc/interfaces/Dapp.ts +5 -0
  411. package/src/core/rpc/interfaces/Event.ts +6 -0
  412. package/src/core/rpc/interfaces/Governance.ts +4 -0
  413. package/src/core/rpc/interfaces/Interop.ts +4 -0
  414. package/src/core/rpc/interfaces/KeyValue.ts +4 -0
  415. package/src/core/rpc/interfaces/Leaderboard.ts +6 -0
  416. package/src/core/rpc/interfaces/LeaderboardRow.ts +4 -0
  417. package/src/core/rpc/interfaces/NFT.ts +14 -0
  418. package/src/core/rpc/interfaces/Nexus.ts +14 -0
  419. package/src/core/rpc/interfaces/Oracle.ts +4 -0
  420. package/src/core/rpc/interfaces/Organization.ts +5 -0
  421. package/src/core/rpc/interfaces/Paginated.ts +7 -0
  422. package/src/core/rpc/interfaces/Peer.ts +7 -0
  423. package/src/core/rpc/interfaces/Platform.ts +9 -0
  424. package/src/core/rpc/interfaces/Receipt.ts +9 -0
  425. package/src/core/rpc/interfaces/Script.ts +9 -0
  426. package/src/core/rpc/interfaces/SendRawTx.ts +4 -0
  427. package/src/core/rpc/interfaces/SignatureResult.ts +4 -0
  428. package/src/core/rpc/interfaces/Stake.ts +5 -0
  429. package/src/core/rpc/interfaces/Storage.ts +8 -0
  430. package/src/core/rpc/interfaces/Swap.ts +12 -0
  431. package/src/core/rpc/interfaces/Token.ts +19 -0
  432. package/src/core/rpc/interfaces/TokenData.ts +12 -0
  433. package/src/core/rpc/interfaces/TokenExternal.ts +4 -0
  434. package/src/core/rpc/interfaces/TokenPrice.ts +7 -0
  435. package/src/core/rpc/interfaces/TokenSeries.ts +12 -0
  436. package/src/core/rpc/interfaces/TransactionData.ts +23 -0
  437. package/src/core/rpc/interfaces/Validator.ts +4 -0
  438. package/src/core/rpc/interfaces/index.ts +41 -0
  439. package/src/core/rpc/phantasma.ts +466 -0
  440. package/src/core/tx/Transaction.ts +258 -0
  441. package/src/core/tx/index.ts +2 -0
  442. package/src/core/tx/utils.ts +106 -0
  443. package/src/core/types/Address.ts +290 -0
  444. package/src/core/types/Consensus.ts +181 -0
  445. package/src/core/types/Contract.ts +324 -0
  446. package/src/core/types/DomainSettings.ts +128 -0
  447. package/src/core/types/Ed25519Signature.ts +78 -0
  448. package/src/core/types/Entropy.ts +16 -0
  449. package/src/core/types/Extensions/Base16.ts +36 -0
  450. package/src/core/types/Extensions/Describer.ts +17 -0
  451. package/src/core/types/Extensions/PBinaryReader.ts +247 -0
  452. package/src/core/types/Extensions/PBinaryWriter.ts +278 -0
  453. package/src/core/types/Extensions/index.ts +4 -0
  454. package/src/core/types/PhantasmaKeys.ts +119 -0
  455. package/src/core/types/Serialization.ts +211 -0
  456. package/src/core/types/Stack.ts +46 -0
  457. package/src/core/types/Timestamp.ts +93 -0
  458. package/src/core/types/index.ts +11 -0
  459. package/src/core/utils/index.ts +206 -0
  460. package/src/core/vm/Contracts.ts +17 -0
  461. package/src/core/vm/Decoder.ts +162 -0
  462. package/src/core/vm/Disassembler.ts +1 -0
  463. package/src/core/vm/EventData.ts +135 -0
  464. package/src/core/vm/Opcode.ts +74 -0
  465. package/src/core/vm/ScriptBuilder.ts +588 -0
  466. package/src/core/vm/VMObject.ts +1162 -0
  467. package/src/core/vm/VMType.ts +11 -0
  468. package/src/core/vm/index.ts +7 -0
  469. package/src/core/vm/utils/DisasmMethodCall.ts +22 -0
  470. package/src/core/vm/utils/DisasmUtils.ts +89 -0
  471. package/src/core/vm/utils/index.ts +2 -0
  472. package/src/index.ts +7 -0
  473. package/tests/VMObject.test.ts +146 -0
  474. package/tests/ledger/Address-Transacode.test.ts +26 -0
  475. package/tests/tx/Transaction.test.ts +274 -0
  476. package/tests/types/Address.test.ts +26 -0
  477. package/tests/types/Consensus.test.ts +67 -0
  478. package/tsconfig.json +29 -0
@@ -0,0 +1,549 @@
1
+ import { Int2Buffer, hex2ascii } from '../utils';
2
+ import { ApplicationNameResponse } from './interfaces/ApplicationNameResponse';
3
+ import { DeviceResponse } from './interfaces/DeviceResponse';
4
+ import { PublicKeyResponse } from './interfaces/PublicKeyResponse';
5
+ import { SignResponse } from './interfaces/SignResponse';
6
+ import { VersionResponse } from './interfaces/VersionResponse';
7
+
8
+ export const MAX_SIGNED_TX_LEN = 1024;
9
+
10
+ const Debug = true;
11
+
12
+ export const Bip44Path =
13
+ '8000002C' + // 44
14
+ '8000003C' + // 60
15
+ '80000000' + // 0
16
+ '00000000' + // 0
17
+ '00000000'; // 0
18
+
19
+ export const ErrorDescriptions = {
20
+ '530C': 'Unlock Ledger Device',
21
+ '6D02': 'App Not Open On Ledger Device',
22
+ 6511: 'App Not Open On Ledger Device',
23
+ '6E00': 'App Not Open On Ledger Device',
24
+ '6A86': 'Incorrect Pip2',
25
+ '6A87': 'Wrong Data Length',
26
+ '6A88': 'No Data Length',
27
+ '6A89': 'Wrong Main Data Length',
28
+ '6A90': 'Incorrect Pip1',
29
+ 6985: 'Tx Denied on Ledger',
30
+ '6D06': 'Tx Decoding Buffer Underflow',
31
+ B000: 'Wrong response length on Ledger Device',
32
+ B002: 'Failed to display Address on Ledger Device',
33
+ B005: 'Failed to parse Transaction on Ledger Device',
34
+ B008: 'Failed to sign Transaction on Ledger Device',
35
+ B009: 'Wrong signing parmeters on Ledger Device',
36
+ };
37
+
38
+ /**
39
+ * Get's the error message.
40
+ * @param responseStr
41
+ * @returns
42
+ */
43
+ export const GetErrorMessage = (responseStr: string): string => {
44
+ const suffix = responseStr.slice(-4);
45
+ if (ErrorDescriptions[suffix] !== undefined) {
46
+ const description = ErrorDescriptions[suffix];
47
+ return `[${suffix}] ${responseStr} ${description}`;
48
+ } else {
49
+ return `[${suffix}] ${responseStr} Unknown Error`;
50
+ }
51
+ };
52
+
53
+ /**
54
+ * Get Device
55
+ * @param transport
56
+ * @returns
57
+ */
58
+ export const GetDevice = async (transport): Promise<DeviceResponse> => {
59
+ /* istanbul ignore if */
60
+ if (Debug) {
61
+ console.log('getDevice', 'transport', transport);
62
+ }
63
+ const supported = await transport.isSupported();
64
+ /* istanbul ignore if */
65
+ if (Debug) {
66
+ console.log('getDevice', 'supported', supported);
67
+ }
68
+
69
+ if (!supported) {
70
+ return {
71
+ enabled: false,
72
+ error: true,
73
+ message: 'Your computer does not support the ledger device.',
74
+ };
75
+ }
76
+
77
+ const list = await transport.list();
78
+ /* istanbul ignore if */
79
+ if (Debug) {
80
+ console.log('getDevice', 'list', list);
81
+ }
82
+
83
+ if (list.length == 0) {
84
+ return {
85
+ enabled: false,
86
+ error: true,
87
+ message: 'No device connected.',
88
+ };
89
+ }
90
+
91
+ const path = list[0];
92
+ /* istanbul ignore if */
93
+ if (Debug) {
94
+ console.log('getDevice', 'path', path);
95
+ }
96
+ const device = await transport.open(path);
97
+
98
+ /* istanbul ignore if */
99
+ if (Debug) {
100
+ console.log('getDevice', 'device', device);
101
+ }
102
+ return {
103
+ enabled: true,
104
+ error: false,
105
+ device: device,
106
+ };
107
+ };
108
+
109
+ /**
110
+ * Get Application Name
111
+ * @param transport
112
+ * @returns
113
+ */
114
+ export const GetApplicationName = async (transport): Promise<ApplicationNameResponse> => {
115
+ const device = await GetDevice(transport);
116
+ if (!device.enabled) {
117
+ return {
118
+ success: false,
119
+ message: 'Your computer does not support the ledger device.',
120
+ };
121
+ }
122
+
123
+ try {
124
+ const request = Buffer.from('E004000000', 'hex');
125
+ /* istanbul ignore if */
126
+ if (Debug) {
127
+ console.log('exchange', 'request', request.toString('hex').toUpperCase());
128
+ }
129
+ const response = await device.device.exchange(request);
130
+ const responseStr = response.toString('hex').toUpperCase();
131
+ /* istanbul ignore if */
132
+ if (Debug) {
133
+ console.log('exchange', 'response', responseStr);
134
+ }
135
+ let success = false;
136
+ let message = '';
137
+ let applicationName = '';
138
+ if (responseStr.endsWith('9000')) {
139
+ success = true;
140
+ message = responseStr;
141
+ applicationName = responseStr.substring(0, responseStr.length - 4);
142
+ applicationName = hex2ascii(applicationName);
143
+ } else {
144
+ message = GetErrorMessage(responseStr);
145
+ }
146
+ return {
147
+ success: success,
148
+ message: message,
149
+ applicationName: applicationName,
150
+ };
151
+ } catch (error) {
152
+ /* istanbul ignore if */
153
+ if (Debug) {
154
+ console.trace('getApplicationName', 'error', error);
155
+ }
156
+ return {
157
+ success: false,
158
+ message: error.message,
159
+ };
160
+ } finally {
161
+ await device.device.close();
162
+ }
163
+
164
+ if (device.error) {
165
+ return {
166
+ success: false,
167
+ message: device.message!,
168
+ };
169
+ }
170
+ };
171
+
172
+ /**
173
+ * Get Version
174
+ * @param transport
175
+ * @returns
176
+ */
177
+ export const GetVersion = async (transport): Promise<VersionResponse> => {
178
+ const device = await GetDevice(transport);
179
+ if (!device.enabled) {
180
+ return {
181
+ success: false,
182
+ message: 'Your computer does not support the ledger device.',
183
+ };
184
+ }
185
+
186
+ try {
187
+ const request = Buffer.from('E003000000', 'hex');
188
+ /* istanbul ignore if */
189
+ if (Debug) {
190
+ console.log('exchange', 'request', request.toString('hex').toUpperCase());
191
+ }
192
+ const response = await device.device.exchange(request);
193
+ const responseStr = response.toString('hex').toUpperCase();
194
+ /* istanbul ignore if */
195
+ if (Debug) {
196
+ console.log('exchange', 'response', responseStr);
197
+ }
198
+ let success = false;
199
+ let message = '';
200
+ let version = '';
201
+ if (responseStr.endsWith('9000')) {
202
+ success = true;
203
+ message = responseStr;
204
+ version = responseStr.substring(0, responseStr.length - 4);
205
+ version = hex2ascii(version);
206
+ } else {
207
+ message = GetErrorMessage(responseStr);
208
+ }
209
+ return {
210
+ success: success,
211
+ message: message,
212
+ version: version,
213
+ };
214
+ } catch (error) {
215
+ /* istanbul ignore if */
216
+ if (Debug) {
217
+ console.trace('getVersion', 'error', error);
218
+ }
219
+ return {
220
+ success: false,
221
+ message: error.message,
222
+ };
223
+ } finally {
224
+ await device.device.close();
225
+ }
226
+
227
+ if (device.error) {
228
+ return {
229
+ success: false,
230
+ message: device.message!,
231
+ };
232
+ }
233
+ };
234
+
235
+ /**
236
+ * Get Pip44 Path Message
237
+ * @param messagePrefix
238
+ * @returns
239
+ */
240
+ export const GetBip44PathMessage = (messagePrefix: any): Buffer => {
241
+ /* istanbul ignore if */
242
+ if (messagePrefix == undefined) {
243
+ throw Error('messagePrefix is a required parameter.');
244
+ }
245
+ if (messagePrefix.length !== 4) {
246
+ throw Error('messagePrefix must be of length 4.');
247
+ }
248
+
249
+ const bip44PathBuffer = Buffer.from(Bip44Path, 'hex');
250
+ const bip44PathBufferLen = 5; // bip44PathBuffer.length;
251
+ const bip44PathBufferLenBuffer = Int2Buffer(bip44PathBufferLen);
252
+ const payload = Buffer.concat([bip44PathBufferLenBuffer, bip44PathBuffer]);
253
+ const payloadLen = Int2Buffer(payload.length);
254
+
255
+ if (Debug) {
256
+ console.log(
257
+ 'getBip44PathMessage',
258
+ 'bip44PathBuffer',
259
+ bip44PathBuffer.toString('hex').toUpperCase()
260
+ );
261
+ console.log('getBip44PathMessage', 'bip44PathBufferLen', bip44PathBufferLen);
262
+ console.log(
263
+ 'getBip44PathMessage',
264
+ 'bip44PathBufferLenBuffer',
265
+ bip44PathBufferLenBuffer.toString('hex').toUpperCase()
266
+ );
267
+ console.log('getBip44PathMessage', 'payload', payload.toString('hex').toUpperCase());
268
+ console.log('getBip44PathMessage', 'payloadLen', payloadLen.toString('hex').toUpperCase());
269
+ }
270
+
271
+ const message = Buffer.concat([messagePrefix, payloadLen, payload]);
272
+ return message;
273
+ };
274
+
275
+ /**
276
+ * Get Public Key
277
+ * @param transport
278
+ * @param options
279
+ * @returns
280
+ */
281
+ export const GetPublicKey = async (transport, options): Promise<PublicKeyResponse> => {
282
+ /* istanbul ignore if */
283
+ if (transport == undefined) {
284
+ throw Error('transport is a required parameter.');
285
+ }
286
+ /* istanbul ignore if */
287
+ if (options == undefined) {
288
+ throw Error('options is a required parameter.');
289
+ }
290
+ const device = await GetDevice(transport);
291
+ if (!device.enabled) {
292
+ return {
293
+ success: false,
294
+ message: 'Your computer does not support the ledger device.',
295
+ };
296
+ }
297
+
298
+ try {
299
+ let messagePrefix;
300
+ if (options.verifyOnDevice) {
301
+ messagePrefix = Buffer.from('E0050100', 'hex');
302
+ } else {
303
+ messagePrefix = Buffer.from('E0050000', 'hex');
304
+ }
305
+
306
+ const request = GetBip44PathMessage(messagePrefix);
307
+ /* istanbul ignore if */
308
+ if (Debug) {
309
+ console.log('exchange', 'request', request.toString('hex').toUpperCase());
310
+ }
311
+ const response = await device.device.exchange(request);
312
+ const responseStr = response.toString('hex').toUpperCase();
313
+ /* istanbul ignore if */
314
+ if (Debug) {
315
+ console.log('exchange', 'response', responseStr);
316
+ }
317
+ let success = false;
318
+ let message = '';
319
+ let publicKey = '';
320
+ if (responseStr.endsWith('9000')) {
321
+ success = true;
322
+ message = responseStr;
323
+ publicKey = responseStr.substring(0, 64);
324
+ } else {
325
+ message = GetErrorMessage(responseStr);
326
+ }
327
+ return {
328
+ success: success,
329
+ message: message,
330
+ publicKey: publicKey,
331
+ };
332
+ } catch (error) {
333
+ /* istanbul ignore if */
334
+ if (Debug) {
335
+ console.trace('getPublicKey', 'error', error);
336
+ }
337
+ return {
338
+ success: false,
339
+ message: error.message,
340
+ };
341
+ } finally {
342
+ await device.device.close();
343
+ }
344
+
345
+ if (device.error) {
346
+ return {
347
+ success: false,
348
+ message: device.message!,
349
+ };
350
+ }
351
+
352
+ return {
353
+ success: false,
354
+ message: 'Unknown Error',
355
+ };
356
+ };
357
+
358
+ /**
359
+ * Chunk String
360
+ * @param str
361
+ * @param length
362
+ * @returns
363
+ */
364
+ export const ChunkString = (str, length) => {
365
+ return str.match(new RegExp('.{1,' + length + '}', 'g'));
366
+ };
367
+
368
+ export const SplitMessageIntoChunks = (ledgerMessage) => {
369
+ const messages: any = [];
370
+
371
+ messages.push(GetBip44PathMessage(Buffer.from('E006' + '00' + '80', 'hex')));
372
+
373
+ if (Debug) {
374
+ console.log('splitMessageIntoChunks', 'ledgerMessage.length', ledgerMessage.length);
375
+ }
376
+
377
+ // MAX 250, as theres 5 header bytes, and max total buffer size is 255.
378
+ const bufferSize = 250 * 2;
379
+
380
+ // ledgerMessage = ledgerMessage.substring(0,bufferSize);
381
+
382
+ const chunks = ChunkString(ledgerMessage, bufferSize);
383
+
384
+ for (let chunkIx = 0; chunkIx < chunks.length; chunkIx++) {
385
+ const chunk = chunks[chunkIx];
386
+ const chunkNbr = chunkIx + 1;
387
+ if (Debug) {
388
+ console.log('splitMessageIntoChunks', 'chunk.length', chunk.length);
389
+ }
390
+ const p1 = chunkNbr.toString(16).padStart(2, '0');
391
+ if (Debug) {
392
+ console.log('splitMessageIntoChunks', 'p1', p1);
393
+ }
394
+
395
+ let p2;
396
+ if (chunkNbr == chunks.length) {
397
+ // LAST
398
+ p2 = '00';
399
+ } else {
400
+ // MORE
401
+ p2 = '80';
402
+ }
403
+ if (Debug) {
404
+ console.log('splitMessageIntoChunks', 'p2', p2);
405
+ }
406
+
407
+ const chunkLength = chunk.length / 2;
408
+
409
+ const chunkLengthHex = chunkLength.toString(16).padStart(2, '0');
410
+
411
+ if (Debug) {
412
+ console.log('splitMessageIntoChunks', 'chunkLengthHex', chunkLengthHex);
413
+ }
414
+
415
+ const messageHex = 'E006' + p1 + p2 + chunkLengthHex + chunk;
416
+
417
+ if (Debug) {
418
+ console.log('splitMessageIntoChunks', 'messageHex', messageHex);
419
+ }
420
+ const message = Buffer.from(messageHex, 'hex');
421
+ if (Debug) {
422
+ console.log('splitMessageIntoChunks', 'message', message);
423
+ }
424
+ messages.push(message);
425
+ }
426
+
427
+ return messages;
428
+ };
429
+
430
+ export const DecodeSignature = (response) => {
431
+ /* istanbul ignore if */
432
+ if (Debug) {
433
+ console.log('decodeSignature', 'response', response);
434
+ }
435
+ const signature = response.substring(0, 128);
436
+ /* istanbul ignore if */
437
+ if (Debug) {
438
+ console.log('decodeSignature', 'signature', signature);
439
+ }
440
+ return signature;
441
+ };
442
+
443
+ export const SignLedger = async (transport, transactionHex): Promise<SignResponse> => {
444
+ /* istanbul ignore if */
445
+ if (Debug) {
446
+ console.log('sign', 'transactionHex', transactionHex);
447
+ }
448
+ // transactionHex = '0200000000000000';
449
+ const transactionByteLength = Math.ceil(transactionHex.length / 2);
450
+ if (transactionByteLength > MAX_SIGNED_TX_LEN) {
451
+ return {
452
+ success: false,
453
+ message: `Transaction length of ${transactionByteLength} bytes exceeds max length of ${MAX_SIGNED_TX_LEN} bytes. Send less candidates and consolidate utxos.`,
454
+ };
455
+ }
456
+
457
+ const ledgerMessage = transactionHex;
458
+
459
+ const messages = SplitMessageIntoChunks(ledgerMessage);
460
+ if (Debug) {
461
+ console.log('sign', 'transport', transport);
462
+ }
463
+
464
+ const device = await GetDevice(transport);
465
+
466
+ if (Debug) {
467
+ console.log('sign', 'device', device);
468
+ console.log('sign', 'messages.length', messages.length);
469
+ }
470
+ if (!device.enabled) {
471
+ return {
472
+ success: false,
473
+ message: 'Your computer does not support the ledger device.',
474
+ };
475
+ }
476
+
477
+ try {
478
+ let lastResponse: string | undefined = undefined;
479
+ // console.log('deviceThenCallback', 'messages', messages);
480
+ for (let ix = 0; ix < messages.length; ix++) {
481
+ const message = messages[ix];
482
+ /* istanbul ignore if */
483
+ if (Debug) {
484
+ console.log(
485
+ 'exchange',
486
+ ix,
487
+ 'of',
488
+ messages.length,
489
+ 'message',
490
+ message.toString('hex').toUpperCase()
491
+ );
492
+ }
493
+
494
+ const response = await device.device.exchange(message);
495
+ const responseStr = response.toString('hex').toUpperCase();
496
+ if (Debug) {
497
+ console.log('exchange', ix, 'of', messages.length, 'response', responseStr);
498
+ }
499
+ if (responseStr !== undefined) {
500
+ if (!responseStr.endsWith('9000')) {
501
+ const message = GetErrorMessage(responseStr);
502
+ return {
503
+ success: false,
504
+ message: message,
505
+ signature: '',
506
+ };
507
+ }
508
+ }
509
+
510
+ lastResponse = responseStr;
511
+ }
512
+
513
+ let signature = undefined;
514
+ let success = false;
515
+ let message = lastResponse;
516
+ if (lastResponse !== undefined) {
517
+ if (lastResponse.endsWith('9000')) {
518
+ signature = DecodeSignature(lastResponse);
519
+ success = true;
520
+ } else {
521
+ message = GetErrorMessage(lastResponse);
522
+ }
523
+ }
524
+
525
+ return {
526
+ success: success,
527
+ message: message!,
528
+ signature: signature,
529
+ };
530
+ } catch (error) {
531
+ /* istanbul ignore if */
532
+ if (Debug) {
533
+ console.trace('sign', 'error', error);
534
+ }
535
+ return {
536
+ success: false,
537
+ message: error.message,
538
+ };
539
+ } finally {
540
+ await device.device.close();
541
+ }
542
+
543
+ if (device.error) {
544
+ return {
545
+ success: false,
546
+ message: device.message!,
547
+ };
548
+ }
549
+ };
@@ -0,0 +1,79 @@
1
+ // coin used by ledger nano s.
2
+
3
+ import { bufferToHex, hexToBuffer } from '../utils';
4
+ import { LedgerConfig } from './interfaces/LedgerConfig';
5
+
6
+ // 60 | 0x80000273 | SOUL | [Phantasma](https://phantasma.io/)
7
+ export const SOUL_COIN: number = 60;
8
+
9
+ /**
10
+ * converts a mnemonic into a private key, using the phantasma coin's bip44 path.
11
+ *
12
+ * @param config the config
13
+ * @param mnemonic the mnemonic
14
+ * @param index the bip44 index
15
+ * @return returns the private key, hex encoded, upper case.
16
+ */
17
+ export const GetPrivateKeyFromMnemonic = (
18
+ config: LedgerConfig,
19
+ mnemonic: string,
20
+ index: string
21
+ ): string => {
22
+ const bip39 = config.Bip39;
23
+ const seedBytes = bip39.mnemonicToSeedSync(mnemonic);
24
+ const seed = bufferToHex(seedBytes);
25
+ return GetPrivateKeyFromSeed(config, seed, index);
26
+ };
27
+
28
+ /**
29
+ * converts a mnemonic into a seed.
30
+ *
31
+ * @param config the config
32
+ * @param seed the seed
33
+ * @param index the bip44 index
34
+ * @return returns the seed, hex encoded, upper case.
35
+ */
36
+ export const GetPrivateKeyFromSeed = (
37
+ config: LedgerConfig,
38
+ seed: string,
39
+ index: string
40
+ ): string => {
41
+ const bip32Factory = config.Bip32Factory;
42
+ const curve = config.Curve;
43
+ const seedBytes = hexToBuffer(seed);
44
+ const bip32 = bip32Factory(curve);
45
+ const bip32node = bip32.fromSeed(seedBytes);
46
+
47
+ const bip44path = GetBip44Path(index);
48
+ const bip32child = bip32node.derivePath(bip44path);
49
+
50
+ return Buffer.from(bip32child.privateKey).toString('hex').toUpperCase();
51
+ };
52
+
53
+ /**
54
+ * converts a mnemonic into a Poltergeist mnemonic, using the phantasma coin's bip44 path.
55
+ *
56
+ * @param config the config
57
+ * @param mnemonic the mnemonic
58
+ * @param index the index
59
+ * @return returns the private key, hex encoded, upper case.
60
+ */
61
+ export const GetPoltergeistMnemonic = (
62
+ config: LedgerConfig,
63
+ mnemonic: string,
64
+ index: string
65
+ ): string => {
66
+ const bip39 = config.Bip39;
67
+ const privateKey = GetPrivateKeyFromMnemonic(config, mnemonic, index);
68
+ const poltergeistMnemonic = bip39.entropyToMnemonic(privateKey);
69
+ return poltergeistMnemonic;
70
+ };
71
+
72
+ /**
73
+ * @param index the index
74
+ * @return returns the bip44 path.
75
+ */
76
+ export const GetBip44Path = (index: string): string => {
77
+ const bip44path = `m/44'/${SOUL_COIN}'/0'/0/${index}`;
78
+ return bip44path;
79
+ };