3
3
package utils
4
4
5
5
import (
6
+ "encoding/base64"
6
7
"encoding/json"
8
+ "fmt"
7
9
"time"
8
10
11
+ "github.com/ava-labs/avalanche-network-runner/network"
12
+ "github.com/ava-labs/avalanchego/utils/crypto/bls"
13
+ "github.com/ava-labs/avalanchego/utils/formatting"
14
+ "github.com/ava-labs/avalanchego/vms/platformvm/signer"
9
15
coreth_params "github.com/ava-labs/coreth/params"
10
16
)
11
17
@@ -16,6 +22,8 @@ const (
16
22
defaultLocalCChainFundedAddress = "8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC"
17
23
defaultLocalCChainFundedBalance = "0x295BE96E64066972000000"
18
24
allocationCommonEthAddress = "0xb3d82b1367d362de99ab59a658165aff520cbd4d"
25
+ stakingAddr = "X-custom1g65uqn6t77p656w64023nh8nd9updzmxwd59gh"
26
+ walletAddr = "X-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p"
19
27
)
20
28
21
29
func generateCustomCchainGenesis () ([]byte , error ) {
@@ -39,11 +47,8 @@ func generateCustomCchainGenesis() ([]byte, error) {
39
47
return json .Marshal (cChainGenesisMap )
40
48
}
41
49
42
- func generateCustomGenesis (
43
- networkID uint32 ,
44
- walletAddr string ,
45
- stakingAddr string ,
46
- nodeIDs []string ,
50
+ func GenerateCustomGenesis (
51
+ netConfig network.Config ,
47
52
) ([]byte , error ) {
48
53
genesisMap := map [string ]interface {}{}
49
54
@@ -55,18 +60,45 @@ func generateCustomGenesis(
55
60
genesisMap ["cChainGenesis" ] = string (cChainGenesisBytes )
56
61
57
62
// pchain genesis
58
- genesisMap ["networkID" ] = networkID
63
+ genesisMap ["networkID" ] = netConfig . NetworkID
59
64
startTime := time .Now ().Unix ()
60
65
genesisMap ["startTime" ] = startTime
61
66
initialStakers := []map [string ]interface {}{}
62
- for _ , nodeID := range nodeIDs {
67
+
68
+ for _ , nodeConfig := range netConfig .NodeConfigs {
69
+ nodeID , err := ToNodeID ([]byte (nodeConfig .StakingKey ), []byte (nodeConfig .StakingCert ))
70
+ if err != nil {
71
+ return nil , fmt .Errorf ("couldn't get node ID: %w" , err )
72
+ }
73
+ blsKeyBytes , err := base64 .StdEncoding .DecodeString (nodeConfig .StakingSigningKey )
74
+ if err != nil {
75
+ return nil , err
76
+ }
77
+ blsSk , err := bls .SecretKeyFromBytes (blsKeyBytes )
78
+ if err != nil {
79
+ return nil , err
80
+ }
81
+ p := signer .NewProofOfPossession (blsSk )
82
+ pk , err := formatting .Encode (formatting .HexNC , p .PublicKey [:])
83
+ if err != nil {
84
+ return nil , err
85
+ }
86
+ pop , err := formatting .Encode (formatting .HexNC , p .ProofOfPossession [:])
87
+ if err != nil {
88
+ return nil , err
89
+ }
63
90
initialStaker := map [string ]interface {}{
64
91
"nodeID" : nodeID ,
65
92
"rewardAddress" : walletAddr ,
66
93
"delegationFee" : 1000000 ,
94
+ "signer" : map [string ]interface {}{
95
+ "publicKey" : pk ,
96
+ "proofOfPossession" : pop ,
97
+ },
67
98
}
68
99
initialStakers = append (initialStakers , initialStaker )
69
100
}
101
+
70
102
genesisMap ["initialStakeDuration" ] = 31536000
71
103
genesisMap ["initialStakeDurationOffset" ] = 5400
72
104
genesisMap ["initialStakers" ] = initialStakers
0 commit comments