@airgap/substrate 0.13.45-beta.3 → 0.13.45-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/package.json +5 -5
  2. package/v0/index.js +12 -12
  3. package/v0/index.js.map +1 -1
  4. package/v0/protocol/SubstrateCryptoClient.js +94 -23
  5. package/v0/protocol/SubstrateCryptoClient.js.map +1 -1
  6. package/v0/protocol/SubstrateDelegateProtocol.js +542 -297
  7. package/v0/protocol/SubstrateDelegateProtocol.js.map +1 -1
  8. package/v0/protocol/SubstrateNetwork.js +1 -1
  9. package/v0/protocol/SubstrateNetwork.js.map +1 -1
  10. package/v0/protocol/SubstrateProtocol.js +672 -333
  11. package/v0/protocol/SubstrateProtocol.js.map +1 -1
  12. package/v0/protocol/SubstrateProtocolOptions.js +93 -25
  13. package/v0/protocol/SubstrateProtocolOptions.js.map +1 -1
  14. package/v0/protocol/astar/AstarAddress.js +27 -7
  15. package/v0/protocol/astar/AstarAddress.js.map +1 -1
  16. package/v0/protocol/common/SubstrateAccountController.js +687 -400
  17. package/v0/protocol/common/SubstrateAccountController.js.map +1 -1
  18. package/v0/protocol/common/SubstrateTransactionController.d.ts +1 -0
  19. package/v0/protocol/common/SubstrateTransactionController.js +346 -185
  20. package/v0/protocol/common/SubstrateTransactionController.js.map +1 -1
  21. package/v0/protocol/common/blockexplorer/SubstrateBlockExplorerClient.js +100 -52
  22. package/v0/protocol/common/blockexplorer/SubstrateBlockExplorerClient.js.map +1 -1
  23. package/v0/protocol/common/data/account/SubstrateAccountInfo.js +29 -27
  24. package/v0/protocol/common/data/account/SubstrateAccountInfo.js.map +1 -1
  25. package/v0/protocol/common/data/account/SubstrateAddress.d.ts +1 -0
  26. package/v0/protocol/common/data/account/SubstrateAddress.js +46 -43
  27. package/v0/protocol/common/data/account/SubstrateAddress.js.map +1 -1
  28. package/v0/protocol/common/data/account/SubstrateRegistration.js +56 -50
  29. package/v0/protocol/common/data/account/SubstrateRegistration.js.map +1 -1
  30. package/v0/protocol/common/data/metadata/Metadata.js +25 -24
  31. package/v0/protocol/common/data/metadata/Metadata.js.map +1 -1
  32. package/v0/protocol/common/data/metadata/MetadataVersioned.js +5 -2
  33. package/v0/protocol/common/data/metadata/MetadataVersioned.js.map +1 -1
  34. package/v0/protocol/common/data/metadata/decorator/MetadataDecorator.js +20 -18
  35. package/v0/protocol/common/data/metadata/decorator/MetadataDecorator.js.map +1 -1
  36. package/v0/protocol/common/data/metadata/decorator/constant/SubstrateConstant.d.ts +1 -0
  37. package/v0/protocol/common/data/metadata/decorator/storage/SubstrateStorageEntry.js +237 -89
  38. package/v0/protocol/common/data/metadata/decorator/storage/SubstrateStorageEntry.js.map +1 -1
  39. package/v0/protocol/common/data/metadata/v11/MetadataV11.js +63 -43
  40. package/v0/protocol/common/data/metadata/v11/MetadataV11.js.map +1 -1
  41. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Call.js +51 -30
  42. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Call.js.map +1 -1
  43. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Constant.js +38 -20
  44. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Constant.js.map +1 -1
  45. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Error.js +34 -16
  46. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Error.js.map +1 -1
  47. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Event.js +36 -18
  48. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Event.js.map +1 -1
  49. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Module.js +51 -29
  50. package/v0/protocol/common/data/metadata/v11/module/MetadataV11Module.js.map +1 -1
  51. package/v0/protocol/common/data/metadata/v11/module/storage/MetadataV11Storage.js +35 -17
  52. package/v0/protocol/common/data/metadata/v11/module/storage/MetadataV11Storage.js.map +1 -1
  53. package/v0/protocol/common/data/metadata/v11/module/storage/MetadataV11StorageEntry.js +41 -23
  54. package/v0/protocol/common/data/metadata/v11/module/storage/MetadataV11StorageEntry.js.map +1 -1
  55. package/v0/protocol/common/data/metadata/v11/module/storage/MetadataV11StorageEntryType.js +114 -72
  56. package/v0/protocol/common/data/metadata/v11/module/storage/MetadataV11StorageEntryType.js.map +1 -1
  57. package/v0/protocol/common/data/metadata/v12/MetadataV12.js +61 -41
  58. package/v0/protocol/common/data/metadata/v12/MetadataV12.js.map +1 -1
  59. package/v0/protocol/common/data/metadata/v12/module/MetadataV12Module.js +32 -14
  60. package/v0/protocol/common/data/metadata/v12/module/MetadataV12Module.js.map +1 -1
  61. package/v0/protocol/common/data/metadata/v13/MetadataV13.js +61 -41
  62. package/v0/protocol/common/data/metadata/v13/MetadataV13.js.map +1 -1
  63. package/v0/protocol/common/data/metadata/v13/module/MetadataV13Module.js +53 -31
  64. package/v0/protocol/common/data/metadata/v13/module/MetadataV13Module.js.map +1 -1
  65. package/v0/protocol/common/data/metadata/v13/module/storage/MetadataV13Storage.js +35 -17
  66. package/v0/protocol/common/data/metadata/v13/module/storage/MetadataV13Storage.js.map +1 -1
  67. package/v0/protocol/common/data/metadata/v13/module/storage/MetadataV13StorageEntry.js +41 -23
  68. package/v0/protocol/common/data/metadata/v13/module/storage/MetadataV13StorageEntry.js.map +1 -1
  69. package/v0/protocol/common/data/metadata/v13/module/storage/MetadataV13StorageEntryType.js +130 -83
  70. package/v0/protocol/common/data/metadata/v13/module/storage/MetadataV13StorageEntryType.js.map +1 -1
  71. package/v0/protocol/common/data/metadata/v14/MetadataV14.js +74 -53
  72. package/v0/protocol/common/data/metadata/v14/MetadataV14.js.map +1 -1
  73. package/v0/protocol/common/data/metadata/v14/MetadataV14Component.js +25 -7
  74. package/v0/protocol/common/data/metadata/v14/MetadataV14Component.js.map +1 -1
  75. package/v0/protocol/common/data/metadata/v14/extrinsic/MetadataV14Extrinsic.js +35 -17
  76. package/v0/protocol/common/data/metadata/v14/extrinsic/MetadataV14Extrinsic.js.map +1 -1
  77. package/v0/protocol/common/data/metadata/v14/extrinsic/MetadataV14SignedExtension.js +34 -16
  78. package/v0/protocol/common/data/metadata/v14/extrinsic/MetadataV14SignedExtension.js.map +1 -1
  79. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Call.js +28 -8
  80. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Call.js.map +1 -1
  81. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Constant.js +37 -19
  82. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Constant.js.map +1 -1
  83. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Error.js +28 -8
  84. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Error.js.map +1 -1
  85. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Event.js +28 -8
  86. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Event.js.map +1 -1
  87. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Pallet.js +48 -30
  88. package/v0/protocol/common/data/metadata/v14/pallet/MetadataV14Pallet.js.map +1 -1
  89. package/v0/protocol/common/data/metadata/v14/pallet/storage/MetadataV14Storage.js +34 -16
  90. package/v0/protocol/common/data/metadata/v14/pallet/storage/MetadataV14Storage.js.map +1 -1
  91. package/v0/protocol/common/data/metadata/v14/pallet/storage/MetadataV14StorageEntry.js +41 -23
  92. package/v0/protocol/common/data/metadata/v14/pallet/storage/MetadataV14StorageEntry.js.map +1 -1
  93. package/v0/protocol/common/data/metadata/v14/pallet/storage/MetadataV14StorageEntryType.js +90 -49
  94. package/v0/protocol/common/data/metadata/v14/pallet/storage/MetadataV14StorageEntryType.js.map +1 -1
  95. package/v0/protocol/common/data/metadata/v14/registry/MetadataV14PortableRegistry.js +41 -20
  96. package/v0/protocol/common/data/metadata/v14/registry/MetadataV14PortableRegistry.js.map +1 -1
  97. package/v0/protocol/common/data/metadata/v14/registry/MetadataV14PortableType.js +35 -17
  98. package/v0/protocol/common/data/metadata/v14/registry/MetadataV14PortableType.js.map +1 -1
  99. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiField.js +38 -20
  100. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiField.js.map +1 -1
  101. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiType.js +40 -22
  102. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiType.js.map +1 -1
  103. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiTypeParameter.js +34 -16
  104. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiTypeParameter.js.map +1 -1
  105. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiVariant.js +39 -21
  106. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14SiVariant.js.map +1 -1
  107. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14TypeDef.js +150 -106
  108. package/v0/protocol/common/data/metadata/v14/registry/si/MetadataV14TypeDef.js.map +1 -1
  109. package/v0/protocol/common/data/scale/SCALEDecoder.d.ts +3 -2
  110. package/v0/protocol/common/data/scale/SCALEDecoder.js +74 -69
  111. package/v0/protocol/common/data/scale/SCALEDecoder.js.map +1 -1
  112. package/v0/protocol/common/data/scale/type/SCALEAccountId.d.ts +1 -0
  113. package/v0/protocol/common/data/scale/type/SCALEAccountId.js +44 -25
  114. package/v0/protocol/common/data/scale/type/SCALEAccountId.js.map +1 -1
  115. package/v0/protocol/common/data/scale/type/SCALEArray.js +45 -27
  116. package/v0/protocol/common/data/scale/type/SCALEArray.js.map +1 -1
  117. package/v0/protocol/common/data/scale/type/SCALEBoolean.js +36 -18
  118. package/v0/protocol/common/data/scale/type/SCALEBoolean.js.map +1 -1
  119. package/v0/protocol/common/data/scale/type/SCALEBytes.d.ts +1 -0
  120. package/v0/protocol/common/data/scale/type/SCALEBytes.js +42 -23
  121. package/v0/protocol/common/data/scale/type/SCALEBytes.js.map +1 -1
  122. package/v0/protocol/common/data/scale/type/SCALEClass.js +28 -8
  123. package/v0/protocol/common/data/scale/type/SCALEClass.js.map +1 -1
  124. package/v0/protocol/common/data/scale/type/SCALECompactInt.d.ts +1 -1
  125. package/v0/protocol/common/data/scale/type/SCALECompactInt.js +73 -54
  126. package/v0/protocol/common/data/scale/type/SCALECompactInt.js.map +1 -1
  127. package/v0/protocol/common/data/scale/type/SCALEData.d.ts +1 -0
  128. package/v0/protocol/common/data/scale/type/SCALEData.js +51 -33
  129. package/v0/protocol/common/data/scale/type/SCALEData.js.map +1 -1
  130. package/v0/protocol/common/data/scale/type/SCALEEnum.js +39 -21
  131. package/v0/protocol/common/data/scale/type/SCALEEnum.js.map +1 -1
  132. package/v0/protocol/common/data/scale/type/SCALEEra.js +68 -46
  133. package/v0/protocol/common/data/scale/type/SCALEEra.js.map +1 -1
  134. package/v0/protocol/common/data/scale/type/SCALEHash.d.ts +1 -0
  135. package/v0/protocol/common/data/scale/type/SCALEHash.js +53 -29
  136. package/v0/protocol/common/data/scale/type/SCALEHash.js.map +1 -1
  137. package/v0/protocol/common/data/scale/type/SCALEInt.d.ts +1 -1
  138. package/v0/protocol/common/data/scale/type/SCALEInt.js +65 -46
  139. package/v0/protocol/common/data/scale/type/SCALEInt.js.map +1 -1
  140. package/v0/protocol/common/data/scale/type/SCALEMultiAddress.d.ts +2 -1
  141. package/v0/protocol/common/data/scale/type/SCALEMultiAddress.js +59 -40
  142. package/v0/protocol/common/data/scale/type/SCALEMultiAddress.js.map +1 -1
  143. package/v0/protocol/common/data/scale/type/SCALEOptional.js +47 -27
  144. package/v0/protocol/common/data/scale/type/SCALEOptional.js.map +1 -1
  145. package/v0/protocol/common/data/scale/type/SCALEString.js +44 -25
  146. package/v0/protocol/common/data/scale/type/SCALEString.js.map +1 -1
  147. package/v0/protocol/common/data/scale/type/SCALETuple.js +40 -22
  148. package/v0/protocol/common/data/scale/type/SCALETuple.js.map +1 -1
  149. package/v0/protocol/common/data/scale/type/SCALEType.js +9 -6
  150. package/v0/protocol/common/data/scale/type/SCALEType.js.map +1 -1
  151. package/v0/protocol/common/data/staking/SubstrateActiveEraInfo.js +12 -11
  152. package/v0/protocol/common/data/staking/SubstrateActiveEraInfo.js.map +1 -1
  153. package/v0/protocol/common/data/staking/SubstrateEraElectionStatus.js +15 -14
  154. package/v0/protocol/common/data/staking/SubstrateEraElectionStatus.js.map +1 -1
  155. package/v0/protocol/common/data/staking/SubstrateEraRewardPoints.js +16 -13
  156. package/v0/protocol/common/data/staking/SubstrateEraRewardPoints.js.map +1 -1
  157. package/v0/protocol/common/data/staking/SubstrateExposure.js +17 -14
  158. package/v0/protocol/common/data/staking/SubstrateExposure.js.map +1 -1
  159. package/v0/protocol/common/data/staking/SubstrateNominationStatus.js +1 -1
  160. package/v0/protocol/common/data/staking/SubstrateNominationStatus.js.map +1 -1
  161. package/v0/protocol/common/data/staking/SubstrateNominations.js +13 -12
  162. package/v0/protocol/common/data/staking/SubstrateNominations.js.map +1 -1
  163. package/v0/protocol/common/data/staking/SubstrateNominatorDetails.d.ts +1 -1
  164. package/v0/protocol/common/data/staking/SubstratePayee.js +1 -1
  165. package/v0/protocol/common/data/staking/SubstratePayee.js.map +1 -1
  166. package/v0/protocol/common/data/staking/SubstrateSlashingSpans.js +14 -13
  167. package/v0/protocol/common/data/staking/SubstrateSlashingSpans.js.map +1 -1
  168. package/v0/protocol/common/data/staking/SubstrateStakingActionType.js +1 -1
  169. package/v0/protocol/common/data/staking/SubstrateStakingActionType.js.map +1 -1
  170. package/v0/protocol/common/data/staking/SubstrateStakingLedger.js +19 -16
  171. package/v0/protocol/common/data/staking/SubstrateStakingLedger.js.map +1 -1
  172. package/v0/protocol/common/data/staking/SubstrateValidatorDetails.d.ts +1 -1
  173. package/v0/protocol/common/data/staking/SubstrateValidatorPrefs.js +10 -9
  174. package/v0/protocol/common/data/staking/SubstrateValidatorPrefs.js.map +1 -1
  175. package/v0/protocol/common/data/transaction/SubstrateSignature.d.ts +1 -0
  176. package/v0/protocol/common/data/transaction/SubstrateSignature.js +53 -30
  177. package/v0/protocol/common/data/transaction/SubstrateSignature.js.map +1 -1
  178. package/v0/protocol/common/data/transaction/SubstrateTransaction.d.ts +1 -1
  179. package/v0/protocol/common/data/transaction/SubstrateTransaction.js +73 -53
  180. package/v0/protocol/common/data/transaction/SubstrateTransaction.js.map +1 -1
  181. package/v0/protocol/common/data/transaction/SubstrateTransactionPayload.js +76 -44
  182. package/v0/protocol/common/data/transaction/SubstrateTransactionPayload.js.map +1 -1
  183. package/v0/protocol/common/data/transaction/method/SubstrateTransactionMethod.js +76 -40
  184. package/v0/protocol/common/data/transaction/method/SubstrateTransactionMethod.js.map +1 -1
  185. package/v0/protocol/common/data/transaction/method/SubstrateTransactionMethodArgs.js +631 -360
  186. package/v0/protocol/common/data/transaction/method/SubstrateTransactionMethodArgs.js.map +1 -1
  187. package/v0/protocol/common/node/SubstrateNodeClient.js +533 -226
  188. package/v0/protocol/common/node/SubstrateNodeClient.js.map +1 -1
  189. package/v0/protocol/common/node/supported.d.ts +9 -9
  190. package/v0/protocol/common/node/supported.js +1 -1
  191. package/v0/protocol/common/node/supported.js.map +1 -1
  192. package/v0/protocol/compat/SubstrateCompatAddress.d.ts +2 -1
  193. package/v0/protocol/compat/SubstrateCompatAddress.js +30 -17
  194. package/v0/protocol/compat/SubstrateCompatAddress.js.map +1 -1
  195. package/v0/protocol/compat/SubstrateCompatSignature.d.ts +1 -0
  196. package/v0/protocol/compat/SubstrateCompatSignature.js +5 -4
  197. package/v0/protocol/compat/SubstrateCompatSignature.js.map +1 -1
  198. package/v0/protocol/kusama/KusamaAddress.js +27 -7
  199. package/v0/protocol/kusama/KusamaAddress.js.map +1 -1
  200. package/v0/protocol/moonbeam/MoonbeamAddress.d.ts +1 -0
  201. package/v0/protocol/moonbeam/MoonbeamAddress.js +36 -45
  202. package/v0/protocol/moonbeam/MoonbeamAddress.js.map +1 -1
  203. package/v0/protocol/moonbeam/MoonbeamSignature.d.ts +1 -0
  204. package/v0/protocol/moonbeam/MoonbeamSignature.js +35 -16
  205. package/v0/protocol/moonbeam/MoonbeamSignature.js.map +1 -1
  206. package/v0/protocol/polkadot/PolkadotAddress.js +27 -7
  207. package/v0/protocol/polkadot/PolkadotAddress.js.map +1 -1
  208. package/v0/serializer/validators/transaction-validator.js +83 -30
  209. package/v0/serializer/validators/transaction-validator.js.map +1 -1
  210. package/v0/serializer/validators/validators.js +133 -54
  211. package/v0/serializer/validators/validators.js.map +1 -1
  212. package/v0/utils/sr25519.js +74 -26
  213. package/v0/utils/sr25519.js.map +1 -1
  214. package/v1/block-explorer/subscan/SubscanBlockExplorer.js +61 -12
  215. package/v1/block-explorer/subscan/SubscanBlockExplorer.js.map +1 -1
  216. package/v1/block-explorer/subscan/SubscanBlockExplorerClient.js +103 -55
  217. package/v1/block-explorer/subscan/SubscanBlockExplorerClient.js.map +1 -1
  218. package/v1/controller/account/SubstrateCommonAccountController.js +132 -65
  219. package/v1/controller/account/SubstrateCommonAccountController.js.map +1 -1
  220. package/v1/controller/transaction/SubstrateCommonTransactionController.js +356 -194
  221. package/v1/controller/transaction/SubstrateCommonTransactionController.js.map +1 -1
  222. package/v1/crypto/SubstrateCryptoClient.js +94 -23
  223. package/v1/crypto/SubstrateCryptoClient.js.map +1 -1
  224. package/v1/data/account/SubstrateAccountInfo.js +29 -27
  225. package/v1/data/account/SubstrateAccountInfo.js.map +1 -1
  226. package/v1/data/account/SubstrateRegistration.js +56 -50
  227. package/v1/data/account/SubstrateRegistration.js.map +1 -1
  228. package/v1/data/account/address/SubstrateAddress.d.ts +2 -1
  229. package/v1/data/account/address/SubstrateAddress.js +3 -2
  230. package/v1/data/account/address/SubstrateAddress.js.map +1 -1
  231. package/v1/data/account/address/SubstrateAddressFactory.d.ts +3 -2
  232. package/v1/data/account/address/SubstrateAddressFactory.js +23 -16
  233. package/v1/data/account/address/SubstrateAddressFactory.js.map +1 -1
  234. package/v1/data/account/address/SubstrateEthAddress.d.ts +1 -0
  235. package/v1/data/account/address/SubstrateEthAddress.js +39 -48
  236. package/v1/data/account/address/SubstrateEthAddress.js.map +1 -1
  237. package/v1/data/account/address/SubstrateSS58Address.d.ts +1 -0
  238. package/v1/data/account/address/SubstrateSS58Address.js +50 -47
  239. package/v1/data/account/address/SubstrateSS58Address.js.map +1 -1
  240. package/v1/data/metadata/Metadata.js +25 -24
  241. package/v1/data/metadata/Metadata.js.map +1 -1
  242. package/v1/data/metadata/MetadataVersioned.js +5 -2
  243. package/v1/data/metadata/MetadataVersioned.js.map +1 -1
  244. package/v1/data/metadata/decorator/MetadataDecorator.js +20 -18
  245. package/v1/data/metadata/decorator/MetadataDecorator.js.map +1 -1
  246. package/v1/data/metadata/decorator/constant/SubstrateConstant.d.ts +1 -0
  247. package/v1/data/metadata/decorator/storage/SubstrateStorageEntry.js +237 -89
  248. package/v1/data/metadata/decorator/storage/SubstrateStorageEntry.js.map +1 -1
  249. package/v1/data/metadata/v11/MetadataV11.js +63 -43
  250. package/v1/data/metadata/v11/MetadataV11.js.map +1 -1
  251. package/v1/data/metadata/v11/module/MetadataV11Call.js +51 -30
  252. package/v1/data/metadata/v11/module/MetadataV11Call.js.map +1 -1
  253. package/v1/data/metadata/v11/module/MetadataV11Constant.js +38 -20
  254. package/v1/data/metadata/v11/module/MetadataV11Constant.js.map +1 -1
  255. package/v1/data/metadata/v11/module/MetadataV11Error.js +34 -16
  256. package/v1/data/metadata/v11/module/MetadataV11Error.js.map +1 -1
  257. package/v1/data/metadata/v11/module/MetadataV11Event.js +36 -18
  258. package/v1/data/metadata/v11/module/MetadataV11Event.js.map +1 -1
  259. package/v1/data/metadata/v11/module/MetadataV11Module.js +51 -29
  260. package/v1/data/metadata/v11/module/MetadataV11Module.js.map +1 -1
  261. package/v1/data/metadata/v11/module/storage/MetadataV11Storage.js +35 -17
  262. package/v1/data/metadata/v11/module/storage/MetadataV11Storage.js.map +1 -1
  263. package/v1/data/metadata/v11/module/storage/MetadataV11StorageEntry.js +41 -23
  264. package/v1/data/metadata/v11/module/storage/MetadataV11StorageEntry.js.map +1 -1
  265. package/v1/data/metadata/v11/module/storage/MetadataV11StorageEntryType.js +114 -72
  266. package/v1/data/metadata/v11/module/storage/MetadataV11StorageEntryType.js.map +1 -1
  267. package/v1/data/metadata/v12/MetadataV12.js +61 -41
  268. package/v1/data/metadata/v12/MetadataV12.js.map +1 -1
  269. package/v1/data/metadata/v12/module/MetadataV12Module.js +32 -14
  270. package/v1/data/metadata/v12/module/MetadataV12Module.js.map +1 -1
  271. package/v1/data/metadata/v13/MetadataV13.js +61 -41
  272. package/v1/data/metadata/v13/MetadataV13.js.map +1 -1
  273. package/v1/data/metadata/v13/module/MetadataV13Module.js +53 -31
  274. package/v1/data/metadata/v13/module/MetadataV13Module.js.map +1 -1
  275. package/v1/data/metadata/v13/module/storage/MetadataV13Storage.js +35 -17
  276. package/v1/data/metadata/v13/module/storage/MetadataV13Storage.js.map +1 -1
  277. package/v1/data/metadata/v13/module/storage/MetadataV13StorageEntry.js +41 -23
  278. package/v1/data/metadata/v13/module/storage/MetadataV13StorageEntry.js.map +1 -1
  279. package/v1/data/metadata/v13/module/storage/MetadataV13StorageEntryType.js +130 -83
  280. package/v1/data/metadata/v13/module/storage/MetadataV13StorageEntryType.js.map +1 -1
  281. package/v1/data/metadata/v14/MetadataV14.js +74 -53
  282. package/v1/data/metadata/v14/MetadataV14.js.map +1 -1
  283. package/v1/data/metadata/v14/MetadataV14Component.js +25 -7
  284. package/v1/data/metadata/v14/MetadataV14Component.js.map +1 -1
  285. package/v1/data/metadata/v14/extrinsic/MetadataV14Extrinsic.js +35 -17
  286. package/v1/data/metadata/v14/extrinsic/MetadataV14Extrinsic.js.map +1 -1
  287. package/v1/data/metadata/v14/extrinsic/MetadataV14SignedExtension.js +34 -16
  288. package/v1/data/metadata/v14/extrinsic/MetadataV14SignedExtension.js.map +1 -1
  289. package/v1/data/metadata/v14/pallet/MetadataV14Call.js +28 -8
  290. package/v1/data/metadata/v14/pallet/MetadataV14Call.js.map +1 -1
  291. package/v1/data/metadata/v14/pallet/MetadataV14Constant.js +37 -19
  292. package/v1/data/metadata/v14/pallet/MetadataV14Constant.js.map +1 -1
  293. package/v1/data/metadata/v14/pallet/MetadataV14Error.js +28 -8
  294. package/v1/data/metadata/v14/pallet/MetadataV14Error.js.map +1 -1
  295. package/v1/data/metadata/v14/pallet/MetadataV14Event.js +28 -8
  296. package/v1/data/metadata/v14/pallet/MetadataV14Event.js.map +1 -1
  297. package/v1/data/metadata/v14/pallet/MetadataV14Pallet.js +48 -30
  298. package/v1/data/metadata/v14/pallet/MetadataV14Pallet.js.map +1 -1
  299. package/v1/data/metadata/v14/pallet/storage/MetadataV14Storage.js +34 -16
  300. package/v1/data/metadata/v14/pallet/storage/MetadataV14Storage.js.map +1 -1
  301. package/v1/data/metadata/v14/pallet/storage/MetadataV14StorageEntry.js +41 -23
  302. package/v1/data/metadata/v14/pallet/storage/MetadataV14StorageEntry.js.map +1 -1
  303. package/v1/data/metadata/v14/pallet/storage/MetadataV14StorageEntryType.js +90 -49
  304. package/v1/data/metadata/v14/pallet/storage/MetadataV14StorageEntryType.js.map +1 -1
  305. package/v1/data/metadata/v14/registry/MetadataV14PortableRegistry.js +41 -20
  306. package/v1/data/metadata/v14/registry/MetadataV14PortableRegistry.js.map +1 -1
  307. package/v1/data/metadata/v14/registry/MetadataV14PortableType.js +35 -17
  308. package/v1/data/metadata/v14/registry/MetadataV14PortableType.js.map +1 -1
  309. package/v1/data/metadata/v14/registry/si/MetadataV14SiField.js +38 -20
  310. package/v1/data/metadata/v14/registry/si/MetadataV14SiField.js.map +1 -1
  311. package/v1/data/metadata/v14/registry/si/MetadataV14SiType.js +40 -22
  312. package/v1/data/metadata/v14/registry/si/MetadataV14SiType.js.map +1 -1
  313. package/v1/data/metadata/v14/registry/si/MetadataV14SiTypeParameter.js +34 -16
  314. package/v1/data/metadata/v14/registry/si/MetadataV14SiTypeParameter.js.map +1 -1
  315. package/v1/data/metadata/v14/registry/si/MetadataV14SiVariant.js +39 -21
  316. package/v1/data/metadata/v14/registry/si/MetadataV14SiVariant.js.map +1 -1
  317. package/v1/data/metadata/v14/registry/si/MetadataV14TypeDef.js +150 -106
  318. package/v1/data/metadata/v14/registry/si/MetadataV14TypeDef.js.map +1 -1
  319. package/v1/data/scale/SCALEDecoder.d.ts +3 -2
  320. package/v1/data/scale/SCALEDecoder.js +80 -69
  321. package/v1/data/scale/SCALEDecoder.js.map +1 -1
  322. package/v1/data/scale/type/SCALEAccountId.d.ts +1 -0
  323. package/v1/data/scale/type/SCALEAccountId.js +46 -27
  324. package/v1/data/scale/type/SCALEAccountId.js.map +1 -1
  325. package/v1/data/scale/type/SCALEArray.js +45 -27
  326. package/v1/data/scale/type/SCALEArray.js.map +1 -1
  327. package/v1/data/scale/type/SCALEBoolean.js +36 -18
  328. package/v1/data/scale/type/SCALEBoolean.js.map +1 -1
  329. package/v1/data/scale/type/SCALEBytes.d.ts +1 -0
  330. package/v1/data/scale/type/SCALEBytes.js +42 -23
  331. package/v1/data/scale/type/SCALEBytes.js.map +1 -1
  332. package/v1/data/scale/type/SCALEClass.js +28 -8
  333. package/v1/data/scale/type/SCALEClass.js.map +1 -1
  334. package/v1/data/scale/type/SCALECompactInt.d.ts +1 -1
  335. package/v1/data/scale/type/SCALECompactInt.js +73 -54
  336. package/v1/data/scale/type/SCALECompactInt.js.map +1 -1
  337. package/v1/data/scale/type/SCALEData.d.ts +1 -0
  338. package/v1/data/scale/type/SCALEData.js +51 -33
  339. package/v1/data/scale/type/SCALEData.js.map +1 -1
  340. package/v1/data/scale/type/SCALEEnum.js +39 -21
  341. package/v1/data/scale/type/SCALEEnum.js.map +1 -1
  342. package/v1/data/scale/type/SCALEEra.js +68 -46
  343. package/v1/data/scale/type/SCALEEra.js.map +1 -1
  344. package/v1/data/scale/type/SCALEHash.d.ts +1 -0
  345. package/v1/data/scale/type/SCALEHash.js +53 -29
  346. package/v1/data/scale/type/SCALEHash.js.map +1 -1
  347. package/v1/data/scale/type/SCALEInt.d.ts +1 -1
  348. package/v1/data/scale/type/SCALEInt.js +65 -46
  349. package/v1/data/scale/type/SCALEInt.js.map +1 -1
  350. package/v1/data/scale/type/SCALEMultiAddress.d.ts +2 -1
  351. package/v1/data/scale/type/SCALEMultiAddress.js +59 -40
  352. package/v1/data/scale/type/SCALEMultiAddress.js.map +1 -1
  353. package/v1/data/scale/type/SCALEOptional.js +47 -27
  354. package/v1/data/scale/type/SCALEOptional.js.map +1 -1
  355. package/v1/data/scale/type/SCALEString.js +44 -25
  356. package/v1/data/scale/type/SCALEString.js.map +1 -1
  357. package/v1/data/scale/type/SCALETuple.js +40 -22
  358. package/v1/data/scale/type/SCALETuple.js.map +1 -1
  359. package/v1/data/scale/type/SCALEType.js +9 -6
  360. package/v1/data/scale/type/SCALEType.js.map +1 -1
  361. package/v1/data/transaction/SubstrateSignature.d.ts +1 -0
  362. package/v1/data/transaction/SubstrateSignature.js +61 -36
  363. package/v1/data/transaction/SubstrateSignature.js.map +1 -1
  364. package/v1/data/transaction/SubstrateTransaction.d.ts +2 -2
  365. package/v1/data/transaction/SubstrateTransaction.js +87 -66
  366. package/v1/data/transaction/SubstrateTransaction.js.map +1 -1
  367. package/v1/data/transaction/SubstrateTransactionPayload.js +114 -81
  368. package/v1/data/transaction/SubstrateTransactionPayload.js.map +1 -1
  369. package/v1/data/transaction/method/SubstrateTransactionMethod.js +76 -40
  370. package/v1/data/transaction/method/SubstrateTransactionMethod.js.map +1 -1
  371. package/v1/data/transaction/method/SubstrateTransactionMethodArgs.js +65 -35
  372. package/v1/data/transaction/method/SubstrateTransactionMethodArgs.js.map +1 -1
  373. package/v1/index.js +38 -38
  374. package/v1/index.js.map +1 -1
  375. package/v1/node/SubstrateCommonNodeClient.d.ts +12 -12
  376. package/v1/node/SubstrateCommonNodeClient.js +357 -159
  377. package/v1/node/SubstrateCommonNodeClient.js.map +1 -1
  378. package/v1/protocol/SubstrateProtocol.js +388 -182
  379. package/v1/protocol/SubstrateProtocol.js.map +1 -1
  380. package/v1/protocol/SubstrateStakingProtocol.js +82 -15
  381. package/v1/protocol/SubstrateStakingProtocol.js.map +1 -1
  382. package/v1/serializer/v3/schemas/converter/transaction-converter.js +20 -8
  383. package/v1/serializer/v3/schemas/converter/transaction-converter.js.map +1 -1
  384. package/v1/serializer/v3/validators/transaction-validator.js +63 -15
  385. package/v1/serializer/v3/validators/transaction-validator.js.map +1 -1
  386. package/v1/serializer/v3/validators/validators.js +129 -48
  387. package/v1/serializer/v3/validators/validators.js.map +1 -1
  388. package/v1/types/configuration.d.ts +6 -6
  389. package/v1/types/crypto.d.ts +1 -1
  390. package/v1/utils/keys.js +5 -4
  391. package/v1/utils/keys.js.map +1 -1
  392. package/v1/utils/protocol.js +15 -14
  393. package/v1/utils/protocol.js.map +1 -1
  394. package/v1/utils/signature.js +4 -3
  395. package/v1/utils/signature.js.map +1 -1
