Skip to content

Commit b4cd0aa

Browse files
committed
add genesis generator
1 parent 6e4c943 commit b4cd0aa

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

utils/genesis.go

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// Copyright (C) 2022, Ava Labs, Inc. All rights reserved.
2+
// See the file LICENSE for licensing terms.
3+
package utils
4+
5+
import (
6+
"encoding/json"
7+
"time"
8+
9+
coreth_params "github.com/ava-labs/coreth/params"
10+
)
11+
12+
// difference between unlock schedule locktime and startime in original genesis
13+
const (
14+
genesisLocktimeStartimeDelta = 2836800
15+
hexa0Str = "0x0"
16+
defaultLocalCChainFundedAddress = "8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC"
17+
defaultLocalCChainFundedBalance = "0x295BE96E64066972000000"
18+
allocationCommonEthAddress = "0xb3d82b1367d362de99ab59a658165aff520cbd4d"
19+
)
20+
21+
func generateCustomCchainGenesis() ([]byte, error) {
22+
cChainGenesisMap := map[string]interface{}{}
23+
cChainGenesisMap["config"] = coreth_params.AvalancheLocalChainConfig
24+
cChainGenesisMap["nonce"] = hexa0Str
25+
cChainGenesisMap["timestamp"] = hexa0Str
26+
cChainGenesisMap["extraData"] = "0x00"
27+
cChainGenesisMap["gasLimit"] = "0x5f5e100"
28+
cChainGenesisMap["difficulty"] = hexa0Str
29+
cChainGenesisMap["mixHash"] = "0x0000000000000000000000000000000000000000000000000000000000000000"
30+
cChainGenesisMap["coinbase"] = "0x0000000000000000000000000000000000000000"
31+
cChainGenesisMap["alloc"] = map[string]interface{}{
32+
defaultLocalCChainFundedAddress: map[string]interface{}{
33+
"balance": defaultLocalCChainFundedBalance,
34+
},
35+
}
36+
cChainGenesisMap["number"] = hexa0Str
37+
cChainGenesisMap["gasUsed"] = hexa0Str
38+
cChainGenesisMap["parentHash"] = "0x0000000000000000000000000000000000000000000000000000000000000000"
39+
return json.Marshal(cChainGenesisMap)
40+
}
41+
42+
func generateCustomGenesis(networkID uint32, walletAddr string, stakingAddr string, nodeIDs []string) ([]byte, error) {
43+
genesisMap := map[string]interface{}{}
44+
45+
// cchain
46+
cChainGenesisBytes, err := generateCustomCchainGenesis()
47+
if err != nil {
48+
return nil, err
49+
}
50+
genesisMap["cChainGenesis"] = string(cChainGenesisBytes)
51+
52+
// pchain genesis
53+
genesisMap["networkID"] = networkID
54+
startTime := time.Now().Unix()
55+
genesisMap["startTime"] = startTime
56+
initialStakers := []map[string]interface{}{}
57+
for _, nodeID := range nodeIDs {
58+
initialStaker := map[string]interface{}{
59+
"nodeID": nodeID,
60+
"rewardAddress": walletAddr,
61+
"delegationFee": 1000000,
62+
}
63+
initialStakers = append(initialStakers, initialStaker)
64+
}
65+
genesisMap["initialStakeDuration"] = 31536000
66+
genesisMap["initialStakeDurationOffset"] = 5400
67+
genesisMap["initialStakers"] = initialStakers
68+
lockTime := startTime + genesisLocktimeStartimeDelta
69+
allocations := []interface{}{}
70+
alloc := map[string]interface{}{
71+
"avaxAddr": walletAddr,
72+
"ethAddr": allocationCommonEthAddress,
73+
"initialAmount": 300000000000000000,
74+
"unlockSchedule": []interface{}{
75+
map[string]interface{}{"amount": 20000000000000000},
76+
map[string]interface{}{"amount": 10000000000000000, "locktime": lockTime},
77+
},
78+
}
79+
allocations = append(allocations, alloc)
80+
alloc = map[string]interface{}{
81+
"avaxAddr": stakingAddr,
82+
"ethAddr": allocationCommonEthAddress,
83+
"initialAmount": 0,
84+
"unlockSchedule": []interface{}{
85+
map[string]interface{}{"amount": 10000000000000000, "locktime": lockTime},
86+
},
87+
}
88+
allocations = append(allocations, alloc)
89+
genesisMap["allocations"] = allocations
90+
genesisMap["initialStakedFunds"] = []interface{}{
91+
stakingAddr,
92+
}
93+
genesisMap["message"] = "{{ fun_quote }}"
94+
95+
return json.MarshalIndent(genesisMap, "", " ")
96+
}

0 commit comments

Comments
 (0)