parent
b443ed0463
commit
385075d6a1
@ -1,35 +0,0 @@ |
|||||||
package node |
|
||||||
|
|
||||||
import ( |
|
||||||
"crypto/ecdsa" |
|
||||||
"math/big" |
|
||||||
"math/rand" |
|
||||||
"strings" |
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto" |
|
||||||
"github.com/ethereum/go-ethereum/params" |
|
||||||
"github.com/harmony-one/harmony/core" |
|
||||||
) |
|
||||||
|
|
||||||
// CreateGenesisAllocWithTestingAddresses create the genesis block allocation that contains deterministically
|
|
||||||
// generated testing addressess with tokens.
|
|
||||||
// TODO: Remove it later when moving to production.
|
|
||||||
func (node *Node) CreateGenesisAllocWithTestingAddresses(numAddress int) core.GenesisAlloc { |
|
||||||
rand.Seed(0) |
|
||||||
len := 1000000 |
|
||||||
bytes := make([]byte, len) |
|
||||||
for i := 0; i < len; i++ { |
|
||||||
bytes[i] = byte(rand.Intn(100)) |
|
||||||
} |
|
||||||
reader := strings.NewReader(string(bytes)) |
|
||||||
genesisAloc := make(core.GenesisAlloc) |
|
||||||
for i := 0; i < numAddress; i++ { |
|
||||||
testBankKey, _ := ecdsa.GenerateKey(crypto.S256(), reader) |
|
||||||
testBankAddress := crypto.PubkeyToAddress(testBankKey.PublicKey) |
|
||||||
testBankFunds := big.NewInt(1000) |
|
||||||
testBankFunds = testBankFunds.Mul(testBankFunds, big.NewInt(params.Ether)) |
|
||||||
genesisAloc[testBankAddress] = core.GenesisAccount{Balance: testBankFunds} |
|
||||||
node.TestBankKeys = append(node.TestBankKeys, testBankKey) |
|
||||||
} |
|
||||||
return genesisAloc |
|
||||||
} |
|
@ -0,0 +1,73 @@ |
|||||||
|
package node |
||||||
|
|
||||||
|
import ( |
||||||
|
"crypto/ecdsa" |
||||||
|
"math/big" |
||||||
|
"math/rand" |
||||||
|
"strings" |
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/crypto" |
||||||
|
"github.com/ethereum/go-ethereum/ethdb" |
||||||
|
"github.com/ethereum/go-ethereum/params" |
||||||
|
"github.com/harmony-one/harmony/core" |
||||||
|
"github.com/harmony-one/harmony/core/vm" |
||||||
|
) |
||||||
|
|
||||||
|
const ( |
||||||
|
// Number of fake address.
|
||||||
|
FakeAddressNumber = 100 |
||||||
|
// TotalInitFund is the initial total fund to the faucet.
|
||||||
|
TotalInitFund = 9000000 |
||||||
|
) |
||||||
|
|
||||||
|
func (node *Node) GenesisSetup(db ethdb.Database) (*core.BlockChain, error) { |
||||||
|
// Initialize genesis block and blockchain
|
||||||
|
genesisAlloc := node.CreateGenesisAllocWithTestingAddresses(100) |
||||||
|
contractKey, _ := ecdsa.GenerateKey(crypto.S256(), strings.NewReader("Test contract key string stream that is fixed so that generated test key are deterministic every time")) |
||||||
|
contractAddress := crypto.PubkeyToAddress(contractKey.PublicKey) |
||||||
|
contractFunds := big.NewInt(TotalInitFund) |
||||||
|
contractFunds = contractFunds.Mul(contractFunds, big.NewInt(params.Ether)) |
||||||
|
genesisAlloc[contractAddress] = core.GenesisAccount{Balance: contractFunds} |
||||||
|
node.ContractKeys = append(node.ContractKeys, contractKey) |
||||||
|
|
||||||
|
node.AddFaucetContractToPendingTransactions() |
||||||
|
if node.Role == BeaconLeader { |
||||||
|
node.AddStakingContractToPendingTransactions() //This will save the latest information about staked nodes in current staked
|
||||||
|
node.DepositToFakeAccounts() |
||||||
|
} |
||||||
|
|
||||||
|
chainConfig := params.TestChainConfig |
||||||
|
chainConfig.ChainID = big.NewInt(int64(node.Consensus.ShardID)) // Use ChainID as piggybacked ShardID
|
||||||
|
gspec := core.Genesis{ |
||||||
|
Config: chainConfig, |
||||||
|
Alloc: genesisAlloc, |
||||||
|
ShardID: uint32(node.Consensus.ShardID), |
||||||
|
} |
||||||
|
|
||||||
|
// Store genesis block into db.
|
||||||
|
gspec.MustCommit(db) |
||||||
|
return core.NewBlockChain(db, nil, gspec.Config, node.Consensus, vm.Config{}, nil) |
||||||
|
} |
||||||
|
|
||||||
|
// CreateGenesisAllocWithTestingAddresses create the genesis block allocation that contains deterministically
|
||||||
|
// generated testing addressess with tokens.
|
||||||
|
// TODO: Remove it later when moving to production.
|
||||||
|
func (node *Node) CreateGenesisAllocWithTestingAddresses(numAddress int) core.GenesisAlloc { |
||||||
|
rand.Seed(0) |
||||||
|
len := 1000000 |
||||||
|
bytes := make([]byte, len) |
||||||
|
for i := 0; i < len; i++ { |
||||||
|
bytes[i] = byte(rand.Intn(100)) |
||||||
|
} |
||||||
|
reader := strings.NewReader(string(bytes)) |
||||||
|
genesisAloc := make(core.GenesisAlloc) |
||||||
|
for i := 0; i < numAddress; i++ { |
||||||
|
testBankKey, _ := ecdsa.GenerateKey(crypto.S256(), reader) |
||||||
|
testBankAddress := crypto.PubkeyToAddress(testBankKey.PublicKey) |
||||||
|
testBankFunds := big.NewInt(1000) |
||||||
|
testBankFunds = testBankFunds.Mul(testBankFunds, big.NewInt(params.Ether)) |
||||||
|
genesisAloc[testBankAddress] = core.GenesisAccount{Balance: testBankFunds} |
||||||
|
node.TestBankKeys = append(node.TestBankKeys, testBankKey) |
||||||
|
} |
||||||
|
return genesisAloc |
||||||
|
} |
Loading…
Reference in new issue