@@ -1,430 +1,717 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
2
38
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
40
  };
5
41
  Object.defineProperty(exports, "__esModule", { value: true });
6
42
  exports.SubstrateAccountController = void 0;
7
- const wasm_crypto_1 = require("@polkadot/wasm-crypto");
8
- const bignumber_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber"));
9
- const sr25519_1 = require("../../utils/sr25519");
10
- const SubstrateCompatAddress_1 = require("../compat/SubstrateCompatAddress");
11
- const SubstrateEraElectionStatus_1 = require("./data/staking/SubstrateEraElectionStatus");
12
- const SubstrateNominationStatus_1 = require("./data/staking/SubstrateNominationStatus");
13
- const SubstrateStakingActionType_1 = require("./data/staking/SubstrateStakingActionType");
14
- class SubstrateAccountController {
15
- constructor(network, nodeClient) {
43
+ var wasm_crypto_1 = require("@polkadot/wasm-crypto");
44
+ var bignumber_1 = __importDefault(require("@airgap/coinlib-core/dependencies/src/bignumber.js-9.0.0/bignumber"));
45
+ var sr25519_1 = require("../../utils/sr25519");
46
+ var SubstrateCompatAddress_1 = require("../compat/SubstrateCompatAddress");
47
+ var SubstrateEraElectionStatus_1 = require("./data/staking/SubstrateEraElectionStatus");
48
+ var SubstrateNominationStatus_1 = require("./data/staking/SubstrateNominationStatus");
49
+ var SubstrateStakingActionType_1 = require("./data/staking/SubstrateStakingActionType");
50
+ var SubstrateAccountController = /** @class */ (function () {
51
+ function SubstrateAccountController(network, nodeClient) {
16
52
  this.network = network;
17
53
  this.nodeClient = nodeClient;
18
54
  }
19
- async createKeyPairFromMnemonic(mnemonic, derivationPath, password) {
20
- await (0, wasm_crypto_1.waitReady)();
21
- const secret = (0, wasm_crypto_1.bip39ToMiniSecret)(mnemonic, password || '');
22
- return this.createKeyPairFromHexSecret(Buffer.from(secret).toString('hex'), derivationPath);
23
- }
24
- async createKeyPairFromHexSecret(secret, derivationPath) {
25
- return (0, sr25519_1.createSr25519KeyPair)(secret, derivationPath);
26
- }
27
- async createAddressFromPublicKey(publicKey) {
28
- return this.substrateAddressFrom(publicKey);
29
- }
30
- async getBalance(accountId) {
31
- const accountInfo = await this.nodeClient.getAccountInfo(this.substrateAddressFrom(accountId));
32
- const free = accountInfo?.data.free.value;
33
- const reserved = accountInfo?.data.reserved.value;
34
- return free && reserved ? free.plus(reserved) : new bignumber_1.default(0);
35
- }
36
- async getTransferableBalance(accountId, excludeExistentialDeposit = true, ignoreFees = true) {
37
- const results = await Promise.all([
38
- this.nodeClient.getAccountInfo(this.substrateAddressFrom(accountId)),
39
- excludeExistentialDeposit ? this.nodeClient.getExistentialDeposit() : null
40
- ]);
41
- const accountInfo = results[0];
42
- const minBalance = results[1];
43
- if (!accountInfo) {
44
- return new bignumber_1.default(0);
45
- }
46
- const free = accountInfo.data.free.value;
47
- const locked = ignoreFees ? accountInfo.data.miscFrozen.value : accountInfo.data.feeFrozen.value;
48
- return free.minus(locked).minus(minBalance || 0);
49
- }
50
- async getUnlockingBalance(accountId) {
51
- const stakingDetails = await this.nodeClient.getStakingLedger(this.substrateAddressFrom(accountId));
52
- return (stakingDetails?.unlocking.elements.map((entry) => entry.first.value).reduce((sum, next) => sum.plus(next), new bignumber_1.default(0)) ??
53
- new bignumber_1.default(0));
54
- }
55
- async isBonded(accountId) {
56
- const bonded = await this.nodeClient.getBonded(this.substrateAddressFrom(accountId));
57
- return bonded != null;
58
- }
59
- async isDelegating(accountId) {
60
- const nominations = await this.nodeClient.getNominations(this.substrateAddressFrom(accountId));
61
- return nominations != null;
62
- }
63
- async getCurrentValidators(accountId) {
64
- const nominations = await this.nodeClient.getNominations(this.substrateAddressFrom(accountId));
65
- if (nominations) {
66
- return nominations.targets.elements.map((target) => target.asAddress());
67
- }
68
- return [];
69
- }
70
- async getValidatorDetails(accountId) {
71
- const address = this.substrateAddressFrom(accountId);
72
- const activeEra = await this.nodeClient.getActiveEraInfo();
73
- let identity;
74
- let status;
75
- let exposure;
76
- let validatorPrefs;
77
- let lastEraReward;
78
- if (activeEra) {
79
- const activeEraIndex = activeEra.index.toNumber();
80
- const results = await Promise.all([
81
- this.getAccountIdentityInfo(address),
82
- this.nodeClient.getValidators(),
83
- this.nodeClient.getValidatorPrefs(activeEraIndex, address),
84
- this.nodeClient.getValidatorExposure(activeEraIndex, address)
85
- ]);
86
- identity = results[0] || undefined;
87
- const currentValidators = results[1];
88
- validatorPrefs = results[2] || undefined;
89
- exposure = results[3] || undefined;
90
- lastEraReward = (await this.getEraValidatorReward(address, activeEraIndex - 1)) || undefined;
91
- if (currentValidators && currentValidators.find((current) => current.compare(address) == 0)) {
92
- status = 'Active';
93
- }
94
- else if (currentValidators) {
95
- status = 'Inactive';
96
- }
97
- }
98
- return {
99
- address: address.asString(),
100
- name: identity ? identity.display.toString() : undefined,
101
- status: status || undefined,
102
- ownStash: exposure ? exposure.own.toString() : undefined,
103
- totalStakingBalance: exposure ? exposure.total.toString() : undefined,
104
- commission: validatorPrefs
105
- ? validatorPrefs.commission.value.dividedBy(1_000_000_000).toString() // commission is Perbill (parts per billion)
106
- : undefined,
107
- lastEraReward,
108
- nominators: exposure?.others.elements.length ?? 0
109
- };
110
- }
111
- async getNominatorDetails(accountId, validatorIds) {
112
- const address = this.substrateAddressFrom(accountId);
113
- const results = await Promise.all([
114
- this.getBalance(address),
115
- this.getTransferableBalance(address, false, false),
116
- this.nodeClient.getStakingLedger(address),
117
- this.nodeClient.getNominations(address),
118
- this.nodeClient.getActiveEraInfo(),
119
- this.nodeClient.getExpectedEraDuration(),
120
- this.nodeClient.getExistentialDeposit()
121
- ]);
122
- const balance = results[0];
123
- const transferableBalance = results[1];
124
- const stakingLedger = results[2];
125
- const nominations = results[3];
126
- const activeEra = results[4];
127
- const expectedEraDuration = results[5];
128
- if (!balance || !transferableBalance || !activeEra || !expectedEraDuration) {
129
- return Promise.reject('Could not fetch nominator details.');
130
- }
131
- const validators = nominations?.targets?.elements?.map((target) => target.asAddress()) || [];
132
- const stakingDetails = await this.getStakingDetails(accountId, stakingLedger, nominations, activeEra, expectedEraDuration);
133
- const availableActions = await this.getAvailableStakingActions(stakingDetails, nominations, validatorIds ?? validators, transferableBalance);
134
- return {
135
- address: address.asString(),
136
- balance: balance.toString(),
137
- delegatees: validators,
138
- availableActions,
139
- stakingDetails: stakingDetails || undefined
140
- };
141
- }
142
- async getNominationStatus(nominator, validator, era) {
143
- const eraIndex = era !== undefined ? era : (await this.nodeClient.getActiveEraInfo())?.index.toNumber();
144
- if (eraIndex === undefined) {
145
- return Promise.reject('Could not fetch active era');
146
- }
147
- const nominations = await this.nodeClient.getNominations(this.substrateAddressFrom(nominator));
148
- if (nominations === null || !nominations.targets.elements.some((target) => target.asAddress() === validator)) {
149
- return undefined;
150
- }
151
- const exposure = await this.nodeClient.getValidatorExposure(eraIndex, this.substrateAddressFrom(validator));
152
- if (!exposure) {
153
- return SubstrateNominationStatus_1.SubstrateNominationStatus.INACTIVE;
154
- }
155
- const isActive = exposure.others.elements.some((element) => element.first.asAddress() === nominator.toString());
156
- if (!isActive) {
157
- return SubstrateNominationStatus_1.SubstrateNominationStatus.INACTIVE;
158
- }
159
- const isOversubscribed = exposure.others.elements.length > 256;
160
- if (isOversubscribed) {
161
- const position = exposure.others.elements
162
- .sort((a, b) => b.second.value.minus(a.second.value).toNumber())
163
- .map((exposure) => exposure.first.asAddress())
164
- .indexOf(nominator.toString());
165
- if (position > 256) {
166
- return SubstrateNominationStatus_1.SubstrateNominationStatus.OVERSUBSCRIBED;
167
- }
168
- }
169
- return SubstrateNominationStatus_1.SubstrateNominationStatus.ACTIVE;
170
- }
171
- async getSlashingSpansNumber(accountId) {
172
- const slashingSpans = await this.nodeClient.getSlashingSpan(this.substrateAddressFrom(accountId));
173
- return slashingSpans ? slashingSpans.prior.elements.length + 1 : 0;
174
- }
175
- async getStakingDetails(accountId, stakingLedger, nominations, activeEra, expectedEraDuration) {
176
- if (!stakingLedger) {
177
- return null;
178
- }
179
- const unlockingDetails = this.getUnlockingDetails(stakingLedger.unlocking.elements.map((tuple) => [tuple.first.value, tuple.second.value]), activeEra, expectedEraDuration);
180
- const results = await Promise.all([
181
- this.getStakingStatus(accountId, nominations, activeEra.index.toNumber()),
182
- nominations
183
- ? this.getNominatorRewards(accountId, nominations.targets.elements.map((id) => id.address), activeEra, 5)
184
- : []
185
- ]);
186
- const stakingStatus = results[0];
187
- const rewards = results[1];
188
- return {
189
- total: stakingLedger.total.toString(),
190
- active: stakingLedger.active.toString(),
191
- locked: unlockingDetails.locked,
192
- unlocked: unlockingDetails.unlocked,
193
- status: stakingStatus,
194
- nextEra: activeEra.start.value?.plus(expectedEraDuration)?.toNumber() || 0,
195
- rewards
196
- };
197
- }
198
- getUnlockingDetails(unlocking, activeEra, expectedEraDuration) {
199
- const [locked, unlocked] = this.partitionArray(unlocking, ([_, era]) => activeEra.index.lt(era));
200
- const lockedDetails = locked.map(([value, era]) => {
201
- const eraStart = activeEra.start.value?.value || new bignumber_1.default(0);
202
- const estimatedDuration = era.minus(activeEra.index.value).multipliedBy(expectedEraDuration);
203
- const expectedUnlock = eraStart.plus(estimatedDuration);
55
+ SubstrateAccountController.prototype.createKeyPairFromMnemonic = function (mnemonic, derivationPath, password) {
56
+ return __awaiter(this, void 0, void 0, function () {
57
+ var secret;
58
+ return __generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0: return [4 /*yield*/, (0, wasm_crypto_1.waitReady)()];
61
+ case 1:
62
+ _a.sent();
63
+ secret = (0, wasm_crypto_1.bip39ToMiniSecret)(mnemonic, password || '');
64
+ return [2 /*return*/, this.createKeyPairFromHexSecret(Buffer.from(secret).toString('hex'), derivationPath)];
65
+ }
66
+ });
67
+ });
68
+ };
69
+ SubstrateAccountController.prototype.createKeyPairFromHexSecret = function (secret, derivationPath) {
70
+ return __awaiter(this, void 0, void 0, function () {
71
+ return __generator(this, function (_a) {
72
+ return [2 /*return*/, (0, sr25519_1.createSr25519KeyPair)(secret, derivationPath)];
73
+ });
74
+ });
75
+ };
76
+ SubstrateAccountController.prototype.createAddressFromPublicKey = function (publicKey) {
77
+ return __awaiter(this, void 0, void 0, function () {
78
+ return __generator(this, function (_a) {
79
+ return [2 /*return*/, this.substrateAddressFrom(publicKey)];
80
+ });
81
+ });
82
+ };
83
+ SubstrateAccountController.prototype.getBalance = function (accountId) {
84
+ return __awaiter(this, void 0, void 0, function () {
85
+ var accountInfo, free, reserved;
86
+ return __generator(this, function (_a) {
87
+ switch (_a.label) {
88
+ case 0: return [4 /*yield*/, this.nodeClient.getAccountInfo(this.substrateAddressFrom(accountId))];
89
+ case 1:
90
+ accountInfo = _a.sent();
91
+ free = accountInfo === null || accountInfo === void 0 ? void 0 : accountInfo.data.free.value;
92
+ reserved = accountInfo === null || accountInfo === void 0 ? void 0 : accountInfo.data.reserved.value;
93
+ return [2 /*return*/, free && reserved ? free.plus(reserved) : new bignumber_1.default(0)];
94
+ }
95
+ });
96
+ });
97
+ };
98
+ SubstrateAccountController.prototype.getTransferableBalance = function (accountId, excludeExistentialDeposit, ignoreFees) {
99
+ if (excludeExistentialDeposit === void 0) { excludeExistentialDeposit = true; }
100
+ if (ignoreFees === void 0) { ignoreFees = true; }
101
+ return __awaiter(this, void 0, void 0, function () {
102
+ var results, accountInfo, minBalance, free, locked;
103
+ return __generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0: return [4 /*yield*/, Promise.all([
106
+ this.nodeClient.getAccountInfo(this.substrateAddressFrom(accountId)),
107
+ excludeExistentialDeposit ? this.nodeClient.getExistentialDeposit() : null
108
+ ])];
109
+ case 1:
110
+ results = _a.sent();
111
+ accountInfo = results[0];
112
+ minBalance = results[1];
113
+ if (!accountInfo) {
114
+ return [2 /*return*/, new bignumber_1.default(0)];
115
+ }
116
+ free = accountInfo.data.free.value;
117
+ locked = ignoreFees ? accountInfo.data.miscFrozen.value : accountInfo.data.feeFrozen.value;
118
+ return [2 /*return*/, free.minus(locked).minus(minBalance || 0)];
119
+ }
120
+ });
121
+ });
122
+ };
123
+ SubstrateAccountController.prototype.getUnlockingBalance = function (accountId) {
124
+ var _a;
125
+ return __awaiter(this, void 0, void 0, function () {
126
+ var stakingDetails;
127
+ return __generator(this, function (_b) {
128
+ switch (_b.label) {
129
+ case 0: return [4 /*yield*/, this.nodeClient.getStakingLedger(this.substrateAddressFrom(accountId))];
130
+ case 1:
131
+ stakingDetails = _b.sent();
132
+ return [2 /*return*/, ((_a = stakingDetails === null || stakingDetails === void 0 ? void 0 : stakingDetails.unlocking.elements.map(function (entry) { return entry.first.value; }).reduce(function (sum, next) { return sum.plus(next); }, new bignumber_1.default(0))) !== null && _a !== void 0 ? _a : new bignumber_1.default(0))];
133
+ }
134
+ });
135
+ });
136
+ };
137
+ SubstrateAccountController.prototype.isBonded = function (accountId) {
138
+ return __awaiter(this, void 0, void 0, function () {
139
+ var bonded;
140
+ return __generator(this, function (_a) {
141
+ switch (_a.label) {
142
+ case 0: return [4 /*yield*/, this.nodeClient.getBonded(this.substrateAddressFrom(accountId))];
143
+ case 1:
144
+ bonded = _a.sent();
145
+ return [2 /*return*/, bonded != null];
146
+ }
147
+ });
148
+ });
149
+ };
150
+ SubstrateAccountController.prototype.isDelegating = function (accountId) {
151
+ return __awaiter(this, void 0, void 0, function () {
152
+ var nominations;
153
+ return __generator(this, function (_a) {
154
+ switch (_a.label) {
155
+ case 0: return [4 /*yield*/, this.nodeClient.getNominations(this.substrateAddressFrom(accountId))];
156
+ case 1:
157
+ nominations = _a.sent();
158
+ return [2 /*return*/, nominations != null];
159
+ }
160
+ });
161
+ });
162
+ };
163
+ SubstrateAccountController.prototype.getCurrentValidators = function (accountId) {
164
+ return __awaiter(this, void 0, void 0, function () {
165
+ var nominations;
166
+ return __generator(this, function (_a) {
167
+ switch (_a.label) {
168
+ case 0: return [4 /*yield*/, this.nodeClient.getNominations(this.substrateAddressFrom(accountId))];
169
+ case 1:
170
+ nominations = _a.sent();
171
+ if (nominations) {
172
+ return [2 /*return*/, nominations.targets.elements.map(function (target) { return target.asAddress(); })];
173
+ }
174
+ return [2 /*return*/, []];
175
+ }
176
+ });
177
+ });
178
+ };
179
+ SubstrateAccountController.prototype.getValidatorDetails = function (accountId) {
180
+ var _a;
181
+ return __awaiter(this, void 0, void 0, function () {
182
+ var address, activeEra, identity, status, exposure, validatorPrefs, lastEraReward, activeEraIndex, results, currentValidators;
183
+ return __generator(this, function (_b) {
184
+ switch (_b.label) {
185
+ case 0:
186
+ address = this.substrateAddressFrom(accountId);
187
+ return [4 /*yield*/, this.nodeClient.getActiveEraInfo()];
188
+ case 1:
189
+ activeEra = _b.sent();
190
+ if (!activeEra) return [3 /*break*/, 4];
191
+ activeEraIndex = activeEra.index.toNumber();
192
+ return [4 /*yield*/, Promise.all([
193
+ this.getAccountIdentityInfo(address),
194
+ this.nodeClient.getValidators(),
195
+ this.nodeClient.getValidatorPrefs(activeEraIndex, address),
196
+ this.nodeClient.getValidatorExposure(activeEraIndex, address)
197
+ ])];
198
+ case 2:
199
+ results = _b.sent();
200
+ identity = results[0] || undefined;
201
+ currentValidators = results[1];
202
+ validatorPrefs = results[2] || undefined;
203
+ exposure = results[3] || undefined;
204
+ return [4 /*yield*/, this.getEraValidatorReward(address, activeEraIndex - 1)];
205
+ case 3:
206
+ lastEraReward = (_b.sent()) || undefined;
207
+ if (currentValidators && currentValidators.find(function (current) { return current.compare(address) == 0; })) {
208
+ status = 'Active';
209
+ }
210
+ else if (currentValidators) {
211
+ status = 'Inactive';
212
+ }
213
+ _b.label = 4;
214
+ case 4: return [2 /*return*/, {
215
+ address: address.asString(),
216
+ name: identity ? identity.display.toString() : undefined,
217
+ status: status || undefined,
218
+ ownStash: exposure ? exposure.own.toString() : undefined,
219
+ totalStakingBalance: exposure ? exposure.total.toString() : undefined,
220
+ commission: validatorPrefs
221
+ ? validatorPrefs.commission.value.dividedBy(1000000000).toString() // commission is Perbill (parts per billion)
222
+ : undefined,
223
+ lastEraReward: lastEraReward,
224
+ nominators: (_a = exposure === null || exposure === void 0 ? void 0 : exposure.others.elements.length) !== null && _a !== void 0 ? _a : 0
225
+ }];
226
+ }
227
+ });
228
+ });
229
+ };
230
+ SubstrateAccountController.prototype.getNominatorDetails = function (accountId, validatorIds) {
231
+ var _a, _b;
232
+ return __awaiter(this, void 0, void 0, function () {
233
+ var address, results, balance, transferableBalance, stakingLedger, nominations, activeEra, expectedEraDuration, validators, stakingDetails, availableActions;
234
+ return __generator(this, function (_c) {
235
+ switch (_c.label) {
236
+ case 0:
237
+ address = this.substrateAddressFrom(accountId);
238
+ return [4 /*yield*/, Promise.all([
239
+ this.getBalance(address),
240
+ this.getTransferableBalance(address, false, false),
241
+ this.nodeClient.getStakingLedger(address),
242
+ this.nodeClient.getNominations(address),
243
+ this.nodeClient.getActiveEraInfo(),
244
+ this.nodeClient.getExpectedEraDuration(),
245
+ this.nodeClient.getExistentialDeposit()
246
+ ])];
247
+ case 1:
248
+ results = _c.sent();
249
+ balance = results[0];
250
+ transferableBalance = results[1];
251
+ stakingLedger = results[2];
252
+ nominations = results[3];
253
+ activeEra = results[4];
254
+ expectedEraDuration = results[5];
255
+ if (!balance || !transferableBalance || !activeEra || !expectedEraDuration) {
256
+ return [2 /*return*/, Promise.reject('Could not fetch nominator details.')];
257
+ }
258
+ validators = ((_b = (_a = nominations === null || nominations === void 0 ? void 0 : nominations.targets) === null || _a === void 0 ? void 0 : _a.elements) === null || _b === void 0 ? void 0 : _b.map(function (target) { return target.asAddress(); })) || [];
259
+ return [4 /*yield*/, this.getStakingDetails(accountId, stakingLedger, nominations, activeEra, expectedEraDuration)];
260
+ case 2:
261
+ stakingDetails = _c.sent();
262
+ return [4 /*yield*/, this.getAvailableStakingActions(stakingDetails, nominations, validatorIds !== null && validatorIds !== void 0 ? validatorIds : validators, transferableBalance)];
263
+ case 3:
264
+ availableActions = _c.sent();
265
+ return [2 /*return*/, {
266
+ address: address.asString(),
267
+ balance: balance.toString(),
268
+ delegatees: validators,
269
+ availableActions: availableActions,
270
+ stakingDetails: stakingDetails || undefined
271
+ }];
272
+ }
273
+ });
274
+ });
275
+ };
276
+ SubstrateAccountController.prototype.getNominationStatus = function (nominator, validator, era) {
277
+ var _a;
278
+ return __awaiter(this, void 0, void 0, function () {
279
+ var eraIndex, _b, nominations, exposure, isActive, isOversubscribed, position;
280
+ return __generator(this, function (_c) {
281
+ switch (_c.label) {
282
+ case 0:
283
+ if (!(era !== undefined)) return [3 /*break*/, 1];
284
+ _b = era;
285
+ return [3 /*break*/, 3];
286
+ case 1: return [4 /*yield*/, this.nodeClient.getActiveEraInfo()];
287
+ case 2:
288
+ _b = (_a = (_c.sent())) === null || _a === void 0 ? void 0 : _a.index.toNumber();
289
+ _c.label = 3;
290
+ case 3:
291
+ eraIndex = _b;
292
+ if (eraIndex === undefined) {
293
+ return [2 /*return*/, Promise.reject('Could not fetch active era')];
294
+ }
295
+ return [4 /*yield*/, this.nodeClient.getNominations(this.substrateAddressFrom(nominator))];
296
+ case 4:
297
+ nominations = _c.sent();
298
+ if (nominations === null || !nominations.targets.elements.some(function (target) { return target.asAddress() === validator; })) {
299
+ return [2 /*return*/, undefined];
300
+ }
301
+ return [4 /*yield*/, this.nodeClient.getValidatorExposure(eraIndex, this.substrateAddressFrom(validator))];
302
+ case 5:
303
+ exposure = _c.sent();
304
+ if (!exposure) {
305
+ return [2 /*return*/, SubstrateNominationStatus_1.SubstrateNominationStatus.INACTIVE];
306
+ }
307
+ isActive = exposure.others.elements.some(function (element) { return element.first.asAddress() === nominator.toString(); });
308
+ if (!isActive) {
309
+ return [2 /*return*/, SubstrateNominationStatus_1.SubstrateNominationStatus.INACTIVE];
310
+ }
311
+ isOversubscribed = exposure.others.elements.length > 256;
312
+ if (isOversubscribed) {
313
+ position = exposure.others.elements
314
+ .sort(function (a, b) { return b.second.value.minus(a.second.value).toNumber(); })
315
+ .map(function (exposure) { return exposure.first.asAddress(); })
316
+ .indexOf(nominator.toString());
317
+ if (position > 256) {
318
+ return [2 /*return*/, SubstrateNominationStatus_1.SubstrateNominationStatus.OVERSUBSCRIBED];
319
+ }
320
+ }
321
+ return [2 /*return*/, SubstrateNominationStatus_1.SubstrateNominationStatus.ACTIVE];
322
+ }
323
+ });
324
+ });
325
+ };
326
+ SubstrateAccountController.prototype.getSlashingSpansNumber = function (accountId) {
327
+ return __awaiter(this, void 0, void 0, function () {
328
+ var slashingSpans;
329
+ return __generator(this, function (_a) {
330
+ switch (_a.label) {
331
+ case 0: return [4 /*yield*/, this.nodeClient.getSlashingSpan(this.substrateAddressFrom(accountId))];
332
+ case 1:
333
+ slashingSpans = _a.sent();
334
+ return [2 /*return*/, slashingSpans ? slashingSpans.prior.elements.length + 1 : 0];
335
+ }
336
+ });
337
+ });
338
+ };
339
+ SubstrateAccountController.prototype.getStakingDetails = function (accountId, stakingLedger, nominations, activeEra, expectedEraDuration) {
340
+ var _a, _b;
341
+ return __awaiter(this, void 0, void 0, function () {
342
+ var unlockingDetails, results, stakingStatus, rewards;
343
+ return __generator(this, function (_c) {
344
+ switch (_c.label) {
345
+ case 0:
346
+ if (!stakingLedger) {
347
+ return [2 /*return*/, null];
348
+ }
349
+ unlockingDetails = this.getUnlockingDetails(stakingLedger.unlocking.elements.map(function (tuple) { return [tuple.first.value, tuple.second.value]; }), activeEra, expectedEraDuration);
350
+ return [4 /*yield*/, Promise.all([
351
+ this.getStakingStatus(accountId, nominations, activeEra.index.toNumber()),
352
+ nominations
353
+ ? this.getNominatorRewards(accountId, nominations.targets.elements.map(function (id) { return id.address; }), activeEra, 5)
354
+ : []
355
+ ])];
356
+ case 1:
357
+ results = _c.sent();
358
+ stakingStatus = results[0];
359
+ rewards = results[1];
360
+ return [2 /*return*/, {
361
+ total: stakingLedger.total.toString(),
362
+ active: stakingLedger.active.toString(),
363
+ locked: unlockingDetails.locked,
364
+ unlocked: unlockingDetails.unlocked,
365
+ status: stakingStatus,
366
+ nextEra: ((_b = (_a = activeEra.start.value) === null || _a === void 0 ? void 0 : _a.plus(expectedEraDuration)) === null || _b === void 0 ? void 0 : _b.toNumber()) || 0,
367
+ rewards: rewards
368
+ }];
369
+ }
370
+ });
371
+ });
372
+ };
373
+ SubstrateAccountController.prototype.getUnlockingDetails = function (unlocking, activeEra, expectedEraDuration) {
374
+ var _a = this.partitionArray(unlocking, function (_a) {
375
+ var _ = _a[0], era = _a[1];
376
+ return activeEra.index.lt(era);
377
+ }), locked = _a[0], unlocked = _a[1];
378
+ var lockedDetails = locked.map(function (_a) {
379
+ var _b;
380
+ var value = _a[0], era = _a[1];
381
+ var eraStart = ((_b = activeEra.start.value) === null || _b === void 0 ? void 0 : _b.value) || new bignumber_1.default(0);
382
+ var estimatedDuration = era.minus(activeEra.index.value).multipliedBy(expectedEraDuration);
383
+ var expectedUnlock = eraStart.plus(estimatedDuration);
204
384
  return {
205
385
  value: value.toString(10),
206
386
  expectedUnlock: expectedUnlock.toNumber()
207
387
  };
208
388
  });
209
- const totalUnlocked = unlocked.reduce((total, [value, _]) => total.plus(value), new bignumber_1.default(0));
389
+ var totalUnlocked = unlocked.reduce(function (total, _a) {
390
+ var value = _a[0], _ = _a[1];
391
+ return total.plus(value);
392
+ }, new bignumber_1.default(0));
210
393
  return {
211
394
  locked: lockedDetails,
212
395
  unlocked: totalUnlocked.toString()
213
396
  };
214
- }
215
- async getStakingStatus(nominator, nominations, eraIndex) {
216
- const isWaitingForNomination = nominations?.submittedIn.gte(eraIndex) ?? false;
217
- let hasActiveNominations = false;
218
- if (!isWaitingForNomination && nominations) {
219
- hasActiveNominations = (await Promise.all(nominations.targets.elements.map((target) => this.getNominationStatus(nominator, target.asAddress(), eraIndex)))).some((status) => status === SubstrateNominationStatus_1.SubstrateNominationStatus.ACTIVE);
220
- }
221
- if (nominations === null) {
222
- return 'bonded';
223
- }
224
- else if (hasActiveNominations) {
225
- return 'nominating';
226
- }
227
- else if (!isWaitingForNomination && !hasActiveNominations) {
228
- return 'nominating_inactive';
229
- }
230
- else {
231
- return 'nominating_waiting';
232
- }
233
- }
234
- async getEraValidatorReward(accountId, eraIndex) {
235
- const address = this.substrateAddressFrom(accountId);
236
- const results = await Promise.all([
237
- this.nodeClient.getValidatorReward(eraIndex).then(async (result) => {
238
- return result ? result : this.nodeClient.getValidatorReward(eraIndex - 1);
239
- }),
240
- this.nodeClient.getRewardPoints(eraIndex),
241
- this.nodeClient.getStakersClipped(eraIndex, address),
242
- this.nodeClient.getValidatorPrefs(eraIndex, address)
243
- ]);
244
- if (results.some((result) => !result)) {
245
- return null;
246
- }
247
- const eraReward = results[0];
248
- const eraPoints = results[1];
249
- const exposureClipped = results[2];
250
- const validatorPrefs = results[3];
251
- const validatorPoints = eraPoints?.individual?.elements?.find((element) => element.first.address.compare(address))?.second?.value;
252
- if (!eraReward || !eraPoints || !exposureClipped || !validatorPrefs || !validatorPoints) {
253
- return null;
254
- }
255
- const validatorReward = this.calculateValidatorReward(eraReward, eraPoints.total.value, validatorPoints);
256
- return {
257
- amount: validatorReward.toFixed(),
258
- totalStake: exposureClipped.total.toString(),
259
- ownStake: exposureClipped.own.toString(),
260
- commission: validatorPrefs.commission.toString()
261
- };
262
- }
263
- async getNominatorRewards(accountId, validators, activeEra, eras) {
264
- const address = this.substrateAddressFrom(accountId);
265
- const expectedEraDuration = await this.nodeClient.getExpectedEraDuration();
266
- if (!expectedEraDuration) {
267
- return Promise.reject('Could not fetch all necessary data.');
268
- }
269
- const eraIndices = Array.isArray(eras) ? eras : Array.from(Array(eras).keys()).map((index) => activeEra.index.toNumber() - 1 - index);
270
- const rewards = await Promise.all(eraIndices.map((era) => this.calculateEraNominatorReward(address, validators.map((validator) => this.substrateAddressFrom(validator)), era).then((partial) => {
271
- if (partial) {
272
- const rewardEra = partial.eraIndex || activeEra.index.toNumber();
273
- const erasPassed = activeEra.index.minus(rewardEra).toNumber();
274
- partial.timestamp = activeEra.start.value
275
- ? activeEra.start.value.minus(expectedEraDuration.multipliedBy(erasPassed - 1)).toNumber()
276
- : 0;
277
- }
278
- return partial;
279
- })));
280
- return rewards.filter((reward) => reward);
281
- }
282
- async calculateEraNominatorReward(accountId, validators, eraIndex) {
283
- const results = await Promise.all([
284
- this.nodeClient.getValidatorReward(eraIndex),
285
- this.nodeClient.getRewardPoints(eraIndex),
286
- Promise.all(validators.map(async (validator) => [
287
- this.substrateAddressFrom(validator),
288
- await this.nodeClient
289
- .getValidatorPrefs(eraIndex, this.substrateAddressFrom(validator))
290
- .then((prefs) => prefs?.commission?.value),
291
- await this.nodeClient.getStakersClipped(eraIndex, this.substrateAddressFrom(validator))
292
- ]))
293
- ]);
294
- const reward = results[0];
295
- const rewardPoints = results[1];
296
- const exposuresWithValidators = results[2];
297
- if (!reward || !rewardPoints || !exposuresWithValidators) {
298
- return null;
299
- }
300
- const partialRewards = exposuresWithValidators
301
- .map(([validator, commission, exposure]) => {
302
- const validatorPoints = rewardPoints.individual.elements.find((element) => element.first.compare(validator) === 0)?.second?.value;
303
- const nominatorStake = exposure?.others.elements.find((element) => element.first.compare(accountId) === 0)?.second?.value;
304
- if (commission && exposure && validatorPoints && nominatorStake) {
305
- const validatorReward = this.calculateValidatorReward(reward, rewardPoints.total.value, validatorPoints);
306
- return this.calculateNominatorReward(validatorReward, commission, exposure.total.value, nominatorStake);
307
- }
308
- else {
309
- return null;
310
- }
311
- })
312
- .filter((reward) => reward !== null);
313
- if (partialRewards.every((reward) => !reward)) {
314
- return null;
315
- }
316
- return {
317
- eraIndex,
318
- amount: partialRewards.reduce((sum, next) => sum.plus(next), new bignumber_1.default(0)).toFixed(0),
319
- exposures: exposuresWithValidators
320
- ?.map(([validator, _, exposure]) => [
321
- validator.asString(),
322
- exposure?.others.elements.findIndex((element) => element.first.compare(accountId) === 0)
323
- ])
324
- .filter(([_, index]) => index !== undefined)
325
- };
326
- }
327
- calculateValidatorReward(totalReward, totalPoints, validatorPoints) {
328
- return validatorPoints.dividedBy(totalPoints).multipliedBy(totalReward);
329
- }
330
- calculateNominatorReward(validatorReward, validatorCommission, totalStake, nominatorStake) {
331
- const nominatorShare = nominatorStake.dividedBy(totalStake);
332
- return new bignumber_1.default(1).minus(validatorCommission.dividedBy(1_000_000_000)).multipliedBy(validatorReward).multipliedBy(nominatorShare);
333
- }
334
- // tslint:disable-next-line: cyclomatic-complexity
335
- async getAvailableStakingActions(stakingDetails, nominations, validatorIds, maxDelegationValue) {
336
- const availableActions = [];
337
- const currentValidators = nominations?.targets?.elements?.map((target) => target.asAddress()) || [];
338
- const validatorAddresses = validatorIds.map((id) => this.substrateAddressFrom(id).asString());
339
- const isBonded = new bignumber_1.default(stakingDetails?.active ?? 0).gt(0);
340
- const isDelegating = nominations !== null;
341
- const isUnbonding = stakingDetails && stakingDetails.locked.length > 0;
342
- const minBondingValue = await this.nodeClient.getExistentialDeposit();
343
- const minDelegationValue = new bignumber_1.default(1);
344
- const electionStatus = await this.nodeClient.getElectionStatus().then((eraElectionStatus) => eraElectionStatus?.status.value);
345
- const isElectionClosed = electionStatus !== SubstrateEraElectionStatus_1.SubstrateElectionStatus.OPEN;
346
- const hasFundsToWithdraw = new bignumber_1.default(stakingDetails?.unlocked ?? 0).gt(0);
347
- if (maxDelegationValue.gt(minBondingValue) && !isBonded && !isUnbonding && isElectionClosed) {
348
- availableActions.push({
349
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.BOND_NOMINATE,
350
- args: ['targets', 'controller', 'value', 'payee']
397
+ };
398
+ SubstrateAccountController.prototype.getStakingStatus = function (nominator, nominations, eraIndex) {
399
+ var _a;
400
+ return __awaiter(this, void 0, void 0, function () {
401
+ var isWaitingForNomination, hasActiveNominations;
402
+ var _this = this;
403
+ return __generator(this, function (_b) {
404
+ switch (_b.label) {
405
+ case 0:
406
+ isWaitingForNomination = (_a = nominations === null || nominations === void 0 ? void 0 : nominations.submittedIn.gte(eraIndex)) !== null && _a !== void 0 ? _a : false;
407
+ hasActiveNominations = false;
408
+ if (!(!isWaitingForNomination && nominations)) return [3 /*break*/, 2];
409
+ return [4 /*yield*/, Promise.all(nominations.targets.elements.map(function (target) {
410
+ return _this.getNominationStatus(nominator, target.asAddress(), eraIndex);
411
+ }))];
412
+ case 1:
413
+ hasActiveNominations = (_b.sent()).some(function (status) { return status === SubstrateNominationStatus_1.SubstrateNominationStatus.ACTIVE; });
414
+ _b.label = 2;
415
+ case 2:
416
+ if (nominations === null) {
417
+ return [2 /*return*/, 'bonded'];
418
+ }
419
+ else if (hasActiveNominations) {
420
+ return [2 /*return*/, 'nominating'];
421
+ }
422
+ else if (!isWaitingForNomination && !hasActiveNominations) {
423
+ return [2 /*return*/, 'nominating_inactive'];
424
+ }
425
+ else {
426
+ return [2 /*return*/, 'nominating_waiting'];
427
+ }
428
+ return [2 /*return*/];
429
+ }
351
430
  });
352
- }
353
- if (maxDelegationValue.gt(minDelegationValue) && isBonded && !isUnbonding && isElectionClosed) {
354
- availableActions.push({
355
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.BOND_EXTRA,
356
- args: ['value']
431
+ });
432
+ };
433
+ SubstrateAccountController.prototype.getEraValidatorReward = function (accountId, eraIndex) {
434
+ var _a, _b, _c, _d;
435
+ return __awaiter(this, void 0, void 0, function () {
436
+ var address, results, eraReward, eraPoints, exposureClipped, validatorPrefs, validatorPoints, validatorReward;
437
+ var _this = this;
438
+ return __generator(this, function (_e) {
439
+ switch (_e.label) {
440
+ case 0:
441
+ address = this.substrateAddressFrom(accountId);
442
+ return [4 /*yield*/, Promise.all([
443
+ this.nodeClient.getValidatorReward(eraIndex).then(function (result) { return __awaiter(_this, void 0, void 0, function () {
444
+ return __generator(this, function (_a) {
445
+ return [2 /*return*/, result ? result : this.nodeClient.getValidatorReward(eraIndex - 1)];
446
+ });
447
+ }); }),
448
+ this.nodeClient.getRewardPoints(eraIndex),
449
+ this.nodeClient.getStakersClipped(eraIndex, address),
450
+ this.nodeClient.getValidatorPrefs(eraIndex, address)
451
+ ])];
452
+ case 1:
453
+ results = _e.sent();
454
+ if (results.some(function (result) { return !result; })) {
455
+ return [2 /*return*/, null];
456
+ }
457
+ eraReward = results[0];
458
+ eraPoints = results[1];
459
+ exposureClipped = results[2];
460
+ validatorPrefs = results[3];
461
+ validatorPoints = (_d = (_c = (_b = (_a = eraPoints === null || eraPoints === void 0 ? void 0 : eraPoints.individual) === null || _a === void 0 ? void 0 : _a.elements) === null || _b === void 0 ? void 0 : _b.find(function (element) {
462
+ return element.first.address.compare(address);
463
+ })) === null || _c === void 0 ? void 0 : _c.second) === null || _d === void 0 ? void 0 : _d.value;
464
+ if (!eraReward || !eraPoints || !exposureClipped || !validatorPrefs || !validatorPoints) {
465
+ return [2 /*return*/, null];
466
+ }
467
+ validatorReward = this.calculateValidatorReward(eraReward, eraPoints.total.value, validatorPoints);
468
+ return [2 /*return*/, {
469
+ amount: validatorReward.toFixed(),
470
+ totalStake: exposureClipped.total.toString(),
471
+ ownStake: exposureClipped.own.toString(),
472
+ commission: validatorPrefs.commission.toString()
473
+ }];
474
+ }
357
475
  });
358
- }
359
- if (isBonded && !isDelegating && !isUnbonding && isElectionClosed) {
360
- availableActions.push({
361
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.NOMINATE,
362
- args: ['targets']
363
- }, {
364
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.UNBOND,
365
- args: ['value']
476
+ });
477
+ };
478
+ SubstrateAccountController.prototype.getNominatorRewards = function (accountId, validators, activeEra, eras) {
479
+ return __awaiter(this, void 0, void 0, function () {
480
+ var address, expectedEraDuration, eraIndices, rewards;
481
+ var _this = this;
482
+ return __generator(this, function (_a) {
483
+ switch (_a.label) {
484
+ case 0:
485
+ address = this.substrateAddressFrom(accountId);
486
+ return [4 /*yield*/, this.nodeClient.getExpectedEraDuration()];
487
+ case 1:
488
+ expectedEraDuration = _a.sent();
489
+ if (!expectedEraDuration) {
490
+ return [2 /*return*/, Promise.reject('Could not fetch all necessary data.')];
491
+ }
492
+ eraIndices = Array.isArray(eras) ? eras : Array.from(Array(eras).keys()).map(function (index) { return activeEra.index.toNumber() - 1 - index; });
493
+ return [4 /*yield*/, Promise.all(eraIndices.map(function (era) {
494
+ return _this.calculateEraNominatorReward(address, validators.map(function (validator) { return _this.substrateAddressFrom(validator); }), era).then(function (partial) {
495
+ if (partial) {
496
+ var rewardEra = partial.eraIndex || activeEra.index.toNumber();
497
+ var erasPassed = activeEra.index.minus(rewardEra).toNumber();
498
+ partial.timestamp = activeEra.start.value
499
+ ? activeEra.start.value.minus(expectedEraDuration.multipliedBy(erasPassed - 1)).toNumber()
500
+ : 0;
501
+ }
502
+ return partial;
503
+ });
504
+ }))];
505
+ case 2:
506
+ rewards = _a.sent();
507
+ return [2 /*return*/, rewards.filter(function (reward) { return reward; })];
508
+ }
366
509
  });
367
- }
368
- if (isUnbonding && !isDelegating && isElectionClosed) {
369
- availableActions.push({
370
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.REBOND_NOMINATE,
371
- args: ['targets', 'value']
510
+ });
511
+ };
512
+ SubstrateAccountController.prototype.calculateEraNominatorReward = function (accountId, validators, eraIndex) {
513
+ return __awaiter(this, void 0, void 0, function () {
514
+ var results, reward, rewardPoints, exposuresWithValidators, partialRewards;
515
+ var _this = this;
516
+ return __generator(this, function (_a) {
517
+ switch (_a.label) {
518
+ case 0: return [4 /*yield*/, Promise.all([
519
+ this.nodeClient.getValidatorReward(eraIndex),
520
+ this.nodeClient.getRewardPoints(eraIndex),
521
+ Promise.all(validators.map(function (validator) { return __awaiter(_this, void 0, void 0, function () {
522
+ var _a;
523
+ return __generator(this, function (_b) {
524
+ switch (_b.label) {
525
+ case 0:
526
+ _a = [this.substrateAddressFrom(validator)];
527
+ return [4 /*yield*/, this.nodeClient
528
+ .getValidatorPrefs(eraIndex, this.substrateAddressFrom(validator))
529
+ .then(function (prefs) { var _a; return (_a = prefs === null || prefs === void 0 ? void 0 : prefs.commission) === null || _a === void 0 ? void 0 : _a.value; })];
530
+ case 1:
531
+ _a = _a.concat([
532
+ _b.sent()
533
+ ]);
534
+ return [4 /*yield*/, this.nodeClient.getStakersClipped(eraIndex, this.substrateAddressFrom(validator))];
535
+ case 2: return [2 /*return*/, _a.concat([
536
+ _b.sent()
537
+ ])];
538
+ }
539
+ });
540
+ }); }))
541
+ ])];
542
+ case 1:
543
+ results = _a.sent();
544
+ reward = results[0];
545
+ rewardPoints = results[1];
546
+ exposuresWithValidators = results[2];
547
+ if (!reward || !rewardPoints || !exposuresWithValidators) {
548
+ return [2 /*return*/, null];
549
+ }
550
+ partialRewards = exposuresWithValidators
551
+ .map(function (_a) {
552
+ var _b, _c, _d, _e;
553
+ var validator = _a[0], commission = _a[1], exposure = _a[2];
554
+ var validatorPoints = (_c = (_b = rewardPoints.individual.elements.find(function (element) { return element.first.compare(validator) === 0; })) === null || _b === void 0 ? void 0 : _b.second) === null || _c === void 0 ? void 0 : _c.value;
555
+ var nominatorStake = (_e = (_d = exposure === null || exposure === void 0 ? void 0 : exposure.others.elements.find(function (element) { return element.first.compare(accountId) === 0; })) === null || _d === void 0 ? void 0 : _d.second) === null || _e === void 0 ? void 0 : _e.value;
556
+ if (commission && exposure && validatorPoints && nominatorStake) {
557
+ var validatorReward = _this.calculateValidatorReward(reward, rewardPoints.total.value, validatorPoints);
558
+ return _this.calculateNominatorReward(validatorReward, commission, exposure.total.value, nominatorStake);
559
+ }
560
+ else {
561
+ return null;
562
+ }
563
+ })
564
+ .filter(function (reward) { return reward !== null; });
565
+ if (partialRewards.every(function (reward) { return !reward; })) {
566
+ return [2 /*return*/, null];
567
+ }
568
+ return [2 /*return*/, {
569
+ eraIndex: eraIndex,
570
+ amount: partialRewards.reduce(function (sum, next) { return sum.plus(next); }, new bignumber_1.default(0)).toFixed(0),
571
+ exposures: exposuresWithValidators === null || exposuresWithValidators === void 0 ? void 0 : exposuresWithValidators.map(function (_a) {
572
+ var validator = _a[0], _ = _a[1], exposure = _a[2];
573
+ return [
574
+ validator.asString(),
575
+ exposure === null || exposure === void 0 ? void 0 : exposure.others.elements.findIndex(function (element) { return element.first.compare(accountId) === 0; })
576
+ ];
577
+ }).filter(function (_a) {
578
+ var _ = _a[0], index = _a[1];
579
+ return index !== undefined;
580
+ })
581
+ }];
582
+ }
372
583
  });
373
- }
374
- if (isUnbonding && isDelegating && isElectionClosed) {
375
- availableActions.push({
376
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.REBOND_EXTRA,
377
- args: ['value']
584
+ });
585
+ };
586
+ SubstrateAccountController.prototype.calculateValidatorReward = function (totalReward, totalPoints, validatorPoints) {
587
+ return validatorPoints.dividedBy(totalPoints).multipliedBy(totalReward);
588
+ };
589
+ SubstrateAccountController.prototype.calculateNominatorReward = function (validatorReward, validatorCommission, totalStake, nominatorStake) {
590
+ var nominatorShare = nominatorStake.dividedBy(totalStake);
591
+ return new bignumber_1.default(1).minus(validatorCommission.dividedBy(1000000000)).multipliedBy(validatorReward).multipliedBy(nominatorShare);
592
+ };
593
+ // tslint:disable-next-line: cyclomatic-complexity
594
+ SubstrateAccountController.prototype.getAvailableStakingActions = function (stakingDetails, nominations, validatorIds, maxDelegationValue) {
595
+ var _a, _b, _c, _d;
596
+ return __awaiter(this, void 0, void 0, function () {
597
+ var availableActions, currentValidators, validatorAddresses, isBonded, isDelegating, isUnbonding, minBondingValue, minDelegationValue, electionStatus, isElectionClosed, hasFundsToWithdraw;
598
+ var _this = this;
599
+ return __generator(this, function (_e) {
600
+ switch (_e.label) {
601
+ case 0:
602
+ availableActions = [];
603
+ currentValidators = ((_b = (_a = nominations === null || nominations === void 0 ? void 0 : nominations.targets) === null || _a === void 0 ? void 0 : _a.elements) === null || _b === void 0 ? void 0 : _b.map(function (target) { return target.asAddress(); })) || [];
604
+ validatorAddresses = validatorIds.map(function (id) { return _this.substrateAddressFrom(id).asString(); });
605
+ isBonded = new bignumber_1.default((_c = stakingDetails === null || stakingDetails === void 0 ? void 0 : stakingDetails.active) !== null && _c !== void 0 ? _c : 0).gt(0);
606
+ isDelegating = nominations !== null;
607
+ isUnbonding = stakingDetails && stakingDetails.locked.length > 0;
608
+ return [4 /*yield*/, this.nodeClient.getExistentialDeposit()];
609
+ case 1:
610
+ minBondingValue = _e.sent();
611
+ minDelegationValue = new bignumber_1.default(1);
612
+ return [4 /*yield*/, this.nodeClient.getElectionStatus().then(function (eraElectionStatus) { return eraElectionStatus === null || eraElectionStatus === void 0 ? void 0 : eraElectionStatus.status.value; })];
613
+ case 2:
614
+ electionStatus = _e.sent();
615
+ isElectionClosed = electionStatus !== SubstrateEraElectionStatus_1.SubstrateElectionStatus.OPEN;
616
+ hasFundsToWithdraw = new bignumber_1.default((_d = stakingDetails === null || stakingDetails === void 0 ? void 0 : stakingDetails.unlocked) !== null && _d !== void 0 ? _d : 0).gt(0);
617
+ if (maxDelegationValue.gt(minBondingValue) && !isBonded && !isUnbonding && isElectionClosed) {
618
+ availableActions.push({
619
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.BOND_NOMINATE,
620
+ args: ['targets', 'controller', 'value', 'payee']
621
+ });
622
+ }
623
+ if (maxDelegationValue.gt(minDelegationValue) && isBonded && !isUnbonding && isElectionClosed) {
624
+ availableActions.push({
625
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.BOND_EXTRA,
626
+ args: ['value']
627
+ });
628
+ }
629
+ if (isBonded && !isDelegating && !isUnbonding && isElectionClosed) {
630
+ availableActions.push({
631
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.NOMINATE,
632
+ args: ['targets']
633
+ }, {
634
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.UNBOND,
635
+ args: ['value']
636
+ });
637
+ }
638
+ if (isUnbonding && !isDelegating && isElectionClosed) {
639
+ availableActions.push({
640
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.REBOND_NOMINATE,
641
+ args: ['targets', 'value']
642
+ });
643
+ }
644
+ if (isUnbonding && isDelegating && isElectionClosed) {
645
+ availableActions.push({
646
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.REBOND_EXTRA,
647
+ args: ['value']
648
+ });
649
+ }
650
+ if (isDelegating && isElectionClosed) {
651
+ if (validatorAddresses.every(function (validator) { return currentValidators.includes(validator); }) &&
652
+ validatorAddresses.length === currentValidators.length) {
653
+ availableActions.push({
654
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.CANCEL_NOMINATION,
655
+ args: ['value']
656
+ });
657
+ }
658
+ else if (validatorAddresses.length > 0) {
659
+ availableActions.push({
660
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.CHANGE_NOMINATION,
661
+ args: ['targets']
662
+ });
663
+ }
664
+ }
665
+ if (hasFundsToWithdraw && isElectionClosed) {
666
+ availableActions.push({
667
+ type: SubstrateStakingActionType_1.SubstrateStakingActionType.WITHDRAW_UNBONDED,
668
+ args: []
669
+ });
670
+ }
671
+ availableActions.sort(function (a, b) { return a.type - b.type; });
672
+ return [2 /*return*/, availableActions];
673
+ }
378
674
  });
379
- }
380
- if (isDelegating && isElectionClosed) {
381
- if (validatorAddresses.every((validator) => currentValidators.includes(validator)) &&
382
- validatorAddresses.length === currentValidators.length) {
383
- availableActions.push({
384
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.CANCEL_NOMINATION,
385
- args: ['value']
386
- });
387
- }
388
- else if (validatorAddresses.length > 0) {
389
- availableActions.push({
390
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.CHANGE_NOMINATION,
391
- args: ['targets']
392
- });
393
- }
394
- }
395
- if (hasFundsToWithdraw && isElectionClosed) {
396
- availableActions.push({
397
- type: SubstrateStakingActionType_1.SubstrateStakingActionType.WITHDRAW_UNBONDED,
398
- args: []
675
+ });
676
+ };
677
+ SubstrateAccountController.prototype.getAccountIdentityInfo = function (address) {
678
+ return __awaiter(this, void 0, void 0, function () {
679
+ var registration, superOf, _a;
680
+ return __generator(this, function (_b) {
681
+ switch (_b.label) {
682
+ case 0:
683
+ _b.trys.push([0, 3, , 4]);
684
+ return [4 /*yield*/, this.nodeClient.getIdentityOf(address)];
685
+ case 1:
686
+ registration = _b.sent();
687
+ if (registration) {
688
+ return [2 /*return*/, registration.identityInfo];
689
+ }
690
+ return [4 /*yield*/, this.nodeClient.getSuperOf(address)];
691
+ case 2:
692
+ superOf = _b.sent();
693
+ return [2 /*return*/, superOf ? this.getAccountIdentityInfo(superOf.first.address) : null];
694
+ case 3:
695
+ _a = _b.sent();
696
+ return [2 /*return*/, null];
697
+ case 4: return [2 /*return*/];
698
+ }
399
699
  });
400
- }
401
- availableActions.sort((a, b) => a.type - b.type);
402
- return availableActions;
403
- }
404
- async getAccountIdentityInfo(address) {
405
- try {
406
- const registration = await this.nodeClient.getIdentityOf(address);
407
- if (registration) {
408
- return registration.identityInfo;
409
- }
410
- const superOf = await this.nodeClient.getSuperOf(address);
411
- return superOf ? this.getAccountIdentityInfo(superOf.first.address) : null;
412
- }
413
- catch {
414
- return null;
415
- }
416
- }
417
- partitionArray(array, predicate) {
418
- const partitioned = [[], []];
419
- for (const item of array) {
420
- const index = predicate(item) ? 0 : 1;
700
+ });
701
+ };
702
+ SubstrateAccountController.prototype.partitionArray = function (array, predicate) {
703
+ var partitioned = [[], []];
704
+ for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
705
+ var item = array_1[_i];
706
+ var index = predicate(item) ? 0 : 1;
421
707
  partitioned[index].push(item);
422
708
  }
423
709
  return partitioned;
424
- }
425
- substrateAddressFrom(accountId) {
710
+ };
711
+ SubstrateAccountController.prototype.substrateAddressFrom = function (accountId) {
426
712
  return (0, SubstrateCompatAddress_1.substrateAddressFactory)(this.network).from(accountId);
427
- }
428
- }
713
+ };
714
+ return SubstrateAccountController;
715
+ }());
429
716
  exports.SubstrateAccountController = SubstrateAccountController;
430
717
  //# sourceMappingURL=SubstrateAccountController.js.map