2020-07-29 13:42:51 +00:00
import axios from "axios" ;
import {
validatorsList ,
getChainValidatorsPath ,
getChainValidatorsListPath
} from "../common/repo-structure" ;
import { Tezos } from "../common/blockchains" ;
import { readFileSync } from "../common/filesystem" ;
import { writeJsonFile } from "../common/json" ;
import {
BakingBadBaker ,
ValidatorModel
} from "../../src/test/models" ;
function getChainValidatorsList ( chain : string ) : ValidatorModel [ ] {
return JSON . parse ( readFileSync ( ` ${ ( getChainValidatorsPath ( chain ) ) } / ${ validatorsList } ` ) ) ;
}
async function gen_validators_tezos() {
2020-04-23 18:24:03 +00:00
const bakers : BakingBadBaker [ ] = await axios . get ( ` https://api.baking-bad.org/v2/bakers ` ) . then ( res = > res . data )
const bakersMap : { [ key : string ] : BakingBadBaker } = bakers . reduce ( ( acm , val ) = > {
acm [ val . address ] = val
return acm
} , { } )
const newbakers = getChainValidatorsList ( Tezos ) . reduce ( ( acm , val ) = > {
if ( ! ( val . id in bakersMap ) ) {
console . log ( val . id )
return acm
}
const bakerInfo = bakersMap [ val . id ]
val . payout . commission = Number ( ( bakerInfo . fee * 100 ) . toFixed ( 2 ) )
val . payout . payoutDelay = bakerInfo . payoutDelay
val . payout . payoutPeriod = bakerInfo . payoutPeriod
2020-05-07 00:13:12 +00:00
val . staking . minDelegation = bakerInfo . minDelegation
2020-04-23 18:24:03 +00:00
2020-04-28 02:11:38 +00:00
const freeSpace = Number ( ( bakerInfo . freeSpace ) . toFixed ( 0 ) )
2020-05-07 00:13:12 +00:00
// Disable baker if no more capacity
2020-04-28 02:11:38 +00:00
if ( freeSpace <= 0 ) {
val . status = {
"disabled" : true ,
2020-05-07 00:13:12 +00:00
"note" : ` No more capacity: ${ freeSpace } `
2020-04-28 02:11:38 +00:00
}
}
2020-04-29 20:10:13 +00:00
// Enable baker if has capacity
if ( freeSpace > 0 && val . hasOwnProperty ( "status" ) ) {
delete val . status
2020-04-23 18:24:03 +00:00
}
2020-04-29 20:10:13 +00:00
2020-05-07 00:13:12 +00:00
if ( bakerInfo . serviceHealth !== "active" ) {
2020-04-29 20:10:13 +00:00
val . status = {
"disabled" : true ,
2020-05-07 00:13:12 +00:00
"note" : ` According to Baking Bad API, baker is not active, current status ${ bakerInfo . serviceHealth } , see: https://api.baking-bad.org/v2/bakers/ ${ bakerInfo . address } ` ,
2020-04-29 20:10:13 +00:00
}
}
2020-04-23 18:24:03 +00:00
acm . push ( val )
return acm
} , [ ] )
2020-07-29 13:42:51 +00:00
writeJsonFile ( getChainValidatorsListPath ( Tezos ) , newbakers )
}
export async function update() {
await gen_validators_tezos ( ) ;
}