@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.
- package/.eslintrc +38 -0
- package/.prettierrc.js +1 -0
- package/.python-version +1 -0
- package/Dockerfile +15 -0
- package/README.md +3 -0
- package/babel.config.js +3 -0
- package/data-contracts/ABIs/AdminUpgradeabilityProxy.json +132 -0
- package/data-contracts/ABIs/BaseAdminUpgradeabilityProxy.json +113 -0
- package/data-contracts/ABIs/BaseUpgradeabilityProxy.json +22 -0
- package/data-contracts/ABIs/DiscoveryProviderFactory.json +189 -0
- package/data-contracts/ABIs/DiscoveryProviderFactoryInterface.json +61 -0
- package/data-contracts/ABIs/DiscoveryProviderStorage.json +205 -0
- package/data-contracts/ABIs/DiscoveryProviderStorageInterface.json +65 -0
- package/data-contracts/ABIs/ECDSA.json +4 -0
- package/data-contracts/ABIs/IPLDBlacklistFactory.json +168 -0
- package/data-contracts/ABIs/Initializable.json +4 -0
- package/data-contracts/ABIs/Migrations.json +67 -0
- package/data-contracts/ABIs/OpenZeppelinUpgradesAddress.json +4 -0
- package/data-contracts/ABIs/Ownable.json +79 -0
- package/data-contracts/ABIs/PlaylistFactory.json +669 -0
- package/data-contracts/ABIs/PlaylistFactoryInterface.json +42 -0
- package/data-contracts/ABIs/PlaylistStorage.json +250 -0
- package/data-contracts/ABIs/PlaylistStorageInterface.json +129 -0
- package/data-contracts/ABIs/Proxy.json +10 -0
- package/data-contracts/ABIs/Registry.json +240 -0
- package/data-contracts/ABIs/RegistryContract.json +102 -0
- package/data-contracts/ABIs/RegistryContractInterface.json +28 -0
- package/data-contracts/ABIs/RegistryInterface.json +66 -0
- package/data-contracts/ABIs/SigningLogic.json +43 -0
- package/data-contracts/ABIs/SigningLogicInitializable.json +46 -0
- package/data-contracts/ABIs/SocialFeatureFactory.json +460 -0
- package/data-contracts/ABIs/SocialFeatureStorage.json +225 -0
- package/data-contracts/ABIs/SocialFeatureStorageInterface.json +123 -0
- package/data-contracts/ABIs/TestContract.json +135 -0
- package/data-contracts/ABIs/TestContractInterface.json +19 -0
- package/data-contracts/ABIs/TestContractWithStorage.json +165 -0
- package/data-contracts/ABIs/TestContractWithStorageInterface.json +24 -0
- package/data-contracts/ABIs/TestStorage.json +144 -0
- package/data-contracts/ABIs/TestStorageInterface.json +42 -0
- package/data-contracts/ABIs/TestUserReplicaSetManager.json +432 -0
- package/data-contracts/ABIs/TrackFactory.json +391 -0
- package/data-contracts/ABIs/TrackFactoryInterface.json +73 -0
- package/data-contracts/ABIs/TrackStorage.json +223 -0
- package/data-contracts/ABIs/TrackStorageInterface.json +121 -0
- package/data-contracts/ABIs/UpgradeabilityProxy.json +37 -0
- package/data-contracts/ABIs/UserFactory.json +657 -0
- package/data-contracts/ABIs/UserFactoryInterface.json +65 -0
- package/data-contracts/ABIs/UserLibraryFactory.json +334 -0
- package/data-contracts/ABIs/UserReplicaSetManager.json +418 -0
- package/data-contracts/ABIs/UserStorage.json +233 -0
- package/data-contracts/ABIs/UserStorageInterface.json +93 -0
- package/data-contracts/signatureSchemas.ts +1236 -0
- package/dist/core.d.ts +446 -0
- package/dist/core.js +769 -0
- package/dist/core.js.map +1 -0
- package/dist/index.d.ts +689 -0
- package/dist/index.js +72850 -0
- package/dist/index.js.map +1 -0
- package/eth-contracts/ABIs/Address.json +4 -0
- package/eth-contracts/ABIs/AudiusAdminUpgradeabilityProxy.json +105 -0
- package/eth-contracts/ABIs/AudiusClaimDistributor.json +4968 -0
- package/eth-contracts/ABIs/AudiusToken.json +724 -0
- package/eth-contracts/ABIs/BaseUpgradeabilityProxy.json +23 -0
- package/eth-contracts/ABIs/Checkpointing.json +4 -0
- package/eth-contracts/ABIs/ClaimsManager.json +539 -0
- package/eth-contracts/ABIs/Context.json +11 -0
- package/eth-contracts/ABIs/DelegateManager.json +989 -0
- package/eth-contracts/ABIs/DelegateManagerV2.json +1049 -0
- package/eth-contracts/ABIs/DelegateManagerV2Bad.json +1049 -0
- package/eth-contracts/ABIs/ERC20.json +252 -0
- package/eth-contracts/ABIs/ERC20Burnable.json +287 -0
- package/eth-contracts/ABIs/ERC20Detailed.json +270 -0
- package/eth-contracts/ABIs/ERC20Mintable.json +364 -0
- package/eth-contracts/ABIs/ERC20Pausable.json +397 -0
- package/eth-contracts/ABIs/EthRewardsManager.json +174 -0
- package/eth-contracts/ABIs/Governance.json +938 -0
- package/eth-contracts/ABIs/GovernanceUpgraded.json +953 -0
- package/eth-contracts/ABIs/GovernanceV2.json +938 -0
- package/eth-contracts/ABIs/IERC20.json +200 -0
- package/eth-contracts/ABIs/Initializable.json +4 -0
- package/eth-contracts/ABIs/InitializableV2.json +14 -0
- package/eth-contracts/ABIs/Migrations.json +71 -0
- package/eth-contracts/ABIs/MinterRole.json +91 -0
- package/eth-contracts/ABIs/MockAccount.json +62 -0
- package/eth-contracts/ABIs/MockDelegateManager.json +55 -0
- package/eth-contracts/ABIs/MockStakingCaller.json +259 -0
- package/eth-contracts/ABIs/MockWormhole.json +106 -0
- package/eth-contracts/ABIs/OpenZeppelinUpgradesAddress.json +4 -0
- package/eth-contracts/ABIs/Ownable.json +93 -0
- package/eth-contracts/ABIs/Pausable.json +150 -0
- package/eth-contracts/ABIs/PauserRole.json +91 -0
- package/eth-contracts/ABIs/Proxy.json +10 -0
- package/eth-contracts/ABIs/Registry.json +288 -0
- package/eth-contracts/ABIs/Roles.json +4 -0
- package/eth-contracts/ABIs/SafeERC20.json +4 -0
- package/eth-contracts/ABIs/SafeMath.json +4 -0
- package/eth-contracts/ABIs/ServiceProviderFactory.json +1153 -0
- package/eth-contracts/ABIs/ServiceTypeManager.json +337 -0
- package/eth-contracts/ABIs/Staking.json +555 -0
- package/eth-contracts/ABIs/StakingUpgraded.json +570 -0
- package/eth-contracts/ABIs/TestContract.json +44 -0
- package/eth-contracts/ABIs/TrustedNotifierManager.json +265 -0
- package/eth-contracts/ABIs/Uint256Helpers.json +4 -0
- package/eth-contracts/ABIs/UpgradeabilityProxy.json +40 -0
- package/eth-contracts/ABIs/Wormhole.json +45 -0
- package/eth-contracts/ABIs/WormholeClient.json +155 -0
- package/examples/file.mp3 +0 -0
- package/examples/initAudiusLibs.js +86 -0
- package/examples/initializeVersions.js +95 -0
- package/examples/pic.jpg +0 -0
- package/initScripts/configureLocalDiscProv.js +167 -0
- package/initScripts/helpers/claim.js +43 -0
- package/initScripts/helpers/distributeTokens.js +24 -0
- package/initScripts/helpers/spRegistration.js +138 -0
- package/initScripts/helpers/utils.js +34 -0
- package/initScripts/helpers/version.js +93 -0
- package/initScripts/local.js +617 -0
- package/initScripts/mainnet.js +131 -0
- package/initScripts/manageProdRelayerWallets.js +191 -0
- package/package.json +125 -0
- package/rollup.config.js +164 -0
- package/scripts/AudiusClaimDistributor.json +4968 -0
- package/scripts/Wormhole.json +155 -0
- package/scripts/addCIDToIpldBlacklist.js +124 -0
- package/scripts/circleci-test.sh +53 -0
- package/scripts/communityRewards/transferCommunityRewardsToSolana.js +222 -0
- package/scripts/ipfs.sh +58 -0
- package/scripts/migrate_contracts.sh +25 -0
- package/scripts/reset.sh +65 -0
- package/scripts/test.sh +77 -0
- package/src/api/account.js +670 -0
- package/src/api/base.js +122 -0
- package/src/api/file.js +168 -0
- package/src/api/playlist.js +328 -0
- package/src/api/rewards.d.ts +4 -0
- package/src/api/rewards.js +682 -0
- package/src/api/serviceProvider.js +154 -0
- package/src/api/track.js +604 -0
- package/src/api/user.js +888 -0
- package/src/api/user.test.js +172 -0
- package/src/constants.ts +7 -0
- package/src/core.ts +3 -0
- package/src/index.js +6 -0
- package/src/libs.d.ts +3 -0
- package/src/libs.js +619 -0
- package/src/sanityChecks/addSecondaries.js +40 -0
- package/src/sanityChecks/assignReplicaSetIfNecessary.js +10 -0
- package/src/sanityChecks/index.d.ts +9 -0
- package/src/sanityChecks/index.js +31 -0
- package/src/sanityChecks/isCreator.js +73 -0
- package/src/sanityChecks/needsRecoveryEmail.js +20 -0
- package/src/sanityChecks/rolloverNodes.js +74 -0
- package/src/sanityChecks/sanitizeNodes.js +24 -0
- package/src/sanityChecks/syncNodes.js +28 -0
- package/src/sdk/constants.ts +10 -0
- package/src/sdk/index.ts +1 -0
- package/src/sdk/oauth/Oauth.ts +265 -0
- package/src/sdk/oauth/index.ts +1 -0
- package/src/sdk/sdk.ts +102 -0
- package/src/service-selection/ServiceSelection.test.ts +320 -0
- package/src/service-selection/ServiceSelection.ts +460 -0
- package/src/service-selection/constants.ts +14 -0
- package/src/service-selection/index.ts +1 -0
- package/src/services/ABIDecoder/AudiusABIDecoder.ts +71 -0
- package/src/services/ABIDecoder/index.ts +1 -0
- package/src/services/comstock/Comstock.ts +39 -0
- package/src/services/comstock/index.ts +1 -0
- package/src/services/contracts/ContractClient.ts +227 -0
- package/src/services/contracts/GovernedContractClient.ts +53 -0
- package/src/services/contracts/ProviderSelection.ts +42 -0
- package/src/services/creatorNode/CreatorNode.ts +1065 -0
- package/src/services/creatorNode/CreatorNodeSelection.test.ts +997 -0
- package/src/services/creatorNode/CreatorNodeSelection.ts +488 -0
- package/src/services/creatorNode/constants.ts +10 -0
- package/src/services/creatorNode/index.ts +2 -0
- package/src/services/dataContracts/AudiusContracts.ts +234 -0
- package/src/services/dataContracts/IPLDBlacklistFactoryClient.ts +73 -0
- package/src/services/dataContracts/PlaylistFactoryClient.ts +370 -0
- package/src/services/dataContracts/RegistryClient.ts +95 -0
- package/src/services/dataContracts/SocialFeatureFactoryClient.ts +196 -0
- package/src/services/dataContracts/TrackFactoryClient.ts +131 -0
- package/src/services/dataContracts/UserFactoryClient.ts +351 -0
- package/src/services/dataContracts/UserLibraryFactoryClient.ts +115 -0
- package/src/services/dataContracts/UserReplicaSetManagerClient.ts +206 -0
- package/src/services/dataContracts/index.ts +1 -0
- package/src/services/discoveryProvider/DiscoveryProvider.ts +1168 -0
- package/src/services/discoveryProvider/DiscoveryProviderSelection.test.ts +536 -0
- package/src/services/discoveryProvider/DiscoveryProviderSelection.ts +383 -0
- package/src/services/discoveryProvider/constants.ts +13 -0
- package/src/services/discoveryProvider/index.ts +1 -0
- package/src/services/discoveryProvider/requests.ts +629 -0
- package/src/services/ethContracts/AudiusTokenClient.ts +163 -0
- package/src/services/ethContracts/ClaimDistributionClient.ts +45 -0
- package/src/services/ethContracts/ClaimsManagerClient.ts +102 -0
- package/src/services/ethContracts/DelegateManagerClient.ts +480 -0
- package/src/services/ethContracts/EthContracts.ts +359 -0
- package/src/services/ethContracts/EthRewardsManagerClient.ts +33 -0
- package/src/services/ethContracts/GovernanceClient.ts +451 -0
- package/src/services/ethContracts/RegistryClient.ts +33 -0
- package/src/services/ethContracts/ServiceProviderFactoryClient.ts +691 -0
- package/src/services/ethContracts/ServiceTypeManagerClient.ts +112 -0
- package/src/services/ethContracts/StakingProxyClient.ts +97 -0
- package/src/services/ethContracts/TrustedNotifierManagerClient.ts +101 -0
- package/src/services/ethContracts/WormholeClient.ts +97 -0
- package/src/services/ethContracts/index.ts +1 -0
- package/src/services/ethWeb3Manager/EthWeb3Manager.ts +239 -0
- package/src/services/ethWeb3Manager/index.ts +1 -0
- package/src/services/hedgehog/Hedgehog.ts +96 -0
- package/src/services/hedgehog/index.ts +1 -0
- package/src/services/identity/IdentityService.ts +551 -0
- package/src/services/identity/index.ts +1 -0
- package/src/services/identity/requests.ts +65 -0
- package/src/services/schemaValidator/SchemaValidator.ts +105 -0
- package/src/services/schemaValidator/index.ts +1 -0
- package/src/services/schemaValidator/schemas/trackSchema.json +267 -0
- package/src/services/schemaValidator/schemas/userSchema.json +230 -0
- package/src/services/solanaAudiusData/errors.ts +20 -0
- package/src/services/solanaAudiusData/index.ts +1189 -0
- package/src/services/solanaWeb3Manager/errors.js +101 -0
- package/src/services/solanaWeb3Manager/index.d.ts +46 -0
- package/src/services/solanaWeb3Manager/index.js +655 -0
- package/src/services/solanaWeb3Manager/padBNToUint8Array.ts +7 -0
- package/src/services/solanaWeb3Manager/rewards.js +941 -0
- package/src/services/solanaWeb3Manager/rewardsAttester.ts +1093 -0
- package/src/services/solanaWeb3Manager/tokenAccount.js +149 -0
- package/src/services/solanaWeb3Manager/transactionHandler.js +345 -0
- package/src/services/solanaWeb3Manager/transfer.js +272 -0
- package/src/services/solanaWeb3Manager/userBank.js +160 -0
- package/src/services/solanaWeb3Manager/utils.d.ts +31 -0
- package/src/services/solanaWeb3Manager/utils.js +163 -0
- package/src/services/solanaWeb3Manager/wAudio.js +28 -0
- package/src/services/solanaWeb3Manager/wAudio.test.js +30 -0
- package/src/services/web3Manager/Web3Config.ts +14 -0
- package/src/services/web3Manager/Web3Manager.ts +360 -0
- package/src/services/web3Manager/XMLHttpRequest.ts +11 -0
- package/src/services/web3Manager/index.ts +2 -0
- package/src/services/wormhole/index.js +424 -0
- package/src/types.ts +8 -0
- package/src/userStateManager.ts +53 -0
- package/src/utils/apiSigning.ts +51 -0
- package/src/utils/captcha.ts +97 -0
- package/src/utils/estimateGas.ts +64 -0
- package/src/utils/fileHasher.ts +278 -0
- package/src/utils/importContractABI.d.ts +9 -0
- package/src/utils/importContractABI.js +19 -0
- package/src/utils/index.ts +11 -0
- package/src/utils/multiProvider.ts +72 -0
- package/src/utils/network.test.ts +127 -0
- package/src/utils/network.ts +308 -0
- package/src/utils/promiseFight.test.ts +87 -0
- package/src/utils/promiseFight.ts +36 -0
- package/src/utils/signatures.ts +139 -0
- package/src/utils/types.ts +34 -0
- package/src/utils/utils.test.ts +36 -0
- package/src/utils/utils.ts +235 -0
- package/src/utils/uuid.ts +14 -0
- package/src/web3.d.ts +9 -0
- package/src/web3.js +8 -0
- package/tests/assets/static_image.png +0 -0
- package/tests/assets/static_text.txt +1 -0
- package/tests/audiusTokenClientTest.js +37 -0
- package/tests/creatorNodeTest.js +19 -0
- package/tests/fileHasherTest.js +125 -0
- package/tests/governanceTest.js +382 -0
- package/tests/helpers.js +105 -0
- package/tests/index.js +14 -0
- package/tests/playlistClientTest.js +157 -0
- package/tests/providerSelectionTest.js +241 -0
- package/tests/registryClientTest.js +19 -0
- package/tests/rewardsAttesterTest.js +373 -0
- package/tests/serviceTypeManagerClientTest.js +33 -0
- package/tests/socialFeatureClientTest.js +79 -0
- package/tests/stakingTest.js +302 -0
- package/tests/trackClientTest.js +86 -0
- package/tests/userClientTest.js +121 -0
- package/tsconfig.json +10 -0
- package/types/@audius-hedgehog/index.d.ts +39 -0
- package/types/abi-decoder/index.d.ts +41 -0
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
const readline = require('readline')
|
|
3
|
+
|
|
4
|
+
const initAudiusLibs = require('../examples/initAudiusLibs')
|
|
5
|
+
const dataContractsConfig = require('../data-contracts/config.json')
|
|
6
|
+
const { distributeTokens } = require('./helpers/distributeTokens')
|
|
7
|
+
const { setServiceVersion, addServiceType } = require('./helpers/version')
|
|
8
|
+
const {
|
|
9
|
+
registerLocalService,
|
|
10
|
+
queryLocalServices,
|
|
11
|
+
getStakingParameters,
|
|
12
|
+
updateServiceDelegateOwnerWallet
|
|
13
|
+
} = require('./helpers/spRegistration')
|
|
14
|
+
const { deregisterLocalService } = require('./helpers/spRegistration')
|
|
15
|
+
const { getClaimInfo, fundNewClaim } = require('./helpers/claim')
|
|
16
|
+
const { getEthContractAccounts } = require('./helpers/utils')
|
|
17
|
+
|
|
18
|
+
// Directories within the audius-protocol repository used for development
|
|
19
|
+
const serviceDirectoryList = ['discovery-provider', 'creator-node']
|
|
20
|
+
const discProvEndpoint1 = 'http://dn1_web-server_1:5000'
|
|
21
|
+
const discProvEndpoint2 = 'http://dn2_web-server_1:5001'
|
|
22
|
+
const creatorNodeEndpoint1 = 'http://cn1_creator-node_1:4000'
|
|
23
|
+
const creatorNodeEndpoint2 = 'http://cn2_creator-node_1:4001'
|
|
24
|
+
const creatorNodeEndpoint3 = 'http://cn3_creator-node_1:4002'
|
|
25
|
+
const creatorNodeEndpoint4 = 'http://cn4_creator-node_1:4003'
|
|
26
|
+
const amountOfAuds = 2000000
|
|
27
|
+
|
|
28
|
+
const contentNodeType = 'content-node'
|
|
29
|
+
const contentNodeTypeMin = 200000
|
|
30
|
+
const contentNodeTypeMax = 10000000
|
|
31
|
+
|
|
32
|
+
const discoveryNodeType = 'discovery-node'
|
|
33
|
+
const discoveryNodeTypeMin = 200000
|
|
34
|
+
const discoveryNodeTypeMax = 7000000
|
|
35
|
+
|
|
36
|
+
const DISCOVERY_WALLET_OFFSET = 8
|
|
37
|
+
|
|
38
|
+
// try to dynamically get versions from .version.json
|
|
39
|
+
const serviceVersions = {}
|
|
40
|
+
const serviceTypesList = []
|
|
41
|
+
try {
|
|
42
|
+
serviceDirectoryList.forEach((type) => {
|
|
43
|
+
const typeInfo = require(`../../${type}/.version.json`)
|
|
44
|
+
const version = typeInfo.version
|
|
45
|
+
const serviceType = typeInfo.service
|
|
46
|
+
serviceVersions[serviceType] = version
|
|
47
|
+
serviceTypesList.push(serviceType)
|
|
48
|
+
})
|
|
49
|
+
} catch (e) {
|
|
50
|
+
throw new Error("Couldn't get the service versions")
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const throwArgError = () => {
|
|
54
|
+
throw new Error(`missing argument - format: node local.js [
|
|
55
|
+
distribute,
|
|
56
|
+
fundclaim,
|
|
57
|
+
getclaim,
|
|
58
|
+
stakeinfo,
|
|
59
|
+
setversion,
|
|
60
|
+
register-sps,
|
|
61
|
+
deregister-sps,
|
|
62
|
+
query-sps,
|
|
63
|
+
init-all
|
|
64
|
+
]`)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const args = process.argv
|
|
68
|
+
if (args.length < 3) {
|
|
69
|
+
throwArgError()
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const getEnvConfigPathsForService = async ({ workspace, serviceCount }) => {
|
|
73
|
+
const tmpDir = `${workspace}/tmp`
|
|
74
|
+
const writePath = `${tmpDir}/shellEnv${serviceCount}.sh`
|
|
75
|
+
const dirExists = fs.existsSync(tmpDir)
|
|
76
|
+
if (!dirExists) {
|
|
77
|
+
fs.mkdirSync(tmpDir)
|
|
78
|
+
} else {
|
|
79
|
+
const cleanupNeeded = fs.existsSync(writePath)
|
|
80
|
+
if (cleanupNeeded) {
|
|
81
|
+
fs.rmSync(writePath, { force: true })
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const templatePath = `${workspace}/commonEnv.sh`
|
|
85
|
+
const envPath = `${workspace}/shellEnv${serviceCount}.sh`
|
|
86
|
+
fs.copyFileSync(envPath, writePath)
|
|
87
|
+
return { templatePath, writePath }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const run = async () => {
|
|
91
|
+
try {
|
|
92
|
+
const audiusLibs = await initAudiusLibs(true)
|
|
93
|
+
// A separate libs instance
|
|
94
|
+
let userReplicaBootstrapAddressLibs
|
|
95
|
+
const ethWeb3 = audiusLibs.ethWeb3Manager.getWeb3()
|
|
96
|
+
const ethAccounts = await ethWeb3.eth.getAccounts()
|
|
97
|
+
|
|
98
|
+
switch (args[2]) {
|
|
99
|
+
case 'init':
|
|
100
|
+
console.log('initialized libs')
|
|
101
|
+
break
|
|
102
|
+
case 'distribute':
|
|
103
|
+
await distributeTokens(audiusLibs, amountOfAuds)
|
|
104
|
+
break
|
|
105
|
+
|
|
106
|
+
case 'fundclaim':
|
|
107
|
+
await fundNewClaim(audiusLibs, amountOfAuds)
|
|
108
|
+
break
|
|
109
|
+
|
|
110
|
+
case 'getclaim':
|
|
111
|
+
await getClaimInfo(audiusLibs)
|
|
112
|
+
break
|
|
113
|
+
|
|
114
|
+
case 'stakeinfo':
|
|
115
|
+
await getStakingParameters(audiusLibs)
|
|
116
|
+
break
|
|
117
|
+
|
|
118
|
+
case 'setversion':
|
|
119
|
+
await _initAllVersions(audiusLibs)
|
|
120
|
+
break
|
|
121
|
+
|
|
122
|
+
case 'configure-discprov-wallet': {
|
|
123
|
+
const serviceCount = args[3]
|
|
124
|
+
if (serviceCount === undefined) throw new Error('configure-discprov-wallet requires a service # as the second arg')
|
|
125
|
+
const workspace = '../discovery-provider/compose/env'
|
|
126
|
+
const { templatePath, writePath } = await getEnvConfigPathsForService({ workspace, serviceCount })
|
|
127
|
+
await _configureDiscProv(ethAccounts, parseInt(serviceCount), templatePath, writePath)
|
|
128
|
+
break
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
case 'register-discovery-node':
|
|
132
|
+
const serviceCount = args[3]
|
|
133
|
+
if (serviceCount === undefined) throw new Error('register-discovery-node requires a service # as the second arg')
|
|
134
|
+
await _registerDiscProv(ethAccounts, parseInt(serviceCount))
|
|
135
|
+
break
|
|
136
|
+
|
|
137
|
+
case 'register-cnode': {
|
|
138
|
+
const serviceCount = args[3]
|
|
139
|
+
if (serviceCount === undefined) throw new Error('register-cnode requires a service # as the second arg')
|
|
140
|
+
await _registerCnode(ethAccounts, parseInt(serviceCount))
|
|
141
|
+
break
|
|
142
|
+
}
|
|
143
|
+
case 'deregister-cnode': {
|
|
144
|
+
const serviceCount = args[3]
|
|
145
|
+
if (serviceCount === undefined) throw new Error('deregister-cnode requires a service # as the second arg')
|
|
146
|
+
await _deregisterCnode(ethAccounts, parseInt(serviceCount))
|
|
147
|
+
break
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
case 'print-accounts': {
|
|
151
|
+
const numAccounts = args[3] || 20
|
|
152
|
+
await _printEthContractAccounts(ethAccounts, numAccounts)
|
|
153
|
+
break
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
case 'update-cnode-delegate-wallet': {
|
|
157
|
+
const serviceCount = args[3]
|
|
158
|
+
if (serviceCount === undefined) throw new Error('register-cnode requires a service # as the second arg')
|
|
159
|
+
await _updateCNodeDelegateOwnerWallet(ethAccounts, parseInt(serviceCount))
|
|
160
|
+
break
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
case 'deregister-sps':
|
|
164
|
+
await _deregisterAllSPs(audiusLibs, ethAccounts)
|
|
165
|
+
break
|
|
166
|
+
|
|
167
|
+
case 'query-sps':
|
|
168
|
+
await queryLocalServices(audiusLibs, serviceTypesList)
|
|
169
|
+
break
|
|
170
|
+
|
|
171
|
+
case 'query-sps-ursm':
|
|
172
|
+
await queryLocalServices(audiusLibs, serviceTypesList, true)
|
|
173
|
+
break
|
|
174
|
+
|
|
175
|
+
case 'update-cnode-config': {
|
|
176
|
+
// Update arbitrary cnode
|
|
177
|
+
const serviceCount = args[3]
|
|
178
|
+
if (serviceCount === undefined) throw new Error('update-delegate-wallet requires a service # as the second arg')
|
|
179
|
+
const workspace = '../creator-node/compose/env'
|
|
180
|
+
const { templatePath, writePath } = await getEnvConfigPathsForService({ workspace, serviceCount })
|
|
181
|
+
// Local dev, delegate and owner wallet are equal
|
|
182
|
+
const ownerWallet = ethAccounts[parseInt(serviceCount)]
|
|
183
|
+
const delegateWallet = ownerWallet
|
|
184
|
+
const endpoint = makeCreatorNodeEndpoint(serviceCount)
|
|
185
|
+
|
|
186
|
+
await _updateCreatorNodeConfig(ownerWallet, templatePath, writePath, endpoint, /* isShell */ true, delegateWallet)
|
|
187
|
+
break
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
case 'init-all':
|
|
191
|
+
await _initializeLocalEnvironment(audiusLibs, ethAccounts)
|
|
192
|
+
break
|
|
193
|
+
|
|
194
|
+
case 'update-userreplicasetmanager-init-config':
|
|
195
|
+
await _updateUserReplicaSetManagerBootstrapConfig(ethAccounts)
|
|
196
|
+
break
|
|
197
|
+
|
|
198
|
+
case 'update-user-replica-set':
|
|
199
|
+
console.log('Usage: node local.js update-user-replica-set userId=1 primary=2 secondaries=3,1')
|
|
200
|
+
const userIdStr = args[3]
|
|
201
|
+
const primaryReplicaIdStr = args[4]
|
|
202
|
+
const secondaryReplicaIdStr = args[5]
|
|
203
|
+
const userId = parseInt(userIdStr.split('=')[1])
|
|
204
|
+
const primaryReplicaId = parseInt(primaryReplicaIdStr.split('=')[1])
|
|
205
|
+
let secondaryReplicaIds = (secondaryReplicaIdStr.split('=')[1])
|
|
206
|
+
secondaryReplicaIds = secondaryReplicaIds.split(',').map(x => parseInt(x))
|
|
207
|
+
console.log(`Received userId: ${userId}`)
|
|
208
|
+
console.log(`Received primaryReplicaId: ${primaryReplicaId}`)
|
|
209
|
+
console.log(`Received secondaryReplicaIds: ${secondaryReplicaIds}`)
|
|
210
|
+
await updateUserReplicaSet(audiusLibs, userId, primaryReplicaId, secondaryReplicaIds)
|
|
211
|
+
break
|
|
212
|
+
|
|
213
|
+
case 'query-user-replica-set':
|
|
214
|
+
console.log('Usage: node local.js query-user-replica-set userId=1')
|
|
215
|
+
userReplicaBootstrapAddressLibs = await getUrsmLibs(audiusLibs, 9)
|
|
216
|
+
const userReplicaSet = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getUserReplicaSet(
|
|
217
|
+
parseInt(
|
|
218
|
+
args[3].split('=')[1]
|
|
219
|
+
)
|
|
220
|
+
)
|
|
221
|
+
console.log(userReplicaSet)
|
|
222
|
+
break
|
|
223
|
+
|
|
224
|
+
case 'query-ursm-content-node-wallet':
|
|
225
|
+
console.log('Usage: node local.js query-ursm-content-node-wallet spId=1')
|
|
226
|
+
userReplicaBootstrapAddressLibs = await getUrsmLibs(audiusLibs, 9)
|
|
227
|
+
const contentNodeWallet = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getContentNodeWallets(
|
|
228
|
+
parseInt(
|
|
229
|
+
args[3].split('=')[1]
|
|
230
|
+
)
|
|
231
|
+
)
|
|
232
|
+
console.log(contentNodeWallet)
|
|
233
|
+
break
|
|
234
|
+
|
|
235
|
+
case 'add-l2-content-node':
|
|
236
|
+
console.log('Usage: node local.js add-l2-content-node spId=4 delegateWallet=0x95b6A2Be3423dF7D5774...')
|
|
237
|
+
const spIdStr = args[3]
|
|
238
|
+
const spID = parseInt(spIdStr.split('=')[1])
|
|
239
|
+
const delegateWalletStr = args[4]
|
|
240
|
+
const delegateWallet = delegateWalletStr.split('=')[1]
|
|
241
|
+
const ownerWallet = delegateWallet
|
|
242
|
+
console.log(`Configuring L2 ${spID} with wallet: ${delegateWallet}`)
|
|
243
|
+
// Initialize from a different acct than proxy admin
|
|
244
|
+
const queryLibs = await getUrsmLibs(audiusLibs, 9)
|
|
245
|
+
await addL2ContentNode(
|
|
246
|
+
queryLibs,
|
|
247
|
+
ethAccounts,
|
|
248
|
+
spID,
|
|
249
|
+
delegateWallet,
|
|
250
|
+
ownerWallet)
|
|
251
|
+
break
|
|
252
|
+
|
|
253
|
+
case 'register-trusted-notifier':
|
|
254
|
+
// hardcoded in trusted-notifier .env.dev
|
|
255
|
+
const wallet = '0xe82a5a2948d2b5e71232f640777346869817fbae'
|
|
256
|
+
const endpoint = 'http://trusted_notifier_service:8000'
|
|
257
|
+
const email = 'email@trusted_notifier_service:8000'
|
|
258
|
+
await audiusLibs.ethContracts.TrustedNotifierManagerClient.registerNotifier(
|
|
259
|
+
wallet,
|
|
260
|
+
endpoint,
|
|
261
|
+
email
|
|
262
|
+
)
|
|
263
|
+
break
|
|
264
|
+
|
|
265
|
+
case 'query-trusted-notifier':
|
|
266
|
+
const id = args[3]
|
|
267
|
+
if (!id) throw new Error('Please pass in a valid ID')
|
|
268
|
+
const resp = await audiusLibs.ethContracts.TrustedNotifierManagerClient.getNotifierForID(id)
|
|
269
|
+
console.log(resp)
|
|
270
|
+
break
|
|
271
|
+
|
|
272
|
+
default:
|
|
273
|
+
throwArgError()
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
process.exit(0)
|
|
277
|
+
} catch (e) {
|
|
278
|
+
throw e
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
run()
|
|
283
|
+
|
|
284
|
+
/*
|
|
285
|
+
Helper function to bootstrap additional local content nodes onto the L2 local network
|
|
286
|
+
Assumes 3 content nodes are already up prior to execution
|
|
287
|
+
*/
|
|
288
|
+
const addL2ContentNode = async (
|
|
289
|
+
audiusLibs,
|
|
290
|
+
ethAccounts,
|
|
291
|
+
newCnodeId,
|
|
292
|
+
newCnodeDelegateWallet,
|
|
293
|
+
newCnodeOwnerWallet
|
|
294
|
+
) => {
|
|
295
|
+
const incomingWallets = [newCnodeDelegateWallet, newCnodeOwnerWallet]
|
|
296
|
+
const existingWalletInfo = await audiusLibs.contracts.UserReplicaSetManagerClient.getContentNodeWallets(newCnodeId)
|
|
297
|
+
const existingWalletToCnodeIdL2 = existingWalletInfo.delegateOwnerWallet
|
|
298
|
+
const spIdToWalletPresent = (existingWalletToCnodeIdL2 === newCnodeDelegateWallet)
|
|
299
|
+
if (spIdToWalletPresent) {
|
|
300
|
+
console.log(`No update required! Found ${existingWalletToCnodeIdL2} for spId=${newCnodeId}, expected ${newCnodeDelegateWallet}`)
|
|
301
|
+
// return
|
|
302
|
+
}
|
|
303
|
+
console.log(`addL2ContentNode: ${newCnodeId}, ${newCnodeDelegateWallet}`)
|
|
304
|
+
const ganacheEthAccounts = await getEthContractAccounts()
|
|
305
|
+
// cn1, cn2, cn3 are all initialized to the 1,2,3 indexes into local ethAccounts array
|
|
306
|
+
// NOTE: Proposer Accounts must match the deployed bootstrap addresses on UserReplicaSetManager
|
|
307
|
+
// Changing any of the below indices will affect the wallets performing this update and operations will fail
|
|
308
|
+
const proposer1WalletIndex = 1
|
|
309
|
+
const proposer2WalletIndex = 2
|
|
310
|
+
const proposer3WalletIndex = 3
|
|
311
|
+
// Local service provider IDs assigned by eth-contracts
|
|
312
|
+
// These values just HAPPEN to coincide with the indices above but are set explicitly to avoid confusion
|
|
313
|
+
const proposer1SpId = 1
|
|
314
|
+
const proposer2SpId = 2
|
|
315
|
+
const proposer3SpId = 3
|
|
316
|
+
// Retrieve the wallet associated with each index
|
|
317
|
+
const proposer1Wallet = ethAccounts[parseInt(proposer1WalletIndex)]
|
|
318
|
+
const proposer1PKey = ganacheEthAccounts.private_keys[proposer1Wallet.toLowerCase()]
|
|
319
|
+
const proposer2Wallet = ethAccounts[parseInt(proposer2WalletIndex)]
|
|
320
|
+
const proposer2PKey = ganacheEthAccounts.private_keys[proposer2Wallet.toLowerCase()]
|
|
321
|
+
const proposer3Wallet = ethAccounts[parseInt(proposer3WalletIndex)]
|
|
322
|
+
const proposer3PKey = ganacheEthAccounts.private_keys[proposer3Wallet.toLowerCase()]
|
|
323
|
+
|
|
324
|
+
console.log(`proposer1Wallet: ${proposer1Wallet}`)
|
|
325
|
+
console.log(`proposer1WalletPkey: ${proposer1PKey}`)
|
|
326
|
+
console.log(`proposer2Wallet: ${proposer2Wallet}`)
|
|
327
|
+
console.log(`proposer2WalletPkey: ${proposer2PKey}`)
|
|
328
|
+
console.log(`proposer3Wallet: ${proposer3Wallet}`)
|
|
329
|
+
console.log(`proposer3WalletPkey: ${proposer3PKey}`)
|
|
330
|
+
|
|
331
|
+
// console.dir(ganacheEthAccounts)
|
|
332
|
+
|
|
333
|
+
// Initialize libs with each incoming proposer
|
|
334
|
+
const proposer1Libs = await initAudiusLibs(
|
|
335
|
+
false,
|
|
336
|
+
proposer1Wallet,
|
|
337
|
+
proposer1Wallet,
|
|
338
|
+
proposer1PKey
|
|
339
|
+
)
|
|
340
|
+
const proposer1EthAddress = proposer1Libs.ethWeb3Manager.getWalletAddress()
|
|
341
|
+
console.log(`Initialized proposer1 libs, proposer1EthAddress: ${proposer1EthAddress}`)
|
|
342
|
+
const proposer1SignatureInfo = await proposer1Libs.contracts.UserReplicaSetManagerClient.getProposeAddOrUpdateContentNodeRequestData(
|
|
343
|
+
newCnodeId,
|
|
344
|
+
newCnodeDelegateWallet,
|
|
345
|
+
newCnodeOwnerWallet,
|
|
346
|
+
proposer1SpId
|
|
347
|
+
)
|
|
348
|
+
console.dir(proposer1SignatureInfo, { depth: 5 })
|
|
349
|
+
const proposer2Libs = await initAudiusLibs(
|
|
350
|
+
false,
|
|
351
|
+
proposer2Wallet,
|
|
352
|
+
proposer2Wallet,
|
|
353
|
+
proposer2PKey
|
|
354
|
+
)
|
|
355
|
+
const proposer2EthAddress = proposer2Libs.ethWeb3Manager.getWalletAddress()
|
|
356
|
+
console.log(`Initialized proposer2 libs, proposer2EthAddress: ${proposer2EthAddress}`)
|
|
357
|
+
const proposer2SignatureInfo = await proposer2Libs.contracts.UserReplicaSetManagerClient.getProposeAddOrUpdateContentNodeRequestData(
|
|
358
|
+
newCnodeId,
|
|
359
|
+
newCnodeDelegateWallet,
|
|
360
|
+
newCnodeOwnerWallet,
|
|
361
|
+
proposer2SpId
|
|
362
|
+
)
|
|
363
|
+
console.dir(proposer2SignatureInfo, { depth: 5 })
|
|
364
|
+
const proposer3Libs = await initAudiusLibs(
|
|
365
|
+
false,
|
|
366
|
+
proposer3Wallet,
|
|
367
|
+
proposer3Wallet,
|
|
368
|
+
proposer3PKey
|
|
369
|
+
)
|
|
370
|
+
const proposer3EthAddress = proposer3Libs.ethWeb3Manager.getWalletAddress()
|
|
371
|
+
console.log(`Initialized proposer3 libs, proposer3EthAddress: ${proposer3EthAddress}`)
|
|
372
|
+
const proposer3SignatureInfo = await proposer3Libs.contracts.UserReplicaSetManagerClient.getProposeAddOrUpdateContentNodeRequestData(
|
|
373
|
+
newCnodeId,
|
|
374
|
+
newCnodeDelegateWallet,
|
|
375
|
+
newCnodeOwnerWallet,
|
|
376
|
+
proposer3SpId
|
|
377
|
+
)
|
|
378
|
+
console.dir(proposer3SignatureInfo, { depth: 5 })
|
|
379
|
+
// Generate arguments for proposal
|
|
380
|
+
const proposerSpIds = [proposer1SpId, proposer2SpId, proposer3SpId]
|
|
381
|
+
const proposerNonces = [
|
|
382
|
+
proposer1SignatureInfo.nonce,
|
|
383
|
+
proposer2SignatureInfo.nonce,
|
|
384
|
+
proposer3SignatureInfo.nonce
|
|
385
|
+
]
|
|
386
|
+
await audiusLibs.contracts.UserReplicaSetManagerClient.addOrUpdateContentNode(
|
|
387
|
+
newCnodeId,
|
|
388
|
+
incomingWallets,
|
|
389
|
+
proposerSpIds,
|
|
390
|
+
proposerNonces,
|
|
391
|
+
proposer1SignatureInfo.sig,
|
|
392
|
+
proposer2SignatureInfo.sig,
|
|
393
|
+
proposer3SignatureInfo.sig
|
|
394
|
+
)
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// In order to issue operations we need a libs account initialized from a different address than
|
|
398
|
+
// the 0th account on local data-contracts
|
|
399
|
+
// This function explicitly queries the 20th account from data-contracts ganache
|
|
400
|
+
// Returns libs instance logged in as said account
|
|
401
|
+
const getUrsmLibs = async (defaultAudiusLibs, acctIndex = 20) => {
|
|
402
|
+
const dataWeb3 = defaultAudiusLibs.web3Manager.getWeb3()
|
|
403
|
+
const dataWeb3Accounts = await dataWeb3.eth.getAccounts()
|
|
404
|
+
const localQueryAccount = dataWeb3Accounts[acctIndex]
|
|
405
|
+
const ursmLibs = await initAudiusLibs(true, localQueryAccount)
|
|
406
|
+
return ursmLibs
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// Update a user's replica set on chain
|
|
410
|
+
// Using the bootstrap address configured for local development (accounts[9])
|
|
411
|
+
const updateUserReplicaSet = async (
|
|
412
|
+
defaultAudiusLibs,
|
|
413
|
+
userId,
|
|
414
|
+
primaryId,
|
|
415
|
+
secondaryIds
|
|
416
|
+
) => {
|
|
417
|
+
// UserReplicaBootstrapLibs, logged in as the known bootstrap address
|
|
418
|
+
const userReplicaBootstrapAddressLibs = await getUrsmLibs(defaultAudiusLibs, 9)
|
|
419
|
+
const sp1Id = primaryId
|
|
420
|
+
const sp1ContentNodeWallets = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getContentNodeWallets(sp1Id)
|
|
421
|
+
const sp1DelWal = sp1ContentNodeWallets.delegateOwnerWallet
|
|
422
|
+
console.log(`spId <-> delegateWallet from UserReplicaSetManager: ${sp1Id} - ${sp1DelWal}`)
|
|
423
|
+
const sp2Id = secondaryIds[0]
|
|
424
|
+
const sp2ContentNodeWallets = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getContentNodeWallets(sp2Id)
|
|
425
|
+
const sp2DelWal = sp2ContentNodeWallets.delegateOwnerWallet
|
|
426
|
+
console.log(`spId <-> delegateWallet from UserReplicaSetManager: ${sp2Id} - ${sp2DelWal}`)
|
|
427
|
+
const sp3Id = secondaryIds[1]
|
|
428
|
+
const sp3ContentNodeWallets = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getContentNodeWallets(sp3Id)
|
|
429
|
+
const sp3DelWal = sp3ContentNodeWallets.delegateOwnerWallet
|
|
430
|
+
console.log(`spId <-> delegateWallet from UserReplicaSetManager: ${sp3Id} - ${sp3DelWal}`)
|
|
431
|
+
const user1ReplicaSet = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getUserReplicaSet(userId)
|
|
432
|
+
console.log(`User ${userId} replica set prior to update: ${JSON.stringify(user1ReplicaSet)}`)
|
|
433
|
+
console.log(`User ${userId} replica set updating to primary=${primaryId}, secondaries=${secondaryIds}`)
|
|
434
|
+
// Uncomment to perform update operation
|
|
435
|
+
const tx1 = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.updateReplicaSet(
|
|
436
|
+
userId,
|
|
437
|
+
primaryId,
|
|
438
|
+
secondaryIds,
|
|
439
|
+
user1ReplicaSet.primary,
|
|
440
|
+
user1ReplicaSet.secondaries
|
|
441
|
+
)
|
|
442
|
+
console.dir(tx1, { depth: 5 })
|
|
443
|
+
const user1ReplicaSetAfterUpdate = await userReplicaBootstrapAddressLibs.contracts.UserReplicaSetManagerClient.getUserReplicaSet(userId)
|
|
444
|
+
console.log(`User ${userId} replica set after to update: ${JSON.stringify(user1ReplicaSetAfterUpdate)}`)
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
const _initializeLocalEnvironment = async (audiusLibs, ethAccounts) => {
|
|
448
|
+
await distributeTokens(audiusLibs, amountOfAuds)
|
|
449
|
+
await _initEthContractTypes(audiusLibs)
|
|
450
|
+
await _initAllVersions(audiusLibs)
|
|
451
|
+
await queryLocalServices(audiusLibs, serviceTypesList)
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
const makeDiscoveryProviderEndpoint = (serviceNumber) => `http://dn${serviceNumber}_web-server_1:${5000 + parseInt(serviceNumber) - 1}`
|
|
455
|
+
|
|
456
|
+
const _registerDiscProv = async (ethAccounts, serviceNumber) => {
|
|
457
|
+
const audiusLibs = await initAudiusLibs(true, null, ethAccounts[DISCOVERY_WALLET_OFFSET + serviceNumber])
|
|
458
|
+
const endpoint = makeDiscoveryProviderEndpoint(serviceNumber)
|
|
459
|
+
await registerLocalService(audiusLibs, discoveryNodeType, endpoint, amountOfAuds)
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
const makeCreatorNodeEndpoint = (serviceNumber) => `http://cn${serviceNumber}_creator-node_1:${4000 + parseInt(serviceNumber) - 1}`
|
|
463
|
+
|
|
464
|
+
// Templated cnode to allow for dynamic number of services
|
|
465
|
+
const _registerCnode = async (ethAccounts, serviceNumber) => {
|
|
466
|
+
const audiusLibs = await initAudiusLibs(true, null, ethAccounts[serviceNumber])
|
|
467
|
+
const endpoint = makeCreatorNodeEndpoint(serviceNumber)
|
|
468
|
+
await registerLocalService(audiusLibs, contentNodeType, endpoint, amountOfAuds)
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
const _deregisterCnode = async (ethAccounts, serviceNumber) => {
|
|
472
|
+
const audiusLibs = await initAudiusLibs(true, null, ethAccounts[serviceNumber])
|
|
473
|
+
const endpoint = makeCreatorNodeEndpoint(serviceNumber)
|
|
474
|
+
await deregisterLocalService(audiusLibs, contentNodeType, endpoint)
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
const _printEthContractAccounts = async (ethAccounts, numAccounts = 20) => {
|
|
478
|
+
const ganacheEthAccounts = await getEthContractAccounts()
|
|
479
|
+
const accts = []
|
|
480
|
+
for (let i = 0; i < numAccounts; i += 1) {
|
|
481
|
+
const addr = ethAccounts[i]
|
|
482
|
+
const privateKey = ganacheEthAccounts.private_keys[addr.toLowerCase()]
|
|
483
|
+
accts.push({
|
|
484
|
+
address: ethAccounts[i],
|
|
485
|
+
privateKey
|
|
486
|
+
})
|
|
487
|
+
}
|
|
488
|
+
console.log(JSON.stringify(accts))
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// NOTE - newly selected wallet is the ethAccount with index 10 + current service number
|
|
492
|
+
const _updateCNodeDelegateOwnerWallet = async (ethAccounts, serviceNumber) => {
|
|
493
|
+
const audiusLibs = await initAudiusLibs(true, null, ethAccounts[serviceNumber])
|
|
494
|
+
const endpoint = makeCreatorNodeEndpoint(serviceNumber)
|
|
495
|
+
await updateServiceDelegateOwnerWallet(audiusLibs, contentNodeType, endpoint, ethAccounts[serviceNumber + 10])
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
const _updateCreatorNodeConfig = async (ownerWallet, templatePath, writePath, endpoint = null, isShell = false, delegateWallet) => {
|
|
499
|
+
delegateWallet = (delegateWallet || ownerWallet).toLowerCase()
|
|
500
|
+
ownerWallet = ownerWallet.toLowerCase()
|
|
501
|
+
|
|
502
|
+
const ganacheEthAccounts = await getEthContractAccounts()
|
|
503
|
+
|
|
504
|
+
// PKey is now recovered
|
|
505
|
+
const ownerWalletPrivKey = ganacheEthAccounts.private_keys[`${ownerWallet}`]
|
|
506
|
+
const delegateWalletPrivKey = ganacheEthAccounts.private_keys[`${delegateWallet}`]
|
|
507
|
+
|
|
508
|
+
await _updateCreatorNodeConfigFile(templatePath, writePath, ownerWallet, ownerWalletPrivKey, delegateWallet, delegateWalletPrivKey, endpoint, isShell)
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
const _deregisterAllSPs = async (audiusLibs, ethAccounts) => {
|
|
512
|
+
const audiusLibs1 = audiusLibs
|
|
513
|
+
await deregisterLocalService(audiusLibs1, discoveryNodeType, discProvEndpoint1)
|
|
514
|
+
const audiusLibs2 = await initAudiusLibs(true, null, ethAccounts[3])
|
|
515
|
+
await deregisterLocalService(audiusLibs2, discoveryNodeType, discProvEndpoint2)
|
|
516
|
+
|
|
517
|
+
const audiusLibs3 = await initAudiusLibs(true, null, ethAccounts[1])
|
|
518
|
+
await deregisterLocalService(audiusLibs3, contentNodeType, creatorNodeEndpoint1)
|
|
519
|
+
const audiusLibs4 = await initAudiusLibs(true, null, ethAccounts[2])
|
|
520
|
+
await deregisterLocalService(audiusLibs4, contentNodeType, creatorNodeEndpoint2)
|
|
521
|
+
const audiusLibs5 = await initAudiusLibs(true, null, ethAccounts[4])
|
|
522
|
+
await deregisterLocalService(audiusLibs5, contentNodeType, creatorNodeEndpoint3)
|
|
523
|
+
const audiusLibs6 = await initAudiusLibs(true, null, ethAccounts[5])
|
|
524
|
+
await deregisterLocalService(audiusLibs6, contentNodeType, creatorNodeEndpoint4)
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
const _initAllVersions = async (audiusLibs) => {
|
|
528
|
+
for (const serviceType of serviceTypesList) {
|
|
529
|
+
await setServiceVersion(audiusLibs, serviceType, serviceVersions[serviceType])
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
const _initEthContractTypes = async (libs) => {
|
|
534
|
+
console.log(`Registering additional service type ${contentNodeType} - Min=${contentNodeTypeMin}, Max=${contentNodeTypeMax}`)
|
|
535
|
+
// Add content-node serviceType
|
|
536
|
+
await addServiceType(libs, contentNodeType, contentNodeTypeMin, contentNodeTypeMax)
|
|
537
|
+
console.log(`Registering additional service type ${contentNodeType} - Min=${contentNodeTypeMin}, Max=${contentNodeTypeMax}`)
|
|
538
|
+
// Add discovery-node serviceType
|
|
539
|
+
await addServiceType(libs, discoveryNodeType, discoveryNodeTypeMin, discoveryNodeTypeMax)
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
const writeEnvConfigFromTemplate = async ({ templatePath, writePath, replaceMap }) => {
|
|
543
|
+
let template = fs.readFileSync(templatePath, 'utf8')
|
|
544
|
+
const progressReport = []
|
|
545
|
+
Object.entries(replaceMap).forEach(([toReplace, replacement]) => {
|
|
546
|
+
template = template.replace(`${toReplace}`, replacement)
|
|
547
|
+
progressReport.push(`${toReplace}: ${replacement}`)
|
|
548
|
+
})
|
|
549
|
+
fs.appendFileSync(writePath, template)
|
|
550
|
+
console.log(`Updated ${writePath}:\n${progressReport.join('\n')}`)
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
const _configureDiscProv = async (ethAccounts, serviceNumber, templatePath, writePath) => {
|
|
554
|
+
const ganacheEthAccounts = await getEthContractAccounts()
|
|
555
|
+
const discProvAccountPubkey = ethAccounts[DISCOVERY_WALLET_OFFSET + serviceNumber].toLowerCase()
|
|
556
|
+
const delegateWalletPrivKey = ganacheEthAccounts.private_keys[`${discProvAccountPubkey}`]
|
|
557
|
+
const replaceMap = {
|
|
558
|
+
AUDIUS_DELEGATE_OWNER_WALLET: discProvAccountPubkey,
|
|
559
|
+
AUDIUS_DELEGATE_PRIVATE_KEY: delegateWalletPrivKey
|
|
560
|
+
}
|
|
561
|
+
writeEnvConfigFromTemplate({ templatePath, writePath, replaceMap })
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// Write an update to shell env file for creator nodes or docker env file
|
|
565
|
+
const _updateCreatorNodeConfigFile = async (templatePath, writePath, ownerWallet, ownerWalletPkey, delegateWallet, delegateWalletPrivKey, endpoint, isShell) => {
|
|
566
|
+
const replaceMap = {
|
|
567
|
+
DELEGATE_OWNER_WALLET: delegateWallet,
|
|
568
|
+
DELEGATE_PRIVATE_KEY: delegateWalletPrivKey,
|
|
569
|
+
CREATOR_NODE_ENDPOINT: endpoint,
|
|
570
|
+
SP_OWNER_WALLET: ownerWallet
|
|
571
|
+
}
|
|
572
|
+
writeEnvConfigFromTemplate({ templatePath, writePath, replaceMap })
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
const _updateUserReplicaSetManagerBootstrapConfig = async (ethAccounts) => {
|
|
576
|
+
const dataContractConfigPath = '../contracts/contract-config.js'
|
|
577
|
+
const fileStream = fs.createReadStream(dataContractConfigPath)
|
|
578
|
+
const rl = readline.createInterface({
|
|
579
|
+
input: fileStream,
|
|
580
|
+
crlfDelay: Infinity
|
|
581
|
+
})
|
|
582
|
+
const bootstrapSPIds = [1, 2, 3]
|
|
583
|
+
const bootstrapSPDelegateWallets = bootstrapSPIds.map((id) => {
|
|
584
|
+
return ethAccounts[id]
|
|
585
|
+
})
|
|
586
|
+
const bootstrapSPOwnerWallets = bootstrapSPDelegateWallets
|
|
587
|
+
const bootstrapSPIdsString = ` bootstrapSPIds: [${bootstrapSPIds}],`
|
|
588
|
+
const bootstrapSPDelegateWalletsString = ` bootstrapSPDelegateWallets: ['${bootstrapSPDelegateWallets[0]}', '${bootstrapSPDelegateWallets[1]}', '${bootstrapSPDelegateWallets[2]}'],`
|
|
589
|
+
const bootstrapSPOwnerWalletString = ` bootstrapSPOwnerWallets: ['${bootstrapSPOwnerWallets[0]}', '${bootstrapSPOwnerWallets[1]}', '${bootstrapSPDelegateWallets[2]}'],`
|
|
590
|
+
const bootstrapRegistryAddressString = ` registryAddress: '${dataContractsConfig.registryAddress}'`
|
|
591
|
+
console.log('Initializing UserReplicaSetManager configuration from known delegateWallets within system...')
|
|
592
|
+
console.log(`Bootstrapping with ${bootstrapSPIds}, ${bootstrapSPDelegateWallets}, ${bootstrapSPOwnerWalletString}`)
|
|
593
|
+
|
|
594
|
+
let traversingDevelopmentConfigBlock = false
|
|
595
|
+
const output = []
|
|
596
|
+
for await (const line of rl) {
|
|
597
|
+
if (line.includes('development')) {
|
|
598
|
+
traversingDevelopmentConfigBlock = true
|
|
599
|
+
output.push(line)
|
|
600
|
+
} else if (line.includes('test_local')) {
|
|
601
|
+
traversingDevelopmentConfigBlock = false
|
|
602
|
+
output.push(line)
|
|
603
|
+
} else if (traversingDevelopmentConfigBlock && line.includes('bootstrapSPIds')) {
|
|
604
|
+
output.push(bootstrapSPIdsString)
|
|
605
|
+
} else if (traversingDevelopmentConfigBlock && line.includes('bootstrapSPDelegateWallets')) {
|
|
606
|
+
output.push(bootstrapSPDelegateWalletsString)
|
|
607
|
+
} else if (traversingDevelopmentConfigBlock && line.includes('bootstrapSPOwnerWallets')) {
|
|
608
|
+
output.push(bootstrapSPOwnerWalletString)
|
|
609
|
+
} else if (traversingDevelopmentConfigBlock && line.includes('registryAddress')) {
|
|
610
|
+
output.push(bootstrapRegistryAddressString)
|
|
611
|
+
} else {
|
|
612
|
+
output.push(line)
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
fs.writeFileSync(dataContractConfigPath, output.join('\n'))
|
|
616
|
+
console.log(`Updated ${dataContractConfigPath} with \nbootstrapSPIds=${bootstrapSPIds}\nbootstrapSPDelegateWallets=${bootstrapSPDelegateWallets}\nbootstrapSPOwnerWallets:${bootstrapSPOwnerWallets}`)
|
|
617
|
+
}
|