@audius/sdk 0.0.0

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 (278) hide show
  1. package/.eslintrc +38 -0
  2. package/.prettierrc.js +1 -0
  3. package/.python-version +1 -0
  4. package/Dockerfile +15 -0
  5. package/README.md +3 -0
  6. package/babel.config.js +3 -0
  7. package/data-contracts/ABIs/AdminUpgradeabilityProxy.json +132 -0
  8. package/data-contracts/ABIs/BaseAdminUpgradeabilityProxy.json +113 -0
  9. package/data-contracts/ABIs/BaseUpgradeabilityProxy.json +22 -0
  10. package/data-contracts/ABIs/DiscoveryProviderFactory.json +189 -0
  11. package/data-contracts/ABIs/DiscoveryProviderFactoryInterface.json +61 -0
  12. package/data-contracts/ABIs/DiscoveryProviderStorage.json +205 -0
  13. package/data-contracts/ABIs/DiscoveryProviderStorageInterface.json +65 -0
  14. package/data-contracts/ABIs/ECDSA.json +4 -0
  15. package/data-contracts/ABIs/IPLDBlacklistFactory.json +168 -0
  16. package/data-contracts/ABIs/Initializable.json +4 -0
  17. package/data-contracts/ABIs/Migrations.json +67 -0
  18. package/data-contracts/ABIs/OpenZeppelinUpgradesAddress.json +4 -0
  19. package/data-contracts/ABIs/Ownable.json +79 -0
  20. package/data-contracts/ABIs/PlaylistFactory.json +669 -0
  21. package/data-contracts/ABIs/PlaylistFactoryInterface.json +42 -0
  22. package/data-contracts/ABIs/PlaylistStorage.json +250 -0
  23. package/data-contracts/ABIs/PlaylistStorageInterface.json +129 -0
  24. package/data-contracts/ABIs/Proxy.json +10 -0
  25. package/data-contracts/ABIs/Registry.json +240 -0
  26. package/data-contracts/ABIs/RegistryContract.json +102 -0
  27. package/data-contracts/ABIs/RegistryContractInterface.json +28 -0
  28. package/data-contracts/ABIs/RegistryInterface.json +66 -0
  29. package/data-contracts/ABIs/SigningLogic.json +43 -0
  30. package/data-contracts/ABIs/SigningLogicInitializable.json +46 -0
  31. package/data-contracts/ABIs/SocialFeatureFactory.json +460 -0
  32. package/data-contracts/ABIs/SocialFeatureStorage.json +225 -0
  33. package/data-contracts/ABIs/SocialFeatureStorageInterface.json +123 -0
  34. package/data-contracts/ABIs/TestContract.json +135 -0
  35. package/data-contracts/ABIs/TestContractInterface.json +19 -0
  36. package/data-contracts/ABIs/TestContractWithStorage.json +165 -0
  37. package/data-contracts/ABIs/TestContractWithStorageInterface.json +24 -0
  38. package/data-contracts/ABIs/TestStorage.json +144 -0
  39. package/data-contracts/ABIs/TestStorageInterface.json +42 -0
  40. package/data-contracts/ABIs/TestUserReplicaSetManager.json +432 -0
  41. package/data-contracts/ABIs/TrackFactory.json +391 -0
  42. package/data-contracts/ABIs/TrackFactoryInterface.json +73 -0
  43. package/data-contracts/ABIs/TrackStorage.json +223 -0
  44. package/data-contracts/ABIs/TrackStorageInterface.json +121 -0
  45. package/data-contracts/ABIs/UpgradeabilityProxy.json +37 -0
  46. package/data-contracts/ABIs/UserFactory.json +657 -0
  47. package/data-contracts/ABIs/UserFactoryInterface.json +65 -0
  48. package/data-contracts/ABIs/UserLibraryFactory.json +334 -0
  49. package/data-contracts/ABIs/UserReplicaSetManager.json +418 -0
  50. package/data-contracts/ABIs/UserStorage.json +233 -0
  51. package/data-contracts/ABIs/UserStorageInterface.json +93 -0
  52. package/data-contracts/signatureSchemas.ts +1236 -0
  53. package/dist/core.d.ts +446 -0
  54. package/dist/core.js +769 -0
  55. package/dist/core.js.map +1 -0
  56. package/dist/index.d.ts +689 -0
  57. package/dist/index.js +72850 -0
  58. package/dist/index.js.map +1 -0
  59. package/eth-contracts/ABIs/Address.json +4 -0
  60. package/eth-contracts/ABIs/AudiusAdminUpgradeabilityProxy.json +105 -0
  61. package/eth-contracts/ABIs/AudiusClaimDistributor.json +4968 -0
  62. package/eth-contracts/ABIs/AudiusToken.json +724 -0
  63. package/eth-contracts/ABIs/BaseUpgradeabilityProxy.json +23 -0
  64. package/eth-contracts/ABIs/Checkpointing.json +4 -0
  65. package/eth-contracts/ABIs/ClaimsManager.json +539 -0
  66. package/eth-contracts/ABIs/Context.json +11 -0
  67. package/eth-contracts/ABIs/DelegateManager.json +989 -0
  68. package/eth-contracts/ABIs/DelegateManagerV2.json +1049 -0
  69. package/eth-contracts/ABIs/DelegateManagerV2Bad.json +1049 -0
  70. package/eth-contracts/ABIs/ERC20.json +252 -0
  71. package/eth-contracts/ABIs/ERC20Burnable.json +287 -0
  72. package/eth-contracts/ABIs/ERC20Detailed.json +270 -0
  73. package/eth-contracts/ABIs/ERC20Mintable.json +364 -0
  74. package/eth-contracts/ABIs/ERC20Pausable.json +397 -0
  75. package/eth-contracts/ABIs/EthRewardsManager.json +174 -0
  76. package/eth-contracts/ABIs/Governance.json +938 -0
  77. package/eth-contracts/ABIs/GovernanceUpgraded.json +953 -0
  78. package/eth-contracts/ABIs/GovernanceV2.json +938 -0
  79. package/eth-contracts/ABIs/IERC20.json +200 -0
  80. package/eth-contracts/ABIs/Initializable.json +4 -0
  81. package/eth-contracts/ABIs/InitializableV2.json +14 -0
  82. package/eth-contracts/ABIs/Migrations.json +71 -0
  83. package/eth-contracts/ABIs/MinterRole.json +91 -0
  84. package/eth-contracts/ABIs/MockAccount.json +62 -0
  85. package/eth-contracts/ABIs/MockDelegateManager.json +55 -0
  86. package/eth-contracts/ABIs/MockStakingCaller.json +259 -0
  87. package/eth-contracts/ABIs/MockWormhole.json +106 -0
  88. package/eth-contracts/ABIs/OpenZeppelinUpgradesAddress.json +4 -0
  89. package/eth-contracts/ABIs/Ownable.json +93 -0
  90. package/eth-contracts/ABIs/Pausable.json +150 -0
  91. package/eth-contracts/ABIs/PauserRole.json +91 -0
  92. package/eth-contracts/ABIs/Proxy.json +10 -0
  93. package/eth-contracts/ABIs/Registry.json +288 -0
  94. package/eth-contracts/ABIs/Roles.json +4 -0
  95. package/eth-contracts/ABIs/SafeERC20.json +4 -0
  96. package/eth-contracts/ABIs/SafeMath.json +4 -0
  97. package/eth-contracts/ABIs/ServiceProviderFactory.json +1153 -0
  98. package/eth-contracts/ABIs/ServiceTypeManager.json +337 -0
  99. package/eth-contracts/ABIs/Staking.json +555 -0
  100. package/eth-contracts/ABIs/StakingUpgraded.json +570 -0
  101. package/eth-contracts/ABIs/TestContract.json +44 -0
  102. package/eth-contracts/ABIs/TrustedNotifierManager.json +265 -0
  103. package/eth-contracts/ABIs/Uint256Helpers.json +4 -0
  104. package/eth-contracts/ABIs/UpgradeabilityProxy.json +40 -0
  105. package/eth-contracts/ABIs/Wormhole.json +45 -0
  106. package/eth-contracts/ABIs/WormholeClient.json +155 -0
  107. package/examples/file.mp3 +0 -0
  108. package/examples/initAudiusLibs.js +86 -0
  109. package/examples/initializeVersions.js +95 -0
  110. package/examples/pic.jpg +0 -0
  111. package/initScripts/configureLocalDiscProv.js +167 -0
  112. package/initScripts/helpers/claim.js +43 -0
  113. package/initScripts/helpers/distributeTokens.js +24 -0
  114. package/initScripts/helpers/spRegistration.js +138 -0
  115. package/initScripts/helpers/utils.js +34 -0
  116. package/initScripts/helpers/version.js +93 -0
  117. package/initScripts/local.js +617 -0
  118. package/initScripts/mainnet.js +131 -0
  119. package/initScripts/manageProdRelayerWallets.js +191 -0
  120. package/package.json +125 -0
  121. package/rollup.config.js +164 -0
  122. package/scripts/AudiusClaimDistributor.json +4968 -0
  123. package/scripts/Wormhole.json +155 -0
  124. package/scripts/addCIDToIpldBlacklist.js +124 -0
  125. package/scripts/circleci-test.sh +53 -0
  126. package/scripts/communityRewards/transferCommunityRewardsToSolana.js +222 -0
  127. package/scripts/ipfs.sh +58 -0
  128. package/scripts/migrate_contracts.sh +25 -0
  129. package/scripts/reset.sh +65 -0
  130. package/scripts/test.sh +77 -0
  131. package/src/api/account.js +670 -0
  132. package/src/api/base.js +122 -0
  133. package/src/api/file.js +168 -0
  134. package/src/api/playlist.js +328 -0
  135. package/src/api/rewards.d.ts +4 -0
  136. package/src/api/rewards.js +682 -0
  137. package/src/api/serviceProvider.js +154 -0
  138. package/src/api/track.js +604 -0
  139. package/src/api/user.js +888 -0
  140. package/src/api/user.test.js +172 -0
  141. package/src/constants.ts +7 -0
  142. package/src/core.ts +3 -0
  143. package/src/index.js +6 -0
  144. package/src/libs.d.ts +3 -0
  145. package/src/libs.js +619 -0
  146. package/src/sanityChecks/addSecondaries.js +40 -0
  147. package/src/sanityChecks/assignReplicaSetIfNecessary.js +10 -0
  148. package/src/sanityChecks/index.d.ts +9 -0
  149. package/src/sanityChecks/index.js +31 -0
  150. package/src/sanityChecks/isCreator.js +73 -0
  151. package/src/sanityChecks/needsRecoveryEmail.js +20 -0
  152. package/src/sanityChecks/rolloverNodes.js +74 -0
  153. package/src/sanityChecks/sanitizeNodes.js +24 -0
  154. package/src/sanityChecks/syncNodes.js +28 -0
  155. package/src/sdk/constants.ts +10 -0
  156. package/src/sdk/index.ts +1 -0
  157. package/src/sdk/oauth/Oauth.ts +265 -0
  158. package/src/sdk/oauth/index.ts +1 -0
  159. package/src/sdk/sdk.ts +102 -0
  160. package/src/service-selection/ServiceSelection.test.ts +320 -0
  161. package/src/service-selection/ServiceSelection.ts +460 -0
  162. package/src/service-selection/constants.ts +14 -0
  163. package/src/service-selection/index.ts +1 -0
  164. package/src/services/ABIDecoder/AudiusABIDecoder.ts +71 -0
  165. package/src/services/ABIDecoder/index.ts +1 -0
  166. package/src/services/comstock/Comstock.ts +39 -0
  167. package/src/services/comstock/index.ts +1 -0
  168. package/src/services/contracts/ContractClient.ts +227 -0
  169. package/src/services/contracts/GovernedContractClient.ts +53 -0
  170. package/src/services/contracts/ProviderSelection.ts +42 -0
  171. package/src/services/creatorNode/CreatorNode.ts +1065 -0
  172. package/src/services/creatorNode/CreatorNodeSelection.test.ts +997 -0
  173. package/src/services/creatorNode/CreatorNodeSelection.ts +488 -0
  174. package/src/services/creatorNode/constants.ts +10 -0
  175. package/src/services/creatorNode/index.ts +2 -0
  176. package/src/services/dataContracts/AudiusContracts.ts +234 -0
  177. package/src/services/dataContracts/IPLDBlacklistFactoryClient.ts +73 -0
  178. package/src/services/dataContracts/PlaylistFactoryClient.ts +370 -0
  179. package/src/services/dataContracts/RegistryClient.ts +95 -0
  180. package/src/services/dataContracts/SocialFeatureFactoryClient.ts +196 -0
  181. package/src/services/dataContracts/TrackFactoryClient.ts +131 -0
  182. package/src/services/dataContracts/UserFactoryClient.ts +351 -0
  183. package/src/services/dataContracts/UserLibraryFactoryClient.ts +115 -0
  184. package/src/services/dataContracts/UserReplicaSetManagerClient.ts +206 -0
  185. package/src/services/dataContracts/index.ts +1 -0
  186. package/src/services/discoveryProvider/DiscoveryProvider.ts +1168 -0
  187. package/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts +536 -0
  188. package/src/services/discoveryProvider/DiscoveryProviderSelection.ts +383 -0
  189. package/src/services/discoveryProvider/constants.ts +13 -0
  190. package/src/services/discoveryProvider/index.ts +1 -0
  191. package/src/services/discoveryProvider/requests.ts +629 -0
  192. package/src/services/ethContracts/AudiusTokenClient.ts +163 -0
  193. package/src/services/ethContracts/ClaimDistributionClient.ts +45 -0
  194. package/src/services/ethContracts/ClaimsManagerClient.ts +102 -0
  195. package/src/services/ethContracts/DelegateManagerClient.ts +480 -0
  196. package/src/services/ethContracts/EthContracts.ts +359 -0
  197. package/src/services/ethContracts/EthRewardsManagerClient.ts +33 -0
  198. package/src/services/ethContracts/GovernanceClient.ts +451 -0
  199. package/src/services/ethContracts/RegistryClient.ts +33 -0
  200. package/src/services/ethContracts/ServiceProviderFactoryClient.ts +691 -0
  201. package/src/services/ethContracts/ServiceTypeManagerClient.ts +112 -0
  202. package/src/services/ethContracts/StakingProxyClient.ts +97 -0
  203. package/src/services/ethContracts/TrustedNotifierManagerClient.ts +101 -0
  204. package/src/services/ethContracts/WormholeClient.ts +97 -0
  205. package/src/services/ethContracts/index.ts +1 -0
  206. package/src/services/ethWeb3Manager/EthWeb3Manager.ts +239 -0
  207. package/src/services/ethWeb3Manager/index.ts +1 -0
  208. package/src/services/hedgehog/Hedgehog.ts +96 -0
  209. package/src/services/hedgehog/index.ts +1 -0
  210. package/src/services/identity/IdentityService.ts +551 -0
  211. package/src/services/identity/index.ts +1 -0
  212. package/src/services/identity/requests.ts +65 -0
  213. package/src/services/schemaValidator/SchemaValidator.ts +105 -0
  214. package/src/services/schemaValidator/index.ts +1 -0
  215. package/src/services/schemaValidator/schemas/trackSchema.json +267 -0
  216. package/src/services/schemaValidator/schemas/userSchema.json +230 -0
  217. package/src/services/solanaAudiusData/errors.ts +20 -0
  218. package/src/services/solanaAudiusData/index.ts +1189 -0
  219. package/src/services/solanaWeb3Manager/errors.js +101 -0
  220. package/src/services/solanaWeb3Manager/index.d.ts +46 -0
  221. package/src/services/solanaWeb3Manager/index.js +655 -0
  222. package/src/services/solanaWeb3Manager/padBNToUint8Array.ts +7 -0
  223. package/src/services/solanaWeb3Manager/rewards.js +941 -0
  224. package/src/services/solanaWeb3Manager/rewardsAttester.ts +1093 -0
  225. package/src/services/solanaWeb3Manager/tokenAccount.js +149 -0
  226. package/src/services/solanaWeb3Manager/transactionHandler.js +345 -0
  227. package/src/services/solanaWeb3Manager/transfer.js +272 -0
  228. package/src/services/solanaWeb3Manager/userBank.js +160 -0
  229. package/src/services/solanaWeb3Manager/utils.d.ts +31 -0
  230. package/src/services/solanaWeb3Manager/utils.js +163 -0
  231. package/src/services/solanaWeb3Manager/wAudio.js +28 -0
  232. package/src/services/solanaWeb3Manager/wAudio.test.js +30 -0
  233. package/src/services/web3Manager/Web3Config.ts +14 -0
  234. package/src/services/web3Manager/Web3Manager.ts +360 -0
  235. package/src/services/web3Manager/XMLHttpRequest.ts +11 -0
  236. package/src/services/web3Manager/index.ts +2 -0
  237. package/src/services/wormhole/index.js +424 -0
  238. package/src/types.ts +8 -0
  239. package/src/userStateManager.ts +53 -0
  240. package/src/utils/apiSigning.ts +51 -0
  241. package/src/utils/captcha.ts +97 -0
  242. package/src/utils/estimateGas.ts +64 -0
  243. package/src/utils/fileHasher.ts +278 -0
  244. package/src/utils/importContractABI.d.ts +9 -0
  245. package/src/utils/importContractABI.js +19 -0
  246. package/src/utils/index.ts +11 -0
  247. package/src/utils/multiProvider.ts +72 -0
  248. package/src/utils/network.test.ts +127 -0
  249. package/src/utils/network.ts +308 -0
  250. package/src/utils/promiseFight.test.ts +87 -0
  251. package/src/utils/promiseFight.ts +36 -0
  252. package/src/utils/signatures.ts +139 -0
  253. package/src/utils/types.ts +34 -0
  254. package/src/utils/utils.test.ts +36 -0
  255. package/src/utils/utils.ts +235 -0
  256. package/src/utils/uuid.ts +14 -0
  257. package/src/web3.d.ts +9 -0
  258. package/src/web3.js +8 -0
  259. package/tests/assets/static_image.png +0 -0
  260. package/tests/assets/static_text.txt +1 -0
  261. package/tests/audiusTokenClientTest.js +37 -0
  262. package/tests/creatorNodeTest.js +19 -0
  263. package/tests/fileHasherTest.js +125 -0
  264. package/tests/governanceTest.js +382 -0
  265. package/tests/helpers.js +105 -0
  266. package/tests/index.js +14 -0
  267. package/tests/playlistClientTest.js +157 -0
  268. package/tests/providerSelectionTest.js +241 -0
  269. package/tests/registryClientTest.js +19 -0
  270. package/tests/rewardsAttesterTest.js +373 -0
  271. package/tests/serviceTypeManagerClientTest.js +33 -0
  272. package/tests/socialFeatureClientTest.js +79 -0
  273. package/tests/stakingTest.js +302 -0
  274. package/tests/trackClientTest.js +86 -0
  275. package/tests/userClientTest.js +121 -0
  276. package/tsconfig.json +10 -0
  277. package/types/@audius-hedgehog/index.d.ts +39 -0
  278. package/types/abi-decoder/index.d.ts +41 -0
