@@ -4,7 +4,7 @@ import { Container, StatefulSet } from 'kubernetesjs';
44import { DefaultsManager } from '../../../defaults' ;
55import * as helpers from '../../../helpers' ;
66import { ScriptManager } from '../../../scripts' ;
7- import { IGenerator , Manifest } from '../../../types' ;
7+ import { IGenerator } from '../../../types' ;
88import { getGeneratorVersion } from '../../../version' ;
99
1010export class CosmosGenesisStatefulSetGenerator implements IGenerator {
@@ -13,7 +13,11 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
1313 private scriptManager : ScriptManager ;
1414 private defaultsManager : DefaultsManager ;
1515
16- constructor ( chain : Chain , config : StarshipConfig , scriptManager : ScriptManager ) {
16+ constructor (
17+ chain : Chain ,
18+ config : StarshipConfig ,
19+ scriptManager : ScriptManager
20+ ) {
1721 this . config = config ;
1822 this . chain = chain ;
1923 this . scriptManager = scriptManager ;
@@ -36,7 +40,7 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
3640
3741 generate ( ) : Array < StatefulSet > {
3842 const processedChain = this . defaultsManager . processChain ( this . chain ) ;
39-
43+
4044 return [
4145 {
4246 apiVersion : 'apps/v1' ,
@@ -74,7 +78,9 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
7478 } ,
7579 spec : {
7680 ...( ( processedChain as any ) . imagePullSecrets
77- ? helpers . generateImagePullSecrets ( ( processedChain as any ) . imagePullSecrets )
81+ ? helpers . generateImagePullSecrets (
82+ ( processedChain as any ) . imagePullSecrets
83+ )
7884 : { } ) ,
7985 initContainers : this . createInitContainers ( processedChain ) ,
8086 containers : this . createMainContainers ( processedChain ) ,
@@ -109,7 +115,9 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
109115 if ( chain . ics ?. enabled ) {
110116 // Add wait container for provider chain
111117 const providerChainId = chain . ics . provider || 'cosmoshub' ;
112- initContainers . push ( this . createIcsWaitInitContainer ( [ providerChainId ] , exposerPort ) ) ;
118+ initContainers . push (
119+ this . createIcsWaitInitContainer ( [ providerChainId ] , exposerPort )
120+ ) ;
113121 initContainers . push ( this . createIcsInitContainer ( chain , exposerPort ) ) ;
114122 }
115123
@@ -254,11 +262,13 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
254262 // Need to get provider chain info - for now using a placeholder
255263 // In real implementation, this would need access to provider chain config
256264 const providerChainId = chain . ics ?. provider || 'cosmoshub' ;
257- const providerHostname = helpers . getChainName ( providerChainId ) ;
258-
265+ const providerChain = this . config . chains . find (
266+ ( c ) => c . id === providerChainId
267+ ) ;
268+
259269 return {
260270 name : 'init-ics' ,
261- image : chain . image , // Should use provider chain image in real implementation
271+ image : providerChain ? .image ,
262272 imagePullPolicy : this . config . images ?. imagePullPolicy || 'IfNotPresent' ,
263273 env : [
264274 ...helpers . getDefaultEnvVars ( chain ) ,
@@ -273,7 +283,11 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
273283 } ,
274284 { name : 'KEYS_CONFIG' , value : '/configs/keys.json' }
275285 ] ,
276- command : [ 'bash' , '-c' , this . getIcsInitScript ( chain , providerHostname ) ] ,
286+ command : [
287+ 'bash' ,
288+ '-c' ,
289+ this . getIcsInitScript ( chain , providerChain , exposerPort )
290+ ] ,
277291 resources : helpers . getNodeResources ( chain , this . config ) ,
278292 volumeMounts : [
279293 { mountPath : '/proposal' , name : 'proposal' } ,
@@ -284,17 +298,16 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
284298 } ;
285299 }
286300
287- private createIcsWaitInitContainer ( chainIDs : string [ ] , port : number ) : Container {
288- return helpers . generateWaitInitContainer (
289- chainIDs ,
290- port ,
291- this . config
292- ) ;
301+ private createIcsWaitInitContainer (
302+ chainIDs : string [ ] ,
303+ port : number
304+ ) : Container {
305+ return helpers . generateWaitInitContainer ( chainIDs , port , this . config ) ;
293306 }
294307
295308 private createValidatorContainer ( chain : Chain ) : Container {
296309 const toBuild = chain . build ?. enabled || chain . upgrade ?. enabled ;
297-
310+
298311 return {
299312 name : 'validator' ,
300313 image : chain . image ,
@@ -307,10 +320,19 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
307320 value : String ( chain . faucet ?. enabled || false )
308321 } ,
309322 { name : 'SLOGFILE' , value : 'slog.slog' } ,
310- ...( toBuild ? [
311- { name : 'DAEMON_NAME' , value : chain . binary || helpers . getChainId ( chain ) } ,
312- { name : 'DAEMON_HOME' , value : chain . home || `/home/validator/.${ helpers . getChainId ( chain ) } ` }
313- ] : [ ] ) ,
323+ ...( toBuild
324+ ? [
325+ {
326+ name : 'DAEMON_NAME' ,
327+ value : chain . binary || helpers . getChainId ( chain )
328+ } ,
329+ {
330+ name : 'DAEMON_HOME' ,
331+ value :
332+ chain . home || `/home/validator/.${ helpers . getChainId ( chain ) } `
333+ }
334+ ]
335+ : [ ] ) ,
314336 ...( chain . env || [ ] ) . map ( ( env : any ) => ( {
315337 name : env . name ,
316338 value : String ( env . value )
@@ -397,7 +419,10 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
397419 const faucet = chain . faucet as FaucetConfig ;
398420 return {
399421 name : 'faucet' ,
400- image : faucet . image || this . config . faucet ?. image || 'ghcr.io/cosmology-tech/starship/faucet:latest' ,
422+ image :
423+ faucet . image ||
424+ this . config . faucet ?. image ||
425+ 'ghcr.io/cosmology-tech/starship/faucet:latest' ,
401426 imagePullPolicy : this . config . images ?. imagePullPolicy || 'IfNotPresent' ,
402427 env : [
403428 {
@@ -415,7 +440,10 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
415440 { name : 'FAUCET_REFILL_FACTOR' , value : '8' } ,
416441 { name : 'FAUCET_REFILL_THRESHOLD' , value : '20' } ,
417442 { name : 'FAUCET_COOLDOWN_TIME' , value : '0' } ,
418- { name : 'COINS' , value : chain . coins || `1000000000000000000${ chain . denom } ` } ,
443+ {
444+ name : 'COINS' ,
445+ value : chain . coins || `1000000000000000000${ chain . denom } `
446+ } ,
419447 { name : 'HD_PATH' , value : chain . hdPath || "m/44'/118'/0'/0/0" }
420448 ] ,
421449 command : [ 'bash' , '-c' , this . getCosmjsFaucetScript ( ) ] ,
@@ -452,9 +480,15 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
452480 name : 'FAUCET_HTTP_PORT' ,
453481 value : String ( faucet . ports ?. rest || 8000 )
454482 } ,
455- { name : 'FAUCET_CHAIN_BINARY' , value : chain . binary || helpers . getChainId ( chain ) } ,
483+ {
484+ name : 'FAUCET_CHAIN_BINARY' ,
485+ value : chain . binary || helpers . getChainId ( chain )
486+ } ,
456487 { name : 'FAUCET_CHAIN_ID' , value : helpers . getChainId ( chain ) } ,
457- { name : 'COINS' , value : chain . coins || `1000000000000000000${ chain . denom } ` }
488+ {
489+ name : 'COINS' ,
490+ value : chain . coins || `1000000000000000000${ chain . denom } `
491+ }
458492 ] ,
459493 command : [ 'bash' , '-c' , this . getStarshipFaucetScript ( ) ] ,
460494 resources : helpers . getResourceObject (
@@ -478,7 +512,7 @@ export class CosmosGenesisStatefulSetGenerator implements IGenerator {
478512
479513 private getGenesisInitScript ( chain : Chain ) : string {
480514 const toBuild = chain . build ?. enabled || chain . upgrade ?. enabled ;
481-
515+
482516 let script = `
483517VAL_INDEX=\${HOSTNAME##*-}
484518echo "Validator Index: $VAL_INDEX"
@@ -528,7 +562,7 @@ $CHAIN_BIN $CHAIN_GENESIS_CMD add-genesis-account ${balance.address} ${balance.a
528562
529563 private getConfigInitScript ( chain : Chain ) : string {
530564 const toBuild = chain . build ?. enabled || chain . upgrade ?. enabled ;
531-
565+
532566 let script = `
533567VAL_INDEX=\${HOSTNAME##*-}
534568echo "Validator Index: $VAL_INDEX"
@@ -570,9 +604,7 @@ bash -e /scripts/update-config.sh
570604
571605 private getValidatorStartScript ( chain : Chain ) : string {
572606 const toBuild = chain . build ?. enabled || chain . upgrade ?. enabled ;
573- const chainBin = chain . binary || helpers . getChainId ( chain ) ;
574- const chainHome = chain . home || `/home/validator/.${ helpers . getChainId ( chain ) } ` ;
575-
607+
576608 return `#!/bin/bash
577609set -euo pipefail
578610
@@ -656,28 +688,33 @@ done
656688` . trim ( ) ;
657689 }
658690
659- private getIcsInitScript ( chain : Chain , providerHostname : string ) : string {
691+ private getIcsInitScript (
692+ chain : Chain ,
693+ providerChain : Chain ,
694+ exposerPort : number
695+ ) : string {
696+ const providerHostname = helpers . getChainName ( providerChain . id ) ;
660697 return `
661698export
662699
663700echo "Fetching priv keys from provider exposer"
664- curl -s http://${ providerHostname } -genesis.$NAMESPACE.svc.cluster.local:8081 /priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json
701+ curl -s http://${ providerHostname } -genesis.$NAMESPACE.svc.cluster.local:${ exposerPort } /priv_keys | jq > $CHAIN_DIR/config/provider_priv_validator_key.json
665702cat $CHAIN_DIR/config/provider_priv_validator_key.json
666703
667704echo "Replace provider priv validator key with provider keys"
668705mv $CHAIN_DIR/config/priv_validator_key.json $CHAIN_DIR/config/previous_priv_validator_key.json
669706mv $CHAIN_DIR/config/provider_priv_validator_key.json $CHAIN_DIR/config/priv_validator_key.json
670707
671708echo "Create consumer addition proposal"
672- DENOM=${ chain . ics ?. provider ? '$DENOM' : 'uatom' } \\
673- CHAIN_ID=${ chain . ics ?. provider || 'cosmoshub' } \\
674- CHAIN_BIN=${ chain . binary || '$CHAIN_BIN' } \\
709+ DENOM=${ providerChain ?. denom } \\
710+ CHAIN_ID=${ providerChain ?. id } \\
711+ CHAIN_BIN=${ providerChain ? .binary || '$CHAIN_BIN' } \\
675712 NODE_URL=http://${ providerHostname } -genesis.$NAMESPACE.svc.cluster.local:26657 \\
676713 PROPOSAL_FILE=/proposal/proposal.json \\
677714 bash -e /scripts/create-ics.sh
678715
679716echo "create ccv state file"
680- ${ chain . binary || '$CHAIN_BIN' } query provider consumer-genesis ${ helpers . getChainId ( chain ) } \\
717+ ${ providerChain ? .binary || '$CHAIN_BIN' } query provider consumer-genesis ${ chain . id } \\
681718 --node http://${ providerHostname } -genesis.$NAMESPACE.svc.cluster.local:26657 \\
682719 -o json > $CHAIN_DIR/config/ccv-state.json
683720cat $CHAIN_DIR/config/ccv-state.json | jq
0 commit comments