k8s: generate extra accounts for test

This commit is contained in:
Alan Chen 2017-09-28 16:32:24 +08:00
parent ebf9c4aeba
commit ba30840a71
3 changed files with 31 additions and 5 deletions

View File

@ -17,21 +17,36 @@
package k8s
import (
"crypto/ecdsa"
"errors"
"fmt"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/getamis/istanbul-tools/charts"
istcommon "github.com/getamis/istanbul-tools/common"
"github.com/getamis/istanbul-tools/container"
)
func NewBlockchain(numOfValidators int, gaslimit uint64, options ...Option) (bc *blockchain) {
func NewBlockchain(numOfValidators int, numOfExtraAccounts int, gaslimit uint64, options ...Option) (bc *blockchain) {
_, nodekeys, addrs := istcommon.GenerateKeys(numOfValidators)
ips := istcommon.GenerateIPs(len(nodekeys))
extraKeys := make([][]*ecdsa.PrivateKey, numOfValidators)
extraAddrs := make([][]common.Address, numOfValidators)
allAddrs := addrs
if numOfExtraAccounts > 0 {
for i := 0; i < numOfValidators; i++ {
extraKeys[i], _, extraAddrs[i] = istcommon.GenerateKeys(numOfExtraAccounts)
allAddrs = append(allAddrs, extraAddrs[i]...)
}
}
bc = &blockchain{
genesis: charts.NewGenesisChart(addrs, uint64(gaslimit)),
genesis: charts.NewGenesisChart(allAddrs, uint64(gaslimit)),
staticNodes: charts.NewStaticNodesChart(nodekeys, ips),
}
@ -44,7 +59,7 @@ func NewBlockchain(numOfValidators int, gaslimit uint64, options ...Option) (bc
bc.genesis.Uninstall()
return nil
}
bc.setupValidators(numOfValidators, nodekeys, ips, options...)
bc.setupValidators(numOfValidators, extraKeys, nodekeys, ips, options...)
return bc
}
@ -104,7 +119,7 @@ func (bc *blockchain) Validators() []container.Ethereum {
// ----------------------------------------------------------------------------
func (bc *blockchain) setupValidators(num int, nodekeys []string, ips []string, options ...Option) {
func (bc *blockchain) setupValidators(num int, extraKeys [][]*ecdsa.PrivateKey, nodekeys []string, ips []string, options ...Option) {
for i := 0; i < num; i++ {
var opts []Option
opts = append(opts, options...)
@ -112,6 +127,7 @@ func (bc *blockchain) setupValidators(num int, nodekeys []string, ips []string,
opts = append(opts, Name(fmt.Sprintf("%d", i)))
opts = append(opts, NodeKeyHex(nodekeys[i]))
opts = append(opts, IPAddress(ips[i]))
opts = append(opts, ExtraAccounts(extraKeys[i]))
geth := NewEthereum(
opts...,

View File

@ -23,6 +23,7 @@ import (
func ExampleK8SBlockchain() {
chain := NewBlockchain(
4,
0,
21000*1000,
ImageRepository("quay.io/amis/geth"),
ImageTag("istanbul_develop"),

View File

@ -16,7 +16,10 @@
package k8s
import "fmt"
import (
"crypto/ecdsa"
"fmt"
)
type Option func(*ethereum)
@ -86,3 +89,9 @@ func Verbosity(verbosity int) Option {
eth.args = append(eth.args, fmt.Sprintf("ethereum.verbosity=%d", verbosity))
}
}
func ExtraAccounts(keys []*ecdsa.PrivateKey) Option {
return func(eth *ethereum) {
eth.accounts = keys
}
}