@airgap/tezos 0.13.45-beta.2 → 0.13.45-beta.3
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/package.json +5 -5
- package/v0/actions/GetKtAccountsAction.js +11 -81
- package/v0/actions/GetKtAccountsAction.js.map +1 -1
- package/v0/constants.js +6 -6
- package/v0/constants.js.map +1 -1
- package/v0/index.js +38 -38
- package/v0/index.js.map +1 -1
- package/v0/protocol/TezosAddress.d.ts +0 -1
- package/v0/protocol/TezosAddress.js +41 -81
- package/v0/protocol/TezosAddress.js.map +1 -1
- package/v0/protocol/TezosCryptoClient.d.ts +0 -1
- package/v0/protocol/TezosCryptoClient.js +68 -123
- package/v0/protocol/TezosCryptoClient.js.map +1 -1
- package/v0/protocol/TezosProtocol.js +978 -1631
- package/v0/protocol/TezosProtocol.js.map +1 -1
- package/v0/protocol/TezosProtocolOptions.d.ts +1 -1
- package/v0/protocol/TezosProtocolOptions.js +26 -98
- package/v0/protocol/TezosProtocolOptions.js.map +1 -1
- package/v0/protocol/TezosUtils.d.ts +0 -1
- package/v0/protocol/TezosUtils.js +131 -165
- package/v0/protocol/TezosUtils.js.map +1 -1
- package/v0/protocol/contract/TezosContract.js +243 -472
- package/v0/protocol/contract/TezosContract.js.map +1 -1
- package/v0/protocol/contract/TezosContractCall.js +8 -10
- package/v0/protocol/contract/TezosContractCall.js.map +1 -1
- package/v0/protocol/contract/TezosContractEntrypoint.js +14 -19
- package/v0/protocol/contract/TezosContractEntrypoint.js.map +1 -1
- package/v0/protocol/contract/TezosContractStorage.js +8 -9
- package/v0/protocol/contract/TezosContractStorage.js.map +1 -1
- package/v0/protocol/contract/remote-data/TezosContractRemoteDataFactory.js +8 -25
- package/v0/protocol/contract/remote-data/TezosContractRemoteDataFactory.js.map +1 -1
- package/v0/protocol/contract/remote-data/TezosStorageRemoteData.js +39 -113
- package/v0/protocol/contract/remote-data/TezosStorageRemoteData.js.map +1 -1
- package/v0/protocol/domains/TezosDomains.js +165 -270
- package/v0/protocol/domains/TezosDomains.js.map +1 -1
- package/v0/protocol/fa/TezosBTC.js +19 -98
- package/v0/protocol/fa/TezosBTC.js.map +1 -1
- package/v0/protocol/fa/TezosBTCtez.js +17 -48
- package/v0/protocol/fa/TezosBTCtez.js.map +1 -1
- package/v0/protocol/fa/TezosCTez.js +17 -45
- package/v0/protocol/fa/TezosCTez.js.map +1 -1
- package/v0/protocol/fa/TezosDOGA.js +17 -45
- package/v0/protocol/fa/TezosDOGA.js.map +1 -1
- package/v0/protocol/fa/TezosETHtz.js +10 -68
- package/v0/protocol/fa/TezosETHtz.js.map +1 -1
- package/v0/protocol/fa/TezosFA1Protocol.js +119 -276
- package/v0/protocol/fa/TezosFA1Protocol.js.map +1 -1
- package/v0/protocol/fa/TezosFA1p2Protocol.js +22 -101
- package/v0/protocol/fa/TezosFA1p2Protocol.js.map +1 -1
- package/v0/protocol/fa/TezosFA2Protocol.js +213 -402
- package/v0/protocol/fa/TezosFA2Protocol.js.map +1 -1
- package/v0/protocol/fa/TezosFAProtocol.js +211 -418
- package/v0/protocol/fa/TezosFAProtocol.js.map +1 -1
- package/v0/protocol/fa/TezosFAProtocolOptions.d.ts +2 -2
- package/v0/protocol/fa/TezosFAProtocolOptions.js +92 -195
- package/v0/protocol/fa/TezosFAProtocolOptions.js.map +1 -1
- package/v0/protocol/fa/TezosKolibriUSD.js +11 -70
- package/v0/protocol/fa/TezosKolibriUSD.js.map +1 -1
- package/v0/protocol/fa/TezosPlanty.js +17 -45
- package/v0/protocol/fa/TezosPlanty.js.map +1 -1
- package/v0/protocol/fa/TezosQUIPU.js +17 -48
- package/v0/protocol/fa/TezosQUIPU.js.map +1 -1
- package/v0/protocol/fa/TezosSIRS.js +17 -45
- package/v0/protocol/fa/TezosSIRS.js.map +1 -1
- package/v0/protocol/fa/TezosStaker.js +11 -70
- package/v0/protocol/fa/TezosStaker.js.map +1 -1
- package/v0/protocol/fa/TezosUBTC.js +17 -48
- package/v0/protocol/fa/TezosUBTC.js.map +1 -1
- package/v0/protocol/fa/TezosUDEFI.js +17 -48
- package/v0/protocol/fa/TezosUDEFI.js.map +1 -1
- package/v0/protocol/fa/TezosUSD.js +11 -70
- package/v0/protocol/fa/TezosUSD.js.map +1 -1
- package/v0/protocol/fa/TezosUSDT.js +17 -48
- package/v0/protocol/fa/TezosUSDT.js.map +1 -1
- package/v0/protocol/fa/TezosUUSD.js +8 -27
- package/v0/protocol/fa/TezosUUSD.js.map +1 -1
- package/v0/protocol/fa/TezosUXTZ.js +17 -48
- package/v0/protocol/fa/TezosUXTZ.js.map +1 -1
- package/v0/protocol/fa/TezosWRAP.js +17 -48
- package/v0/protocol/fa/TezosWRAP.js.map +1 -1
- package/v0/protocol/fa/TezosWrapped.js +11 -70
- package/v0/protocol/fa/TezosWrapped.js.map +1 -1
- package/v0/protocol/fa/TezosYOU.js +8 -27
- package/v0/protocol/fa/TezosYOU.js.map +1 -1
- package/v0/protocol/fa/metadata/BigMapTokenMetadataIndexer.js +84 -162
- package/v0/protocol/fa/metadata/BigMapTokenMetadataIndexer.js.map +1 -1
- package/v0/protocol/fa/metadata/ObjktTokenMetadataIndexer.js +37 -87
- package/v0/protocol/fa/metadata/ObjktTokenMetadataIndexer.js.map +1 -1
- package/v0/protocol/indexerClient/TezosIndexerClient.js +115 -259
- package/v0/protocol/indexerClient/TezosIndexerClient.js.map +1 -1
- package/v0/protocol/kt/TezosKtAddress.js +7 -67
- package/v0/protocol/kt/TezosKtAddress.js.map +1 -1
- package/v0/protocol/kt/TezosKtProtocol.js +161 -309
- package/v0/protocol/kt/TezosKtProtocol.js.map +1 -1
- package/v0/protocol/sapling/TezosSaplingAddress.d.ts +0 -1
- package/v0/protocol/sapling/TezosSaplingAddress.js +46 -117
- package/v0/protocol/sapling/TezosSaplingAddress.js.map +1 -1
- package/v0/protocol/sapling/TezosSaplingCryptoClient.d.ts +0 -1
- package/v0/protocol/sapling/TezosSaplingCryptoClient.js +125 -220
- package/v0/protocol/sapling/TezosSaplingCryptoClient.js.map +1 -1
- package/v0/protocol/sapling/TezosSaplingProtocol.d.ts +0 -1
- package/v0/protocol/sapling/TezosSaplingProtocol.js +600 -1127
- package/v0/protocol/sapling/TezosSaplingProtocol.js.map +1 -1
- package/v0/protocol/sapling/TezosSaplingProtocolOptions.d.ts +0 -1
- package/v0/protocol/sapling/TezosSaplingProtocolOptions.js +32 -61
- package/v0/protocol/sapling/TezosSaplingProtocolOptions.js.map +1 -1
- package/v0/protocol/sapling/TezosShieldedTezProtocol.js +50 -134
- package/v0/protocol/sapling/TezosShieldedTezProtocol.js.map +1 -1
- package/v0/protocol/sapling/injector/TezosSaplingInjectorClient.js +10 -56
- package/v0/protocol/sapling/injector/TezosSaplingInjectorClient.js.map +1 -1
- package/v0/protocol/sapling/node/TezosSaplingNodeClient.js +12 -67
- package/v0/protocol/sapling/node/TezosSaplingNodeClient.js.map +1 -1
- package/v0/protocol/sapling/utils/TezosSaplingBookkeeper.d.ts +0 -1
- package/v0/protocol/sapling/utils/TezosSaplingBookkeeper.js +221 -539
- package/v0/protocol/sapling/utils/TezosSaplingBookkeeper.js.map +1 -1
- package/v0/protocol/sapling/utils/TezosSaplingEncoder.d.ts +0 -1
- package/v0/protocol/sapling/utils/TezosSaplingEncoder.js +101 -104
- package/v0/protocol/sapling/utils/TezosSaplingEncoder.js.map +1 -1
- package/v0/protocol/sapling/utils/TezosSaplingForger.d.ts +0 -1
- package/v0/protocol/sapling/utils/TezosSaplingForger.js +107 -266
- package/v0/protocol/sapling/utils/TezosSaplingForger.js.map +1 -1
- package/v0/protocol/sapling/utils/TezosSaplingState.js +110 -239
- package/v0/protocol/sapling/utils/TezosSaplingState.js.map +1 -1
- package/v0/protocol/types/TezosOperationType.js +1 -1
- package/v0/protocol/types/TezosOperationType.js.map +1 -1
- package/v0/protocol/types/contract/BigMapEntry.d.ts +1 -1
- package/v0/protocol/types/contract/TezosContractMetadata.d.ts +2 -2
- package/v0/protocol/types/micheline/MichelineNode.d.ts +7 -7
- package/v0/protocol/types/micheline/MichelineNodeUtils.js +9 -13
- package/v0/protocol/types/micheline/MichelineNodeUtils.js.map +1 -1
- package/v0/protocol/types/michelson/MichelsonType.d.ts +0 -1
- package/v0/protocol/types/michelson/MichelsonType.js +11 -12
- package/v0/protocol/types/michelson/MichelsonType.js.map +1 -1
- package/v0/protocol/types/michelson/MichelsonTypeMeta.js +45 -92
- package/v0/protocol/types/michelson/MichelsonTypeMeta.js.map +1 -1
- package/v0/protocol/types/michelson/MichelsonTypeUtils.d.ts +0 -1
- package/v0/protocol/types/michelson/MichelsonTypeUtils.js +58 -219
- package/v0/protocol/types/michelson/MichelsonTypeUtils.js.map +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonList.js +24 -43
- package/v0/protocol/types/michelson/generics/MichelsonList.js.map +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonMap.js +39 -61
- package/v0/protocol/types/michelson/generics/MichelsonMap.js.map +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonOption.d.ts +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonOption.js +46 -75
- package/v0/protocol/types/michelson/generics/MichelsonOption.js.map +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonOr.d.ts +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonOr.js +50 -76
- package/v0/protocol/types/michelson/generics/MichelsonOr.js.map +1 -1
- package/v0/protocol/types/michelson/generics/MichelsonPair.js +52 -85
- package/v0/protocol/types/michelson/generics/MichelsonPair.js.map +1 -1
- package/v0/protocol/types/michelson/grammar/MichelsonGrammarData.d.ts +1 -1
- package/v0/protocol/types/michelson/grammar/MichelsonGrammarInstruction.d.ts +1 -1
- package/v0/protocol/types/michelson/grammar/MichelsonGrammarType.d.ts +1 -1
- package/v0/protocol/types/michelson/primitives/MichelsonAddress.d.ts +0 -1
- package/v0/protocol/types/michelson/primitives/MichelsonAddress.js +28 -47
- package/v0/protocol/types/michelson/primitives/MichelsonAddress.js.map +1 -1
- package/v0/protocol/types/michelson/primitives/MichelsonBool.js +20 -39
- package/v0/protocol/types/michelson/primitives/MichelsonBool.js.map +1 -1
- package/v0/protocol/types/michelson/primitives/MichelsonBytes.d.ts +0 -1
- package/v0/protocol/types/michelson/primitives/MichelsonBytes.js +35 -54
- package/v0/protocol/types/michelson/primitives/MichelsonBytes.js.map +1 -1
- package/v0/protocol/types/michelson/primitives/MichelsonInt.d.ts +0 -1
- package/v0/protocol/types/michelson/primitives/MichelsonInt.js +30 -49
- package/v0/protocol/types/michelson/primitives/MichelsonInt.js.map +1 -1
- package/v0/protocol/types/michelson/primitives/MichelsonString.d.ts +0 -1
- package/v0/protocol/types/michelson/primitives/MichelsonString.js +33 -52
- package/v0/protocol/types/michelson/primitives/MichelsonString.js.map +1 -1
- package/v0/protocol/types/michelson/primitives/MichelsonUnit.js +14 -34
- package/v0/protocol/types/michelson/primitives/MichelsonUnit.js.map +1 -1
- package/v0/protocol/types/sapling/TezosSaplingStateTree.d.ts +1 -1
- package/v0/protocol/types/sapling/TezosSaplingTransaction.d.ts +0 -1
- package/v0/protocol/types/utils.js +8 -10
- package/v0/protocol/types/utils.js.map +1 -1
- package/v0/serializer/validators/transaction-validator.js +29 -78
- package/v0/serializer/validators/transaction-validator.js.map +1 -1
- package/v0/serializer/validators/transaction-xtz-btc-validator.js +55 -129
- package/v0/serializer/validators/transaction-xtz-btc-validator.js.map +1 -1
- package/v0/serializer/validators/validators.js +43 -103
- package/v0/serializer/validators/validators.js.map +1 -1
- package/v1/block-explorer/TzKTBlockExplorer.js +12 -61
- package/v1/block-explorer/TzKTBlockExplorer.js.map +1 -1
- package/v1/block-explorer/factory.js +4 -5
- package/v1/block-explorer/factory.js.map +1 -1
- package/v1/contract/TezosContract.js +242 -471
- package/v1/contract/TezosContract.js.map +1 -1
- package/v1/contract/TezosContractCall.js +8 -10
- package/v1/contract/TezosContractCall.js.map +1 -1
- package/v1/contract/TezosContractEntrypoint.d.ts +1 -1
- package/v1/contract/TezosContractEntrypoint.js +14 -19
- package/v1/contract/TezosContractEntrypoint.js.map +1 -1
- package/v1/contract/TezosContractStorage.js +8 -9
- package/v1/contract/TezosContractStorage.js.map +1 -1
- package/v1/contract/remote-data/TezosContractRemoteDataFactory.js +8 -25
- package/v1/contract/remote-data/TezosContractRemoteDataFactory.js.map +1 -1
- package/v1/contract/remote-data/TezosStorageRemoteData.js +39 -113
- package/v1/contract/remote-data/TezosStorageRemoteData.js.map +1 -1
- package/v1/crypto/TezosCryptoClient.d.ts +0 -1
- package/v1/crypto/TezosCryptoClient.js +64 -117
- package/v1/crypto/TezosCryptoClient.js.map +1 -1
- package/v1/crypto/TezosSaplingCryptoClient.d.ts +0 -1
- package/v1/crypto/TezosSaplingCryptoClient.js +116 -194
- package/v1/crypto/TezosSaplingCryptoClient.js.map +1 -1
- package/v1/data/TezosAddress.js +13 -14
- package/v1/data/TezosAddress.js.map +1 -1
- package/v1/data/TezosSaplingAddress.d.ts +0 -1
- package/v1/data/TezosSaplingAddress.js +29 -94
- package/v1/data/TezosSaplingAddress.js.map +1 -1
- package/v1/domains/TezosDomains.js +165 -270
- package/v1/domains/TezosDomains.js.map +1 -1
- package/v1/index.js +39 -39
- package/v1/index.js.map +1 -1
- package/v1/indexer/TzKTIndexerClient.js +126 -270
- package/v1/indexer/TzKTIndexerClient.js.map +1 -1
- package/v1/indexer/factory.js +4 -5
- package/v1/indexer/factory.js.map +1 -1
- package/v1/indexer/token-metadata/BigMapTokenMetadataIndexerClient.js +83 -161
- package/v1/indexer/token-metadata/BigMapTokenMetadataIndexerClient.js.map +1 -1
- package/v1/indexer/token-metadata/ObjktTokenMetadataIndexerClient.js +36 -85
- package/v1/indexer/token-metadata/ObjktTokenMetadataIndexerClient.js.map +1 -1
- package/v1/injector/TezosSaplingInjectorClient.js +10 -56
- package/v1/injector/TezosSaplingInjectorClient.js.map +1 -1
- package/v1/module/TezosModule.js +88 -155
- package/v1/module/TezosModule.js.map +1 -1
- package/v1/module.js +2 -3
- package/v1/module.js.map +1 -1
- package/v1/node/TezosSaplingNodeClient.js +12 -67
- package/v1/node/TezosSaplingNodeClient.js.map +1 -1
- package/v1/protocol/TezosProtocol.js +848 -1385
- package/v1/protocol/TezosProtocol.js.map +1 -1
- package/v1/protocol/fa/TezosFA1Protocol.js +81 -205
- package/v1/protocol/fa/TezosFA1Protocol.js.map +1 -1
- package/v1/protocol/fa/TezosFA1p2Protocol.js +32 -111
- package/v1/protocol/fa/TezosFA1p2Protocol.js.map +1 -1
- package/v1/protocol/fa/TezosFA2Protocol.js +174 -332
- package/v1/protocol/fa/TezosFA2Protocol.js.map +1 -1
- package/v1/protocol/fa/TezosFAProtocol.js +255 -528
- package/v1/protocol/fa/TezosFAProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/BTCTezProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/BTCTezProtocol.js +30 -47
- package/v1/protocol/fa/tokens/BTCTezProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/CTezProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/CTezProtocol.js +27 -47
- package/v1/protocol/fa/tokens/CTezProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/DogamiProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/DogamiProtocol.js +27 -47
- package/v1/protocol/fa/tokens/DogamiProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/ETHTezProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/ETHTezProtocol.js +30 -90
- package/v1/protocol/fa/tokens/ETHTezProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/KolibriUSDProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/KolibriUSDProtocol.js +30 -90
- package/v1/protocol/fa/tokens/KolibriUSDProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/PlentyProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/PlentyProtocol.js +30 -90
- package/v1/protocol/fa/tokens/PlentyProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/QuipuswapProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/QuipuswapProtocol.js +30 -47
- package/v1/protocol/fa/tokens/QuipuswapProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/SiriusProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/SiriusProtocol.js +27 -47
- package/v1/protocol/fa/tokens/SiriusProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/StakerProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/StakerProtocol.js +30 -90
- package/v1/protocol/fa/tokens/StakerProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/TetherUSDProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/TetherUSDProtocol.js +30 -47
- package/v1/protocol/fa/tokens/TetherUSDProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/TzBTCProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/TzBTCProtocol.js +27 -47
- package/v1/protocol/fa/tokens/TzBTCProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/UBTCProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/UBTCProtocol.js +30 -47
- package/v1/protocol/fa/tokens/UBTCProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/UDEFIProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/UDEFIProtocol.js +30 -47
- package/v1/protocol/fa/tokens/UDEFIProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/USDTezProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/USDTezProtocol.js +27 -47
- package/v1/protocol/fa/tokens/USDTezProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/UUSDProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/UUSDProtocol.js +30 -47
- package/v1/protocol/fa/tokens/UUSDProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/UXTZProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/UXTZProtocol.js +30 -47
- package/v1/protocol/fa/tokens/UXTZProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/WrapProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/WrapProtocol.js +30 -47
- package/v1/protocol/fa/tokens/WrapProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/WrappedTezosProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/WrappedTezosProtocol.js +27 -47
- package/v1/protocol/fa/tokens/WrappedTezosProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/YouProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/YouProtocol.js +30 -47
- package/v1/protocol/fa/tokens/YouProtocol.js.map +1 -1
- package/v1/protocol/fa/tokens/stXTZProtocol.d.ts +2 -2
- package/v1/protocol/fa/tokens/stXTZProtocol.js +30 -47
- package/v1/protocol/fa/tokens/stXTZProtocol.js.map +1 -1
- package/v1/protocol/kt/TezosKtProtocol.js +254 -498
- package/v1/protocol/kt/TezosKtProtocol.js.map +1 -1
- package/v1/protocol/sapling/TezosSaplingProtocol.d.ts +0 -1
- package/v1/protocol/sapling/TezosSaplingProtocol.js +532 -933
- package/v1/protocol/sapling/TezosSaplingProtocol.js.map +1 -1
- package/v1/protocol/sapling/TezosShieldedTezProtocol.js +72 -164
- package/v1/protocol/sapling/TezosShieldedTezProtocol.js.map +1 -1
- package/v1/serializer/v3/schemas/converter/transaction-converter.js +14 -26
- package/v1/serializer/v3/schemas/converter/transaction-converter.js.map +1 -1
- package/v1/serializer/v3/serializer-companion.js +103 -188
- package/v1/serializer/v3/serializer-companion.js.map +1 -1
- package/v1/serializer/v3/validators/transaction-validator.js +54 -143
- package/v1/serializer/v3/validators/transaction-validator.js.map +1 -1
- package/v1/serializer/v3/validators/validators.js +40 -100
- package/v1/serializer/v3/validators/validators.js.map +1 -1
- package/v1/types/block-explorer.d.ts +1 -1
- package/v1/types/contract/TezosContractMetadata.d.ts +2 -2
- package/v1/types/contract/bigmap/BigMapEntry.d.ts +1 -1
- package/v1/types/crypto.d.ts +2 -2
- package/v1/types/fa/TezosFA1ContractEntrypoint.d.ts +1 -1
- package/v1/types/fa/TezosFA1p2ContractEntrypoint.d.ts +1 -1
- package/v1/types/fa/TezosFA2ContractEntrypoint.d.ts +1 -1
- package/v1/types/indexer.d.ts +1 -1
- package/v1/types/micheline/MichelineNode.d.ts +7 -7
- package/v1/types/micheline/MichelineNodeUtils.js +9 -13
- package/v1/types/micheline/MichelineNodeUtils.js.map +1 -1
- package/v1/types/michelson/MichelsonType.d.ts +0 -1
- package/v1/types/michelson/MichelsonType.js +11 -12
- package/v1/types/michelson/MichelsonType.js.map +1 -1
- package/v1/types/michelson/MichelsonTypeMeta.js +45 -92
- package/v1/types/michelson/MichelsonTypeMeta.js.map +1 -1
- package/v1/types/michelson/MichelsonTypeUtils.d.ts +0 -1
- package/v1/types/michelson/MichelsonTypeUtils.js +58 -219
- package/v1/types/michelson/MichelsonTypeUtils.js.map +1 -1
- package/v1/types/michelson/generics/MichelsonList.js +24 -43
- package/v1/types/michelson/generics/MichelsonList.js.map +1 -1
- package/v1/types/michelson/generics/MichelsonMap.js +39 -61
- package/v1/types/michelson/generics/MichelsonMap.js.map +1 -1
- package/v1/types/michelson/generics/MichelsonOption.d.ts +1 -1
- package/v1/types/michelson/generics/MichelsonOption.js +46 -75
- package/v1/types/michelson/generics/MichelsonOption.js.map +1 -1
- package/v1/types/michelson/generics/MichelsonOr.d.ts +1 -1
- package/v1/types/michelson/generics/MichelsonOr.js +50 -76
- package/v1/types/michelson/generics/MichelsonOr.js.map +1 -1
- package/v1/types/michelson/generics/MichelsonPair.js +52 -85
- package/v1/types/michelson/generics/MichelsonPair.js.map +1 -1
- package/v1/types/michelson/grammar/MichelsonGrammarData.d.ts +1 -1
- package/v1/types/michelson/grammar/MichelsonGrammarInstruction.d.ts +1 -1
- package/v1/types/michelson/grammar/MichelsonGrammarType.d.ts +1 -1
- package/v1/types/michelson/primitives/MichelsonAddress.d.ts +0 -1
- package/v1/types/michelson/primitives/MichelsonAddress.js +28 -47
- package/v1/types/michelson/primitives/MichelsonAddress.js.map +1 -1
- package/v1/types/michelson/primitives/MichelsonBool.js +20 -39
- package/v1/types/michelson/primitives/MichelsonBool.js.map +1 -1
- package/v1/types/michelson/primitives/MichelsonBytes.d.ts +0 -1
- package/v1/types/michelson/primitives/MichelsonBytes.js +35 -54
- package/v1/types/michelson/primitives/MichelsonBytes.js.map +1 -1
- package/v1/types/michelson/primitives/MichelsonInt.d.ts +0 -1
- package/v1/types/michelson/primitives/MichelsonInt.js +30 -49
- package/v1/types/michelson/primitives/MichelsonInt.js.map +1 -1
- package/v1/types/michelson/primitives/MichelsonString.d.ts +0 -1
- package/v1/types/michelson/primitives/MichelsonString.js +33 -52
- package/v1/types/michelson/primitives/MichelsonString.js.map +1 -1
- package/v1/types/michelson/primitives/MichelsonUnit.js +14 -34
- package/v1/types/michelson/primitives/MichelsonUnit.js.map +1 -1
- package/v1/types/network.js +1 -1
- package/v1/types/network.js.map +1 -1
- package/v1/types/operations/TezosOperationType.js +1 -1
- package/v1/types/operations/TezosOperationType.js.map +1 -1
- package/v1/types/protocol.d.ts +3 -3
- package/v1/types/sapling/TezosSaplingExternalMethodProvider.d.ts +0 -1
- package/v1/types/sapling/TezosSaplingStateTree.d.ts +1 -1
- package/v1/types/sapling/TezosSaplingTransaction.d.ts +0 -1
- package/v1/types/staking/TezosDelegatorAction.js +1 -1
- package/v1/types/staking/TezosDelegatorAction.js.map +1 -1
- package/v1/utils/address.js +6 -7
- package/v1/utils/address.js.map +1 -1
- package/v1/utils/bip.d.ts +0 -1
- package/v1/utils/bip.js +6 -7
- package/v1/utils/bip.js.map +1 -1
- package/v1/utils/convert.js +7 -8
- package/v1/utils/convert.js.map +1 -1
- package/v1/utils/encoding.d.ts +0 -1
- package/v1/utils/encoding.js +74 -64
- package/v1/utils/encoding.js.map +1 -1
- package/v1/utils/fa.js +2 -3
- package/v1/utils/fa.js.map +1 -1
- package/v1/utils/key.js +9 -12
- package/v1/utils/key.js.map +1 -1
- package/v1/utils/micheline.js +8 -10
- package/v1/utils/micheline.js.map +1 -1
- package/v1/utils/operations.js +21 -22
- package/v1/utils/operations.js.map +1 -1
- package/v1/utils/pack.d.ts +0 -1
- package/v1/utils/pack.js +65 -107
- package/v1/utils/pack.js.map +1 -1
- package/v1/utils/protocol/fa/TezosFA1Accountant.js +24 -52
- package/v1/utils/protocol/fa/TezosFA1Accountant.js.map +1 -1
- package/v1/utils/protocol/fa/TezosFA2Accountant.js +40 -77
- package/v1/utils/protocol/fa/TezosFA2Accountant.js.map +1 -1
- package/v1/utils/protocol/fa/TezosFAAccountant.js +21 -89
- package/v1/utils/protocol/fa/TezosFAAccountant.js.map +1 -1
- package/v1/utils/protocol/instance.js +90 -26
- package/v1/utils/protocol/instance.js.map +1 -1
- package/v1/utils/protocol/sapling/TezosSaplingAccountant.d.ts +0 -1
- package/v1/utils/protocol/sapling/TezosSaplingAccountant.js +221 -539
- package/v1/utils/protocol/sapling/TezosSaplingAccountant.js.map +1 -1
- package/v1/utils/protocol/sapling/TezosSaplingEncoder.d.ts +0 -1
- package/v1/utils/protocol/sapling/TezosSaplingEncoder.js +101 -104
- package/v1/utils/protocol/sapling/TezosSaplingEncoder.js.map +1 -1
- package/v1/utils/protocol/sapling/TezosSaplingForger.d.ts +0 -1
- package/v1/utils/protocol/sapling/TezosSaplingForger.js +107 -266
- package/v1/utils/protocol/sapling/TezosSaplingForger.js.map +1 -1
- package/v1/utils/protocol/sapling/TezosSaplingState.js +110 -239
- package/v1/utils/protocol/sapling/TezosSaplingState.js.map +1 -1
- package/v1/utils/protocol/tezos/TezosAccountant.js +97 -166
- package/v1/utils/protocol/tezos/TezosAccountant.js.map +1 -1
- package/v1/utils/protocol/tezos/TezosForger.js +21 -76
- package/v1/utils/protocol/tezos/TezosForger.js.map +1 -1
- package/v1/utils/signature.js +5 -6
- package/v1/utils/signature.js.map +1 -1
- package/v1/utils/transaction.d.ts +4 -5
- package/v1/utils/transaction.js +3 -3
- package/v1/utils/transaction.js.map +1 -1
|
@@ -1,30 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __assign = (this && this.__assign) || function () {
|
|
18
|
-
__assign = Object.assign || function(t) {
|
|
19
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
-
s = arguments[i];
|
|
21
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
-
t[p] = s[p];
|
|
23
|
-
}
|
|
24
|
-
return t;
|
|
25
|
-
};
|
|
26
|
-
return __assign.apply(this, arguments);
|
|
27
|
-
};
|
|
28
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
29
3
|
if (k2 === undefined) k2 = k;
|
|
30
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -41,1525 +15,984 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
41
15
|
}) : function(o, v) {
|
|
42
16
|
o["default"] = v;
|
|
43
17
|
});
|
|
44
|
-
var __importStar = (this && this.__importStar) || function (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
62
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
63
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
64
|
-
function step(op) {
|
|
65
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
66
|
-
while (_) try {
|
|
67
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
68
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
69
|
-
switch (op[0]) {
|
|
70
|
-
case 0: case 1: t = op; break;
|
|
71
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
72
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
73
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
74
|
-
default:
|
|
75
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
76
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
77
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
78
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
79
|
-
if (t[2]) _.ops.pop();
|
|
80
|
-
_.trys.pop(); continue;
|
|
81
|
-
}
|
|
82
|
-
op = body.call(thisArg, _);
|
|
83
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
84
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
85
|
-
}
|
|
86
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
87
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
88
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
89
37
|
};
|
|
90
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
91
39
|
exports.TezosProtocol = exports.TezosNetwork = exports.TezosDelegatorAction = void 0;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
40
|
+
const taquito_local_forging_1 = require("@airgap/coinlib-core/dependencies/src/@taquito/local-forging-15.0.1/packages/taquito-local-forging/src/taquito-local-forging");
|
|
41
|
+
const index_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/axios-0.19.0/index"));
|
|
42
|
+
const bignumber_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber"));
|
|
95
43
|
// @ts-ignore
|
|
96
|
-
|
|
44
|
+
const index_2 = require("@airgap/coinlib-core/dependencies/src/bip39-2.5.0/index");
|
|
97
45
|
// @ts-ignore
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
46
|
+
const bs58check = __importStar(require("@airgap/coinlib-core/dependencies/src/bs58check-2.1.2/index"));
|
|
47
|
+
const index_3 = require("@airgap/coinlib-core/dependencies/src/hd-wallet-js-b216450e56954a6e82ace0aade9474673de5d9d5/src/index");
|
|
48
|
+
const coinlib_error_1 = require("@airgap/coinlib-core/errors/coinlib-error");
|
|
49
|
+
const index_4 = require("@airgap/coinlib-core/errors/index");
|
|
50
|
+
const NonExtendedProtocol_1 = require("@airgap/coinlib-core/protocols/NonExtendedProtocol");
|
|
51
|
+
const assert_1 = require("@airgap/coinlib-core/utils/assert");
|
|
52
|
+
const ProtocolSymbols_1 = require("@airgap/coinlib-core/utils/ProtocolSymbols");
|
|
53
|
+
const TezosAddress_1 = require("./TezosAddress");
|
|
54
|
+
const TezosCryptoClient_1 = require("./TezosCryptoClient");
|
|
55
|
+
const TezosProtocolOptions_1 = require("./TezosProtocolOptions");
|
|
56
|
+
const TezosUtils_1 = require("./TezosUtils");
|
|
57
|
+
const TezosOperationType_1 = require("./types/TezosOperationType");
|
|
58
|
+
const MAX_OPERATIONS_PER_GROUP = 200;
|
|
59
|
+
const MAX_GAS_PER_BLOCK = 2600000;
|
|
60
|
+
const GAS_LIMIT_PLACEHOLDER = '1040000';
|
|
61
|
+
const STORAGE_LIMIT_PLACEHOLDER = '60000';
|
|
62
|
+
const FEE_PLACEHOLDER = '0';
|
|
63
|
+
const MINIMAL_FEE = 100;
|
|
64
|
+
const MINIMAL_FEE_PER_GAS_UNIT = 0.1;
|
|
65
|
+
const MINIMAL_FEE_PER_BYTE = 1;
|
|
118
66
|
var TezosDelegatorAction;
|
|
119
67
|
(function (TezosDelegatorAction) {
|
|
120
68
|
TezosDelegatorAction["DELEGATE"] = "delegate";
|
|
121
69
|
TezosDelegatorAction["UNDELEGATE"] = "undelegate";
|
|
122
70
|
TezosDelegatorAction["CHANGE_BAKER"] = "change_baker";
|
|
123
|
-
})(TezosDelegatorAction
|
|
71
|
+
})(TezosDelegatorAction || (exports.TezosDelegatorAction = TezosDelegatorAction = {}));
|
|
124
72
|
// 8.25%
|
|
125
|
-
|
|
73
|
+
const SELF_BOND_REQUIREMENT = 0.0825;
|
|
126
74
|
var TezosNetwork;
|
|
127
75
|
(function (TezosNetwork) {
|
|
128
76
|
TezosNetwork["MAINNET"] = "mainnet";
|
|
129
77
|
TezosNetwork["GHOSTNET"] = "ghostnet";
|
|
130
|
-
})(TezosNetwork
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
78
|
+
})(TezosNetwork || (exports.TezosNetwork = TezosNetwork = {}));
|
|
79
|
+
class TezosProtocol extends NonExtendedProtocol_1.NonExtendedProtocol {
|
|
80
|
+
// TODO: Should we remove these getters and replace the calls to `this.options.network...`?
|
|
81
|
+
get jsonRPCAPI() {
|
|
82
|
+
return this.options.network.rpcUrl;
|
|
83
|
+
}
|
|
84
|
+
constructor(options = new TezosProtocolOptions_1.TezosProtocolOptions()) {
|
|
85
|
+
super();
|
|
86
|
+
this.options = options;
|
|
87
|
+
this.symbol = 'XTZ';
|
|
88
|
+
this.name = 'Tezos';
|
|
89
|
+
this.marketSymbol = 'xtz';
|
|
90
|
+
this.feeSymbol = 'xtz';
|
|
91
|
+
this.decimals = 6;
|
|
92
|
+
this.feeDecimals = 6; // micro tez is the smallest, 1000000 microtez is 1 tez
|
|
93
|
+
this.identifier = ProtocolSymbols_1.MainProtocolSymbols.XTZ;
|
|
144
94
|
// tezbox default
|
|
145
|
-
|
|
95
|
+
this.feeDefaults = {
|
|
146
96
|
low: '0.001420',
|
|
147
97
|
medium: '0.001520',
|
|
148
98
|
high: '0.003000'
|
|
149
99
|
};
|
|
150
|
-
|
|
100
|
+
this.units = [
|
|
151
101
|
{
|
|
152
102
|
unitSymbol: 'XTZ',
|
|
153
103
|
factor: '1'
|
|
154
104
|
}
|
|
155
105
|
];
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
106
|
+
this.supportsHD = false;
|
|
107
|
+
this.standardDerivationPath = `m/44h/1729h/0h/0h`;
|
|
108
|
+
this.addressIsCaseSensitive = true;
|
|
109
|
+
this.addressValidationPattern = '^((tz1|tz2|tz3|tz4|KT1)[1-9A-Za-z]{33}|zet1[1-9A-Za-z]{65})$';
|
|
110
|
+
this.addressPlaceholder = 'tz1...';
|
|
161
111
|
// https://gitlab.com/tezos/tezos/-/blob/master/docs/whitedoc/proof_of_stake.rst
|
|
162
112
|
// cycle has 4096 blocks, which are at least one minute apart
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
return
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
return
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
};
|
|
237
|
-
TezosProtocol.prototype.getFeeDefaults = function () {
|
|
238
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
239
|
-
return __generator(this, function (_a) {
|
|
240
|
-
return [2 /*return*/, this.feeDefaults];
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
};
|
|
244
|
-
TezosProtocol.prototype.getUnits = function () {
|
|
245
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
246
|
-
return __generator(this, function (_a) {
|
|
247
|
-
return [2 /*return*/, this.units];
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
};
|
|
251
|
-
TezosProtocol.prototype.getSupportsHD = function () {
|
|
252
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
253
|
-
return __generator(this, function (_a) {
|
|
254
|
-
return [2 /*return*/, this.supportsHD];
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
};
|
|
258
|
-
TezosProtocol.prototype.getStandardDerivationPath = function () {
|
|
259
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
260
|
-
return __generator(this, function (_a) {
|
|
261
|
-
return [2 /*return*/, this.standardDerivationPath];
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
};
|
|
265
|
-
TezosProtocol.prototype.getAddressIsCaseSensitive = function () {
|
|
266
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
267
|
-
return __generator(this, function (_a) {
|
|
268
|
-
return [2 /*return*/, this.addressIsCaseSensitive];
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
};
|
|
272
|
-
TezosProtocol.prototype.getAddressValidationPattern = function () {
|
|
273
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
274
|
-
return __generator(this, function (_a) {
|
|
275
|
-
return [2 /*return*/, this.addressValidationPattern];
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
};
|
|
279
|
-
TezosProtocol.prototype.getAddressPlaceholder = function () {
|
|
280
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
281
|
-
return __generator(this, function (_a) {
|
|
282
|
-
return [2 /*return*/, this.addressPlaceholder];
|
|
283
|
-
});
|
|
284
|
-
});
|
|
285
|
-
};
|
|
286
|
-
TezosProtocol.prototype.getOptions = function () {
|
|
287
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
288
|
-
return __generator(this, function (_a) {
|
|
289
|
-
return [2 /*return*/, this.options];
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
};
|
|
293
|
-
TezosProtocol.prototype.getBlockExplorerLinkForAddress = function (address) {
|
|
294
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
295
|
-
return __generator(this, function (_a) {
|
|
296
|
-
return [2 /*return*/, this.options.network.blockExplorer.getAddressLink(address)];
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
};
|
|
300
|
-
TezosProtocol.prototype.getBlockExplorerLinkForTxId = function (txId) {
|
|
301
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
302
|
-
return __generator(this, function (_a) {
|
|
303
|
-
return [2 /*return*/, this.options.network.blockExplorer.getTransactionLink(txId)];
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
};
|
|
307
|
-
TezosProtocol.prototype.getPublicKeyFromMnemonic = function (mnemonic, derivationPath, password) {
|
|
308
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
309
|
-
var secret;
|
|
310
|
-
return __generator(this, function (_a) {
|
|
311
|
-
secret = (0, index_2.mnemonicToSeed)(mnemonic, password);
|
|
312
|
-
return [2 /*return*/, this.getPublicKeyFromHexSecret(secret, derivationPath)];
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
};
|
|
316
|
-
TezosProtocol.prototype.getPrivateKeyFromMnemonic = function (mnemonic, derivationPath, password) {
|
|
317
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
318
|
-
var secret;
|
|
319
|
-
return __generator(this, function (_a) {
|
|
320
|
-
secret = (0, index_2.mnemonicToSeed)(mnemonic, password);
|
|
321
|
-
return [2 /*return*/, this.getPrivateKeyFromHexSecret(secret, derivationPath)];
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
};
|
|
113
|
+
this.minCycleDuration = 4096 * 60 * 1000; // ms
|
|
114
|
+
this.transactionFee = new bignumber_1.default('1400');
|
|
115
|
+
this.originationSize = new bignumber_1.default('257');
|
|
116
|
+
this.storageCostPerByte = new bignumber_1.default('1000');
|
|
117
|
+
this.revealFee = new bignumber_1.default('1300');
|
|
118
|
+
this.activationBurn = this.originationSize.times(this.storageCostPerByte);
|
|
119
|
+
this.originationBurn = this.originationSize.times(this.storageCostPerByte); // https://tezos.stackexchange.com/a/787
|
|
120
|
+
this.cryptoClient = new TezosCryptoClient_1.TezosCryptoClient(TezosUtils_1.TezosUtils.tezosPrefixes.edsig);
|
|
121
|
+
}
|
|
122
|
+
async getSymbol() {
|
|
123
|
+
return this.symbol;
|
|
124
|
+
}
|
|
125
|
+
async getName() {
|
|
126
|
+
return this.name;
|
|
127
|
+
}
|
|
128
|
+
async getMarketSymbol() {
|
|
129
|
+
return this.marketSymbol;
|
|
130
|
+
}
|
|
131
|
+
async getAssetSymbol() {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
async getFeeSymbol() {
|
|
135
|
+
return this.feeSymbol;
|
|
136
|
+
}
|
|
137
|
+
async getDecimals() {
|
|
138
|
+
return this.decimals;
|
|
139
|
+
}
|
|
140
|
+
async getFeeDecimals() {
|
|
141
|
+
return this.feeDecimals;
|
|
142
|
+
}
|
|
143
|
+
async getIdentifier() {
|
|
144
|
+
return this.identifier;
|
|
145
|
+
}
|
|
146
|
+
async getFeeDefaults() {
|
|
147
|
+
return this.feeDefaults;
|
|
148
|
+
}
|
|
149
|
+
async getUnits() {
|
|
150
|
+
return this.units;
|
|
151
|
+
}
|
|
152
|
+
async getSupportsHD() {
|
|
153
|
+
return this.supportsHD;
|
|
154
|
+
}
|
|
155
|
+
async getStandardDerivationPath() {
|
|
156
|
+
return this.standardDerivationPath;
|
|
157
|
+
}
|
|
158
|
+
async getAddressIsCaseSensitive() {
|
|
159
|
+
return this.addressIsCaseSensitive;
|
|
160
|
+
}
|
|
161
|
+
async getAddressValidationPattern() {
|
|
162
|
+
return this.addressValidationPattern;
|
|
163
|
+
}
|
|
164
|
+
async getAddressPlaceholder() {
|
|
165
|
+
return this.addressPlaceholder;
|
|
166
|
+
}
|
|
167
|
+
async getOptions() {
|
|
168
|
+
return this.options;
|
|
169
|
+
}
|
|
170
|
+
async getBlockExplorerLinkForAddress(address) {
|
|
171
|
+
return this.options.network.blockExplorer.getAddressLink(address);
|
|
172
|
+
}
|
|
173
|
+
async getBlockExplorerLinkForTxId(txId) {
|
|
174
|
+
return this.options.network.blockExplorer.getTransactionLink(txId);
|
|
175
|
+
}
|
|
176
|
+
async getPublicKeyFromMnemonic(mnemonic, derivationPath, password) {
|
|
177
|
+
const secret = (0, index_2.mnemonicToSeed)(mnemonic, password);
|
|
178
|
+
return this.getPublicKeyFromHexSecret(secret, derivationPath);
|
|
179
|
+
}
|
|
180
|
+
async getPrivateKeyFromMnemonic(mnemonic, derivationPath, password) {
|
|
181
|
+
const secret = (0, index_2.mnemonicToSeed)(mnemonic, password);
|
|
182
|
+
return this.getPrivateKeyFromHexSecret(secret, derivationPath);
|
|
183
|
+
}
|
|
325
184
|
/**
|
|
326
185
|
* Returns the PublicKey as String, derived from a supplied hex-string
|
|
327
186
|
* @param secret HEX-Secret from BIP39
|
|
328
187
|
* @param derivationPath DerivationPath for Key
|
|
329
188
|
*/
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
.publicKey;
|
|
336
|
-
return [2 /*return*/, Buffer.from(publicKey).toString('hex')];
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
};
|
|
189
|
+
async getPublicKeyFromHexSecret(secret, derivationPath) {
|
|
190
|
+
// both AE and Tezos use the same ECC curves (ed25519)
|
|
191
|
+
const { publicKey } = (0, index_3.generateWalletUsingDerivationPath)(Buffer.from(secret, 'hex'), derivationPath); // TODO: Look into typings
|
|
192
|
+
return Buffer.from(publicKey).toString('hex');
|
|
193
|
+
}
|
|
340
194
|
/**
|
|
341
195
|
* Returns the PrivateKey as Buffer, derived from a supplied hex-string
|
|
342
196
|
* @param secret HEX-Secret from BIP39
|
|
343
197
|
* @param derivationPath DerivationPath for Key
|
|
344
198
|
*/
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
return
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
402
|
-
var address, results;
|
|
403
|
-
var _this = this;
|
|
404
|
-
return __generator(this, function (_b) {
|
|
405
|
-
switch (_b.label) {
|
|
406
|
-
case 0:
|
|
407
|
-
address = addresses[0];
|
|
408
|
-
return [4 /*yield*/, this.options.network.extras.indexerClient.getTransactions(address, limit, cursor === null || cursor === void 0 ? void 0 : cursor.offset)];
|
|
409
|
-
case 1:
|
|
410
|
-
results = _b.sent();
|
|
411
|
-
return [2 /*return*/, {
|
|
412
|
-
transactions: results.map(function (transaction) { return (__assign(__assign({}, transaction), { protocolIdentifier: _this.identifier, network: _this.options.network })); }),
|
|
413
|
-
cursor: { offset: ((_a = cursor === null || cursor === void 0 ? void 0 : cursor.offset) !== null && _a !== void 0 ? _a : 0) + results.length }
|
|
414
|
-
}];
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
});
|
|
418
|
-
};
|
|
419
|
-
TezosProtocol.prototype.signWithPrivateKey = function (privateKey, transaction) {
|
|
420
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
421
|
-
var opSignature, signedOpBytes;
|
|
422
|
-
return __generator(this, function (_a) {
|
|
423
|
-
switch (_a.label) {
|
|
424
|
-
case 0: return [4 /*yield*/, this.cryptoClient.operationSignature(Buffer.from(privateKey, 'hex'), transaction)];
|
|
425
|
-
case 1:
|
|
426
|
-
opSignature = _a.sent();
|
|
427
|
-
signedOpBytes = Buffer.concat([Buffer.from(transaction.binaryTransaction, 'hex'), Buffer.from(opSignature)]);
|
|
428
|
-
return [2 /*return*/, signedOpBytes.toString('hex')];
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
};
|
|
433
|
-
TezosProtocol.prototype.getTransactionDetails = function (unsignedTx) {
|
|
434
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
435
|
-
var binaryTransaction, wrappedOperations;
|
|
436
|
-
return __generator(this, function (_a) {
|
|
437
|
-
switch (_a.label) {
|
|
438
|
-
case 0:
|
|
439
|
-
binaryTransaction = unsignedTx.transaction.binaryTransaction;
|
|
440
|
-
return [4 /*yield*/, this.unforgeUnsignedTezosWrappedOperation(binaryTransaction)];
|
|
441
|
-
case 1:
|
|
442
|
-
wrappedOperations = _a.sent();
|
|
443
|
-
return [2 /*return*/, this.getAirGapTxFromWrappedOperations(wrappedOperations)];
|
|
444
|
-
}
|
|
445
|
-
});
|
|
446
|
-
});
|
|
447
|
-
};
|
|
448
|
-
TezosProtocol.prototype.getTransactionDetailsFromSigned = function (signedTx) {
|
|
449
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
450
|
-
var binaryTransaction, wrappedOperations;
|
|
451
|
-
return __generator(this, function (_a) {
|
|
452
|
-
switch (_a.label) {
|
|
453
|
-
case 0:
|
|
454
|
-
binaryTransaction = signedTx.transaction;
|
|
455
|
-
return [4 /*yield*/, this.unforgeSignedTezosWrappedOperation(binaryTransaction)];
|
|
456
|
-
case 1:
|
|
457
|
-
wrappedOperations = _a.sent();
|
|
458
|
-
return [2 /*return*/, this.getAirGapTxFromWrappedOperations(wrappedOperations)];
|
|
459
|
-
}
|
|
460
|
-
});
|
|
461
|
-
});
|
|
462
|
-
};
|
|
463
|
-
TezosProtocol.prototype.getAirGapTxFromWrappedOperations = function (wrappedOperations) {
|
|
464
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
465
|
-
var assertNever;
|
|
466
|
-
var _this = this;
|
|
467
|
-
return __generator(this, function (_a) {
|
|
468
|
-
assertNever = function (_x) { return undefined; };
|
|
469
|
-
return [2 /*return*/, Promise.all(wrappedOperations.contents.map(function (tezosOperation) { return __awaiter(_this, void 0, void 0, function () {
|
|
470
|
-
var operation, partialTxs, _a, tezosSpendOperation_1, tezosOriginationOperation, delegate, delegate;
|
|
471
|
-
var _this = this;
|
|
472
|
-
return __generator(this, function (_b) {
|
|
473
|
-
switch (_b.label) {
|
|
474
|
-
case 0:
|
|
475
|
-
partialTxs = [];
|
|
476
|
-
_a = tezosOperation.kind;
|
|
477
|
-
switch (_a) {
|
|
478
|
-
case TezosOperationType_1.TezosOperationType.REVEAL: return [3 /*break*/, 1];
|
|
479
|
-
case TezosOperationType_1.TezosOperationType.TRANSACTION: return [3 /*break*/, 2];
|
|
480
|
-
case TezosOperationType_1.TezosOperationType.ORIGINATION: return [3 /*break*/, 4];
|
|
481
|
-
case TezosOperationType_1.TezosOperationType.DELEGATION: return [3 /*break*/, 5];
|
|
482
|
-
case TezosOperationType_1.TezosOperationType.ENDORSEMENT: return [3 /*break*/, 6];
|
|
483
|
-
case TezosOperationType_1.TezosOperationType.SEED_NONCE_REVELATION: return [3 /*break*/, 6];
|
|
484
|
-
case TezosOperationType_1.TezosOperationType.DOUBLE_ENDORSEMENT_EVIDENCE: return [3 /*break*/, 6];
|
|
485
|
-
case TezosOperationType_1.TezosOperationType.DOUBLE_BAKING_EVIDENCE: return [3 /*break*/, 6];
|
|
486
|
-
case TezosOperationType_1.TezosOperationType.ACTIVATE_ACCOUNT: return [3 /*break*/, 6];
|
|
487
|
-
case TezosOperationType_1.TezosOperationType.PROPOSALS: return [3 /*break*/, 6];
|
|
488
|
-
case TezosOperationType_1.TezosOperationType.BALLOT: return [3 /*break*/, 6];
|
|
489
|
-
}
|
|
490
|
-
return [3 /*break*/, 7];
|
|
491
|
-
case 1:
|
|
492
|
-
operation = tezosOperation;
|
|
493
|
-
partialTxs = [
|
|
494
|
-
{
|
|
495
|
-
from: [operation.source],
|
|
496
|
-
to: ['Reveal']
|
|
497
|
-
}
|
|
498
|
-
];
|
|
499
|
-
return [3 /*break*/, 8];
|
|
500
|
-
case 2:
|
|
501
|
-
tezosSpendOperation_1 = tezosOperation;
|
|
502
|
-
operation = tezosSpendOperation_1;
|
|
503
|
-
return [4 /*yield*/, this.getTransactionOperationDetails(tezosSpendOperation_1)];
|
|
504
|
-
case 3:
|
|
505
|
-
partialTxs = (_b.sent()).map(function (tx) { return (__assign(__assign({}, tx), { extra: __assign(__assign({}, tx.extra), { parameters: tezosSpendOperation_1.parameters }) })); });
|
|
506
|
-
return [3 /*break*/, 8];
|
|
507
|
-
case 4:
|
|
508
|
-
{
|
|
509
|
-
tezosOriginationOperation = tezosOperation;
|
|
510
|
-
operation = tezosOriginationOperation;
|
|
511
|
-
delegate = tezosOriginationOperation.delegate;
|
|
512
|
-
partialTxs = [
|
|
513
|
-
{
|
|
514
|
-
from: [operation.source],
|
|
515
|
-
amount: new bignumber_1.default(tezosOriginationOperation.balance).toFixed(),
|
|
516
|
-
to: [delegate ? "Delegate: ".concat(delegate) : 'Origination']
|
|
517
|
-
}
|
|
518
|
-
];
|
|
519
|
-
}
|
|
520
|
-
return [3 /*break*/, 8];
|
|
521
|
-
case 5:
|
|
522
|
-
{
|
|
523
|
-
operation = tezosOperation;
|
|
524
|
-
delegate = operation.delegate;
|
|
525
|
-
partialTxs = [
|
|
526
|
-
{
|
|
527
|
-
from: [operation.source],
|
|
528
|
-
to: [delegate ? delegate : 'Undelegate']
|
|
529
|
-
}
|
|
530
|
-
];
|
|
531
|
-
}
|
|
532
|
-
return [3 /*break*/, 8];
|
|
533
|
-
case 6: throw new index_4.UnsupportedError(coinlib_error_1.Domain.TEZOS, 'operation not supported: ' + JSON.stringify(tezosOperation.kind));
|
|
534
|
-
case 7:
|
|
535
|
-
// Exhaustive switch
|
|
536
|
-
assertNever(tezosOperation.kind);
|
|
537
|
-
throw new index_4.NotFoundError(coinlib_error_1.Domain.TEZOS, 'no operation to unforge found');
|
|
538
|
-
case 8: return [2 /*return*/, partialTxs.map(function (partialTx) {
|
|
539
|
-
return __assign({ amount: '0', fee: operation !== undefined ? new bignumber_1.default(operation.fee).toString(10) : '0', from: [], isInbound: false, protocolIdentifier: _this.identifier, network: _this.options.network, to: [], transactionDetails: tezosOperation }, partialTx);
|
|
540
|
-
})];
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
}); })).then(function (airGapTxs) {
|
|
544
|
-
return airGapTxs.reduce(function (flatten, next) { return flatten.concat(next); }, []);
|
|
545
|
-
})];
|
|
546
|
-
});
|
|
547
|
-
});
|
|
548
|
-
};
|
|
549
|
-
TezosProtocol.prototype.getBalanceOfAddresses = function (addresses, _data) {
|
|
550
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
551
|
-
var balance, _i, addresses_1, address, data, error_1;
|
|
552
|
-
return __generator(this, function (_a) {
|
|
553
|
-
switch (_a.label) {
|
|
554
|
-
case 0:
|
|
555
|
-
balance = new bignumber_1.default(0);
|
|
556
|
-
_i = 0, addresses_1 = addresses;
|
|
557
|
-
_a.label = 1;
|
|
558
|
-
case 1:
|
|
559
|
-
if (!(_i < addresses_1.length)) return [3 /*break*/, 6];
|
|
560
|
-
address = addresses_1[_i];
|
|
561
|
-
_a.label = 2;
|
|
562
|
-
case 2:
|
|
563
|
-
_a.trys.push([2, 4, , 5]);
|
|
564
|
-
return [4 /*yield*/, index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address, "/balance"))];
|
|
565
|
-
case 3:
|
|
566
|
-
data = (_a.sent()).data;
|
|
567
|
-
balance = balance.plus(new bignumber_1.default(data));
|
|
568
|
-
return [3 /*break*/, 5];
|
|
569
|
-
case 4:
|
|
570
|
-
error_1 = _a.sent();
|
|
571
|
-
// if node returns 404 (which means 'no account found'), go with 0 balance
|
|
572
|
-
if (error_1.response && error_1.response.status !== 404) {
|
|
573
|
-
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error_1);
|
|
574
|
-
}
|
|
575
|
-
return [3 /*break*/, 5];
|
|
576
|
-
case 5:
|
|
577
|
-
_i++;
|
|
578
|
-
return [3 /*break*/, 1];
|
|
579
|
-
case 6: return [2 /*return*/, balance.toString(10)];
|
|
580
|
-
}
|
|
581
|
-
});
|
|
582
|
-
});
|
|
583
|
-
};
|
|
584
|
-
TezosProtocol.prototype.getBalanceOfPublicKey = function (publicKey, data) {
|
|
585
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
586
|
-
var address;
|
|
587
|
-
return __generator(this, function (_a) {
|
|
588
|
-
switch (_a.label) {
|
|
589
|
-
case 0: return [4 /*yield*/, this.getAddressFromPublicKey(publicKey)];
|
|
590
|
-
case 1:
|
|
591
|
-
address = _a.sent();
|
|
592
|
-
return [2 /*return*/, this.getBalanceOfAddresses([address.address], data)];
|
|
593
|
-
}
|
|
594
|
-
});
|
|
595
|
-
});
|
|
596
|
-
};
|
|
597
|
-
TezosProtocol.prototype.getBalanceOfPublicKeyForSubProtocols = function (publicKey, subProtocols) {
|
|
598
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
599
|
-
return __generator(this, function (_a) {
|
|
600
|
-
return [2 /*return*/, Promise.all(subProtocols.map(function (subProtocol) { return subProtocol.getBalanceOfPublicKey(publicKey).catch(function () { return '0'; }); }))];
|
|
601
|
-
});
|
|
602
|
-
});
|
|
603
|
-
};
|
|
604
|
-
TezosProtocol.prototype.getAvailableBalanceOfAddresses = function (addresses, data) {
|
|
605
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
606
|
-
return __generator(this, function (_a) {
|
|
607
|
-
return [2 /*return*/, this.getBalanceOfAddresses(addresses, data)];
|
|
608
|
-
});
|
|
609
|
-
});
|
|
610
|
-
};
|
|
611
|
-
TezosProtocol.prototype.estimateMaxTransactionValueFromPublicKey = function (publicKey, recipients, fee) {
|
|
612
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
613
|
-
var balance, balanceWrapper;
|
|
614
|
-
return __generator(this, function (_a) {
|
|
615
|
-
switch (_a.label) {
|
|
616
|
-
case 0: return [4 /*yield*/, this.getBalanceOfPublicKey(publicKey)];
|
|
617
|
-
case 1:
|
|
618
|
-
balance = _a.sent();
|
|
619
|
-
balanceWrapper = new bignumber_1.default(balance).minus(1) // Tezos accounts can never be empty. We must leave at least 1 mutez behind.
|
|
620
|
-
;
|
|
621
|
-
return [2 /*return*/, this.estimateMaxTansactionValueWithBalance(publicKey, balanceWrapper, recipients, fee)];
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
});
|
|
625
|
-
};
|
|
626
|
-
TezosProtocol.prototype.estimateMaxTansactionValueWithBalance = function (publicKey, balance, recipients, fee) {
|
|
627
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
628
|
-
var maxFee, estimatedFeeDefaults, error_2, rpcErrors, balanceTooLowError, excess, newMaxBalance, amountWithoutFees;
|
|
629
|
-
return __generator(this, function (_a) {
|
|
630
|
-
switch (_a.label) {
|
|
631
|
-
case 0:
|
|
632
|
-
maxFee = new bignumber_1.default(0);
|
|
633
|
-
if (!(fee !== undefined)) return [3 /*break*/, 1];
|
|
634
|
-
maxFee = new bignumber_1.default(fee);
|
|
635
|
-
return [3 /*break*/, 4];
|
|
636
|
-
case 1:
|
|
637
|
-
_a.trys.push([1, 3, , 4]);
|
|
638
|
-
return [4 /*yield*/, this.estimateFeeDefaultsFromPublicKey(publicKey, recipients, [balance.toFixed()])];
|
|
639
|
-
case 2:
|
|
640
|
-
estimatedFeeDefaults = _a.sent();
|
|
641
|
-
maxFee = new bignumber_1.default(estimatedFeeDefaults.medium).shiftedBy(this.decimals);
|
|
642
|
-
if (maxFee.gte(balance)) {
|
|
643
|
-
maxFee = new bignumber_1.default(0);
|
|
644
|
-
}
|
|
645
|
-
return [3 /*break*/, 4];
|
|
646
|
-
case 3:
|
|
647
|
-
error_2 = _a.sent();
|
|
648
|
-
if (error_2.code !== undefined && error_2.code === index_4.ProtocolErrorType.TRANSACTION_FAILED && Array.isArray(error_2.data)) {
|
|
649
|
-
rpcErrors = error_2.data;
|
|
650
|
-
balanceTooLowError = rpcErrors.find(function (error) { return error.id.endsWith('.contract.balance_too_low'); });
|
|
651
|
-
if (balanceTooLowError !== undefined && balanceTooLowError.amount !== undefined && balanceTooLowError.balance !== undefined) {
|
|
652
|
-
excess = new bignumber_1.default(balanceTooLowError.amount).minus(new bignumber_1.default(balanceTooLowError.balance).minus(1));
|
|
653
|
-
newMaxBalance = balance.minus(excess);
|
|
654
|
-
if (newMaxBalance.gt(0)) {
|
|
655
|
-
return [2 /*return*/, this.estimateMaxTansactionValueWithBalance(publicKey, newMaxBalance, recipients, fee)];
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
throw error_2;
|
|
660
|
-
case 4:
|
|
661
|
-
amountWithoutFees = balance.minus(maxFee);
|
|
662
|
-
if (amountWithoutFees.isNegative()) {
|
|
663
|
-
amountWithoutFees = new bignumber_1.default(0);
|
|
664
|
-
}
|
|
665
|
-
return [2 /*return*/, amountWithoutFees.toFixed()];
|
|
666
|
-
}
|
|
667
|
-
});
|
|
668
|
-
});
|
|
669
|
-
};
|
|
670
|
-
TezosProtocol.prototype.estimateFeeDefaultsFromPublicKey = function (publicKey, recipients, values, _data) {
|
|
671
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
672
|
-
var operations, i, recipient, transaction;
|
|
673
|
-
return __generator(this, function (_a) {
|
|
674
|
-
if (recipients.length !== values.length) {
|
|
675
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'length of recipients and values does not match!');
|
|
676
|
-
}
|
|
677
|
-
operations = [];
|
|
678
|
-
for (i = 0; i < values.length; ++i) {
|
|
679
|
-
recipient = recipients[i];
|
|
680
|
-
transaction = {
|
|
681
|
-
kind: TezosOperationType_1.TezosOperationType.TRANSACTION,
|
|
682
|
-
amount: values[i],
|
|
683
|
-
destination: recipient,
|
|
684
|
-
fee: '0'
|
|
685
|
-
};
|
|
686
|
-
operations.push(transaction);
|
|
687
|
-
}
|
|
688
|
-
if (recipients.length === 0) {
|
|
689
|
-
return [2 /*return*/, this.feeDefaults];
|
|
690
|
-
}
|
|
691
|
-
return [2 /*return*/, this.estimateFeeDefaultsForOperations(publicKey, operations)];
|
|
692
|
-
});
|
|
693
|
-
});
|
|
694
|
-
};
|
|
695
|
-
TezosProtocol.prototype.estimateFeeDefaultsForOperations = function (publicKey, operations) {
|
|
696
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
697
|
-
var estimated, hasReveal, estimatedFee, feeStepFactor, lowFee, mediumFee, highFee;
|
|
698
|
-
return __generator(this, function (_a) {
|
|
699
|
-
switch (_a.label) {
|
|
700
|
-
case 0: return [4 /*yield*/, this.prepareOperations(publicKey, operations)];
|
|
701
|
-
case 1:
|
|
702
|
-
estimated = _a.sent();
|
|
703
|
-
hasReveal = estimated.contents.some(function (op) { return op.kind === TezosOperationType_1.TezosOperationType.REVEAL; });
|
|
704
|
-
estimatedFee = estimated.contents
|
|
705
|
-
.reduce(function (current, next) {
|
|
706
|
-
if (next.fee !== undefined) {
|
|
707
|
-
return current.plus(new bignumber_1.default(next.fee));
|
|
708
|
-
}
|
|
709
|
-
return current;
|
|
710
|
-
}, new bignumber_1.default(0))
|
|
711
|
-
.minus(hasReveal ? this.revealFee : 0)
|
|
712
|
-
.div(hasReveal ? estimated.contents.length - 1 : estimated.contents.length);
|
|
713
|
-
feeStepFactor = new bignumber_1.default(0.2);
|
|
714
|
-
lowFee = estimatedFee;
|
|
715
|
-
mediumFee = lowFee.plus(lowFee.times(feeStepFactor).integerValue(bignumber_1.default.ROUND_FLOOR));
|
|
716
|
-
highFee = mediumFee.plus(mediumFee.times(feeStepFactor).integerValue(bignumber_1.default.ROUND_FLOOR));
|
|
717
|
-
return [2 /*return*/, {
|
|
718
|
-
low: lowFee.shiftedBy(-this.feeDecimals).toFixed(),
|
|
719
|
-
medium: mediumFee.shiftedBy(-this.feeDecimals).toFixed(),
|
|
720
|
-
high: highFee.shiftedBy(-this.feeDecimals).toFixed()
|
|
721
|
-
}];
|
|
722
|
-
}
|
|
723
|
-
});
|
|
724
|
-
});
|
|
725
|
-
};
|
|
726
|
-
TezosProtocol.prototype.prepareTransactionFromPublicKey = function (publicKey, recipients, values, fee, data) {
|
|
727
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
728
|
-
var transactions;
|
|
729
|
-
return __generator(this, function (_a) {
|
|
730
|
-
switch (_a.label) {
|
|
731
|
-
case 0:
|
|
732
|
-
if (recipients.length !== values.length) {
|
|
733
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'length of recipients and values does not match!');
|
|
734
|
-
}
|
|
735
|
-
if (recipients.length > MAX_OPERATIONS_PER_GROUP) {
|
|
736
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, "this transaction exceeds the maximum allowed number of transactions per operation (".concat(MAX_OPERATIONS_PER_GROUP, "). Please use the \"prepareTransactionsFromPublicKey\" method instead."));
|
|
737
|
-
}
|
|
738
|
-
return [4 /*yield*/, this.prepareTransactionsFromPublicKey(publicKey, recipients, values, fee, data)];
|
|
739
|
-
case 1:
|
|
740
|
-
transactions = _a.sent();
|
|
741
|
-
if (transactions.length === 1) {
|
|
742
|
-
return [2 /*return*/, transactions[0]];
|
|
743
|
-
}
|
|
744
|
-
else {
|
|
745
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'Transaction could not be prepared. More or less than 1 operations have been generated.');
|
|
746
|
-
}
|
|
747
|
-
return [2 /*return*/];
|
|
748
|
-
}
|
|
749
|
-
});
|
|
750
|
-
});
|
|
751
|
-
};
|
|
752
|
-
TezosProtocol.prototype.prepareTransactionsFromPublicKey = function (publicKey, recipients, values, fee, data, operationsPerGroup) {
|
|
753
|
-
if (operationsPerGroup === void 0) { operationsPerGroup = MAX_OPERATIONS_PER_GROUP; }
|
|
754
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
755
|
-
var wrappedValues, wrappedFee, operations, addressIndex, addresses, address, results, currentCounter, counter, branch, accountManager, _a, _b, balance, _c, wrappedOperations, allOperations, numberOfGroups, startingCounter, i, start, end, operationsGroup, wrappedOperationWithEstimatedGas, _d, _e;
|
|
756
|
-
return __generator(this, function (_f) {
|
|
757
|
-
switch (_f.label) {
|
|
758
|
-
case 0:
|
|
759
|
-
wrappedValues = values.map(function (value) { return new bignumber_1.default(value); });
|
|
760
|
-
wrappedFee = new bignumber_1.default(fee);
|
|
761
|
-
if (recipients.length !== wrappedValues.length) {
|
|
762
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'length of recipients and values does not match!');
|
|
763
|
-
}
|
|
764
|
-
operations = [];
|
|
765
|
-
addressIndex = data && data.addressIndex ? data.addressIndex : 0;
|
|
766
|
-
return [4 /*yield*/, this.getAddressesFromPublicKey(publicKey).then(function (addresses) {
|
|
767
|
-
return addresses.map(function (address) { return address.address; });
|
|
768
|
-
})];
|
|
769
|
-
case 1:
|
|
770
|
-
addresses = _f.sent();
|
|
771
|
-
if (!addresses[addressIndex]) {
|
|
772
|
-
throw new index_4.NotFoundError(coinlib_error_1.Domain.TEZOS, 'no kt-address with this index exists');
|
|
773
|
-
}
|
|
774
|
-
address = addresses[addressIndex];
|
|
775
|
-
return [4 /*yield*/, Promise.all([
|
|
776
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address, "/counter")),
|
|
777
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head~2/hash")),
|
|
778
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address, "/manager_key"))
|
|
779
|
-
]).catch(function (error) {
|
|
780
|
-
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
781
|
-
})];
|
|
782
|
-
case 2:
|
|
783
|
-
results = _f.sent();
|
|
784
|
-
currentCounter = new bignumber_1.default(results[0].data);
|
|
785
|
-
counter = currentCounter.plus(1);
|
|
786
|
-
branch = results[1].data;
|
|
787
|
-
accountManager = results[2].data;
|
|
788
|
-
if (!!accountManager) return [3 /*break*/, 4];
|
|
789
|
-
_b = (_a = operations).push;
|
|
790
|
-
return [4 /*yield*/, this.createRevealOperation(counter, publicKey, address)];
|
|
791
|
-
case 3:
|
|
792
|
-
_b.apply(_a, [_f.sent()]);
|
|
793
|
-
counter = counter.plus(1);
|
|
794
|
-
_f.label = 4;
|
|
795
|
-
case 4:
|
|
796
|
-
_c = bignumber_1.default.bind;
|
|
797
|
-
return [4 /*yield*/, this.getBalanceOfPublicKey(publicKey)];
|
|
798
|
-
case 5:
|
|
799
|
-
balance = new (_c.apply(bignumber_1.default, [void 0, _f.sent()]))();
|
|
800
|
-
wrappedOperations = [];
|
|
801
|
-
return [4 /*yield*/, this.createTransactionOperations(operations, recipients, wrappedValues, wrappedFee, address, counter, balance)];
|
|
802
|
-
case 6:
|
|
803
|
-
allOperations = _f.sent();
|
|
804
|
-
allOperations = operations.concat(allOperations); // if we have a reveal in operations, we need to make sure it is present in the allOperations array
|
|
805
|
-
numberOfGroups = Math.ceil(allOperations.length / operationsPerGroup);
|
|
806
|
-
startingCounter = numberOfGroups > 1 ? currentCounter.plus(1) : undefined;
|
|
807
|
-
i = 0;
|
|
808
|
-
_f.label = 7;
|
|
809
|
-
case 7:
|
|
810
|
-
if (!(i < numberOfGroups)) return [3 /*break*/, 11];
|
|
811
|
-
start = i * operationsPerGroup;
|
|
812
|
-
end = start + operationsPerGroup;
|
|
813
|
-
operationsGroup = allOperations.slice(start, end);
|
|
814
|
-
return [4 /*yield*/, this.estimateAndReplaceLimitsAndFee({
|
|
815
|
-
branch: branch,
|
|
816
|
-
contents: operationsGroup
|
|
817
|
-
}, false, startingCounter)];
|
|
818
|
-
case 8:
|
|
819
|
-
wrappedOperationWithEstimatedGas = _f.sent();
|
|
820
|
-
_e = (_d = wrappedOperations).push;
|
|
821
|
-
return [4 /*yield*/, this.forgeAndWrapOperations(wrappedOperationWithEstimatedGas)];
|
|
822
|
-
case 9:
|
|
823
|
-
_e.apply(_d, [_f.sent()]);
|
|
824
|
-
_f.label = 10;
|
|
825
|
-
case 10:
|
|
826
|
-
i++;
|
|
827
|
-
return [3 /*break*/, 7];
|
|
828
|
-
case 11: return [2 /*return*/, wrappedOperations];
|
|
829
|
-
}
|
|
830
|
-
});
|
|
831
|
-
});
|
|
832
|
-
};
|
|
833
|
-
TezosProtocol.prototype.getTransactionOperationDetails = function (transactionOperation) {
|
|
834
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
835
|
-
return __generator(this, function (_a) {
|
|
836
|
-
return [2 /*return*/, [
|
|
199
|
+
async getPrivateKeyFromHexSecret(secret, derivationPath) {
|
|
200
|
+
// both AE and Tezos use the same ECC curves (ed25519)
|
|
201
|
+
const { secretKey } = (0, index_3.generateWalletUsingDerivationPath)(Buffer.from(secret, 'hex'), derivationPath); // TODO: Look into typings
|
|
202
|
+
return Buffer.from(secretKey).toString('hex');
|
|
203
|
+
}
|
|
204
|
+
async getAddressFromPublicKey(publicKey, cursor) {
|
|
205
|
+
const address = await TezosAddress_1.TezosAddress.fromPublicKey(publicKey);
|
|
206
|
+
return {
|
|
207
|
+
address: address.asString(),
|
|
208
|
+
cursor: { hasNext: false }
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
async getAddressesFromPublicKey(publicKey, cursor) {
|
|
212
|
+
const address = await this.getAddressFromPublicKey(publicKey, cursor);
|
|
213
|
+
return [address];
|
|
214
|
+
}
|
|
215
|
+
async getTransactionsFromPublicKey(publicKey, limit, cursor) {
|
|
216
|
+
const addresses = await this.getAddressesFromPublicKey(publicKey).then((addresses) => addresses.map((address) => address.address));
|
|
217
|
+
return this.getTransactionsFromAddresses(addresses, limit, cursor);
|
|
218
|
+
}
|
|
219
|
+
async getTransactionsFromAddresses(addresses, limit, cursor) {
|
|
220
|
+
const address = addresses[0];
|
|
221
|
+
const results = await this.options.network.extras.indexerClient.getTransactions(address, limit, cursor?.offset);
|
|
222
|
+
return {
|
|
223
|
+
transactions: results.map((transaction) => ({
|
|
224
|
+
...transaction,
|
|
225
|
+
protocolIdentifier: this.identifier,
|
|
226
|
+
network: this.options.network
|
|
227
|
+
})),
|
|
228
|
+
cursor: { offset: (cursor?.offset ?? 0) + results.length }
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
async signWithPrivateKey(privateKey, transaction) {
|
|
232
|
+
const opSignature = await this.cryptoClient.operationSignature(Buffer.from(privateKey, 'hex'), transaction);
|
|
233
|
+
const signedOpBytes = Buffer.concat([Buffer.from(transaction.binaryTransaction, 'hex'), Buffer.from(opSignature)]);
|
|
234
|
+
return signedOpBytes.toString('hex');
|
|
235
|
+
}
|
|
236
|
+
async getTransactionDetails(unsignedTx) {
|
|
237
|
+
const binaryTransaction = unsignedTx.transaction.binaryTransaction;
|
|
238
|
+
const wrappedOperations = await this.unforgeUnsignedTezosWrappedOperation(binaryTransaction);
|
|
239
|
+
return this.getAirGapTxFromWrappedOperations(wrappedOperations);
|
|
240
|
+
}
|
|
241
|
+
async getTransactionDetailsFromSigned(signedTx) {
|
|
242
|
+
const binaryTransaction = signedTx.transaction;
|
|
243
|
+
const wrappedOperations = await this.unforgeSignedTezosWrappedOperation(binaryTransaction);
|
|
244
|
+
return this.getAirGapTxFromWrappedOperations(wrappedOperations);
|
|
245
|
+
}
|
|
246
|
+
async getAirGapTxFromWrappedOperations(wrappedOperations) {
|
|
247
|
+
const assertNever = (_x) => undefined;
|
|
248
|
+
return Promise.all(wrappedOperations.contents.map(async (tezosOperation) => {
|
|
249
|
+
let operation;
|
|
250
|
+
let partialTxs = [];
|
|
251
|
+
switch (tezosOperation.kind) {
|
|
252
|
+
case TezosOperationType_1.TezosOperationType.REVEAL:
|
|
253
|
+
operation = tezosOperation;
|
|
254
|
+
partialTxs = [
|
|
837
255
|
{
|
|
838
|
-
from: [
|
|
839
|
-
|
|
840
|
-
to: [transactionOperation.destination] // contract destination but should be the address of actual receiver
|
|
256
|
+
from: [operation.source],
|
|
257
|
+
to: ['Reveal']
|
|
841
258
|
}
|
|
842
|
-
]
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
amountUsedByPreviousOperations = this.getAmountUsedByPreviousOperations(previousOperations);
|
|
853
|
-
operations = [];
|
|
854
|
-
if (!amountUsedByPreviousOperations.isZero()) {
|
|
855
|
-
if (balance.isLessThan(wrappedValues[0].plus(wrappedFee).plus(amountUsedByPreviousOperations))) {
|
|
856
|
-
// if not, make room for the init fee
|
|
857
|
-
wrappedValues[0] = wrappedValues[0].minus(amountUsedByPreviousOperations); // deduct fee from balance
|
|
858
|
-
}
|
|
259
|
+
];
|
|
260
|
+
break;
|
|
261
|
+
case TezosOperationType_1.TezosOperationType.TRANSACTION:
|
|
262
|
+
const tezosSpendOperation = tezosOperation;
|
|
263
|
+
operation = tezosSpendOperation;
|
|
264
|
+
partialTxs = (await this.getTransactionOperationDetails(tezosSpendOperation)).map((tx) => ({
|
|
265
|
+
...tx,
|
|
266
|
+
extra: {
|
|
267
|
+
...tx.extra,
|
|
268
|
+
parameters: tezosSpendOperation.parameters
|
|
859
269
|
}
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
// If we don't have enough funds to pay the activation + fee, we throw an error
|
|
873
|
-
throw new index_4.BalanceError(coinlib_error_1.Domain.TEZOS, 'Insufficient balance to pay activation burn!');
|
|
270
|
+
}));
|
|
271
|
+
break;
|
|
272
|
+
case TezosOperationType_1.TezosOperationType.ORIGINATION:
|
|
273
|
+
{
|
|
274
|
+
const tezosOriginationOperation = tezosOperation;
|
|
275
|
+
operation = tezosOriginationOperation;
|
|
276
|
+
const delegate = tezosOriginationOperation.delegate;
|
|
277
|
+
partialTxs = [
|
|
278
|
+
{
|
|
279
|
+
from: [operation.source],
|
|
280
|
+
amount: new bignumber_1.default(tezosOriginationOperation.balance).toFixed(),
|
|
281
|
+
to: [delegate ? `Delegate: ${delegate}` : 'Origination']
|
|
874
282
|
}
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
283
|
+
];
|
|
284
|
+
}
|
|
285
|
+
break;
|
|
286
|
+
case TezosOperationType_1.TezosOperationType.DELEGATION:
|
|
287
|
+
{
|
|
288
|
+
operation = tezosOperation;
|
|
289
|
+
const delegate = operation.delegate;
|
|
290
|
+
partialTxs = [
|
|
291
|
+
{
|
|
292
|
+
from: [operation.source],
|
|
293
|
+
to: [delegate ? delegate : 'Undelegate']
|
|
879
294
|
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
TezosProtocol.prototype.forgeAndWrapOperations = function (tezosWrappedOperation) {
|
|
909
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
910
|
-
var binaryTx, error_3;
|
|
911
|
-
return __generator(this, function (_a) {
|
|
912
|
-
switch (_a.label) {
|
|
913
|
-
case 0:
|
|
914
|
-
_a.trys.push([0, 2, , 3]);
|
|
915
|
-
return [4 /*yield*/, this.forgeTezosOperation(tezosWrappedOperation)];
|
|
916
|
-
case 1:
|
|
917
|
-
binaryTx = _a.sent();
|
|
918
|
-
return [2 /*return*/, { binaryTransaction: binaryTx }];
|
|
919
|
-
case 2:
|
|
920
|
-
error_3 = _a.sent();
|
|
921
|
-
throw new index_4.OperationFailedError(coinlib_error_1.Domain.TEZOS, "Forging Tezos TX failed with ".concat(JSON.stringify(error_3.message)));
|
|
922
|
-
case 3: return [2 /*return*/];
|
|
923
|
-
}
|
|
924
|
-
});
|
|
925
|
-
});
|
|
926
|
-
};
|
|
927
|
-
TezosProtocol.prototype.getDefaultDelegatee = function () {
|
|
928
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
929
|
-
var activeBakers;
|
|
930
|
-
return __generator(this, function (_a) {
|
|
931
|
-
switch (_a.label) {
|
|
932
|
-
case 0: return [4 /*yield*/, index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/delegates?active"))];
|
|
933
|
-
case 1:
|
|
934
|
-
activeBakers = (_a.sent()).data;
|
|
935
|
-
return [2 /*return*/, activeBakers[0] || ''];
|
|
936
|
-
}
|
|
295
|
+
];
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
case TezosOperationType_1.TezosOperationType.ENDORSEMENT:
|
|
299
|
+
case TezosOperationType_1.TezosOperationType.SEED_NONCE_REVELATION:
|
|
300
|
+
case TezosOperationType_1.TezosOperationType.DOUBLE_ENDORSEMENT_EVIDENCE:
|
|
301
|
+
case TezosOperationType_1.TezosOperationType.DOUBLE_BAKING_EVIDENCE:
|
|
302
|
+
case TezosOperationType_1.TezosOperationType.ACTIVATE_ACCOUNT:
|
|
303
|
+
case TezosOperationType_1.TezosOperationType.PROPOSALS:
|
|
304
|
+
case TezosOperationType_1.TezosOperationType.BALLOT:
|
|
305
|
+
throw new index_4.UnsupportedError(coinlib_error_1.Domain.TEZOS, 'operation not supported: ' + JSON.stringify(tezosOperation.kind));
|
|
306
|
+
default:
|
|
307
|
+
// Exhaustive switch
|
|
308
|
+
assertNever(tezosOperation.kind);
|
|
309
|
+
throw new index_4.NotFoundError(coinlib_error_1.Domain.TEZOS, 'no operation to unforge found');
|
|
310
|
+
}
|
|
311
|
+
return partialTxs.map((partialTx) => {
|
|
312
|
+
return {
|
|
313
|
+
amount: '0',
|
|
314
|
+
fee: operation !== undefined ? new bignumber_1.default(operation.fee).toString(10) : '0',
|
|
315
|
+
from: [],
|
|
316
|
+
isInbound: false,
|
|
317
|
+
protocolIdentifier: this.identifier,
|
|
318
|
+
network: this.options.network,
|
|
319
|
+
to: [],
|
|
320
|
+
transactionDetails: tezosOperation,
|
|
321
|
+
...partialTx
|
|
322
|
+
};
|
|
937
323
|
});
|
|
938
|
-
});
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
324
|
+
})).then((airGapTxs) => airGapTxs.reduce((flatten, next) => flatten.concat(next), []));
|
|
325
|
+
}
|
|
326
|
+
async getBalanceOfAddresses(addresses, _data) {
|
|
327
|
+
let balance = new bignumber_1.default(0);
|
|
328
|
+
for (const address of addresses) {
|
|
329
|
+
try {
|
|
330
|
+
const { data } = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}/balance`);
|
|
331
|
+
balance = balance.plus(new bignumber_1.default(data));
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
// if node returns 404 (which means 'no account found'), go with 0 balance
|
|
335
|
+
if (error.response && error.response.status !== 404) {
|
|
336
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
949
337
|
}
|
|
950
|
-
}
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return balance.toString(10);
|
|
341
|
+
}
|
|
342
|
+
async getBalanceOfPublicKey(publicKey, data) {
|
|
343
|
+
const address = await this.getAddressFromPublicKey(publicKey);
|
|
344
|
+
return this.getBalanceOfAddresses([address.address], data);
|
|
345
|
+
}
|
|
346
|
+
async getBalanceOfPublicKeyForSubProtocols(publicKey, subProtocols) {
|
|
347
|
+
return Promise.all(subProtocols.map((subProtocol) => subProtocol.getBalanceOfPublicKey(publicKey).catch(() => '0')));
|
|
348
|
+
}
|
|
349
|
+
async getAvailableBalanceOfAddresses(addresses, data) {
|
|
350
|
+
return this.getBalanceOfAddresses(addresses, data);
|
|
351
|
+
}
|
|
352
|
+
async estimateMaxTransactionValueFromPublicKey(publicKey, recipients, fee) {
|
|
353
|
+
const balance = await this.getBalanceOfPublicKey(publicKey);
|
|
354
|
+
const balanceWrapper = new bignumber_1.default(balance).minus(1); // Tezos accounts can never be empty. We must leave at least 1 mutez behind.
|
|
355
|
+
return this.estimateMaxTansactionValueWithBalance(publicKey, balanceWrapper, recipients, fee);
|
|
356
|
+
}
|
|
357
|
+
async estimateMaxTansactionValueWithBalance(publicKey, balance, recipients, fee) {
|
|
358
|
+
let maxFee = new bignumber_1.default(0);
|
|
359
|
+
if (fee !== undefined) {
|
|
360
|
+
maxFee = new bignumber_1.default(fee);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
try {
|
|
364
|
+
const estimatedFeeDefaults = await this.estimateFeeDefaultsFromPublicKey(publicKey, recipients, [balance.toFixed()]);
|
|
365
|
+
maxFee = new bignumber_1.default(estimatedFeeDefaults.medium).shiftedBy(this.decimals);
|
|
366
|
+
if (maxFee.gte(balance)) {
|
|
367
|
+
maxFee = new bignumber_1.default(0);
|
|
962
368
|
}
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
return [2 /*return*/, {
|
|
976
|
-
status: isBakingActive ? 'Active' : 'Inactive',
|
|
977
|
-
address: address
|
|
978
|
-
}];
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
if (error.code !== undefined && error.code === index_4.ProtocolErrorType.TRANSACTION_FAILED && Array.isArray(error.data)) {
|
|
372
|
+
const rpcErrors = error.data;
|
|
373
|
+
const balanceTooLowError = rpcErrors.find((error) => error.id.endsWith('.contract.balance_too_low'));
|
|
374
|
+
if (balanceTooLowError !== undefined && balanceTooLowError.amount !== undefined && balanceTooLowError.balance !== undefined) {
|
|
375
|
+
const excess = new bignumber_1.default(balanceTooLowError.amount).minus(new bignumber_1.default(balanceTooLowError.balance).minus(1));
|
|
376
|
+
const newMaxBalance = balance.minus(excess);
|
|
377
|
+
if (newMaxBalance.gt(0)) {
|
|
378
|
+
return this.estimateMaxTansactionValueWithBalance(publicKey, newMaxBalance, recipients, fee);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
979
381
|
}
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
382
|
+
throw error;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
let amountWithoutFees = balance.minus(maxFee);
|
|
386
|
+
if (amountWithoutFees.isNegative()) {
|
|
387
|
+
amountWithoutFees = new bignumber_1.default(0);
|
|
388
|
+
}
|
|
389
|
+
return amountWithoutFees.toFixed();
|
|
390
|
+
}
|
|
391
|
+
async estimateFeeDefaultsFromPublicKey(publicKey, recipients, values, _data) {
|
|
392
|
+
if (recipients.length !== values.length) {
|
|
393
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'length of recipients and values does not match!');
|
|
394
|
+
}
|
|
395
|
+
const operations = [];
|
|
396
|
+
for (let i = 0; i < values.length; ++i) {
|
|
397
|
+
const recipient = recipients[i];
|
|
398
|
+
const transaction = {
|
|
399
|
+
kind: TezosOperationType_1.TezosOperationType.TRANSACTION,
|
|
400
|
+
amount: values[i],
|
|
401
|
+
destination: recipient,
|
|
402
|
+
fee: '0'
|
|
403
|
+
};
|
|
404
|
+
operations.push(transaction);
|
|
405
|
+
}
|
|
406
|
+
if (recipients.length === 0) {
|
|
407
|
+
return this.feeDefaults;
|
|
408
|
+
}
|
|
409
|
+
return this.estimateFeeDefaultsForOperations(publicKey, operations);
|
|
410
|
+
}
|
|
411
|
+
async estimateFeeDefaultsForOperations(publicKey, operations) {
|
|
412
|
+
const estimated = await this.prepareOperations(publicKey, operations);
|
|
413
|
+
const hasReveal = estimated.contents.some((op) => op.kind === TezosOperationType_1.TezosOperationType.REVEAL);
|
|
414
|
+
const estimatedFee = estimated.contents
|
|
415
|
+
.reduce((current, next) => {
|
|
416
|
+
if (next.fee !== undefined) {
|
|
417
|
+
return current.plus(new bignumber_1.default(next.fee));
|
|
418
|
+
}
|
|
419
|
+
return current;
|
|
420
|
+
}, new bignumber_1.default(0))
|
|
421
|
+
.minus(hasReveal ? this.revealFee : 0)
|
|
422
|
+
.div(hasReveal ? estimated.contents.length - 1 : estimated.contents.length);
|
|
423
|
+
const feeStepFactor = new bignumber_1.default(0.2);
|
|
424
|
+
const lowFee = estimatedFee;
|
|
425
|
+
const mediumFee = lowFee.plus(lowFee.times(feeStepFactor).integerValue(bignumber_1.default.ROUND_FLOOR));
|
|
426
|
+
const highFee = mediumFee.plus(mediumFee.times(feeStepFactor).integerValue(bignumber_1.default.ROUND_FLOOR));
|
|
427
|
+
return {
|
|
428
|
+
low: lowFee.shiftedBy(-this.feeDecimals).toFixed(),
|
|
429
|
+
medium: mediumFee.shiftedBy(-this.feeDecimals).toFixed(),
|
|
430
|
+
high: highFee.shiftedBy(-this.feeDecimals).toFixed()
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
async prepareTransactionFromPublicKey(publicKey, recipients, values, fee, data) {
|
|
434
|
+
if (recipients.length !== values.length) {
|
|
435
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'length of recipients and values does not match!');
|
|
436
|
+
}
|
|
437
|
+
if (recipients.length > MAX_OPERATIONS_PER_GROUP) {
|
|
438
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, `this transaction exceeds the maximum allowed number of transactions per operation (${MAX_OPERATIONS_PER_GROUP}). Please use the "prepareTransactionsFromPublicKey" method instead.`);
|
|
439
|
+
}
|
|
440
|
+
const transactions = await this.prepareTransactionsFromPublicKey(publicKey, recipients, values, fee, data);
|
|
441
|
+
if (transactions.length === 1) {
|
|
442
|
+
return transactions[0];
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'Transaction could not be prepared. More or less than 1 operations have been generated.');
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
async prepareTransactionsFromPublicKey(publicKey, recipients, values, fee, data, operationsPerGroup = MAX_OPERATIONS_PER_GROUP) {
|
|
449
|
+
const wrappedValues = values.map((value) => new bignumber_1.default(value));
|
|
450
|
+
const wrappedFee = new bignumber_1.default(fee);
|
|
451
|
+
if (recipients.length !== wrappedValues.length) {
|
|
452
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'length of recipients and values does not match!');
|
|
453
|
+
}
|
|
454
|
+
const operations = [];
|
|
455
|
+
// check if we got an address-index
|
|
456
|
+
const addressIndex = data && data.addressIndex ? data.addressIndex : 0;
|
|
457
|
+
const addresses = await this.getAddressesFromPublicKey(publicKey).then((addresses) => addresses.map((address) => address.address));
|
|
458
|
+
if (!addresses[addressIndex]) {
|
|
459
|
+
throw new index_4.NotFoundError(coinlib_error_1.Domain.TEZOS, 'no kt-address with this index exists');
|
|
460
|
+
}
|
|
461
|
+
const address = addresses[addressIndex];
|
|
462
|
+
const results = await Promise.all([
|
|
463
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}/counter`),
|
|
464
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head~2/hash`),
|
|
465
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}/manager_key`)
|
|
466
|
+
]).catch((error) => {
|
|
467
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
468
|
+
});
|
|
469
|
+
const currentCounter = new bignumber_1.default(results[0].data);
|
|
470
|
+
let counter = currentCounter.plus(1);
|
|
471
|
+
const branch = results[1].data;
|
|
472
|
+
const accountManager = results[2].data;
|
|
473
|
+
// check if we have revealed the address already
|
|
474
|
+
if (!accountManager) {
|
|
475
|
+
operations.push(await this.createRevealOperation(counter, publicKey, address));
|
|
476
|
+
counter = counter.plus(1);
|
|
477
|
+
}
|
|
478
|
+
const balance = new bignumber_1.default(await this.getBalanceOfPublicKey(publicKey));
|
|
479
|
+
const wrappedOperations = [];
|
|
480
|
+
let allOperations = await this.createTransactionOperations(operations, recipients, wrappedValues, wrappedFee, address, counter, balance);
|
|
481
|
+
allOperations = operations.concat(allOperations); // if we have a reveal in operations, we need to make sure it is present in the allOperations array
|
|
482
|
+
const numberOfGroups = Math.ceil(allOperations.length / operationsPerGroup);
|
|
483
|
+
const startingCounter = numberOfGroups > 1 ? currentCounter.plus(1) : undefined;
|
|
484
|
+
for (let i = 0; i < numberOfGroups; i++) {
|
|
485
|
+
const start = i * operationsPerGroup;
|
|
486
|
+
const end = start + operationsPerGroup;
|
|
487
|
+
const operationsGroup = allOperations.slice(start, end);
|
|
488
|
+
const wrappedOperationWithEstimatedGas = await this.estimateAndReplaceLimitsAndFee({
|
|
489
|
+
branch,
|
|
490
|
+
contents: operationsGroup
|
|
491
|
+
}, false, startingCounter);
|
|
492
|
+
wrappedOperations.push(await this.forgeAndWrapOperations(wrappedOperationWithEstimatedGas));
|
|
493
|
+
}
|
|
494
|
+
return wrappedOperations;
|
|
495
|
+
}
|
|
496
|
+
async getTransactionOperationDetails(transactionOperation) {
|
|
497
|
+
return [
|
|
498
|
+
{
|
|
499
|
+
from: [transactionOperation.source],
|
|
500
|
+
amount: new bignumber_1.default(transactionOperation.amount).toFixed(),
|
|
501
|
+
to: [transactionOperation.destination] // contract destination but should be the address of actual receiver
|
|
502
|
+
}
|
|
503
|
+
];
|
|
504
|
+
}
|
|
505
|
+
async createTransactionOperations(previousOperations, recipients, wrappedValues, wrappedFee, address, counter, balance) {
|
|
506
|
+
const amountUsedByPreviousOperations = this.getAmountUsedByPreviousOperations(previousOperations);
|
|
507
|
+
const operations = [];
|
|
508
|
+
if (!amountUsedByPreviousOperations.isZero()) {
|
|
509
|
+
if (balance.isLessThan(wrappedValues[0].plus(wrappedFee).plus(amountUsedByPreviousOperations))) {
|
|
510
|
+
// if not, make room for the init fee
|
|
511
|
+
wrappedValues[0] = wrappedValues[0].minus(amountUsedByPreviousOperations); // deduct fee from balance
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// TODO: We currently do not correctly calculate whether we have enough balance to pay the activation burn if there are multiple recipients
|
|
515
|
+
for (let i = 0; i < recipients.length; i++) {
|
|
516
|
+
const receivingBalance = new bignumber_1.default(await this.getBalanceOfAddresses([recipients[i]]));
|
|
517
|
+
// if our receiver has 0 balance, the account is not activated yet.
|
|
518
|
+
if (receivingBalance.isZero() && recipients[i].toLowerCase().startsWith('tz')) {
|
|
519
|
+
// We have to supply an additional 0.257 XTZ fee for storage_limit costs, which gets automatically deducted from the sender so we just have to make sure enough balance is around
|
|
520
|
+
if (balance.isLessThan(this.activationBurn.plus(wrappedFee))) {
|
|
521
|
+
// If we don't have enough funds to pay the activation + fee, we throw an error
|
|
522
|
+
throw new index_4.BalanceError(coinlib_error_1.Domain.TEZOS, 'Insufficient balance to pay activation burn!');
|
|
992
523
|
}
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
998
|
-
var data;
|
|
999
|
-
return __generator(this, function (_a) {
|
|
1000
|
-
switch (_a.label) {
|
|
1001
|
-
case 0: return [4 /*yield*/, index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address))];
|
|
1002
|
-
case 1:
|
|
1003
|
-
data = (_a.sent()).data;
|
|
1004
|
-
return [2 /*return*/, !!data.delegate];
|
|
524
|
+
else if (balance.isLessThan(wrappedValues[i].plus(wrappedFee).plus(this.activationBurn))) {
|
|
525
|
+
// Check whether the sender has enough to cover the amount to send + fee + activation
|
|
526
|
+
// If not, we deduct it from amount sent to make room for the activation burn
|
|
527
|
+
wrappedValues[i] = wrappedValues[i].minus(this.activationBurn); // deduct fee from balance
|
|
1005
528
|
}
|
|
529
|
+
}
|
|
530
|
+
if (balance.isEqualTo(wrappedValues[i].plus(wrappedFee))) {
|
|
531
|
+
// Tezos accounts can never be empty. If user tries to send everything, we must leave 1 mutez behind.
|
|
532
|
+
wrappedValues[i] = wrappedValues[i].minus(1);
|
|
533
|
+
}
|
|
534
|
+
else if (balance.isLessThan(wrappedValues[i].plus(wrappedFee))) {
|
|
535
|
+
throw new index_4.BalanceError(coinlib_error_1.Domain.TEZOS, 'not enough balance');
|
|
536
|
+
}
|
|
537
|
+
const spendOperation = {
|
|
538
|
+
kind: TezosOperationType_1.TezosOperationType.TRANSACTION,
|
|
539
|
+
fee: wrappedFee.toFixed(),
|
|
540
|
+
gas_limit: GAS_LIMIT_PLACEHOLDER,
|
|
541
|
+
storage_limit: STORAGE_LIMIT_PLACEHOLDER,
|
|
542
|
+
amount: wrappedValues[i].toFixed(),
|
|
543
|
+
counter: counter.plus(i).toFixed(),
|
|
544
|
+
destination: recipients[i],
|
|
545
|
+
source: address
|
|
546
|
+
};
|
|
547
|
+
operations.push(spendOperation);
|
|
548
|
+
}
|
|
549
|
+
return operations;
|
|
550
|
+
}
|
|
551
|
+
async forgeAndWrapOperations(tezosWrappedOperation) {
|
|
552
|
+
try {
|
|
553
|
+
const binaryTx = await this.forgeTezosOperation(tezosWrappedOperation);
|
|
554
|
+
return { binaryTransaction: binaryTx };
|
|
555
|
+
}
|
|
556
|
+
catch (error) {
|
|
557
|
+
throw new index_4.OperationFailedError(coinlib_error_1.Domain.TEZOS, `Forging Tezos TX failed with ${JSON.stringify(error.message)}`);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
async getDefaultDelegatee() {
|
|
561
|
+
const { data: activeBakers } = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/delegates?active`);
|
|
562
|
+
return activeBakers[0] || '';
|
|
563
|
+
}
|
|
564
|
+
async getCurrentDelegateesForPublicKey(publicKey) {
|
|
565
|
+
const address = await this.getAddressFromPublicKey(publicKey);
|
|
566
|
+
return this.getCurrentDelegateesForAddress(address.address);
|
|
567
|
+
}
|
|
568
|
+
async getCurrentDelegateesForAddress(address) {
|
|
569
|
+
const { data } = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}`);
|
|
570
|
+
return data.delegate ? [data.delegate] : [];
|
|
571
|
+
}
|
|
572
|
+
async getDelegateeDetails(address) {
|
|
573
|
+
const response = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/delegates/${address}/deactivated`);
|
|
574
|
+
const isBakingActive = !response.data;
|
|
575
|
+
return {
|
|
576
|
+
status: isBakingActive ? 'Active' : 'Inactive',
|
|
577
|
+
address
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
async isPublicKeyDelegating(publicKey) {
|
|
581
|
+
const address = await this.getAddressFromPublicKey(publicKey);
|
|
582
|
+
return this.isAddressDelegating(address.address);
|
|
583
|
+
}
|
|
584
|
+
async isAddressDelegating(address) {
|
|
585
|
+
const { data } = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}`);
|
|
586
|
+
return !!data.delegate;
|
|
587
|
+
}
|
|
588
|
+
async getDelegatorDetailsFromPublicKey(publicKey) {
|
|
589
|
+
const address = await this.getAddressFromPublicKey(publicKey);
|
|
590
|
+
return this.getDelegatorDetailsFromAddress(address.address);
|
|
591
|
+
}
|
|
592
|
+
async getDelegatorDetailsFromAddress(address) {
|
|
593
|
+
return this.getDelegatorDetails(address);
|
|
594
|
+
}
|
|
595
|
+
async getDelegationDetailsFromPublicKey(publicKey, delegatees) {
|
|
596
|
+
const address = await this.getAddressFromPublicKey(publicKey);
|
|
597
|
+
return this.getDelegationDetailsFromAddress(address.address, delegatees);
|
|
598
|
+
}
|
|
599
|
+
async getDelegationDetailsFromAddress(address, delegatees) {
|
|
600
|
+
if (delegatees.length > 1) {
|
|
601
|
+
return Promise.reject('Multiple delegation is not supported.');
|
|
602
|
+
}
|
|
603
|
+
const bakerAddress = delegatees[0];
|
|
604
|
+
const results = await Promise.all([this.getDelegatorDetails(address, bakerAddress), this.getDelegateeDetails(bakerAddress)]);
|
|
605
|
+
const delegatorDetails = results[0];
|
|
606
|
+
const bakerDetails = results[1];
|
|
607
|
+
return {
|
|
608
|
+
delegator: delegatorDetails,
|
|
609
|
+
delegatees: [bakerDetails]
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
async getDelegatorDetails(address, bakerAddress) {
|
|
613
|
+
const results = await Promise.all([index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}`)]);
|
|
614
|
+
const accountDetails = results[0].data;
|
|
615
|
+
const balance = accountDetails.balance;
|
|
616
|
+
const isDelegating = !!accountDetails.delegate;
|
|
617
|
+
const availableActions = [];
|
|
618
|
+
if (!isDelegating) {
|
|
619
|
+
availableActions.push({
|
|
620
|
+
type: TezosDelegatorAction.DELEGATE,
|
|
621
|
+
args: ['delegate']
|
|
1006
622
|
});
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
var address;
|
|
1012
|
-
return __generator(this, function (_a) {
|
|
1013
|
-
switch (_a.label) {
|
|
1014
|
-
case 0: return [4 /*yield*/, this.getAddressFromPublicKey(publicKey)];
|
|
1015
|
-
case 1:
|
|
1016
|
-
address = _a.sent();
|
|
1017
|
-
return [2 /*return*/, this.getDelegatorDetailsFromAddress(address.address)];
|
|
1018
|
-
}
|
|
623
|
+
}
|
|
624
|
+
else if (!bakerAddress || accountDetails.delegate === bakerAddress) {
|
|
625
|
+
availableActions.push({
|
|
626
|
+
type: TezosDelegatorAction.UNDELEGATE
|
|
1019
627
|
});
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
return [2 /*return*/, this.getDelegatorDetails(address)];
|
|
628
|
+
}
|
|
629
|
+
else {
|
|
630
|
+
availableActions.push({
|
|
631
|
+
type: TezosDelegatorAction.CHANGE_BAKER,
|
|
632
|
+
args: ['delegate']
|
|
1026
633
|
});
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
634
|
+
}
|
|
635
|
+
return {
|
|
636
|
+
address,
|
|
637
|
+
balance,
|
|
638
|
+
delegatees: [accountDetails.delegate],
|
|
639
|
+
availableActions
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
async prepareDelegatorActionFromPublicKey(publicKey, type, data) {
|
|
643
|
+
switch (type) {
|
|
644
|
+
case TezosDelegatorAction.DELEGATE:
|
|
645
|
+
case TezosDelegatorAction.CHANGE_BAKER:
|
|
646
|
+
if (!data || !data.delegate) {
|
|
647
|
+
return Promise.reject(`Invalid arguments passed for ${type} action, delegate is missing.`);
|
|
1038
648
|
}
|
|
1039
|
-
|
|
649
|
+
return [await this.delegate(publicKey, data.delegate)];
|
|
650
|
+
case TezosDelegatorAction.UNDELEGATE:
|
|
651
|
+
return [await this.undelegate(publicKey)];
|
|
652
|
+
default:
|
|
653
|
+
return Promise.reject('Unsupported delegator action.');
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
async prepareOperations(publicKey, operationRequests, overrideParameters = true) {
|
|
657
|
+
let counter = new bignumber_1.default(1);
|
|
658
|
+
let branch;
|
|
659
|
+
const operations = [];
|
|
660
|
+
const address = await this.getAddressFromPublicKey(publicKey).then((address) => address.address);
|
|
661
|
+
const results = await Promise.all([
|
|
662
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}/counter`),
|
|
663
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head~2/hash`),
|
|
664
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${address}/manager_key`)
|
|
665
|
+
]).catch((error) => {
|
|
666
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
667
|
+
});
|
|
668
|
+
counter = new bignumber_1.default(results[0].data).plus(1);
|
|
669
|
+
branch = results[1].data;
|
|
670
|
+
const accountManager = results[2].data;
|
|
671
|
+
const hasRevealInOperationRequests = operationRequests.some((request) => request.kind === TezosOperationType_1.TezosOperationType.REVEAL);
|
|
672
|
+
// check if we have revealed the address already
|
|
673
|
+
if (!accountManager && !hasRevealInOperationRequests) {
|
|
674
|
+
operations.push(await this.createRevealOperation(counter, publicKey, address));
|
|
675
|
+
counter = counter.plus(1);
|
|
676
|
+
}
|
|
677
|
+
// tslint:disable:cyclomatic-complexity
|
|
678
|
+
const operationPromises = operationRequests.map(async (operationRequest, index) => {
|
|
679
|
+
// TODO: Handle activation burn
|
|
680
|
+
if (!operationRequest.kind) {
|
|
681
|
+
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "kind" was not defined');
|
|
682
|
+
}
|
|
683
|
+
const recipient = operationRequest.destination;
|
|
684
|
+
let receivingBalance;
|
|
685
|
+
if (recipient && recipient.toLowerCase().startsWith('tz')) {
|
|
686
|
+
receivingBalance = new bignumber_1.default(await this.getBalanceOfAddresses([recipient]));
|
|
687
|
+
}
|
|
688
|
+
const defaultCounter = counter.plus(index).toFixed(); // TODO: Handle counter if we have some operations without counters in the array
|
|
689
|
+
const defaultFee = FEE_PLACEHOLDER;
|
|
690
|
+
const defaultGasLimit = '10300';
|
|
691
|
+
const defaultStorageLimit = receivingBalance && receivingBalance.isZero() && recipient && recipient.toLowerCase().startsWith('tz') ? '300' : '0'; // taken from eztz
|
|
692
|
+
switch (operationRequest.kind) {
|
|
693
|
+
// TODO: Handle if the dApp already provides a reveal operation
|
|
694
|
+
case TezosOperationType_1.TezosOperationType.REVEAL:
|
|
695
|
+
const revealOperation = operationRequest;
|
|
696
|
+
if (!revealOperation.public_key) {
|
|
697
|
+
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "public_key" was not defined');
|
|
698
|
+
}
|
|
699
|
+
revealOperation.source = revealOperation.source ?? address;
|
|
700
|
+
revealOperation.counter = revealOperation.counter ?? defaultCounter;
|
|
701
|
+
revealOperation.fee = revealOperation.fee ?? defaultFee;
|
|
702
|
+
revealOperation.gas_limit = revealOperation.gas_limit ?? defaultGasLimit;
|
|
703
|
+
revealOperation.storage_limit = revealOperation.storage_limit ?? defaultStorageLimit;
|
|
704
|
+
return revealOperation;
|
|
705
|
+
case TezosOperationType_1.TezosOperationType.DELEGATION:
|
|
706
|
+
const delegationOperation = operationRequest;
|
|
707
|
+
// The delegate property is optional, so we don't have any mandatory properties to check for
|
|
708
|
+
delegationOperation.source = delegationOperation.source ?? address;
|
|
709
|
+
delegationOperation.counter = delegationOperation.counter ?? defaultCounter;
|
|
710
|
+
delegationOperation.fee = delegationOperation.fee ?? defaultFee;
|
|
711
|
+
delegationOperation.gas_limit = delegationOperation.gas_limit ?? defaultGasLimit;
|
|
712
|
+
delegationOperation.storage_limit = delegationOperation.storage_limit ?? defaultStorageLimit;
|
|
713
|
+
return delegationOperation;
|
|
714
|
+
case TezosOperationType_1.TezosOperationType.TRANSACTION:
|
|
715
|
+
const transactionOperation = operationRequest;
|
|
716
|
+
if (!transactionOperation.amount) {
|
|
717
|
+
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "amount" was not defined');
|
|
718
|
+
}
|
|
719
|
+
if (!transactionOperation.destination) {
|
|
720
|
+
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "destination" was not defined');
|
|
721
|
+
}
|
|
722
|
+
transactionOperation.source = transactionOperation.source ?? address;
|
|
723
|
+
transactionOperation.counter = transactionOperation.counter ?? defaultCounter;
|
|
724
|
+
transactionOperation.fee = transactionOperation.fee ?? defaultFee;
|
|
725
|
+
transactionOperation.gas_limit = transactionOperation.gas_limit ?? GAS_LIMIT_PLACEHOLDER;
|
|
726
|
+
transactionOperation.storage_limit = transactionOperation.storage_limit ?? STORAGE_LIMIT_PLACEHOLDER;
|
|
727
|
+
return transactionOperation;
|
|
728
|
+
case TezosOperationType_1.TezosOperationType.ORIGINATION:
|
|
729
|
+
const originationOperation = operationRequest;
|
|
730
|
+
if (!originationOperation.balance) {
|
|
731
|
+
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "balance" was not defined');
|
|
732
|
+
}
|
|
733
|
+
if (!originationOperation.script) {
|
|
734
|
+
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "script" was not defined');
|
|
735
|
+
}
|
|
736
|
+
originationOperation.source = originationOperation.source ?? address;
|
|
737
|
+
originationOperation.counter = originationOperation.counter ?? defaultCounter;
|
|
738
|
+
originationOperation.fee = originationOperation.fee ?? defaultFee;
|
|
739
|
+
originationOperation.gas_limit = originationOperation.gas_limit ?? GAS_LIMIT_PLACEHOLDER;
|
|
740
|
+
originationOperation.storage_limit = originationOperation.storage_limit ?? STORAGE_LIMIT_PLACEHOLDER;
|
|
741
|
+
return originationOperation;
|
|
742
|
+
case TezosOperationType_1.TezosOperationType.ENDORSEMENT:
|
|
743
|
+
case TezosOperationType_1.TezosOperationType.SEED_NONCE_REVELATION:
|
|
744
|
+
case TezosOperationType_1.TezosOperationType.DOUBLE_ENDORSEMENT_EVIDENCE:
|
|
745
|
+
case TezosOperationType_1.TezosOperationType.DOUBLE_BAKING_EVIDENCE:
|
|
746
|
+
case TezosOperationType_1.TezosOperationType.ACTIVATE_ACCOUNT:
|
|
747
|
+
case TezosOperationType_1.TezosOperationType.PROPOSALS:
|
|
748
|
+
case TezosOperationType_1.TezosOperationType.BALLOT:
|
|
749
|
+
// Do not change anything
|
|
750
|
+
return operationRequest;
|
|
751
|
+
default:
|
|
752
|
+
(0, assert_1.assertNever)(operationRequest.kind);
|
|
753
|
+
throw new index_4.UnsupportedError(coinlib_error_1.Domain.TEZOS, `unsupported operation type "${JSON.stringify(operationRequest.kind)}"`);
|
|
754
|
+
}
|
|
1040
755
|
});
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
756
|
+
operations.push(...(await Promise.all(operationPromises)));
|
|
757
|
+
const tezosWrappedOperation = {
|
|
758
|
+
branch,
|
|
759
|
+
contents: operations
|
|
760
|
+
};
|
|
761
|
+
return await this.estimateAndReplaceLimitsAndFee(tezosWrappedOperation, overrideParameters);
|
|
762
|
+
}
|
|
763
|
+
async estimateAndReplaceLimitsAndFee(tezosWrappedOperation, overrideParameters = true, startingCounter) {
|
|
764
|
+
const fakeSignature = 'sigUHx32f9wesZ1n2BWpixXz4AQaZggEtchaQNHYGRCoWNAXx45WGW2ua3apUUUAGMLPwAU41QoaFCzVSL61VaessLg4YbbP';
|
|
765
|
+
const opKinds = [
|
|
766
|
+
TezosOperationType_1.TezosOperationType.TRANSACTION,
|
|
767
|
+
TezosOperationType_1.TezosOperationType.REVEAL,
|
|
768
|
+
TezosOperationType_1.TezosOperationType.ORIGINATION,
|
|
769
|
+
TezosOperationType_1.TezosOperationType.DELEGATION
|
|
770
|
+
];
|
|
771
|
+
const contents = tezosWrappedOperation.contents.map((operation, i) => {
|
|
772
|
+
if (!opKinds.includes(operation.kind)) {
|
|
773
|
+
return operation;
|
|
774
|
+
}
|
|
775
|
+
const op = operation;
|
|
776
|
+
const gasValue = new bignumber_1.default(MAX_GAS_PER_BLOCK).dividedToIntegerBy(tezosWrappedOperation.contents.length);
|
|
777
|
+
const gas_limit = new bignumber_1.default(GAS_LIMIT_PLACEHOLDER).gt(gasValue) ? gasValue : GAS_LIMIT_PLACEHOLDER;
|
|
778
|
+
const counter = startingCounter ? startingCounter.plus(i).toString() : op.counter;
|
|
779
|
+
return { ...operation, gas_limit, counter };
|
|
780
|
+
});
|
|
781
|
+
const { data: block } = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/header`);
|
|
782
|
+
const body = {
|
|
783
|
+
chain_id: block.chain_id,
|
|
784
|
+
operation: {
|
|
785
|
+
branch: tezosWrappedOperation.branch,
|
|
786
|
+
contents: contents,
|
|
787
|
+
signature: fakeSignature // signature will not be checked, so it is ok to always use this one
|
|
788
|
+
}
|
|
789
|
+
};
|
|
790
|
+
const forgedOperation = await this.forgeTezosOperation(tezosWrappedOperation);
|
|
791
|
+
let gasLimitTotal = 0;
|
|
792
|
+
const response = await index_1.default
|
|
793
|
+
.post(`${this.options.network.rpcUrl}/chains/main/blocks/head/helpers/scripts/run_operation`, body, {
|
|
794
|
+
headers: { 'Content-Type': 'application/json' }
|
|
795
|
+
})
|
|
796
|
+
.catch((runOperationError) => {
|
|
797
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, runOperationError);
|
|
798
|
+
});
|
|
799
|
+
if (tezosWrappedOperation.contents.length !== response.data.contents.length) {
|
|
800
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, `Run Operation did not return same number of operations. Locally we have ${tezosWrappedOperation.contents.length}, but got back ${response.data.contents.length}`);
|
|
801
|
+
}
|
|
802
|
+
tezosWrappedOperation.contents.forEach((content, i) => {
|
|
803
|
+
const metadata = response.data.contents[i].metadata;
|
|
804
|
+
if (metadata.operation_result) {
|
|
805
|
+
const operation = content;
|
|
806
|
+
const result = metadata.operation_result;
|
|
807
|
+
let gasLimit = 0;
|
|
808
|
+
let storageLimit = 0;
|
|
809
|
+
// If there are internal operations, we first add gas and storage used of internal operations
|
|
810
|
+
if (metadata.internal_operation_results) {
|
|
811
|
+
metadata.internal_operation_results.forEach((internalOperation) => {
|
|
812
|
+
if (internalOperation?.result) {
|
|
813
|
+
if (internalOperation.result.errors) {
|
|
814
|
+
throw new index_4.TransactionError(coinlib_error_1.Domain.TEZOS, 'An internal operation produced an error', internalOperation.result.errors);
|
|
815
|
+
}
|
|
816
|
+
gasLimit += Math.ceil(Number(internalOperation.result.consumed_milligas) / 1000);
|
|
817
|
+
if (internalOperation.result.paid_storage_size_diff) {
|
|
818
|
+
storageLimit += Number(internalOperation.result.paid_storage_size_diff);
|
|
819
|
+
}
|
|
820
|
+
if (internalOperation.result.originated_contracts) {
|
|
821
|
+
storageLimit += internalOperation.result.originated_contracts.length * 257;
|
|
822
|
+
}
|
|
823
|
+
if (internalOperation.result.allocated_destination_contract) {
|
|
824
|
+
storageLimit += 257;
|
|
825
|
+
}
|
|
1050
826
|
}
|
|
1051
|
-
|
|
1052
|
-
return [4 /*yield*/, Promise.all([this.getDelegatorDetails(address, bakerAddress), this.getDelegateeDetails(bakerAddress)])];
|
|
1053
|
-
case 1:
|
|
1054
|
-
results = _a.sent();
|
|
1055
|
-
delegatorDetails = results[0];
|
|
1056
|
-
bakerDetails = results[1];
|
|
1057
|
-
return [2 /*return*/, {
|
|
1058
|
-
delegator: delegatorDetails,
|
|
1059
|
-
delegatees: [bakerDetails]
|
|
1060
|
-
}];
|
|
827
|
+
});
|
|
1061
828
|
}
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
};
|
|
1065
|
-
TezosProtocol.prototype.getDelegatorDetails = function (address, bakerAddress) {
|
|
1066
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1067
|
-
var results, accountDetails, balance, isDelegating, availableActions;
|
|
1068
|
-
return __generator(this, function (_a) {
|
|
1069
|
-
switch (_a.label) {
|
|
1070
|
-
case 0: return [4 /*yield*/, Promise.all([index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address))])];
|
|
1071
|
-
case 1:
|
|
1072
|
-
results = _a.sent();
|
|
1073
|
-
accountDetails = results[0].data;
|
|
1074
|
-
balance = accountDetails.balance;
|
|
1075
|
-
isDelegating = !!accountDetails.delegate;
|
|
1076
|
-
availableActions = [];
|
|
1077
|
-
if (!isDelegating) {
|
|
1078
|
-
availableActions.push({
|
|
1079
|
-
type: TezosDelegatorAction.DELEGATE,
|
|
1080
|
-
args: ['delegate']
|
|
1081
|
-
});
|
|
1082
|
-
}
|
|
1083
|
-
else if (!bakerAddress || accountDetails.delegate === bakerAddress) {
|
|
1084
|
-
availableActions.push({
|
|
1085
|
-
type: TezosDelegatorAction.UNDELEGATE
|
|
1086
|
-
});
|
|
1087
|
-
}
|
|
1088
|
-
else {
|
|
1089
|
-
availableActions.push({
|
|
1090
|
-
type: TezosDelegatorAction.CHANGE_BAKER,
|
|
1091
|
-
args: ['delegate']
|
|
1092
|
-
});
|
|
1093
|
-
}
|
|
1094
|
-
return [2 /*return*/, {
|
|
1095
|
-
address: address,
|
|
1096
|
-
balance: balance,
|
|
1097
|
-
delegatees: [accountDetails.delegate],
|
|
1098
|
-
availableActions: availableActions
|
|
1099
|
-
}];
|
|
829
|
+
if (result.errors) {
|
|
830
|
+
throw new index_4.TransactionError(coinlib_error_1.Domain.TEZOS, 'The operation produced an error', result.errors);
|
|
1100
831
|
}
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1106
|
-
var _a;
|
|
1107
|
-
return __generator(this, function (_b) {
|
|
1108
|
-
switch (_b.label) {
|
|
1109
|
-
case 0:
|
|
1110
|
-
_a = type;
|
|
1111
|
-
switch (_a) {
|
|
1112
|
-
case TezosDelegatorAction.DELEGATE: return [3 /*break*/, 1];
|
|
1113
|
-
case TezosDelegatorAction.CHANGE_BAKER: return [3 /*break*/, 1];
|
|
1114
|
-
case TezosDelegatorAction.UNDELEGATE: return [3 /*break*/, 3];
|
|
1115
|
-
}
|
|
1116
|
-
return [3 /*break*/, 5];
|
|
1117
|
-
case 1:
|
|
1118
|
-
if (!data || !data.delegate) {
|
|
1119
|
-
return [2 /*return*/, Promise.reject("Invalid arguments passed for ".concat(type, " action, delegate is missing."))];
|
|
1120
|
-
}
|
|
1121
|
-
return [4 /*yield*/, this.delegate(publicKey, data.delegate)];
|
|
1122
|
-
case 2: return [2 /*return*/, [_b.sent()]];
|
|
1123
|
-
case 3: return [4 /*yield*/, this.undelegate(publicKey)];
|
|
1124
|
-
case 4: return [2 /*return*/, [_b.sent()]];
|
|
1125
|
-
case 5: return [2 /*return*/, Promise.reject('Unsupported delegator action.')];
|
|
832
|
+
// Add gas and storage used by operation
|
|
833
|
+
gasLimit += Math.ceil(Number(result.consumed_milligas) / 1000);
|
|
834
|
+
if (result.paid_storage_size_diff) {
|
|
835
|
+
storageLimit += Number(result.paid_storage_size_diff);
|
|
1126
836
|
}
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
};
|
|
1130
|
-
TezosProtocol.prototype.prepareOperations = function (publicKey, operationRequests, overrideParameters) {
|
|
1131
|
-
if (overrideParameters === void 0) { overrideParameters = true; }
|
|
1132
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1133
|
-
var counter, branch, operations, address, results, accountManager, hasRevealInOperationRequests, _a, _b, operationPromises, _c, _d, _e, tezosWrappedOperation;
|
|
1134
|
-
var _this = this;
|
|
1135
|
-
return __generator(this, function (_f) {
|
|
1136
|
-
switch (_f.label) {
|
|
1137
|
-
case 0:
|
|
1138
|
-
counter = new bignumber_1.default(1);
|
|
1139
|
-
operations = [];
|
|
1140
|
-
return [4 /*yield*/, this.getAddressFromPublicKey(publicKey).then(function (address) { return address.address; })];
|
|
1141
|
-
case 1:
|
|
1142
|
-
address = _f.sent();
|
|
1143
|
-
return [4 /*yield*/, Promise.all([
|
|
1144
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address, "/counter")),
|
|
1145
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head~2/hash")),
|
|
1146
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(address, "/manager_key"))
|
|
1147
|
-
]).catch(function (error) {
|
|
1148
|
-
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
1149
|
-
})];
|
|
1150
|
-
case 2:
|
|
1151
|
-
results = _f.sent();
|
|
1152
|
-
counter = new bignumber_1.default(results[0].data).plus(1);
|
|
1153
|
-
branch = results[1].data;
|
|
1154
|
-
accountManager = results[2].data;
|
|
1155
|
-
hasRevealInOperationRequests = operationRequests.some(function (request) { return request.kind === TezosOperationType_1.TezosOperationType.REVEAL; });
|
|
1156
|
-
if (!(!accountManager && !hasRevealInOperationRequests)) return [3 /*break*/, 4];
|
|
1157
|
-
_b = (_a = operations).push;
|
|
1158
|
-
return [4 /*yield*/, this.createRevealOperation(counter, publicKey, address)];
|
|
1159
|
-
case 3:
|
|
1160
|
-
_b.apply(_a, [_f.sent()]);
|
|
1161
|
-
counter = counter.plus(1);
|
|
1162
|
-
_f.label = 4;
|
|
1163
|
-
case 4:
|
|
1164
|
-
operationPromises = operationRequests.map(function (operationRequest, index) { return __awaiter(_this, void 0, void 0, function () {
|
|
1165
|
-
var recipient, receivingBalance, _a, defaultCounter, defaultFee, defaultGasLimit, defaultStorageLimit, revealOperation, delegationOperation, transactionOperation, originationOperation;
|
|
1166
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
1167
|
-
return __generator(this, function (_y) {
|
|
1168
|
-
switch (_y.label) {
|
|
1169
|
-
case 0:
|
|
1170
|
-
// TODO: Handle activation burn
|
|
1171
|
-
if (!operationRequest.kind) {
|
|
1172
|
-
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "kind" was not defined');
|
|
1173
|
-
}
|
|
1174
|
-
recipient = operationRequest.destination;
|
|
1175
|
-
if (!(recipient && recipient.toLowerCase().startsWith('tz'))) return [3 /*break*/, 2];
|
|
1176
|
-
_a = bignumber_1.default.bind;
|
|
1177
|
-
return [4 /*yield*/, this.getBalanceOfAddresses([recipient])];
|
|
1178
|
-
case 1:
|
|
1179
|
-
receivingBalance = new (_a.apply(bignumber_1.default, [void 0, _y.sent()]))();
|
|
1180
|
-
_y.label = 2;
|
|
1181
|
-
case 2:
|
|
1182
|
-
defaultCounter = counter.plus(index).toFixed() // TODO: Handle counter if we have some operations without counters in the array
|
|
1183
|
-
;
|
|
1184
|
-
defaultFee = FEE_PLACEHOLDER;
|
|
1185
|
-
defaultGasLimit = '10300';
|
|
1186
|
-
defaultStorageLimit = receivingBalance && receivingBalance.isZero() && recipient && recipient.toLowerCase().startsWith('tz') ? '300' : '0' // taken from eztz
|
|
1187
|
-
;
|
|
1188
|
-
switch (operationRequest.kind) {
|
|
1189
|
-
// TODO: Handle if the dApp already provides a reveal operation
|
|
1190
|
-
case TezosOperationType_1.TezosOperationType.REVEAL:
|
|
1191
|
-
revealOperation = operationRequest;
|
|
1192
|
-
if (!revealOperation.public_key) {
|
|
1193
|
-
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "public_key" was not defined');
|
|
1194
|
-
}
|
|
1195
|
-
revealOperation.source = (_b = revealOperation.source) !== null && _b !== void 0 ? _b : address;
|
|
1196
|
-
revealOperation.counter = (_c = revealOperation.counter) !== null && _c !== void 0 ? _c : defaultCounter;
|
|
1197
|
-
revealOperation.fee = (_d = revealOperation.fee) !== null && _d !== void 0 ? _d : defaultFee;
|
|
1198
|
-
revealOperation.gas_limit = (_e = revealOperation.gas_limit) !== null && _e !== void 0 ? _e : defaultGasLimit;
|
|
1199
|
-
revealOperation.storage_limit = (_f = revealOperation.storage_limit) !== null && _f !== void 0 ? _f : defaultStorageLimit;
|
|
1200
|
-
return [2 /*return*/, revealOperation];
|
|
1201
|
-
case TezosOperationType_1.TezosOperationType.DELEGATION:
|
|
1202
|
-
delegationOperation = operationRequest;
|
|
1203
|
-
// The delegate property is optional, so we don't have any mandatory properties to check for
|
|
1204
|
-
delegationOperation.source = (_g = delegationOperation.source) !== null && _g !== void 0 ? _g : address;
|
|
1205
|
-
delegationOperation.counter = (_h = delegationOperation.counter) !== null && _h !== void 0 ? _h : defaultCounter;
|
|
1206
|
-
delegationOperation.fee = (_j = delegationOperation.fee) !== null && _j !== void 0 ? _j : defaultFee;
|
|
1207
|
-
delegationOperation.gas_limit = (_k = delegationOperation.gas_limit) !== null && _k !== void 0 ? _k : defaultGasLimit;
|
|
1208
|
-
delegationOperation.storage_limit = (_l = delegationOperation.storage_limit) !== null && _l !== void 0 ? _l : defaultStorageLimit;
|
|
1209
|
-
return [2 /*return*/, delegationOperation];
|
|
1210
|
-
case TezosOperationType_1.TezosOperationType.TRANSACTION:
|
|
1211
|
-
transactionOperation = operationRequest;
|
|
1212
|
-
if (!transactionOperation.amount) {
|
|
1213
|
-
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "amount" was not defined');
|
|
1214
|
-
}
|
|
1215
|
-
if (!transactionOperation.destination) {
|
|
1216
|
-
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "destination" was not defined');
|
|
1217
|
-
}
|
|
1218
|
-
transactionOperation.source = (_m = transactionOperation.source) !== null && _m !== void 0 ? _m : address;
|
|
1219
|
-
transactionOperation.counter = (_o = transactionOperation.counter) !== null && _o !== void 0 ? _o : defaultCounter;
|
|
1220
|
-
transactionOperation.fee = (_p = transactionOperation.fee) !== null && _p !== void 0 ? _p : defaultFee;
|
|
1221
|
-
transactionOperation.gas_limit = (_q = transactionOperation.gas_limit) !== null && _q !== void 0 ? _q : GAS_LIMIT_PLACEHOLDER;
|
|
1222
|
-
transactionOperation.storage_limit = (_r = transactionOperation.storage_limit) !== null && _r !== void 0 ? _r : STORAGE_LIMIT_PLACEHOLDER;
|
|
1223
|
-
return [2 /*return*/, transactionOperation];
|
|
1224
|
-
case TezosOperationType_1.TezosOperationType.ORIGINATION:
|
|
1225
|
-
originationOperation = operationRequest;
|
|
1226
|
-
if (!originationOperation.balance) {
|
|
1227
|
-
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "balance" was not defined');
|
|
1228
|
-
}
|
|
1229
|
-
if (!originationOperation.script) {
|
|
1230
|
-
throw new index_4.PropertyUndefinedError(coinlib_error_1.Domain.TEZOS, 'property "script" was not defined');
|
|
1231
|
-
}
|
|
1232
|
-
originationOperation.source = (_s = originationOperation.source) !== null && _s !== void 0 ? _s : address;
|
|
1233
|
-
originationOperation.counter = (_t = originationOperation.counter) !== null && _t !== void 0 ? _t : defaultCounter;
|
|
1234
|
-
originationOperation.fee = (_u = originationOperation.fee) !== null && _u !== void 0 ? _u : defaultFee;
|
|
1235
|
-
originationOperation.gas_limit = (_v = originationOperation.gas_limit) !== null && _v !== void 0 ? _v : GAS_LIMIT_PLACEHOLDER;
|
|
1236
|
-
originationOperation.storage_limit = (_w = originationOperation.storage_limit) !== null && _w !== void 0 ? _w : STORAGE_LIMIT_PLACEHOLDER;
|
|
1237
|
-
return [2 /*return*/, originationOperation];
|
|
1238
|
-
case TezosOperationType_1.TezosOperationType.ENDORSEMENT:
|
|
1239
|
-
case TezosOperationType_1.TezosOperationType.SEED_NONCE_REVELATION:
|
|
1240
|
-
case TezosOperationType_1.TezosOperationType.DOUBLE_ENDORSEMENT_EVIDENCE:
|
|
1241
|
-
case TezosOperationType_1.TezosOperationType.DOUBLE_BAKING_EVIDENCE:
|
|
1242
|
-
case TezosOperationType_1.TezosOperationType.ACTIVATE_ACCOUNT:
|
|
1243
|
-
case TezosOperationType_1.TezosOperationType.PROPOSALS:
|
|
1244
|
-
case TezosOperationType_1.TezosOperationType.BALLOT:
|
|
1245
|
-
// Do not change anything
|
|
1246
|
-
return [2 /*return*/, operationRequest];
|
|
1247
|
-
default:
|
|
1248
|
-
(0, assert_1.assertNever)(operationRequest.kind);
|
|
1249
|
-
throw new index_4.UnsupportedError(coinlib_error_1.Domain.TEZOS, "unsupported operation type \"".concat(JSON.stringify(operationRequest.kind), "\""));
|
|
1250
|
-
}
|
|
1251
|
-
return [2 /*return*/];
|
|
1252
|
-
}
|
|
1253
|
-
});
|
|
1254
|
-
}); });
|
|
1255
|
-
_d = (_c = operations.push).apply;
|
|
1256
|
-
_e = [operations];
|
|
1257
|
-
return [4 /*yield*/, Promise.all(operationPromises)];
|
|
1258
|
-
case 5:
|
|
1259
|
-
_d.apply(_c, _e.concat([(_f.sent())]));
|
|
1260
|
-
tezosWrappedOperation = {
|
|
1261
|
-
branch: branch,
|
|
1262
|
-
contents: operations
|
|
1263
|
-
};
|
|
1264
|
-
return [4 /*yield*/, this.estimateAndReplaceLimitsAndFee(tezosWrappedOperation, overrideParameters)];
|
|
1265
|
-
case 6: return [2 /*return*/, _f.sent()];
|
|
837
|
+
if (result.originated_contracts) {
|
|
838
|
+
storageLimit += result.originated_contracts.length * 257;
|
|
1266
839
|
}
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
};
|
|
1270
|
-
TezosProtocol.prototype.estimateAndReplaceLimitsAndFee = function (tezosWrappedOperation, overrideParameters, startingCounter) {
|
|
1271
|
-
if (overrideParameters === void 0) { overrideParameters = true; }
|
|
1272
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1273
|
-
var fakeSignature, opKinds, contents, block, body, forgedOperation, gasLimitTotal, response, fee, nonRevealOperations, feePerOperation_1;
|
|
1274
|
-
return __generator(this, function (_a) {
|
|
1275
|
-
switch (_a.label) {
|
|
1276
|
-
case 0:
|
|
1277
|
-
fakeSignature = 'sigUHx32f9wesZ1n2BWpixXz4AQaZggEtchaQNHYGRCoWNAXx45WGW2ua3apUUUAGMLPwAU41QoaFCzVSL61VaessLg4YbbP';
|
|
1278
|
-
opKinds = [
|
|
1279
|
-
TezosOperationType_1.TezosOperationType.TRANSACTION,
|
|
1280
|
-
TezosOperationType_1.TezosOperationType.REVEAL,
|
|
1281
|
-
TezosOperationType_1.TezosOperationType.ORIGINATION,
|
|
1282
|
-
TezosOperationType_1.TezosOperationType.DELEGATION
|
|
1283
|
-
];
|
|
1284
|
-
contents = tezosWrappedOperation.contents.map(function (operation, i) {
|
|
1285
|
-
if (!opKinds.includes(operation.kind)) {
|
|
1286
|
-
return operation;
|
|
1287
|
-
}
|
|
1288
|
-
var op = operation;
|
|
1289
|
-
var gasValue = new bignumber_1.default(MAX_GAS_PER_BLOCK).dividedToIntegerBy(tezosWrappedOperation.contents.length);
|
|
1290
|
-
var gas_limit = new bignumber_1.default(GAS_LIMIT_PLACEHOLDER).gt(gasValue) ? gasValue : GAS_LIMIT_PLACEHOLDER;
|
|
1291
|
-
var counter = startingCounter ? startingCounter.plus(i).toString() : op.counter;
|
|
1292
|
-
return __assign(__assign({}, operation), { gas_limit: gas_limit, counter: counter });
|
|
1293
|
-
});
|
|
1294
|
-
return [4 /*yield*/, index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/header"))];
|
|
1295
|
-
case 1:
|
|
1296
|
-
block = (_a.sent()).data;
|
|
1297
|
-
body = {
|
|
1298
|
-
chain_id: block.chain_id,
|
|
1299
|
-
operation: {
|
|
1300
|
-
branch: tezosWrappedOperation.branch,
|
|
1301
|
-
contents: contents,
|
|
1302
|
-
signature: fakeSignature // signature will not be checked, so it is ok to always use this one
|
|
1303
|
-
}
|
|
1304
|
-
};
|
|
1305
|
-
return [4 /*yield*/, this.forgeTezosOperation(tezosWrappedOperation)];
|
|
1306
|
-
case 2:
|
|
1307
|
-
forgedOperation = _a.sent();
|
|
1308
|
-
gasLimitTotal = 0;
|
|
1309
|
-
return [4 /*yield*/, index_1.default
|
|
1310
|
-
.post("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/helpers/scripts/run_operation"), body, {
|
|
1311
|
-
headers: { 'Content-Type': 'application/json' }
|
|
1312
|
-
})
|
|
1313
|
-
.catch(function (runOperationError) {
|
|
1314
|
-
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, runOperationError);
|
|
1315
|
-
})];
|
|
1316
|
-
case 3:
|
|
1317
|
-
response = _a.sent();
|
|
1318
|
-
if (tezosWrappedOperation.contents.length !== response.data.contents.length) {
|
|
1319
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, "Run Operation did not return same number of operations. Locally we have ".concat(tezosWrappedOperation.contents.length, ", but got back ").concat(response.data.contents.length));
|
|
1320
|
-
}
|
|
1321
|
-
tezosWrappedOperation.contents.forEach(function (content, i) {
|
|
1322
|
-
var metadata = response.data.contents[i].metadata;
|
|
1323
|
-
if (metadata.operation_result) {
|
|
1324
|
-
var operation = content;
|
|
1325
|
-
var result = metadata.operation_result;
|
|
1326
|
-
var gasLimit_1 = 0;
|
|
1327
|
-
var storageLimit_1 = 0;
|
|
1328
|
-
// If there are internal operations, we first add gas and storage used of internal operations
|
|
1329
|
-
if (metadata.internal_operation_results) {
|
|
1330
|
-
metadata.internal_operation_results.forEach(function (internalOperation) {
|
|
1331
|
-
if (internalOperation === null || internalOperation === void 0 ? void 0 : internalOperation.result) {
|
|
1332
|
-
if (internalOperation.result.errors) {
|
|
1333
|
-
throw new index_4.TransactionError(coinlib_error_1.Domain.TEZOS, 'An internal operation produced an error', internalOperation.result.errors);
|
|
1334
|
-
}
|
|
1335
|
-
gasLimit_1 += Math.ceil(Number(internalOperation.result.consumed_milligas) / 1000);
|
|
1336
|
-
if (internalOperation.result.paid_storage_size_diff) {
|
|
1337
|
-
storageLimit_1 += Number(internalOperation.result.paid_storage_size_diff);
|
|
1338
|
-
}
|
|
1339
|
-
if (internalOperation.result.originated_contracts) {
|
|
1340
|
-
storageLimit_1 += internalOperation.result.originated_contracts.length * 257;
|
|
1341
|
-
}
|
|
1342
|
-
if (internalOperation.result.allocated_destination_contract) {
|
|
1343
|
-
storageLimit_1 += 257;
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
});
|
|
1347
|
-
}
|
|
1348
|
-
if (result.errors) {
|
|
1349
|
-
throw new index_4.TransactionError(coinlib_error_1.Domain.TEZOS, 'The operation produced an error', result.errors);
|
|
1350
|
-
}
|
|
1351
|
-
// Add gas and storage used by operation
|
|
1352
|
-
gasLimit_1 += Math.ceil(Number(result.consumed_milligas) / 1000);
|
|
1353
|
-
if (result.paid_storage_size_diff) {
|
|
1354
|
-
storageLimit_1 += Number(result.paid_storage_size_diff);
|
|
1355
|
-
}
|
|
1356
|
-
if (result.originated_contracts) {
|
|
1357
|
-
storageLimit_1 += result.originated_contracts.length * 257;
|
|
1358
|
-
}
|
|
1359
|
-
if (result.allocated_destination_contract) {
|
|
1360
|
-
storageLimit_1 += 257;
|
|
1361
|
-
}
|
|
1362
|
-
// in prepareTransactionsFromPublicKey() we invoke this method with overrideParameters = false
|
|
1363
|
-
if ((operation.gas_limit && overrideParameters) || operation.gas_limit === GAS_LIMIT_PLACEHOLDER) {
|
|
1364
|
-
;
|
|
1365
|
-
operation.gas_limit = gasLimit_1.toString();
|
|
1366
|
-
}
|
|
1367
|
-
if ((operation.storage_limit && overrideParameters) || operation.storage_limit === STORAGE_LIMIT_PLACEHOLDER) {
|
|
1368
|
-
;
|
|
1369
|
-
operation.storage_limit = storageLimit_1.toString();
|
|
1370
|
-
}
|
|
1371
|
-
gasLimitTotal += gasLimit_1;
|
|
1372
|
-
}
|
|
1373
|
-
});
|
|
1374
|
-
if (overrideParameters || tezosWrappedOperation.contents.some(function (operation) { return (operation === null || operation === void 0 ? void 0 : operation.fee) === FEE_PLACEHOLDER; })) {
|
|
1375
|
-
fee = MINIMAL_FEE +
|
|
1376
|
-
MINIMAL_FEE_PER_BYTE * Math.ceil((forgedOperation.length + 128) / 2) + // 128 is the length of a hex signature
|
|
1377
|
-
MINIMAL_FEE_PER_GAS_UNIT * gasLimitTotal +
|
|
1378
|
-
100 // add 100 for safety
|
|
1379
|
-
;
|
|
1380
|
-
nonRevealOperations = tezosWrappedOperation.contents.filter(function (operation) { return operation.kind !== 'reveal'; });
|
|
1381
|
-
feePerOperation_1 = Math.ceil(fee / nonRevealOperations.length);
|
|
1382
|
-
tezosWrappedOperation.contents.forEach(function (operation) {
|
|
1383
|
-
if (operation.fee && operation.kind !== 'reveal') {
|
|
1384
|
-
;
|
|
1385
|
-
operation.fee = feePerOperation_1.toString();
|
|
1386
|
-
}
|
|
1387
|
-
});
|
|
1388
|
-
}
|
|
1389
|
-
return [2 /*return*/, tezosWrappedOperation];
|
|
840
|
+
if (result.allocated_destination_contract) {
|
|
841
|
+
storageLimit += 257;
|
|
1390
842
|
}
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
if (fetchExtraInfo === void 0) { fetchExtraInfo = true; }
|
|
1396
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1397
|
-
var data, delegatedOpLevel, delegatedDate, recentTransactionData;
|
|
1398
|
-
return __generator(this, function (_a) {
|
|
1399
|
-
switch (_a.label) {
|
|
1400
|
-
case 0: return [4 /*yield*/, index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(delegatedAddress))];
|
|
1401
|
-
case 1:
|
|
1402
|
-
data = (_a.sent()).data;
|
|
1403
|
-
if (!(data.delegate && fetchExtraInfo)) return [3 /*break*/, 3];
|
|
1404
|
-
return [4 /*yield*/, this.options.network.extras.indexerClient.getDelegationInfo(delegatedAddress)];
|
|
1405
|
-
case 2:
|
|
1406
|
-
recentTransactionData = _a.sent();
|
|
1407
|
-
if (recentTransactionData) {
|
|
1408
|
-
delegatedDate = recentTransactionData.date;
|
|
1409
|
-
delegatedOpLevel = recentTransactionData.level;
|
|
1410
|
-
}
|
|
1411
|
-
_a.label = 3;
|
|
1412
|
-
case 3: return [2 /*return*/, {
|
|
1413
|
-
isDelegated: data.delegate ? true : false,
|
|
1414
|
-
value: data.delegate,
|
|
1415
|
-
delegatedDate: delegatedDate,
|
|
1416
|
-
delegatedOpLevel: delegatedOpLevel
|
|
1417
|
-
}];
|
|
843
|
+
// in prepareTransactionsFromPublicKey() we invoke this method with overrideParameters = false
|
|
844
|
+
if ((operation.gas_limit && overrideParameters) || operation.gas_limit === GAS_LIMIT_PLACEHOLDER) {
|
|
845
|
+
;
|
|
846
|
+
operation.gas_limit = gasLimit.toString();
|
|
1418
847
|
}
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
TezosProtocol.prototype.bakerInfo = function (tzAddress) {
|
|
1423
|
-
var _a, _b, _c, _d;
|
|
1424
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1425
|
-
var results, tzBalance, delegatedBalance, stakingBalance, selfBond, stakingCapacity, bakerInfo;
|
|
1426
|
-
return __generator(this, function (_e) {
|
|
1427
|
-
switch (_e.label) {
|
|
1428
|
-
case 0:
|
|
1429
|
-
if (!tzAddress ||
|
|
1430
|
-
!(tzAddress.toLowerCase().startsWith('tz1') ||
|
|
1431
|
-
tzAddress.toLowerCase().startsWith('tz2') ||
|
|
1432
|
-
tzAddress.toLowerCase().startsWith('tz3') ||
|
|
1433
|
-
tzAddress.toLowerCase().startsWith('tz4'))) {
|
|
1434
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'non tz-address supplied');
|
|
1435
|
-
}
|
|
1436
|
-
return [4 /*yield*/, Promise.all([
|
|
1437
|
-
index_1.default
|
|
1438
|
-
.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/delegates/").concat(tzAddress, "/balance"))
|
|
1439
|
-
.catch(function (_error) { return undefined; }),
|
|
1440
|
-
index_1.default
|
|
1441
|
-
.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/delegates/").concat(tzAddress, "/full_balance"))
|
|
1442
|
-
.catch(function (_error) { return undefined; }),
|
|
1443
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/delegates/").concat(tzAddress, "/delegated_balance")),
|
|
1444
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/delegates/").concat(tzAddress, "/staking_balance"))
|
|
1445
|
-
]).catch(function (error) {
|
|
1446
|
-
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
1447
|
-
})];
|
|
1448
|
-
case 1:
|
|
1449
|
-
results = _e.sent();
|
|
1450
|
-
tzBalance = new bignumber_1.default((_b = ((_a = results[0]) !== null && _a !== void 0 ? _a : results[1])) === null || _b === void 0 ? void 0 : _b.data);
|
|
1451
|
-
delegatedBalance = new bignumber_1.default((_c = results[2]) === null || _c === void 0 ? void 0 : _c.data);
|
|
1452
|
-
stakingBalance = new bignumber_1.default((_d = results[3]) === null || _d === void 0 ? void 0 : _d.data);
|
|
1453
|
-
selfBond = stakingBalance.minus(delegatedBalance);
|
|
1454
|
-
stakingCapacity = stakingBalance.div(selfBond.div(SELF_BOND_REQUIREMENT));
|
|
1455
|
-
bakerInfo = {
|
|
1456
|
-
balance: tzBalance,
|
|
1457
|
-
delegatedBalance: delegatedBalance,
|
|
1458
|
-
stakingBalance: stakingBalance,
|
|
1459
|
-
selfBond: selfBond,
|
|
1460
|
-
bakerCapacity: stakingBalance.div(stakingCapacity),
|
|
1461
|
-
bakerUsage: stakingCapacity
|
|
1462
|
-
};
|
|
1463
|
-
return [2 /*return*/, bakerInfo];
|
|
848
|
+
if ((operation.storage_limit && overrideParameters) || operation.storage_limit === STORAGE_LIMIT_PLACEHOLDER) {
|
|
849
|
+
;
|
|
850
|
+
operation.storage_limit = storageLimit.toString();
|
|
1464
851
|
}
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
};
|
|
1468
|
-
TezosProtocol.prototype.undelegate = function (publicKey) {
|
|
1469
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1470
|
-
return __generator(this, function (_a) {
|
|
1471
|
-
return [2 /*return*/, this.delegate(publicKey)];
|
|
1472
|
-
});
|
|
852
|
+
gasLimitTotal += gasLimit;
|
|
853
|
+
}
|
|
1473
854
|
});
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
case 1:
|
|
1486
|
-
tzAddress = _d.sent();
|
|
1487
|
-
return [4 /*yield*/, Promise.all([
|
|
1488
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(tzAddress, "/counter")),
|
|
1489
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head~2/hash")),
|
|
1490
|
-
index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/head/context/contracts/").concat(tzAddress, "/manager_key"))
|
|
1491
|
-
]).catch(function (error) {
|
|
1492
|
-
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
1493
|
-
})];
|
|
1494
|
-
case 2:
|
|
1495
|
-
results = _d.sent();
|
|
1496
|
-
counter = new bignumber_1.default(results[0].data).plus(1);
|
|
1497
|
-
branch = results[1].data;
|
|
1498
|
-
accountManager = results[2].data;
|
|
1499
|
-
if (!!accountManager) return [3 /*break*/, 4];
|
|
1500
|
-
_b = (_a = operations).push;
|
|
1501
|
-
return [4 /*yield*/, this.createRevealOperation(counter, publicKey, tzAddress)];
|
|
1502
|
-
case 3:
|
|
1503
|
-
_b.apply(_a, [_d.sent()]);
|
|
1504
|
-
counter = counter.plus(1);
|
|
1505
|
-
_d.label = 4;
|
|
1506
|
-
case 4:
|
|
1507
|
-
_c = bignumber_1.default.bind;
|
|
1508
|
-
return [4 /*yield*/, this.getBalanceOfAddresses([tzAddress])];
|
|
1509
|
-
case 5:
|
|
1510
|
-
balance = new (_c.apply(bignumber_1.default, [void 0, _d.sent()]))();
|
|
1511
|
-
fee = new bignumber_1.default(1420);
|
|
1512
|
-
if (balance.isLessThan(fee)) {
|
|
1513
|
-
throw new index_4.BalanceError(coinlib_error_1.Domain.TEZOS, 'not enough balance');
|
|
1514
|
-
}
|
|
1515
|
-
delegationOperation = {
|
|
1516
|
-
kind: TezosOperationType_1.TezosOperationType.DELEGATION,
|
|
1517
|
-
source: tzAddress,
|
|
1518
|
-
fee: fee.toFixed(),
|
|
1519
|
-
counter: counter.toFixed(),
|
|
1520
|
-
gas_limit: '10000',
|
|
1521
|
-
storage_limit: '0',
|
|
1522
|
-
delegate: Array.isArray(delegate) ? delegate[0] : delegate
|
|
1523
|
-
};
|
|
1524
|
-
operations.push(delegationOperation);
|
|
1525
|
-
_d.label = 6;
|
|
1526
|
-
case 6:
|
|
1527
|
-
_d.trys.push([6, 8, , 9]);
|
|
1528
|
-
tezosWrappedOperation = {
|
|
1529
|
-
branch: branch,
|
|
1530
|
-
contents: operations
|
|
1531
|
-
};
|
|
1532
|
-
return [4 /*yield*/, this.forgeTezosOperation(tezosWrappedOperation)];
|
|
1533
|
-
case 7:
|
|
1534
|
-
binaryTx = _d.sent();
|
|
1535
|
-
return [2 /*return*/, { binaryTransaction: binaryTx }];
|
|
1536
|
-
case 8:
|
|
1537
|
-
error_4 = _d.sent();
|
|
1538
|
-
throw new index_4.OperationFailedError(coinlib_error_1.Domain.TEZOS, "Forging Tezos TX failed with ".concat(JSON.stringify(error_4.message)));
|
|
1539
|
-
case 9: return [2 /*return*/];
|
|
855
|
+
if (overrideParameters || tezosWrappedOperation.contents.some((operation) => operation?.fee === FEE_PLACEHOLDER)) {
|
|
856
|
+
const fee = MINIMAL_FEE +
|
|
857
|
+
MINIMAL_FEE_PER_BYTE * Math.ceil((forgedOperation.length + 128) / 2) + // 128 is the length of a hex signature
|
|
858
|
+
MINIMAL_FEE_PER_GAS_UNIT * gasLimitTotal +
|
|
859
|
+
100; // add 100 for safety
|
|
860
|
+
const nonRevealOperations = tezosWrappedOperation.contents.filter((operation) => operation.kind !== 'reveal');
|
|
861
|
+
const feePerOperation = Math.ceil(fee / nonRevealOperations.length);
|
|
862
|
+
tezosWrappedOperation.contents.forEach((operation) => {
|
|
863
|
+
if (operation.fee && operation.kind !== 'reveal') {
|
|
864
|
+
;
|
|
865
|
+
operation.fee = feePerOperation.toString();
|
|
1540
866
|
}
|
|
1541
867
|
});
|
|
1542
|
-
}
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
868
|
+
}
|
|
869
|
+
return tezosWrappedOperation;
|
|
870
|
+
}
|
|
871
|
+
async getDelegationInfo(delegatedAddress, fetchExtraInfo = true) {
|
|
872
|
+
const { data } = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${delegatedAddress}`);
|
|
873
|
+
let delegatedOpLevel;
|
|
874
|
+
let delegatedDate;
|
|
875
|
+
// if the address is delegated, check since when
|
|
876
|
+
if (data.delegate && fetchExtraInfo) {
|
|
877
|
+
const recentTransactionData = await this.options.network.extras.indexerClient.getDelegationInfo(delegatedAddress);
|
|
878
|
+
if (recentTransactionData) {
|
|
879
|
+
delegatedDate = recentTransactionData.date;
|
|
880
|
+
delegatedOpLevel = recentTransactionData.level;
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
return {
|
|
884
|
+
isDelegated: data.delegate ? true : false,
|
|
885
|
+
value: data.delegate,
|
|
886
|
+
delegatedDate,
|
|
887
|
+
delegatedOpLevel
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
async bakerInfo(tzAddress) {
|
|
891
|
+
if (!tzAddress ||
|
|
892
|
+
!(tzAddress.toLowerCase().startsWith('tz1') ||
|
|
893
|
+
tzAddress.toLowerCase().startsWith('tz2') ||
|
|
894
|
+
tzAddress.toLowerCase().startsWith('tz3') ||
|
|
895
|
+
tzAddress.toLowerCase().startsWith('tz4'))) {
|
|
896
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'non tz-address supplied');
|
|
897
|
+
}
|
|
898
|
+
const results = await Promise.all([
|
|
899
|
+
index_1.default
|
|
900
|
+
.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/delegates/${tzAddress}/balance`)
|
|
901
|
+
.catch((_error) => undefined),
|
|
902
|
+
index_1.default
|
|
903
|
+
.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/delegates/${tzAddress}/full_balance`)
|
|
904
|
+
.catch((_error) => undefined),
|
|
905
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/delegates/${tzAddress}/delegated_balance`),
|
|
906
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/delegates/${tzAddress}/staking_balance`)
|
|
907
|
+
]).catch((error) => {
|
|
908
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
909
|
+
});
|
|
910
|
+
const tzBalance = new bignumber_1.default((results[0] ?? results[1])?.data);
|
|
911
|
+
const delegatedBalance = new bignumber_1.default(results[2]?.data);
|
|
912
|
+
const stakingBalance = new bignumber_1.default(results[3]?.data);
|
|
913
|
+
// calculate the self bond of the baker
|
|
914
|
+
const selfBond = stakingBalance.minus(delegatedBalance);
|
|
915
|
+
// check what capacity is staked relatively to the self-bond
|
|
916
|
+
const stakingCapacity = stakingBalance.div(selfBond.div(SELF_BOND_REQUIREMENT));
|
|
917
|
+
const bakerInfo = {
|
|
918
|
+
balance: tzBalance,
|
|
919
|
+
delegatedBalance,
|
|
920
|
+
stakingBalance,
|
|
921
|
+
selfBond,
|
|
922
|
+
bakerCapacity: stakingBalance.div(stakingCapacity),
|
|
923
|
+
bakerUsage: stakingCapacity
|
|
924
|
+
};
|
|
925
|
+
return bakerInfo;
|
|
926
|
+
}
|
|
927
|
+
async undelegate(publicKey) {
|
|
928
|
+
return this.delegate(publicKey);
|
|
929
|
+
}
|
|
930
|
+
async delegate(publicKey, delegate) {
|
|
931
|
+
let counter = new bignumber_1.default(1);
|
|
932
|
+
let branch = '';
|
|
933
|
+
const operations = [];
|
|
934
|
+
const tzAddress = await this.getAddressFromPublicKey(publicKey).then((address) => address.address);
|
|
935
|
+
const results = await Promise.all([
|
|
936
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${tzAddress}/counter`),
|
|
937
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head~2/hash`),
|
|
938
|
+
index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/head/context/contracts/${tzAddress}/manager_key`)
|
|
939
|
+
]).catch((error) => {
|
|
940
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
941
|
+
});
|
|
942
|
+
counter = new bignumber_1.default(results[0].data).plus(1);
|
|
943
|
+
branch = results[1].data;
|
|
944
|
+
const accountManager = results[2].data;
|
|
945
|
+
// check if we have revealed the address already
|
|
946
|
+
if (!accountManager) {
|
|
947
|
+
operations.push(await this.createRevealOperation(counter, publicKey, tzAddress));
|
|
948
|
+
counter = counter.plus(1);
|
|
949
|
+
}
|
|
950
|
+
const balance = new bignumber_1.default(await this.getBalanceOfAddresses([tzAddress]));
|
|
951
|
+
const fee = new bignumber_1.default(1420);
|
|
952
|
+
if (balance.isLessThan(fee)) {
|
|
953
|
+
throw new index_4.BalanceError(coinlib_error_1.Domain.TEZOS, 'not enough balance');
|
|
954
|
+
}
|
|
955
|
+
const delegationOperation = {
|
|
956
|
+
kind: TezosOperationType_1.TezosOperationType.DELEGATION,
|
|
957
|
+
source: tzAddress,
|
|
958
|
+
fee: fee.toFixed(),
|
|
959
|
+
counter: counter.toFixed(),
|
|
960
|
+
gas_limit: '10000', // taken from eztz
|
|
961
|
+
storage_limit: '0', // taken from eztz
|
|
962
|
+
delegate: Array.isArray(delegate) ? delegate[0] : delegate
|
|
963
|
+
};
|
|
964
|
+
operations.push(delegationOperation);
|
|
965
|
+
try {
|
|
966
|
+
const tezosWrappedOperation = {
|
|
967
|
+
branch,
|
|
968
|
+
contents: operations
|
|
969
|
+
};
|
|
970
|
+
const binaryTx = await this.forgeTezosOperation(tezosWrappedOperation);
|
|
971
|
+
return { binaryTransaction: binaryTx };
|
|
972
|
+
}
|
|
973
|
+
catch (error) {
|
|
974
|
+
throw new index_4.OperationFailedError(coinlib_error_1.Domain.TEZOS, `Forging Tezos TX failed with ${JSON.stringify(error.message)}`);
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
getAmountUsedByPreviousOperations(operations) {
|
|
978
|
+
let amountUsed = new bignumber_1.default(0);
|
|
979
|
+
operations.forEach((operation) => {
|
|
1547
980
|
switch (operation.kind) {
|
|
1548
981
|
case TezosOperationType_1.TezosOperationType.REVEAL:
|
|
1549
|
-
|
|
982
|
+
const revealOperation = operation;
|
|
1550
983
|
amountUsed = amountUsed.plus(revealOperation.fee);
|
|
1551
984
|
break;
|
|
1552
985
|
case TezosOperationType_1.TezosOperationType.ORIGINATION:
|
|
1553
|
-
|
|
986
|
+
const originationOperation = operation;
|
|
1554
987
|
amountUsed = amountUsed.plus(originationOperation.fee);
|
|
1555
988
|
amountUsed = amountUsed.plus(originationOperation.balance);
|
|
1556
989
|
break;
|
|
1557
990
|
case TezosOperationType_1.TezosOperationType.DELEGATION:
|
|
1558
|
-
|
|
991
|
+
const delegationOperation = operation;
|
|
1559
992
|
amountUsed = amountUsed.plus(delegationOperation.fee);
|
|
1560
993
|
break;
|
|
1561
994
|
case TezosOperationType_1.TezosOperationType.TRANSACTION:
|
|
1562
|
-
|
|
995
|
+
const spendOperation = operation;
|
|
1563
996
|
amountUsed = amountUsed.plus(spendOperation.fee);
|
|
1564
997
|
amountUsed = amountUsed.plus(spendOperation.amount);
|
|
1565
998
|
break;
|
|
@@ -1574,177 +1007,91 @@ var TezosProtocol = /** @class */ (function (_super) {
|
|
|
1574
1007
|
default:
|
|
1575
1008
|
// Exhaustive switch
|
|
1576
1009
|
(0, assert_1.assertNever)(operation.kind);
|
|
1577
|
-
throw new index_4.UnsupportedError(coinlib_error_1.Domain.TEZOS,
|
|
1010
|
+
throw new index_4.UnsupportedError(coinlib_error_1.Domain.TEZOS, `operation type not supported ${JSON.stringify(operation.kind)}`);
|
|
1578
1011
|
}
|
|
1579
1012
|
});
|
|
1580
1013
|
return amountUsed;
|
|
1581
|
-
}
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
];
|
|
1598
|
-
case 1:
|
|
1599
|
-
injectionResponse = (_a.sent()).data;
|
|
1600
|
-
// returns hash if successful
|
|
1601
|
-
return [2 /*return*/, injectionResponse];
|
|
1602
|
-
}
|
|
1603
|
-
});
|
|
1604
|
-
});
|
|
1605
|
-
};
|
|
1606
|
-
TezosProtocol.prototype.checkAndRemovePrefixToHex = function (base58CheckEncodedPayload, tezosPrefix) {
|
|
1607
|
-
var prefixHex = Buffer.from(tezosPrefix).toString('hex');
|
|
1608
|
-
var payload = bs58check.decode(base58CheckEncodedPayload).toString('hex');
|
|
1014
|
+
}
|
|
1015
|
+
async broadcastTransaction(rawTransaction) {
|
|
1016
|
+
const payload = rawTransaction;
|
|
1017
|
+
const { data: injectionResponse } = await index_1.default
|
|
1018
|
+
.post(`${this.options.network.rpcUrl}/injection/operation?chain=main`, JSON.stringify(payload), {
|
|
1019
|
+
headers: { 'content-type': 'application/json' }
|
|
1020
|
+
})
|
|
1021
|
+
.catch((error) => {
|
|
1022
|
+
throw new index_4.NetworkError(coinlib_error_1.Domain.TEZOS, error);
|
|
1023
|
+
});
|
|
1024
|
+
// returns hash if successful
|
|
1025
|
+
return injectionResponse;
|
|
1026
|
+
}
|
|
1027
|
+
checkAndRemovePrefixToHex(base58CheckEncodedPayload, tezosPrefix) {
|
|
1028
|
+
const prefixHex = Buffer.from(tezosPrefix).toString('hex');
|
|
1029
|
+
const payload = bs58check.decode(base58CheckEncodedPayload).toString('hex');
|
|
1609
1030
|
if (payload.startsWith(prefixHex)) {
|
|
1610
1031
|
return payload.substring(tezosPrefix.length * 2);
|
|
1611
1032
|
}
|
|
1612
1033
|
else {
|
|
1613
|
-
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS,
|
|
1034
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, `payload did not match prefix: ${prefixHex}`);
|
|
1614
1035
|
}
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
}
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
return
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
}
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
switch (_a.label) {
|
|
1676
|
-
case 0: return [4 /*yield*/, this.fetchBlockMetadata('head')];
|
|
1677
|
-
case 1:
|
|
1678
|
-
headMetadata = _a.sent();
|
|
1679
|
-
currentCycle = headMetadata.level_info.cycle;
|
|
1680
|
-
return [2 /*return*/, currentCycle];
|
|
1681
|
-
}
|
|
1682
|
-
});
|
|
1683
|
-
});
|
|
1684
|
-
};
|
|
1685
|
-
TezosProtocol.prototype.fetchBlockMetadata = function (block) {
|
|
1686
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1687
|
-
var result;
|
|
1688
|
-
return __generator(this, function (_a) {
|
|
1689
|
-
switch (_a.label) {
|
|
1690
|
-
case 0: return [4 /*yield*/, index_1.default.get("".concat(this.options.network.rpcUrl, "/chains/main/blocks/").concat(block, "/metadata"))];
|
|
1691
|
-
case 1:
|
|
1692
|
-
result = _a.sent();
|
|
1693
|
-
return [2 /*return*/, result.data];
|
|
1694
|
-
}
|
|
1695
|
-
});
|
|
1696
|
-
});
|
|
1697
|
-
};
|
|
1698
|
-
TezosProtocol.prototype.signMessage = function (message, keypair) {
|
|
1699
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1700
|
-
return __generator(this, function (_a) {
|
|
1701
|
-
return [2 /*return*/, this.cryptoClient.signMessage(message, keypair)];
|
|
1702
|
-
});
|
|
1703
|
-
});
|
|
1704
|
-
};
|
|
1705
|
-
TezosProtocol.prototype.verifyMessage = function (message, signature, publicKey) {
|
|
1706
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1707
|
-
return __generator(this, function (_a) {
|
|
1708
|
-
return [2 /*return*/, this.cryptoClient.verifyMessage(message, signature, publicKey)];
|
|
1709
|
-
});
|
|
1710
|
-
});
|
|
1711
|
-
};
|
|
1712
|
-
TezosProtocol.prototype.encryptAsymmetric = function (message, publicKey) {
|
|
1713
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1714
|
-
return __generator(this, function (_a) {
|
|
1715
|
-
return [2 /*return*/, this.cryptoClient.encryptAsymmetric(message, publicKey)];
|
|
1716
|
-
});
|
|
1717
|
-
});
|
|
1718
|
-
};
|
|
1719
|
-
TezosProtocol.prototype.decryptAsymmetric = function (message, keypair) {
|
|
1720
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1721
|
-
return __generator(this, function (_a) {
|
|
1722
|
-
return [2 /*return*/, this.cryptoClient.decryptAsymmetric(message, keypair)];
|
|
1723
|
-
});
|
|
1724
|
-
});
|
|
1725
|
-
};
|
|
1726
|
-
TezosProtocol.prototype.encryptAES = function (message, privateKey) {
|
|
1727
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1728
|
-
return __generator(this, function (_a) {
|
|
1729
|
-
return [2 /*return*/, this.cryptoClient.encryptAES(message, privateKey)];
|
|
1730
|
-
});
|
|
1731
|
-
});
|
|
1732
|
-
};
|
|
1733
|
-
TezosProtocol.prototype.decryptAES = function (message, privateKey) {
|
|
1734
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1735
|
-
return __generator(this, function (_a) {
|
|
1736
|
-
return [2 /*return*/, this.cryptoClient.decryptAES(message, privateKey)];
|
|
1737
|
-
});
|
|
1738
|
-
});
|
|
1739
|
-
};
|
|
1740
|
-
TezosProtocol.prototype.getTransactionStatuses = function (transactionHashes) {
|
|
1741
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
1742
|
-
return __generator(this, function (_a) {
|
|
1743
|
-
throw new Error('Method not implemented.');
|
|
1744
|
-
});
|
|
1745
|
-
});
|
|
1746
|
-
};
|
|
1747
|
-
return TezosProtocol;
|
|
1748
|
-
}(NonExtendedProtocol_1.NonExtendedProtocol));
|
|
1036
|
+
}
|
|
1037
|
+
async unforgeSignedTezosWrappedOperation(hexString) {
|
|
1038
|
+
if (hexString.length <= 128) {
|
|
1039
|
+
throw new index_4.ConditionViolationError(coinlib_error_1.Domain.TEZOS, 'Not a valid signed transaction');
|
|
1040
|
+
}
|
|
1041
|
+
return this.unforgeUnsignedTezosWrappedOperation(hexString.substring(0, hexString.length - 128));
|
|
1042
|
+
}
|
|
1043
|
+
async unforgeUnsignedTezosWrappedOperation(hexString) {
|
|
1044
|
+
return taquito_local_forging_1.localForger.parse(hexString);
|
|
1045
|
+
}
|
|
1046
|
+
async forgeTezosOperation(tezosWrappedOperation) {
|
|
1047
|
+
return taquito_local_forging_1.localForger.forge(tezosWrappedOperation);
|
|
1048
|
+
}
|
|
1049
|
+
async createRevealOperation(counter, publicKey, address, fee = this.revealFee.toFixed()) {
|
|
1050
|
+
const operation = {
|
|
1051
|
+
kind: TezosOperationType_1.TezosOperationType.REVEAL,
|
|
1052
|
+
fee,
|
|
1053
|
+
gas_limit: '10000', // taken from conseiljs
|
|
1054
|
+
storage_limit: '0', // taken from conseiljs
|
|
1055
|
+
counter: counter.toFixed(),
|
|
1056
|
+
public_key: bs58check.encode(Buffer.concat([TezosUtils_1.TezosUtils.tezosPrefixes.edpk, Buffer.from(publicKey, 'hex')])),
|
|
1057
|
+
source: address
|
|
1058
|
+
};
|
|
1059
|
+
return operation;
|
|
1060
|
+
}
|
|
1061
|
+
async getTezosVotingInfo(blockHash) {
|
|
1062
|
+
const response = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/${blockHash}/votes/listings`);
|
|
1063
|
+
return response.data;
|
|
1064
|
+
}
|
|
1065
|
+
async fetchCurrentCycle() {
|
|
1066
|
+
const headMetadata = await this.fetchBlockMetadata('head');
|
|
1067
|
+
const currentCycle = headMetadata.level_info.cycle;
|
|
1068
|
+
return currentCycle;
|
|
1069
|
+
}
|
|
1070
|
+
async fetchBlockMetadata(block) {
|
|
1071
|
+
const result = await index_1.default.get(`${this.options.network.rpcUrl}/chains/main/blocks/${block}/metadata`);
|
|
1072
|
+
return result.data;
|
|
1073
|
+
}
|
|
1074
|
+
async signMessage(message, keypair) {
|
|
1075
|
+
return this.cryptoClient.signMessage(message, keypair);
|
|
1076
|
+
}
|
|
1077
|
+
async verifyMessage(message, signature, publicKey) {
|
|
1078
|
+
return this.cryptoClient.verifyMessage(message, signature, publicKey);
|
|
1079
|
+
}
|
|
1080
|
+
async encryptAsymmetric(message, publicKey) {
|
|
1081
|
+
return this.cryptoClient.encryptAsymmetric(message, publicKey);
|
|
1082
|
+
}
|
|
1083
|
+
async decryptAsymmetric(message, keypair) {
|
|
1084
|
+
return this.cryptoClient.decryptAsymmetric(message, keypair);
|
|
1085
|
+
}
|
|
1086
|
+
async encryptAES(message, privateKey) {
|
|
1087
|
+
return this.cryptoClient.encryptAES(message, privateKey);
|
|
1088
|
+
}
|
|
1089
|
+
async decryptAES(message, privateKey) {
|
|
1090
|
+
return this.cryptoClient.decryptAES(message, privateKey);
|
|
1091
|
+
}
|
|
1092
|
+
async getTransactionStatuses(transactionHashes) {
|
|
1093
|
+
throw new Error('Method not implemented.');
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1749
1096
|
exports.TezosProtocol = TezosProtocol;
|
|
1750
1097
|
//# sourceMappingURL=TezosProtocol.js.map
|