@@ -0,0 +1,480 @@
1
+ import type BN from 'bn.js'
2
+ import { ContractABI, Logger, Utils } from '../../utils'
3
+ import type { GetRegistryAddress } from '../contracts/ContractClient'
4
+ import { GovernedContractClient } from '../contracts/GovernedContractClient'
5
+ import type { EthWeb3Manager } from '../ethWeb3Manager'
6
+ import type { AudiusTokenClient } from './AudiusTokenClient'
7
+ import type { GovernanceClient } from './GovernanceClient'
8
+ import type { StakingProxyClient } from './StakingProxyClient'
9
+
10
+ type GetEvent = {
11
+ delegator: string
12
+ serviceProvider: string
13
+ queryStartBlock: number
14
+ }
15
+
16
+ export class DelegateManagerClient extends GovernedContractClient {
17
+ audiusTokenClient: AudiusTokenClient
18
+ stakingProxyClient: StakingProxyClient
19
+
20
+ constructor(
21
+ ethWeb3Manager: EthWeb3Manager,
22
+ contractABI: ContractABI['abi'],
23
+ contractRegistryKey: string,
24
+ getRegistryAddress: GetRegistryAddress,
25
+ audiusTokenClient: AudiusTokenClient,
26
+ stakingProxyClient: StakingProxyClient,
27
+ governanceClient: GovernanceClient,
28
+ logger: Logger = console
29
+ ) {
30
+ super(
31
+ ethWeb3Manager,
32
+ contractABI,
33
+ contractRegistryKey,
34
+ getRegistryAddress,
35
+ governanceClient,
36
+ logger
37
+ )
38
+ this.audiusTokenClient = audiusTokenClient
39
+ this.stakingProxyClient = stakingProxyClient
40
+ }
41
+
42
+ async delegateStake(targetSP: string, amount: BN) {
43
+ // Approve token transfer operation
44
+ const contractAddress = await this.stakingProxyClient.getAddress()
45
+ const tx0 = await this.audiusTokenClient.approve(contractAddress, amount)
46
+ const method = await this.getMethod('delegateStake', targetSP, amount)
47
+ const tx = await this.web3Manager.sendTransaction(method)
48
+
49
+ const returnValues = tx.events?.['IncreaseDelegatedStake']?.returnValues
50
+
51
+ return {
52
+ txReceipt: tx,
53
+ tokenApproveReceipt: tx0,
54
+ delegator: returnValues?._delegator,
55
+ serviceProvider: returnValues?._serviceProvider,
56
+ increaseAmount: Utils.toBN(returnValues?._increaseAmount)
57
+ }
58
+ }
59
+
60
+ /* Pass either delegator or serviceProvider filters */
61
+ async getIncreaseDelegateStakeEvents({
62
+ delegator,
63
+ serviceProvider,
64
+ queryStartBlock = 0
65
+ }: GetEvent) {
66
+ const contract = await this.getContract()
67
+ const filter: { _delegator?: string; _serviceProvider?: string } = {}
68
+ if (delegator) {
69
+ filter._delegator = delegator
70
+ } else {
71
+ filter._serviceProvider = serviceProvider
72
+ }
73
+ const events = await contract.getPastEvents('IncreaseDelegatedStake', {
74
+ fromBlock: queryStartBlock,
75
+ filter
76
+ })
77
+
78
+ return events.map((event) => ({
79
+ blockNumber: parseInt(event.blockNumber as unknown as string),
80
+ delegator: event.returnValues['_delegator'],
81
+ increaseAmount: Utils.toBN(event.returnValues['_increaseAmount']),
82
+ serviceProvider: event.returnValues['_serviceProvider']
83
+ }))
84
+ }
85
+
86
+ async getDecreaseDelegateStakeEvents({
87
+ delegator,
88
+ serviceProvider,
89
+ queryStartBlock = 0
90
+ }: GetEvent) {
91
+ const contract = await this.getContract()
92
+ const filter: { _delegator?: string; _serviceProvider?: string } = {}
93
+ if (delegator) {
94
+ filter._delegator = delegator
95
+ }
96
+ if (serviceProvider) {
97
+ filter._serviceProvider = serviceProvider
98
+ }
99
+
100
+ const events = await contract.getPastEvents(
101
+ 'UndelegateStakeRequestEvaluated',
102
+ {
103
+ fromBlock: queryStartBlock,
104
+ filter
105
+ }
106
+ )
107
+ return events.map((event) => ({
108
+ blockNumber: parseInt(event.blockNumber as unknown as string),
109
+ delegator: event.returnValues['_delegator'],
110
+ amount: Utils.toBN(event.returnValues['_amount']),
111
+ serviceProvider: event.returnValues['_serviceProvider']
112
+ }))
113
+ }
114
+
115
+ async getUndelegateStakeRequestedEvents({
116
+ delegator,
117
+ serviceProvider,
118
+ queryStartBlock = 0
119
+ }: GetEvent) {
120
+ const contract = await this.getContract()
121
+ const filter: { _delegator?: string; _serviceProvider?: string } = {}
122
+ if (delegator) {
123
+ filter._delegator = delegator
124
+ }
125
+ if (serviceProvider) {
126
+ filter._serviceProvider = serviceProvider
127
+ }
128
+
129
+ const events = await contract.getPastEvents('UndelegateStakeRequested', {
130
+ fromBlock: queryStartBlock,
131
+ filter
132
+ })
133
+
134
+ return events.map((event) => ({
135
+ blockNumber: parseInt(event.blockNumber as unknown as string),
136
+ lockupExpiryBlock: parseInt(event.returnValues['_lockupExpiryBlock']),
137
+ delegator: event.returnValues['_delegator'],
138
+ amount: Utils.toBN(event.returnValues['_amount']),
139
+ serviceProvider: event.returnValues['_serviceProvider']
140
+ }))
141
+ }
142
+
143
+ async getUndelegateStakeCancelledEvents({
144
+ delegator,
145
+ serviceProvider,
146
+ queryStartBlock = 0
147
+ }: GetEvent) {
148
+ const contract = await this.getContract()
149
+ const filter: { _delegator?: string; _serviceProvider?: string } = {}
150
+ if (delegator) {
151
+ filter._delegator = delegator
152
+ }
153
+ if (serviceProvider) {
154
+ filter._serviceProvider = serviceProvider
155
+ }
156
+
157
+ const events = await contract.getPastEvents(
158
+ 'UndelegateStakeRequestCancelled',
159
+ {
160
+ fromBlock: queryStartBlock,
161
+ filter
162
+ }
163
+ )
164
+
165
+ return events.map((event) => ({
166
+ blockNumber: parseInt(event.blockNumber as unknown as string),
167
+ delegator: event.returnValues['_delegator'],
168
+ amount: Utils.toBN(event.returnValues['_amount']),
169
+ serviceProvider: event.returnValues['_serviceProvider']
170
+ }))
171
+ }
172
+
173
+ async getClaimEvents({
174
+ claimer,
175
+ queryStartBlock = 0
176
+ }: {
177
+ claimer: string
178
+ queryStartBlock: number
179
+ }) {
180
+ const contract = await this.getContract()
181
+ const events = await contract.getPastEvents('Claim', {
182
+ fromBlock: queryStartBlock,
183
+ filter: {
184
+ _claimer: claimer
185
+ }
186
+ })
187
+ return events.map((event) => ({
188
+ blockNumber: parseInt(event.blockNumber as unknown as string),
189
+ claimer: event.returnValues['_claimer'],
190
+ rewards: Utils.toBN(event.returnValues['_rewards']),
191
+ newTotal: Utils.toBN(event.returnValues['_newTotal'])
192
+ }))
193
+ }
194
+
195
+ async getSlashEvents({
196
+ target,
197
+ queryStartBlock = 0
198
+ }: {
199
+ target: string
200
+ queryStartBlock: number
201
+ }) {
202
+ const contract = await this.getContract()
203
+ const events = await contract.getPastEvents('Slash', {
204
+ fromBlock: queryStartBlock,
205
+ filter: {
206
+ _target: target
207
+ }
208
+ })
209
+ return events.map((event) => ({
210
+ blockNumber: parseInt(event.blockNumber as unknown as string),
211
+ target: event.returnValues['_target'],
212
+ amount: Utils.toBN(event.returnValues['_amount']),
213
+ newTotal: Utils.toBN(event.returnValues['_newTotal'])
214
+ }))
215
+ }
216
+
217
+ async getDelegatorRemovedEvents({
218
+ target,
219
+ queryStartBlock = 0
220
+ }: {
221
+ target: string
222
+ queryStartBlock: number
223
+ }) {
224
+ const contract = await this.getContract()
225
+ const events = await contract.getPastEvents('DelegatorRemoved', {
226
+ fromBlock: queryStartBlock,
227
+ filter: {
228
+ _target: target
229
+ }
230
+ })
231
+ return events.map((event) => ({
232
+ blockNumber: parseInt(event.blockNumber as unknown as string),
233
+ serviceProvider: event.returnValues['_serviceProvider'],
234
+ delegator: event.returnValues['_delegator'],
235
+ unstakedAmount: Utils.toBN(event.returnValues['_unstakedAmount'])
236
+ }))
237
+ }
238
+
239
+ async requestUndelegateStake(targetSP: string, amount: BN) {
240
+ const method = await this.getMethod(
241
+ 'requestUndelegateStake',
242
+ targetSP,
243
+ amount
244
+ )
245
+ return await this.web3Manager.sendTransaction(method)
246
+ }
247
+
248
+ async cancelUndelegateStakeRequest() {
249
+ const method = await this.getMethod('cancelUndelegateStakeRequest')
250
+ return await this.web3Manager.sendTransaction(method)
251
+ }
252
+
253
+ async undelegateStake() {
254
+ const method = await this.getMethod('undelegateStake')
255
+
256
+ const tx = await this.web3Manager.sendTransaction(method)
257
+
258
+ const returnValues =
259
+ tx.events?.['UndelegateStakeRequestEvaluated']?.returnValues
260
+
261
+ return {
262
+ txReceipt: tx,
263
+ delegator: returnValues._delegator,
264
+ serviceProvider: returnValues._serviceProvider,
265
+ decreaseAmount: Utils.toBN(returnValues._amount)
266
+ }
267
+ }
268
+
269
+ async claimRewards(serviceProvider: string, txRetries = 5) {
270
+ const method = await this.getMethod('claimRewards', serviceProvider)
271
+ return await this.web3Manager.sendTransaction(method, null, null, txRetries)
272
+ }
273
+
274
+ async requestRemoveDelegator(serviceProvider: string, delegator: string) {
275
+ const method = await this.getMethod(
276
+ 'requestRemoveDelegator',
277
+ serviceProvider,
278
+ delegator
279
+ )
280
+ return await this.web3Manager.sendTransaction(method)
281
+ }
282
+
283
+ async cancelRemoveDelegatorRequest(
284
+ serviceProvider: string,
285
+ delegator: string
286
+ ) {
287
+ const method = await this.getMethod(
288
+ 'cancelRemoveDelegatorRequest',
289
+ serviceProvider,
290
+ delegator
291
+ )
292
+ return await this.web3Manager.sendTransaction(method)
293
+ }
294
+
295
+ async removeDelegator(serviceProvider: string, delegator: string) {
296
+ const method = await this.getMethod(
297
+ 'removeDelegator',
298
+ serviceProvider,
299
+ delegator
300
+ )
301
+ const tx = await this.web3Manager.sendTransaction(method)
302
+ const returnValues =
303
+ tx.events?.['RemoveDelegatorRequestEvaluated']?.returnValues
304
+ return {
305
+ txReceipt: tx,
306
+ delegator: returnValues._delegator,
307
+ serviceProvider: returnValues._serviceProvider,
308
+ unstakedAmount: Utils.toBN(returnValues._unstakedAmount)
309
+ }
310
+ }
311
+
312
+ // ========================================= View Functions =========================================
313
+
314
+ async getDelegatorsList(serviceProvider: string) {
315
+ const method = await this.getMethod('getDelegatorsList', serviceProvider)
316
+ const info = await method.call()
317
+ return info
318
+ }
319
+
320
+ async getTotalDelegatedToServiceProvider(serviceProvider: string) {
321
+ const method = await this.getMethod(
322
+ 'getTotalDelegatedToServiceProvider',
323
+ serviceProvider
324
+ )
325
+ const info = await method.call()
326
+ return Utils.toBN(info)
327
+ }
328
+
329
+ async getTotalDelegatorStake(delegator: string) {
330
+ const method = await this.getMethod('getTotalDelegatorStake', delegator)
331
+ const info = await method.call()
332
+ return Utils.toBN(info)
333
+ }
334
+
335
+ async getTotalLockedDelegationForServiceProvider(serviceProvider: string) {
336
+ const method = await this.getMethod(
337
+ 'getTotalLockedDelegationForServiceProvider',
338
+ serviceProvider
339
+ )
340
+ const info = await method.call()
341
+ return Utils.toBN(info)
342
+ }
343
+
344
+ async getDelegatorStakeForServiceProvider(
345
+ delegator: string,
346
+ serviceProvider: string
347
+ ) {
348
+ const method = await this.getMethod(
349
+ 'getDelegatorStakeForServiceProvider',
350
+ delegator,
351
+ serviceProvider
352
+ )
353
+ const info = await method.call()
354
+ return Utils.toBN(info)
355
+ }
356
+
357
+ async getPendingUndelegateRequest(delegator: string) {
358
+ const method = await this.getMethod(
359
+ 'getPendingUndelegateRequest',
360
+ delegator
361
+ )
362
+ const info = await method.call()
363
+ return {
364
+ amount: Utils.toBN(info.amount),
365
+ lockupExpiryBlock: parseInt(info.lockupExpiryBlock),
366
+ target: info.target
367
+ }
368
+ }
369
+
370
+ async getPendingRemoveDelegatorRequest(
371
+ serviceProvider: string,
372
+ delegator: string
373
+ ) {
374
+ const method = await this.getMethod(
375
+ 'getPendingRemoveDelegatorRequest',
376
+ serviceProvider,
377
+ delegator
378
+ )
379
+ const info = await method.call()
380
+ return { lockupExpiryBlock: parseInt(info) }
381
+ }
382
+
383
+ async getUndelegateLockupDuration() {
384
+ const method = await this.getMethod('getUndelegateLockupDuration')
385
+ const info = await method.call()
386
+ return parseInt(info)
387
+ }
388
+
389
+ async getMaxDelegators() {
390
+ const method = await this.getMethod('getMaxDelegators')
391
+ const info = await method.call()
392
+ return parseInt(info)
393
+ }
394
+
395
+ async getMinDelegationAmount() {
396
+ const method = await this.getMethod('getMinDelegationAmount')
397
+ const info = await method.call()
398
+ return Utils.toBN(info)
399
+ }
400
+
401
+ async getRemoveDelegatorLockupDuration() {
402
+ const method = await this.getMethod('getRemoveDelegatorLockupDuration')
403
+ const info = await method.call()
404
+ return parseInt(info)
405
+ }
406
+
407
+ async getRemoveDelegatorEvalDuration() {
408
+ const method = await this.getMethod('getRemoveDelegatorEvalDuration')
409
+ const info = await method.call()
410
+ return parseInt(info)
411
+ }
412
+
413
+ async getGovernanceAddress() {
414
+ const method = await this.getMethod('getGovernanceAddress')
415
+ const info = await method.call()
416
+ return info
417
+ }
418
+
419
+ async getServiceProviderFactoryAddress() {
420
+ const method = await this.getMethod('getServiceProviderFactoryAddress')
421
+ const info = await method.call()
422
+ return info
423
+ }
424
+
425
+ async getClaimsManagerAddress() {
426
+ const method = await this.getMethod('getClaimsManagerAddress')
427
+ const info = await method.call()
428
+ return info
429
+ }
430
+
431
+ async getStakingAddress() {
432
+ const method = await this.getMethod('getStakingAddress')
433
+ const info = await method.call()
434
+ return info
435
+ }
436
+
437
+ async getSPMinDelegationAmount({
438
+ serviceProvider
439
+ }: {
440
+ serviceProvider: string
441
+ }) {
442
+ const method = await this.getMethod(
443
+ 'getSPMinDelegationAmount',
444
+ serviceProvider
445
+ )
446
+ const info = await method.call()
447
+ return Utils.toBN(info)
448
+ }
449
+
450
+ async updateSPMinDelegationAmount({
451
+ serviceProvider,
452
+ amount
453
+ }: {
454
+ serviceProvider: string
455
+ amount: BN
456
+ }) {
457
+ const method = await this.getMethod(
458
+ 'updateSPMinDelegationAmount',
459
+ serviceProvider,
460
+ amount
461
+ )
462
+ return await this.web3Manager.sendTransaction(method)
463
+ }
464
+
465
+ async updateRemoveDelegatorLockupDuration(duration: string) {
466
+ const method = await this.getGovernedMethod(
467
+ 'updateRemoveDelegatorLockupDuration',
468
+ duration
469
+ )
470
+ return await this.web3Manager.sendTransaction(method)
471
+ }
472
+
473
+ async updateUndelegateLockupDuration(duration: string) {
474
+ const method = await this.getGovernedMethod(
475
+ 'updateUndelegateLockupDuration',
476
+ duration
477
+ )
478
+ return await this.web3Manager.sendTransaction(method)
479
+ }
480
+ }