@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,167 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const readline = require('readline')
4
+ const ethContractsMigrationOutput = require('../../eth-contracts/migrations/migration-output.json')
5
+ const solanaConfig = require('../../solana-programs/solana-program-config.json')
6
+
7
+ const ETH_CONTRACTS_REGISTRY = 'audius_eth_contracts_registry'
8
+ const SOLANA_TRACK_LISTEN_COUNT_ADDRESS = 'audius_solana_track_listen_count_address'
9
+ const SOLANA_ENDPOINT = 'audius_solana_endpoint'
10
+
11
+ const SOLANA_SIGNER_GROUP_ADDRESS = 'audius_solana_signer_group_address'
12
+
13
+ const SOLANA_USER_BANK_ADDRESS = 'audius_solana_user_bank_program_address'
14
+ const SOLANA_WAUDIO_MINT = 'audius_solana_waudio_mint'
15
+
16
+ const SOLANA_REWARDS_MANAGER_ADDRESS = 'audius_solana_rewards_manager_program_address'
17
+ const SOLANA_REWARDS_MANAGER_ACCOUNT = 'audius_solana_rewards_manager_account'
18
+
19
+ const SOLANA_ANCHOR_PROGRAM_ID = 'audius_solana_anchor_data_program_id'
20
+ const SOLANA_ANCHOR_ADMIN_STORAGE_PUBLIC_KEY = 'audius_solana_anchor_admin_storage_public_key'
21
+
22
+ // LOCAL DEVELOPMENT ONLY
23
+ // Updates audius_eth_contracts_registry in discovery provider
24
+ const configureLocalDiscProv = async () => {
25
+ const ethRegistryAddress = ethContractsMigrationOutput.registryAddress
26
+ const solanaTrackListenCountAddress = solanaConfig.trackListenCountAddress
27
+ const signerGroup = solanaConfig.signerGroup
28
+ const solanaEndpoint = solanaConfig.endpoint
29
+ const waudioMint = solanaConfig.splToken
30
+ const claimableTokenAddress = solanaConfig.claimableTokenAddress
31
+ const rewardsManagerAddress = solanaConfig.rewardsManagerAddress
32
+ const rewardsManagerAccount = solanaConfig.rewardsManagerAccount
33
+ const anchorProgramId = solanaConfig.anchorProgramId
34
+ const anchorAdminStoragePublicKey = solanaConfig.anchorAdminStoragePublicKey
35
+ console.log(`waudioAddress: ${waudioMint}, claimableTokenAddress: ${claimableTokenAddress}, waudioMint=${waudioMint}`)
36
+ const envPath = path.join(process.cwd(), '../../', 'discovery-provider/compose/.env')
37
+
38
+ await _updateDiscoveryProviderEnvFile(
39
+ envPath,
40
+ envPath,
41
+ ethRegistryAddress,
42
+ solanaTrackListenCountAddress,
43
+ solanaEndpoint,
44
+ signerGroup,
45
+ waudioMint,
46
+ claimableTokenAddress,
47
+ rewardsManagerAddress,
48
+ rewardsManagerAccount,
49
+ anchorProgramId,
50
+ anchorAdminStoragePublicKey,
51
+ )
52
+ }
53
+
54
+ // Write an update to the local discovery provider config .env file
55
+ const _updateDiscoveryProviderEnvFile = async (
56
+ readPath,
57
+ writePath,
58
+ ethRegistryAddress,
59
+ solanaTrackListenCountAddress,
60
+ solanaEndpoint,
61
+ signerGroup,
62
+ waudioMint,
63
+ claimableTokenAddress,
64
+ rewardsManagerAddress,
65
+ rewardsManagerAccount,
66
+ anchorProgramId,
67
+ anchorAdminStoragePublicKey,
68
+ ) => {
69
+ const fileStream = fs.createReadStream(readPath)
70
+ const rl = readline.createInterface({
71
+ input: fileStream,
72
+ crlfDelay: Infinity
73
+ })
74
+ const output = []
75
+ let ethRegistryAddressFound = false
76
+ let solanaTrackListenCountAddressFound = false
77
+ let solanaEndpointFound = false
78
+ let signerGroupFound = false
79
+
80
+ let waudioMintFound = false
81
+ let claimableTokenAddressFound = false
82
+ let rewardsAddressFound = false
83
+ let rewardsAccountFound = false
84
+ let anchorProgramIdFound = false
85
+ let anchorAdminStoragePublicKeyFound = false
86
+
87
+ const ethRegistryAddressLine = `${ETH_CONTRACTS_REGISTRY}=${ethRegistryAddress}`
88
+ const solanaTrackListenCountAddressLine = `${SOLANA_TRACK_LISTEN_COUNT_ADDRESS}=${solanaTrackListenCountAddress}`
89
+ const solanaEndpointLine = `${SOLANA_ENDPOINT}=${solanaEndpoint}`
90
+ const signerGroupLine = `${SOLANA_SIGNER_GROUP_ADDRESS}=${signerGroup}`
91
+ const waudioMintLine = `${SOLANA_WAUDIO_MINT}=${waudioMint}`
92
+ const claimableTokenAddressLine = `${SOLANA_USER_BANK_ADDRESS}=${claimableTokenAddress}`
93
+ const rewardsManagerAddressLine = `${SOLANA_REWARDS_MANAGER_ADDRESS}=${rewardsManagerAddress}`
94
+ const rewardsManagerAccountLine = `${SOLANA_REWARDS_MANAGER_ACCOUNT}=${rewardsManagerAccount}`
95
+ const anchorProgramIdLine = `${SOLANA_ANCHOR_PROGRAM_ID}=${anchorProgramId}`
96
+ const anchorAdminStoragePublicKeyLine = `${SOLANA_ANCHOR_ADMIN_STORAGE_PUBLIC_KEY}=${anchorAdminStoragePublicKey}`
97
+
98
+ for await (const line of rl) {
99
+ if (line.includes(ETH_CONTRACTS_REGISTRY)) {
100
+ output.push(ethRegistryAddressLine)
101
+ ethRegistryAddressFound = true
102
+ } else if (line.includes(SOLANA_TRACK_LISTEN_COUNT_ADDRESS)) {
103
+ output.push(solanaTrackListenCountAddressLine)
104
+ solanaTrackListenCountAddressFound = true
105
+ } else if (line.includes(SOLANA_ENDPOINT)) {
106
+ output.push(solanaEndpointLine)
107
+ solanaEndpointFound = true
108
+ } else if (line.includes(SOLANA_SIGNER_GROUP_ADDRESS)) {
109
+ output.push(signerGroupLine)
110
+ signerGroupFound = true
111
+ } else if (line.includes(SOLANA_USER_BANK_ADDRESS)) {
112
+ output.push(claimableTokenAddressLine)
113
+ claimableTokenAddressFound = true
114
+ } else if (line.includes(SOLANA_WAUDIO_MINT)) {
115
+ output.push(waudioMintLine)
116
+ waudioMintFound = true
117
+ } else if (line.includes(SOLANA_REWARDS_MANAGER_ADDRESS)) {
118
+ output.push(rewardsManagerAddressLine)
119
+ rewardsAddressFound = true
120
+ } else if (line.includes(SOLANA_REWARDS_MANAGER_ACCOUNT)) {
121
+ output.push(rewardsManagerAccountLine)
122
+ rewardsAccountFound = true
123
+ } else if (line.includes(SOLANA_ANCHOR_PROGRAM_ID)) {
124
+ output.push(anchorProgramIdLine)
125
+ anchorProgramIdFound = true
126
+ } else if (line.includes(SOLANA_ANCHOR_ADMIN_STORAGE_PUBLIC_KEY)) {
127
+ output.push(anchorAdminStoragePublicKeyLine)
128
+ anchorAdminStoragePublicKeyFound = true
129
+ } else {
130
+ output.push(line)
131
+ }
132
+ }
133
+ if (!ethRegistryAddressFound) {
134
+ output.push(ethRegistryAddressLine)
135
+ }
136
+ if (!solanaTrackListenCountAddressFound) {
137
+ output.push(solanaTrackListenCountAddressLine)
138
+ }
139
+ if (!solanaEndpointFound) {
140
+ output.push(solanaEndpointLine)
141
+ }
142
+ if (!signerGroupFound) {
143
+ output.push(signerGroupLine)
144
+ }
145
+ if (!waudioMintFound) {
146
+ output.push(waudioMintLine)
147
+ }
148
+ if (!claimableTokenAddressFound) {
149
+ output.push(claimableTokenAddressLine)
150
+ }
151
+ if (!rewardsAddressFound) {
152
+ output.push(rewardsManagerAddressLine)
153
+ }
154
+ if (!rewardsAccountFound) {
155
+ output.push(rewardsManagerAccountLine)
156
+ }
157
+ if (!anchorProgramIdFound) {
158
+ output.push(anchorProgramIdLine)
159
+ }
160
+ if (!anchorAdminStoragePublicKeyFound) {
161
+ output.push(anchorAdminStoragePublicKeyLine)
162
+ }
163
+ fs.writeFileSync(writePath, output.join('\n'))
164
+ console.log(`Updated DISCOVERY PROVIDER ${writePath} ${ETH_CONTRACTS_REGISTRY}=${ethRegistryAddress} ${output}`)
165
+ }
166
+
167
+ configureLocalDiscProv()
@@ -0,0 +1,43 @@
1
+ const { getEthWeb3AndAccounts, convertAudsToWeiBN } = require('./utils')
2
+
3
+ /**
4
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
5
+ */
6
+ async function getClaimInfo (audiusLibs) {
7
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
8
+
9
+ // @dev - audius instance numbering is off-by-1 from accounts to
10
+ // align with creator/track numbering below, which are 1-indexed
11
+ const claimInfo = await audiusLibs.ethContracts.StakingProxyClient.getClaimInfo()
12
+ console.log('getClaimInfo', claimInfo)
13
+ return claimInfo
14
+ }
15
+
16
+ /**
17
+ * Funds the treasury that service providers can claim from
18
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
19
+ * @param {String} amountOfAUDS integer amount of auds tokens
20
+ * @param {String} privateKey The private key string
21
+ */
22
+ async function fundNewClaim (audiusLibs, amountOfAUDS, privateKey = null) {
23
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
24
+ if (!amountOfAUDS) throw new Error('fundNewClaim requires an amountOfAUDS property')
25
+
26
+ const { ethWeb3 } = await getEthWeb3AndAccounts(audiusLibs)
27
+ const libOwner = audiusLibs.ethContracts.ethWeb3Manager.getWalletAddress()
28
+
29
+ console.log('/---- Funding new claim')
30
+ const bal = await audiusLibs.ethContracts.AudiusTokenClient.balanceOf(libOwner)
31
+ console.log(bal)
32
+ const claimAmountInAudWeiBN = convertAudsToWeiBN(ethWeb3, amountOfAUDS)
33
+ console.log(claimAmountInAudWeiBN)
34
+
35
+ // Actually perform fund op
36
+ const tx = await audiusLibs.ethContracts.StakingProxyClient.fundNewClaim(claimAmountInAudWeiBN, privateKey)
37
+ console.log(tx)
38
+ console.log('/---- End funding new claim')
39
+
40
+ return getClaimInfo(audiusLibs)
41
+ }
42
+
43
+ module.exports = { getClaimInfo, fundNewClaim }
@@ -0,0 +1,24 @@
1
+ const { getEthWeb3AndAccounts, convertAudsToWeiBN } = require('./utils')
2
+
3
+ /**
4
+ * Local only
5
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
6
+ * @param {String} amountOfAUDS integer amount of auds tokens
7
+ */
8
+ async function distributeTokens (audiusLibs, amountOfAUDS) {
9
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
10
+
11
+ const { ethWeb3, ethAccounts } = await getEthWeb3AndAccounts(audiusLibs)
12
+
13
+ const initialTokenInAudWeiBN = convertAudsToWeiBN(ethWeb3, amountOfAUDS)
14
+ await Promise.all(ethAccounts.map(async (account) => {
15
+ if (account === ethAccounts[0]) { return }
16
+ const tx = await audiusLibs.ethContracts.AudiusTokenClient.transfer(account, initialTokenInAudWeiBN)
17
+ console.log(`${tx.txReceipt.transactionHash} Transferred ${amountOfAUDS} to ${account}`)
18
+ }))
19
+ for (const account of ethAccounts) {
20
+ if (account === ethAccounts[0]) { continue }
21
+ }
22
+ }
23
+
24
+ module.exports = { distributeTokens }
@@ -0,0 +1,138 @@
1
+ const { getEthWeb3AndAccounts, convertAudsToWeiBN } = require('./utils')
2
+
3
+ /**
4
+ *
5
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
6
+ */
7
+ async function getStakingParameters (audiusLibs) {
8
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
9
+
10
+ const min = await audiusLibs.ethContracts.StakingProxyClient.getMinStakeAmount()
11
+ const max = await audiusLibs.ethContracts.StakingProxyClient.getMaxStakeAmount()
12
+ console.log(`getStakingParameters: min: ${min}, max: ${max}`)
13
+ return { min, max }
14
+ }
15
+
16
+ /**
17
+ * Local only
18
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
19
+ * @param {String} serviceType service type trying to register
20
+ * @param {String} serviceEndpoint url string of service to register
21
+ * @param {String} amountOfAUDS integer amount of auds tokens
22
+ */
23
+ async function registerLocalService (audiusLibs, serviceType, serviceEndpoint, amountOfAUDS) {
24
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
25
+ if (!amountOfAUDS) throw new Error('registerLocalService requires an amountOfAuds property')
26
+
27
+ const { ethWeb3 } = await getEthWeb3AndAccounts(audiusLibs)
28
+ console.log('\nregistering service providers/---')
29
+ const initialTokenInAudWeiBN = convertAudsToWeiBN(ethWeb3, amountOfAUDS)
30
+
31
+ try {
32
+ // Register service
33
+ console.log(`registering service ${serviceType} ${serviceEndpoint}`)
34
+ const tx = await audiusLibs.ethContracts.ServiceProviderFactoryClient.register(
35
+ serviceType,
36
+ serviceEndpoint,
37
+ initialTokenInAudWeiBN)
38
+ console.log(`registered service ${serviceType} ${serviceEndpoint} - ${tx.txReceipt.transactionHash}`)
39
+ } catch (e) {
40
+ if (!e.toString().includes('already registered')) {
41
+ console.log(e)
42
+ } else {
43
+ console.log(`\n${serviceEndpoint} already registered`)
44
+ }
45
+ }
46
+ }
47
+
48
+ async function updateServiceDelegateOwnerWallet (audiusLibs, serviceType, serviceEndpoint, updatedDelegateOwnerWallet) {
49
+ if (!audiusLibs || !serviceType || !serviceEndpoint || !updatedDelegateOwnerWallet) {
50
+ throw new Error('Missing required params')
51
+ }
52
+
53
+ try {
54
+ console.log(`Updating delegateOwnerWallet for ${serviceType} ${serviceEndpoint} with new wallet ${updatedDelegateOwnerWallet}`)
55
+ const tx = await audiusLibs.ethContracts.ServiceProviderFactoryClient.updateDelegateOwnerWallet(
56
+ serviceType, serviceEndpoint, updatedDelegateOwnerWallet
57
+ )
58
+ console.log(`Successfully updated delegateOwnerWallet for ${serviceType} ${serviceEndpoint} with new wallet ${updatedDelegateOwnerWallet} - ${JSON.stringify(tx, null, 2)}`)
59
+ } catch (e) {
60
+ throw new Error(`Failed to update delegateOwnerWallet for ${serviceType} ${serviceEndpoint} with new wallet ${updatedDelegateOwnerWallet} || ERROR ${e}`)
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Local only
66
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
67
+ * @param {String} serviceType service type trying to register
68
+ * @param {String} serviceEndpoint url string of service to register
69
+ */
70
+ async function deregisterLocalService (audiusLibs, serviceType, serviceEndpoint) {
71
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
72
+
73
+ try {
74
+ // de-register service
75
+ console.log(`\nde-registering service ${serviceType} ${serviceEndpoint}`)
76
+ const tx = await audiusLibs.ethContracts.ServiceProviderFactoryClient.deregister(
77
+ serviceType,
78
+ serviceEndpoint)
79
+ console.dir(tx, { depth: 5 })
80
+ } catch (e) {
81
+ console.log(e)
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Local only
87
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
88
+ * @param {Array} serviceTypeList List of services to query
89
+ * @param {Boolean} queryUserReplicaSetManager Conditionally query L2 replica set contract
90
+ */
91
+ async function queryLocalServices (audiusLibs, serviceTypeList, queryUserReplicaSetManager = false) {
92
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
93
+
94
+ console.log('\n----querying service providers')
95
+ const { ethAccounts } = await getEthWeb3AndAccounts(audiusLibs)
96
+ let cnodesInfoList = null
97
+
98
+ for (const spType of serviceTypeList) {
99
+ console.log(`${spType}`)
100
+ const spList = await audiusLibs.ethContracts.ServiceProviderFactoryClient.getServiceProviderList(spType)
101
+ if (spType === 'content-node') {
102
+ cnodesInfoList = spList
103
+ }
104
+ for (const sp of spList) {
105
+ console.log(sp)
106
+ const { spID, type, endpoint } = sp
107
+ const idFromEndpoint =
108
+ await audiusLibs.ethContracts.ServiceProviderFactoryClient.getServiceProviderIdFromEndpoint(endpoint)
109
+ console.log(`ID from endpoint: ${idFromEndpoint}`)
110
+ const infoFromId =
111
+ await audiusLibs.ethContracts.ServiceProviderFactoryClient.getServiceEndpointInfo(type, spID)
112
+ const jsonInfoFromId = JSON.stringify(infoFromId)
113
+ console.log(`Info from ID: ${jsonInfoFromId}`)
114
+ const idsFromAddress =
115
+ await audiusLibs.ethContracts.ServiceProviderFactoryClient.getServiceProviderIdsFromAddress(
116
+ ethAccounts[0],
117
+ type)
118
+ console.log(`SP IDs from owner wallet ${ethAccounts[0]}: ${idsFromAddress}`)
119
+ }
120
+
121
+ const numProvs = await audiusLibs.ethContracts.ServiceProviderFactoryClient.getTotalServiceTypeProviders(spType)
122
+ console.log(`${numProvs} instances of ${spType}`)
123
+ }
124
+ console.log('----done querying service providers')
125
+ if (queryUserReplicaSetManager) {
126
+ console.log('\n----querying UserReplicaSetManager on data-contracts')
127
+ for (const cnode of cnodesInfoList) {
128
+ const spInfoFromUrsm = await audiusLibs.contracts.UserReplicaSetManagerClient.getContentNodeWallets(cnode.spID)
129
+ const delegateWalletFromUrsmContract = spInfoFromUrsm.delegateOwnerWallet
130
+ const ownerWalletFromUrsmContract = spInfoFromUrsm.ownerWallet
131
+ console.log(`spID ${cnode.spID} | \
132
+ eth-contracts delegateWallet=${cnode.delegateOwnerWallet}, data-contracts delegateOwnerWallet=${delegateWalletFromUrsmContract}, ownerWallet=${ownerWalletFromUrsmContract}`)
133
+ }
134
+ console.log('----done querying UserReplicaSetManager on data-contracts\n')
135
+ }
136
+ }
137
+
138
+ module.exports = { getStakingParameters, registerLocalService, deregisterLocalService, queryLocalServices, updateServiceDelegateOwnerWallet }
@@ -0,0 +1,34 @@
1
+ const util = require('util')
2
+ const exec = util.promisify(require('child_process').exec)
3
+ /**
4
+ * *NOTE* - this should only be used for local functions
5
+ * Given an audiusLibs instance, return web3 instance from ethWeb3Manager
6
+ * @param {*} audiusLibs
7
+ */
8
+ async function getEthWeb3AndAccounts (audiusLibs) {
9
+ const ethWeb3 = audiusLibs.ethWeb3Manager.getWeb3()
10
+ const ethAccounts = await ethWeb3.eth.getAccounts()
11
+ return { ethWeb3, ethAccounts }
12
+ }
13
+
14
+ function convertAudsToWeiBN (ethWeb3, amountOfAUDS) {
15
+ const tokenInWei = ethWeb3.utils.toWei(amountOfAUDS.toString(), 'ether')
16
+ return ethWeb3.utils.toBN(tokenInWei)
17
+ }
18
+
19
+ async function execParseOutput (cmd) {
20
+ const r = await exec(cmd)
21
+ const stdout = r.stdout
22
+ const parsed = JSON.parse(stdout)
23
+ return parsed
24
+ }
25
+
26
+ async function getDataContractAccounts () {
27
+ return execParseOutput('docker exec audius_ganache_cli cat contracts-ganache-accounts.json')
28
+ }
29
+
30
+ async function getEthContractAccounts () {
31
+ return execParseOutput('docker exec audius_ganache_cli_eth_contracts cat eth-contracts-ganache-accounts.json')
32
+ }
33
+
34
+ module.exports = { getEthWeb3AndAccounts, convertAudsToWeiBN, getDataContractAccounts, getEthContractAccounts }
@@ -0,0 +1,93 @@
1
+ const web3 = require('web3')
2
+
3
+ /**
4
+ *
5
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
6
+ * @param {String} serviceType service type trying to register
7
+ * @param {String} serviceVersionStr version string to register
8
+ * @param {String?} privateKey optional private key string
9
+ * @param {Boolean?} dryRun Optional parameter to return the generated parameters without sending tx
10
+ */
11
+ async function setServiceVersion (audiusLibs, serviceType, serviceVersionStr, privateKey = null, dryRun = false) {
12
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
13
+
14
+ const validServiceTypes = ['discovery-node', 'content-node']
15
+ if (!validServiceTypes.includes(serviceType)) {
16
+ throw new Error(`Invalid serviceType: ${serviceType}, must be in ${validServiceTypes}`)
17
+ }
18
+
19
+ console.log('----version init---')
20
+ let resp
21
+ try {
22
+ resp = await audiusLibs.ethContracts.ServiceTypeManagerClient.setServiceVersion(
23
+ serviceType,
24
+ serviceVersionStr,
25
+ privateKey,
26
+ dryRun
27
+ )
28
+ } catch (e) {
29
+ if (!e.toString().includes('Already registered')) {
30
+ console.log(e)
31
+ return
32
+ } else {
33
+ console.log('Already registered')
34
+ }
35
+ }
36
+
37
+ // this prints out the fields and values to be submitted onto the Governance dashboard
38
+ // to create new proposals
39
+ if (dryRun) {
40
+ console.log(`
41
+ Set latest ${serviceType} version on chain to v${serviceVersionStr}
42
+ ServiceTypeManagerProxy
43
+ setServiceVersion(bytes32,bytes32)
44
+ ${resp}
45
+
46
+ Description:
47
+ Git SHA - <SHA>
48
+ Link to release - <URL>
49
+ `)
50
+ }
51
+
52
+ const versionTx = await audiusLibs.ethContracts.ServiceTypeManagerClient.getCurrentVersion(serviceType)
53
+ const numVersionsTx = await audiusLibs.ethContracts.ServiceTypeManagerClient.getNumberOfVersions(serviceType)
54
+ console.log(`${serviceType} | current version: ${versionTx} | number of versions : ${numVersionsTx}`)
55
+
56
+ console.log('/----version init---')
57
+ }
58
+
59
+ /**
60
+ * Add a new service type on chain
61
+ * @param {Object} audiusLibs fully formed audius libs instance with eth contracts connection
62
+ * @param {String} serviceType service type trying to register
63
+ * @param {String} serviceTypeMin minimum stake for serviceType
64
+ * @param {String} serviceTypeMax maximum stake for serviceType
65
+ * @param {String?} privateKey optional private key string
66
+ */
67
+ async function addServiceType (audiusLibs, serviceType, serviceTypeMin, serviceTypeMax, privateKey = null) {
68
+ if (!audiusLibs) throw new Error('audiusLibs is not defined')
69
+
70
+ console.log('----addServiceType---')
71
+ const weiMin = web3.utils.toWei(serviceTypeMin.toString(), 'ether')
72
+ const weiMax = web3.utils.toWei(serviceTypeMax.toString(), 'ether')
73
+
74
+ try {
75
+ const resp = await audiusLibs.ethContracts.ServiceTypeManagerClient.addServiceType(
76
+ serviceType,
77
+ weiMin,
78
+ weiMax,
79
+ privateKey)
80
+ console.log(resp)
81
+ } catch (e) {
82
+ console.error('Could not add new service type', e)
83
+ }
84
+
85
+ const serviceTypeInfo = await audiusLibs.ethContracts.ServiceTypeManagerClient.getServiceTypeInfo(serviceType)
86
+ console.log(`Expected values for ${serviceType} | expected min ${weiMin} | expected max ${weiMax}`)
87
+ console.log(`Values from contract: ${JSON.stringify(serviceTypeInfo)}`)
88
+ console.log(`Min: ${serviceTypeInfo.minStake.toString()} Max: ${serviceTypeInfo.maxStake.toString()}`)
89
+
90
+ console.log('/----addServiceType---')
91
+ }
92
+
93
+ module.exports = { setServiceVersion, addServiceType }