123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 'use strict'
- const debug = require('debug')('joystream:runtime:roles')
- const BN = require('bn.js')
- const { Worker } = require('@joystream/types/lib/working-group')
- class WorkersApi {
- static async create (base) {
- const ret = new WorkersApi()
- ret.base = base
- await ret.init()
- return ret
- }
- async init () {
- debug('Init')
- }
-
- async isRoleAccountOfStorageProvider (storageProviderId, roleAccountId) {
- storageProviderId = new BN(storageProviderId)
- roleAccountId = this.base.identities.keyring.decodeAddress(roleAccountId)
- const account = await this.storageProviderRoleAccount(storageProviderId)
- return account && account.eq(roleAccountId)
- }
- async isStorageProvider (storageProviderId) {
- const worker = await this.storageWorkerByProviderId(storageProviderId)
- return worker !== null
- }
-
- async storageProviderRoleAccount (storageProviderId) {
- const worker = await this.storageWorkerByProviderId(storageProviderId)
- return worker ? worker.role_account : null
- }
-
- async storageWorkerByProviderId (storageProviderId) {
- storageProviderId = new BN(storageProviderId)
- const { providers } = await this.getAllProviders()
- return providers[storageProviderId.toNumber()] || null
- }
- async getAllProviders () {
-
-
-
-
-
-
- const nextWorkerId = (await this.base.api.query.storageWorkingGroup.nextWorkerId()).toNumber()
- let ids = []
- let providers = {}
- for (let id = 0; id < nextWorkerId; id++) {
-
- let value = await this.base.api.rpc.state.getStorage(
- this.base.api.query.storageWorkingGroup.workerById.key(id)
- )
- if (!value.isNone) {
-
-
- value = value.unwrap()
-
-
-
- ids.push(id)
- providers[id] = new Worker(value)
- }
- }
- return { ids, providers }
- }
- }
- module.exports = {
- WorkersApi
- }
|