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.
- package/.eslintignore +13 -0
- package/.eslintrc.cjs +15 -0
- package/.github/workflows/npm-publish.yml +47 -0
- package/.prettierignore +13 -0
- package/.prettierrc +8 -0
- package/LICENSE +201 -0
- package/README.md +842 -0
- package/babel.config.js +6 -0
- package/core/index.d.ts +10 -0
- package/core/index.d.ts.map +1 -0
- package/core/index.js +25 -0
- package/core/interfaces/IContract.d.ts +27 -0
- package/core/interfaces/IContract.d.ts.map +1 -0
- package/core/interfaces/IContract.js +25 -0
- package/core/interfaces/IKeyPair.d.ts +7 -0
- package/core/interfaces/IKeyPair.d.ts.map +1 -0
- package/core/interfaces/IKeyPair.js +2 -0
- package/core/interfaces/ISerializable.d.ts +6 -0
- package/core/interfaces/ISerializable.d.ts.map +1 -0
- package/core/interfaces/ISerializable.js +9 -0
- package/core/interfaces/IStack.d.ts +7 -0
- package/core/interfaces/IStack.d.ts.map +1 -0
- package/core/interfaces/IStack.js +2 -0
- package/core/interfaces/IToken.d.ts +29 -0
- package/core/interfaces/IToken.d.ts.map +1 -0
- package/core/interfaces/IToken.js +22 -0
- package/core/interfaces/Signature.d.ts +21 -0
- package/core/interfaces/Signature.d.ts.map +1 -0
- package/core/interfaces/Signature.js +31 -0
- package/core/interfaces/index.d.ts +7 -0
- package/core/interfaces/index.d.ts.map +1 -0
- package/core/interfaces/index.js +22 -0
- package/core/ledger/Address-Transcode.d.ts +20 -0
- package/core/ledger/Address-Transcode.d.ts.map +1 -0
- package/core/ledger/Address-Transcode.js +70 -0
- package/core/ledger/Ledger-Commands.d.ts +76 -0
- package/core/ledger/Ledger-Commands.d.ts.map +1 -0
- package/core/ledger/Ledger-Commands.js +530 -0
- package/core/ledger/Ledger-Utils.d.ts +74 -0
- package/core/ledger/Ledger-Utils.d.ts.map +1 -0
- package/core/ledger/Ledger-Utils.js +609 -0
- package/core/ledger/LedgerConfig.d.ts +17 -0
- package/core/ledger/LedgerConfig.d.ts.map +1 -0
- package/core/ledger/LedgerConfig.js +2 -0
- package/core/ledger/Mnemonic.d.ts +35 -0
- package/core/ledger/Mnemonic.d.ts.map +1 -0
- package/core/ledger/Mnemonic.js +65 -0
- package/core/ledger/Transaction-Sign.d.ts +10 -0
- package/core/ledger/Transaction-Sign.d.ts.map +1 -0
- package/core/ledger/Transaction-Sign.js +149 -0
- package/core/ledger/Transaction-Transcode.d.ts +24 -0
- package/core/ledger/Transaction-Transcode.d.ts.map +1 -0
- package/core/ledger/Transaction-Transcode.js +47 -0
- package/core/ledger/index.d.ts +9 -0
- package/core/ledger/index.d.ts.map +1 -0
- package/core/ledger/index.js +24 -0
- package/core/ledger/interfaces/ApplicationNameResponse.d.ts +6 -0
- package/core/ledger/interfaces/ApplicationNameResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/ApplicationNameResponse.js +2 -0
- package/core/ledger/interfaces/Device.d.ts +7 -0
- package/core/ledger/interfaces/Device.d.ts.map +1 -0
- package/core/ledger/interfaces/Device.js +2 -0
- package/core/ledger/interfaces/DeviceResponse.d.ts +7 -0
- package/core/ledger/interfaces/DeviceResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/DeviceResponse.js +2 -0
- package/core/ledger/interfaces/Ledger.d.ts +2 -0
- package/core/ledger/interfaces/Ledger.d.ts.map +1 -0
- package/core/ledger/interfaces/Ledger.js +2 -0
- package/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.d.ts +12 -0
- package/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.js +2 -0
- package/core/ledger/interfaces/LedgerConfig.d.ts +17 -0
- package/core/ledger/interfaces/LedgerConfig.d.ts.map +1 -0
- package/core/ledger/interfaces/LedgerConfig.js +2 -0
- package/core/ledger/interfaces/LedgerDeviceInfoResponse.d.ts +7 -0
- package/core/ledger/interfaces/LedgerDeviceInfoResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/LedgerDeviceInfoResponse.js +2 -0
- package/core/ledger/interfaces/LedgerSendTransactionResponse.d.ts +5 -0
- package/core/ledger/interfaces/LedgerSendTransactionResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/LedgerSendTransactionResponse.js +2 -0
- package/core/ledger/interfaces/LedgerSigner.d.ts +6 -0
- package/core/ledger/interfaces/LedgerSigner.d.ts.map +1 -0
- package/core/ledger/interfaces/LedgerSigner.js +2 -0
- package/core/ledger/interfaces/LedgerSignerData.d.ts +8 -0
- package/core/ledger/interfaces/LedgerSignerData.d.ts.map +1 -0
- package/core/ledger/interfaces/LedgerSignerData.js +2 -0
- package/core/ledger/interfaces/PublicKeyResponse.d.ts +6 -0
- package/core/ledger/interfaces/PublicKeyResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/PublicKeyResponse.js +2 -0
- package/core/ledger/interfaces/SignResponse.d.ts +6 -0
- package/core/ledger/interfaces/SignResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/SignResponse.js +2 -0
- package/core/ledger/interfaces/VersionResponse.d.ts +6 -0
- package/core/ledger/interfaces/VersionResponse.d.ts.map +1 -0
- package/core/ledger/interfaces/VersionResponse.js +2 -0
- package/core/ledger/interfaces/index.d.ts +14 -0
- package/core/ledger/interfaces/index.d.ts.map +1 -0
- package/core/ledger/interfaces/index.js +29 -0
- package/core/ledger/ledger-comm.d.ts +85 -0
- package/core/ledger/ledger-comm.d.ts.map +1 -0
- package/core/ledger/ledger-comm.js +613 -0
- package/core/link/easyConnect.d.ts +23 -0
- package/core/link/easyConnect.d.ts.map +1 -0
- package/core/link/easyConnect.js +237 -0
- package/core/link/easyScript.d.ts +13 -0
- package/core/link/easyScript.d.ts.map +1 -0
- package/core/link/easyScript.js +52 -0
- package/core/link/index.d.ts +2 -0
- package/core/link/index.d.ts.map +1 -0
- package/core/link/index.js +17 -0
- package/core/link/interfaces/IAccount.d.ts +13 -0
- package/core/link/interfaces/IAccount.d.ts.map +1 -0
- package/core/link/interfaces/IAccount.js +2 -0
- package/core/link/interfaces/IFile.d.ts +7 -0
- package/core/link/interfaces/IFile.d.ts.map +1 -0
- package/core/link/interfaces/IFile.js +2 -0
- package/core/link/interfaces/ProofOfWork.d.ts +9 -0
- package/core/link/interfaces/ProofOfWork.d.ts.map +1 -0
- package/core/link/interfaces/ProofOfWork.js +12 -0
- package/core/link/interfaces/index.d.ts +4 -0
- package/core/link/interfaces/index.d.ts.map +1 -0
- package/core/link/interfaces/index.js +19 -0
- package/core/link/phantasmaLink.d.ts +41 -0
- package/core/link/phantasmaLink.d.ts.map +1 -0
- package/core/link/phantasmaLink.js +479 -0
- package/core/rpc/index.d.ts +3 -0
- package/core/rpc/index.d.ts.map +1 -0
- package/core/rpc/index.js +18 -0
- package/core/rpc/interfaces/ABIContract.d.ts +6 -0
- package/core/rpc/interfaces/ABIContract.d.ts.map +1 -0
- package/core/rpc/interfaces/ABIContract.js +2 -0
- package/core/rpc/interfaces/ABIEvent.d.ts +7 -0
- package/core/rpc/interfaces/ABIEvent.d.ts.map +1 -0
- package/core/rpc/interfaces/ABIEvent.js +2 -0
- package/core/rpc/interfaces/ABIMethod.d.ts +7 -0
- package/core/rpc/interfaces/ABIMethod.d.ts.map +1 -0
- package/core/rpc/interfaces/ABIMethod.js +2 -0
- package/core/rpc/interfaces/ABIParameter.d.ts +5 -0
- package/core/rpc/interfaces/ABIParameter.d.ts.map +1 -0
- package/core/rpc/interfaces/ABIParameter.js +2 -0
- package/core/rpc/interfaces/Account.d.ts +16 -0
- package/core/rpc/interfaces/Account.d.ts.map +1 -0
- package/core/rpc/interfaces/Account.js +2 -0
- package/core/rpc/interfaces/AccountTransactions.d.ts +6 -0
- package/core/rpc/interfaces/AccountTransactions.d.ts.map +1 -0
- package/core/rpc/interfaces/AccountTransactions.js +2 -0
- package/core/rpc/interfaces/Archive.d.ts +11 -0
- package/core/rpc/interfaces/Archive.d.ts.map +1 -0
- package/core/rpc/interfaces/Archive.js +2 -0
- package/core/rpc/interfaces/Auction.d.ts +13 -0
- package/core/rpc/interfaces/Auction.d.ts.map +1 -0
- package/core/rpc/interfaces/Auction.js +2 -0
- package/core/rpc/interfaces/Balance.d.ts +8 -0
- package/core/rpc/interfaces/Balance.d.ts.map +1 -0
- package/core/rpc/interfaces/Balance.js +2 -0
- package/core/rpc/interfaces/Block.d.ts +17 -0
- package/core/rpc/interfaces/Block.d.ts.map +1 -0
- package/core/rpc/interfaces/Block.js +2 -0
- package/core/rpc/interfaces/Chain.d.ts +10 -0
- package/core/rpc/interfaces/Chain.d.ts.map +1 -0
- package/core/rpc/interfaces/Chain.js +2 -0
- package/core/rpc/interfaces/Channel.d.ts +13 -0
- package/core/rpc/interfaces/Channel.d.ts.map +1 -0
- package/core/rpc/interfaces/Channel.js +2 -0
- package/core/rpc/interfaces/Contract.d.ts +11 -0
- package/core/rpc/interfaces/Contract.d.ts.map +1 -0
- package/core/rpc/interfaces/Contract.js +2 -0
- package/core/rpc/interfaces/Dapp.d.ts +6 -0
- package/core/rpc/interfaces/Dapp.d.ts.map +1 -0
- package/core/rpc/interfaces/Dapp.js +2 -0
- package/core/rpc/interfaces/Event.d.ts +7 -0
- package/core/rpc/interfaces/Event.d.ts.map +1 -0
- package/core/rpc/interfaces/Event.js +2 -0
- package/core/rpc/interfaces/Governance.d.ts +5 -0
- package/core/rpc/interfaces/Governance.d.ts.map +1 -0
- package/core/rpc/interfaces/Governance.js +2 -0
- package/core/rpc/interfaces/Interop.d.ts +5 -0
- package/core/rpc/interfaces/Interop.d.ts.map +1 -0
- package/core/rpc/interfaces/Interop.js +2 -0
- package/core/rpc/interfaces/KeyValue.d.ts +5 -0
- package/core/rpc/interfaces/KeyValue.d.ts.map +1 -0
- package/core/rpc/interfaces/KeyValue.js +2 -0
- package/core/rpc/interfaces/Leaderboard.d.ts +6 -0
- package/core/rpc/interfaces/Leaderboard.d.ts.map +1 -0
- package/core/rpc/interfaces/Leaderboard.js +2 -0
- package/core/rpc/interfaces/LeaderboardRow.d.ts +5 -0
- package/core/rpc/interfaces/LeaderboardRow.d.ts.map +1 -0
- package/core/rpc/interfaces/LeaderboardRow.js +2 -0
- package/core/rpc/interfaces/NFT.d.ts +14 -0
- package/core/rpc/interfaces/NFT.d.ts.map +1 -0
- package/core/rpc/interfaces/NFT.js +2 -0
- package/core/rpc/interfaces/Nexus.d.ts +14 -0
- package/core/rpc/interfaces/Nexus.d.ts.map +1 -0
- package/core/rpc/interfaces/Nexus.js +2 -0
- package/core/rpc/interfaces/Oracle.d.ts +5 -0
- package/core/rpc/interfaces/Oracle.d.ts.map +1 -0
- package/core/rpc/interfaces/Oracle.js +2 -0
- package/core/rpc/interfaces/Organization.d.ts +6 -0
- package/core/rpc/interfaces/Organization.d.ts.map +1 -0
- package/core/rpc/interfaces/Organization.js +2 -0
- package/core/rpc/interfaces/Paginated.d.ts +8 -0
- package/core/rpc/interfaces/Paginated.d.ts.map +1 -0
- package/core/rpc/interfaces/Paginated.js +2 -0
- package/core/rpc/interfaces/Peer.d.ts +8 -0
- package/core/rpc/interfaces/Peer.d.ts.map +1 -0
- package/core/rpc/interfaces/Peer.js +2 -0
- package/core/rpc/interfaces/Platform.d.ts +9 -0
- package/core/rpc/interfaces/Platform.d.ts.map +1 -0
- package/core/rpc/interfaces/Platform.js +2 -0
- package/core/rpc/interfaces/Receipt.d.ts +10 -0
- package/core/rpc/interfaces/Receipt.d.ts.map +1 -0
- package/core/rpc/interfaces/Receipt.js +2 -0
- package/core/rpc/interfaces/Script.d.ts +9 -0
- package/core/rpc/interfaces/Script.d.ts.map +1 -0
- package/core/rpc/interfaces/Script.js +2 -0
- package/core/rpc/interfaces/SendRawTx.d.ts +5 -0
- package/core/rpc/interfaces/SendRawTx.d.ts.map +1 -0
- package/core/rpc/interfaces/SendRawTx.js +2 -0
- package/core/rpc/interfaces/SignatureResult.d.ts +5 -0
- package/core/rpc/interfaces/SignatureResult.d.ts.map +1 -0
- package/core/rpc/interfaces/SignatureResult.js +2 -0
- package/core/rpc/interfaces/Stake.d.ts +6 -0
- package/core/rpc/interfaces/Stake.d.ts.map +1 -0
- package/core/rpc/interfaces/Stake.js +2 -0
- package/core/rpc/interfaces/Storage.d.ts +8 -0
- package/core/rpc/interfaces/Storage.d.ts.map +1 -0
- package/core/rpc/interfaces/Storage.js +2 -0
- package/core/rpc/interfaces/Swap.d.ts +13 -0
- package/core/rpc/interfaces/Swap.d.ts.map +1 -0
- package/core/rpc/interfaces/Swap.js +2 -0
- package/core/rpc/interfaces/Token.d.ts +19 -0
- package/core/rpc/interfaces/Token.d.ts.map +1 -0
- package/core/rpc/interfaces/Token.js +2 -0
- package/core/rpc/interfaces/TokenData.d.ts +13 -0
- package/core/rpc/interfaces/TokenData.d.ts.map +1 -0
- package/core/rpc/interfaces/TokenData.js +2 -0
- package/core/rpc/interfaces/TokenExternal.d.ts +5 -0
- package/core/rpc/interfaces/TokenExternal.d.ts.map +1 -0
- package/core/rpc/interfaces/TokenExternal.js +2 -0
- package/core/rpc/interfaces/TokenPrice.d.ts +8 -0
- package/core/rpc/interfaces/TokenPrice.d.ts.map +1 -0
- package/core/rpc/interfaces/TokenPrice.js +2 -0
- package/core/rpc/interfaces/TokenSeries.d.ts +12 -0
- package/core/rpc/interfaces/TokenSeries.d.ts.map +1 -0
- package/core/rpc/interfaces/TokenSeries.js +2 -0
- package/core/rpc/interfaces/TransactionData.d.ts +23 -0
- package/core/rpc/interfaces/TransactionData.d.ts.map +1 -0
- package/core/rpc/interfaces/TransactionData.js +2 -0
- package/core/rpc/interfaces/Validator.d.ts +5 -0
- package/core/rpc/interfaces/Validator.d.ts.map +1 -0
- package/core/rpc/interfaces/Validator.js +2 -0
- package/core/rpc/interfaces/index.d.ts +42 -0
- package/core/rpc/interfaces/index.d.ts.map +1 -0
- package/core/rpc/interfaces/index.js +57 -0
- package/core/rpc/phantasma.d.ts +89 -0
- package/core/rpc/phantasma.d.ts.map +1 -0
- package/core/rpc/phantasma.js +900 -0
- package/core/tx/SignatureKind.js +9 -0
- package/core/tx/Transaction.d.ts +28 -0
- package/core/tx/Transaction.d.ts.map +1 -0
- package/core/tx/Transaction.js +209 -0
- package/core/tx/index.d.ts +3 -0
- package/core/tx/index.d.ts.map +1 -0
- package/core/tx/index.js +18 -0
- package/core/tx/utils.d.ts +10 -0
- package/core/tx/utils.d.ts.map +1 -0
- package/core/tx/utils.js +147 -0
- package/core/types/Address.d.ts +41 -0
- package/core/types/Address.d.ts.map +1 -0
- package/core/types/Address.js +276 -0
- package/core/types/Consensus.d.ts +61 -0
- package/core/types/Consensus.d.ts.map +1 -0
- package/core/types/Consensus.js +151 -0
- package/core/types/Contract.d.ts +60 -0
- package/core/types/Contract.d.ts.map +1 -0
- package/core/types/Contract.js +342 -0
- package/core/types/DomainSettings.d.ts +87 -0
- package/core/types/DomainSettings.d.ts.map +1 -0
- package/core/types/DomainSettings.js +107 -0
- package/core/types/Ed25519Signature.d.ts +16 -0
- package/core/types/Ed25519Signature.d.ts.map +1 -0
- package/core/types/Ed25519Signature.js +78 -0
- package/core/types/Entropy.d.ts +5 -0
- package/core/types/Entropy.d.ts.map +1 -0
- package/core/types/Entropy.js +24 -0
- package/core/types/Extensions/Base16.d.ts +7 -0
- package/core/types/Extensions/Base16.d.ts.map +1 -0
- package/core/types/Extensions/Base16.js +36 -0
- package/core/types/Extensions/BinaryReader.d.ts +17 -0
- package/core/types/Extensions/BinaryReader.d.ts.map +1 -0
- package/core/types/Extensions/BinaryReader.js +192 -0
- package/core/types/Extensions/BinaryWriter.d.ts +25 -0
- package/core/types/Extensions/BinaryWriter.d.ts.map +1 -0
- package/core/types/Extensions/BinaryWriter.js +191 -0
- package/core/types/Extensions/Describer.d.ts +5 -0
- package/core/types/Extensions/Describer.d.ts.map +1 -0
- package/core/types/Extensions/Describer.js +25 -0
- package/core/types/Extensions/PBinaryReader.d.ts +42 -0
- package/core/types/Extensions/PBinaryReader.d.ts.map +1 -0
- package/core/types/Extensions/PBinaryReader.js +269 -0
- package/core/types/Extensions/PBinaryWriter.d.ts +49 -0
- package/core/types/Extensions/PBinaryWriter.d.ts.map +1 -0
- package/core/types/Extensions/PBinaryWriter.js +250 -0
- package/core/types/Extensions/TableColumns.d.ts +5 -0
- package/core/types/Extensions/TableColumns.d.ts.map +1 -0
- package/core/types/Extensions/TableColumns.js +22 -0
- package/core/types/Extensions/index.d.ts +5 -0
- package/core/types/Extensions/index.d.ts.map +1 -0
- package/core/types/Extensions/index.js +20 -0
- package/core/types/PhantasmaKeys.d.ts +19 -0
- package/core/types/PhantasmaKeys.d.ts.map +1 -0
- package/core/types/PhantasmaKeys.js +92 -0
- package/core/types/Serialization.d.ts +22 -0
- package/core/types/Serialization.d.ts.map +1 -0
- package/core/types/Serialization.js +195 -0
- package/core/types/Stack.d.ts +16 -0
- package/core/types/Stack.d.ts.map +1 -0
- package/core/types/Stack.js +42 -0
- package/core/types/Timestamp.d.ts +26 -0
- package/core/types/Timestamp.d.ts.map +1 -0
- package/core/types/Timestamp.js +74 -0
- package/core/types/index.d.ts +12 -0
- package/core/types/index.d.ts.map +1 -0
- package/core/types/index.js +27 -0
- package/core/utils/index.d.ts +25 -0
- package/core/utils/index.d.ts.map +1 -0
- package/core/utils/index.js +236 -0
- package/core/vm/Contracts.d.ts +17 -0
- package/core/vm/Contracts.d.ts.map +1 -0
- package/core/vm/Contracts.js +20 -0
- package/core/vm/Decoder.d.ts +19 -0
- package/core/vm/Decoder.d.ts.map +1 -0
- package/core/vm/Decoder.js +175 -0
- package/core/vm/EventData.d.ts +97 -0
- package/core/vm/EventData.d.ts.map +1 -0
- package/core/vm/EventData.js +134 -0
- package/core/vm/Opcode.d.ts +57 -0
- package/core/vm/Opcode.d.ts.map +1 -0
- package/core/vm/Opcode.js +69 -0
- package/core/vm/ScriptBuilder.d.ts +65 -0
- package/core/vm/ScriptBuilder.d.ts.map +1 -0
- package/core/vm/ScriptBuilder.js +592 -0
- package/core/vm/VMObject.d.ts +55 -0
- package/core/vm/VMObject.d.ts.map +1 -0
- package/core/vm/VMObject.js +1101 -0
- package/core/vm/VMType.d.ts +12 -0
- package/core/vm/VMType.d.ts.map +1 -0
- package/core/vm/VMType.js +15 -0
- package/core/vm/index.d.ts +8 -0
- package/core/vm/index.d.ts.map +1 -0
- package/core/vm/index.js +23 -0
- package/html/TestWebPage.html +187 -0
- package/html/phantasma.js +60504 -0
- package/index.d.ts +5 -0
- package/index.d.ts.map +1 -0
- package/index.js +36 -0
- package/jest.config.js +5 -0
- package/package.json +67 -0
- package/src/core/index.ts +9 -0
- package/src/core/interfaces/IContract.ts +28 -0
- package/src/core/interfaces/IKeyPair.ts +14 -0
- package/src/core/interfaces/ISerializable.ts +6 -0
- package/src/core/interfaces/IStack.ts +6 -0
- package/src/core/interfaces/IToken.ts +31 -0
- package/src/core/interfaces/Signature.ts +32 -0
- package/src/core/interfaces/index.ts +6 -0
- package/src/core/ledger/Address-Transcode.ts +44 -0
- package/src/core/ledger/Ledger-Commands.ts +463 -0
- package/src/core/ledger/Ledger-Utils.ts +549 -0
- package/src/core/ledger/Mnemonic.ts +79 -0
- package/src/core/ledger/Transaction-Sign.ts +126 -0
- package/src/core/ledger/Transaction-Transcode.ts +56 -0
- package/src/core/ledger/index.ts +8 -0
- package/src/core/ledger/interfaces/ApplicationNameResponse.ts +5 -0
- package/src/core/ledger/interfaces/Device.ts +6 -0
- package/src/core/ledger/interfaces/DeviceResponse.ts +6 -0
- package/src/core/ledger/interfaces/Ledger.ts +10 -0
- package/src/core/ledger/interfaces/LedgerBalanceFromLedgerResponse.ts +9 -0
- package/src/core/ledger/interfaces/LedgerConfig.ts +17 -0
- package/src/core/ledger/interfaces/LedgerDeviceInfoResponse.ts +7 -0
- package/src/core/ledger/interfaces/LedgerSendTransactionResponse.ts +4 -0
- package/src/core/ledger/interfaces/LedgerSigner.ts +6 -0
- package/src/core/ledger/interfaces/LedgerSignerData.ts +8 -0
- package/src/core/ledger/interfaces/PublicKeyResponse.ts +5 -0
- package/src/core/ledger/interfaces/SignResponse.ts +5 -0
- package/src/core/ledger/interfaces/VersionResponse.ts +5 -0
- package/src/core/ledger/interfaces/index.ts +13 -0
- package/src/core/link/easyConnect.ts +214 -0
- package/src/core/link/easyScript.ts +67 -0
- package/src/core/link/index.ts +1 -0
- package/src/core/link/interfaces/IAccount.ts +13 -0
- package/src/core/link/interfaces/IFile.ts +6 -0
- package/src/core/link/interfaces/ProofOfWork.ts +8 -0
- package/src/core/link/interfaces/index.ts +3 -0
- package/src/core/link/phantasmaLink.ts +561 -0
- package/src/core/rpc/index.ts +2 -0
- package/src/core/rpc/interfaces/ABIContract.ts +6 -0
- package/src/core/rpc/interfaces/ABIEvent.ts +6 -0
- package/src/core/rpc/interfaces/ABIMethod.ts +7 -0
- package/src/core/rpc/interfaces/ABIParameter.ts +4 -0
- package/src/core/rpc/interfaces/Account.ts +16 -0
- package/src/core/rpc/interfaces/AccountTransactions.ts +6 -0
- package/src/core/rpc/interfaces/Archive.ts +10 -0
- package/src/core/rpc/interfaces/Auction.ts +12 -0
- package/src/core/rpc/interfaces/Balance.ts +7 -0
- package/src/core/rpc/interfaces/Block.ts +17 -0
- package/src/core/rpc/interfaces/Chain.ts +9 -0
- package/src/core/rpc/interfaces/Channel.ts +12 -0
- package/src/core/rpc/interfaces/Contract.ts +11 -0
- package/src/core/rpc/interfaces/Dapp.ts +5 -0
- package/src/core/rpc/interfaces/Event.ts +6 -0
- package/src/core/rpc/interfaces/Governance.ts +4 -0
- package/src/core/rpc/interfaces/Interop.ts +4 -0
- package/src/core/rpc/interfaces/KeyValue.ts +4 -0
- package/src/core/rpc/interfaces/Leaderboard.ts +6 -0
- package/src/core/rpc/interfaces/LeaderboardRow.ts +4 -0
- package/src/core/rpc/interfaces/NFT.ts +14 -0
- package/src/core/rpc/interfaces/Nexus.ts +14 -0
- package/src/core/rpc/interfaces/Oracle.ts +4 -0
- package/src/core/rpc/interfaces/Organization.ts +5 -0
- package/src/core/rpc/interfaces/Paginated.ts +7 -0
- package/src/core/rpc/interfaces/Peer.ts +7 -0
- package/src/core/rpc/interfaces/Platform.ts +9 -0
- package/src/core/rpc/interfaces/Receipt.ts +9 -0
- package/src/core/rpc/interfaces/Script.ts +9 -0
- package/src/core/rpc/interfaces/SendRawTx.ts +4 -0
- package/src/core/rpc/interfaces/SignatureResult.ts +4 -0
- package/src/core/rpc/interfaces/Stake.ts +5 -0
- package/src/core/rpc/interfaces/Storage.ts +8 -0
- package/src/core/rpc/interfaces/Swap.ts +12 -0
- package/src/core/rpc/interfaces/Token.ts +19 -0
- package/src/core/rpc/interfaces/TokenData.ts +12 -0
- package/src/core/rpc/interfaces/TokenExternal.ts +4 -0
- package/src/core/rpc/interfaces/TokenPrice.ts +7 -0
- package/src/core/rpc/interfaces/TokenSeries.ts +12 -0
- package/src/core/rpc/interfaces/TransactionData.ts +23 -0
- package/src/core/rpc/interfaces/Validator.ts +4 -0
- package/src/core/rpc/interfaces/index.ts +41 -0
- package/src/core/rpc/phantasma.ts +466 -0
- package/src/core/tx/Transaction.ts +258 -0
- package/src/core/tx/index.ts +2 -0
- package/src/core/tx/utils.ts +106 -0
- package/src/core/types/Address.ts +290 -0
- package/src/core/types/Consensus.ts +181 -0
- package/src/core/types/Contract.ts +324 -0
- package/src/core/types/DomainSettings.ts +128 -0
- package/src/core/types/Ed25519Signature.ts +78 -0
- package/src/core/types/Entropy.ts +16 -0
- package/src/core/types/Extensions/Base16.ts +36 -0
- package/src/core/types/Extensions/Describer.ts +17 -0
- package/src/core/types/Extensions/PBinaryReader.ts +247 -0
- package/src/core/types/Extensions/PBinaryWriter.ts +278 -0
- package/src/core/types/Extensions/index.ts +4 -0
- package/src/core/types/PhantasmaKeys.ts +119 -0
- package/src/core/types/Serialization.ts +211 -0
- package/src/core/types/Stack.ts +46 -0
- package/src/core/types/Timestamp.ts +93 -0
- package/src/core/types/index.ts +11 -0
- package/src/core/utils/index.ts +206 -0
- package/src/core/vm/Contracts.ts +17 -0
- package/src/core/vm/Decoder.ts +162 -0
- package/src/core/vm/Disassembler.ts +1 -0
- package/src/core/vm/EventData.ts +135 -0
- package/src/core/vm/Opcode.ts +74 -0
- package/src/core/vm/ScriptBuilder.ts +588 -0
- package/src/core/vm/VMObject.ts +1162 -0
- package/src/core/vm/VMType.ts +11 -0
- package/src/core/vm/index.ts +7 -0
- package/src/core/vm/utils/DisasmMethodCall.ts +22 -0
- package/src/core/vm/utils/DisasmUtils.ts +89 -0
- package/src/core/vm/utils/index.ts +2 -0
- package/src/index.ts +7 -0
- package/tests/VMObject.test.ts +146 -0
- package/tests/ledger/Address-Transacode.test.ts +26 -0
- package/tests/tx/Transaction.test.ts +274 -0
- package/tests/types/Address.test.ts +26 -0
- package/tests/types/Consensus.test.ts +67 -0
- 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
|
+
};
|