Merge pull request #1581 from obscuren/olympic
cmd, core, eth: support for the olympic network
This commit is contained in:
commit
17b481e3c3
@ -280,6 +280,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
|
|||||||
utils.BootnodesFlag,
|
utils.BootnodesFlag,
|
||||||
utils.DataDirFlag,
|
utils.DataDirFlag,
|
||||||
utils.BlockchainVersionFlag,
|
utils.BlockchainVersionFlag,
|
||||||
|
utils.OlympicFlag,
|
||||||
utils.CacheFlag,
|
utils.CacheFlag,
|
||||||
utils.JSpathFlag,
|
utils.JSpathFlag,
|
||||||
utils.ListenPortFlag,
|
utils.ListenPortFlag,
|
||||||
@ -346,6 +347,9 @@ func main() {
|
|||||||
|
|
||||||
func run(ctx *cli.Context) {
|
func run(ctx *cli.Context) {
|
||||||
utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name))
|
utils.CheckLegalese(ctx.GlobalString(utils.DataDirFlag.Name))
|
||||||
|
if ctx.GlobalBool(utils.OlympicFlag.Name) {
|
||||||
|
utils.InitOlympic()
|
||||||
|
}
|
||||||
|
|
||||||
cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx)
|
cfg := utils.MakeEthConfig(ClientIdentifier, nodeNameVersion, ctx)
|
||||||
ethereum, err := eth.New(cfg)
|
ethereum, err := eth.New(cfg)
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"math/big"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"regexp"
|
"regexp"
|
||||||
@ -32,6 +33,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/eth"
|
"github.com/ethereum/go-ethereum/eth"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
|
"github.com/ethereum/go-ethereum/params"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
"github.com/peterh/liner"
|
"github.com/peterh/liner"
|
||||||
)
|
)
|
||||||
@ -143,6 +145,15 @@ func StartEthereum(ethereum *eth.Ethereum) {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func InitOlympic() {
|
||||||
|
params.DurationLimit = big.NewInt(8)
|
||||||
|
params.GenesisGasLimit = big.NewInt(3141592)
|
||||||
|
params.MinGasLimit = big.NewInt(125000)
|
||||||
|
params.MaximumExtraDataSize = big.NewInt(1024)
|
||||||
|
NetworkIdFlag.Value = 0
|
||||||
|
core.BlockReward = big.NewInt(1.5e+18)
|
||||||
|
}
|
||||||
|
|
||||||
func FormatTransactionData(data string) []byte {
|
func FormatTransactionData(data string) []byte {
|
||||||
d := common.StringToByteFunc(data, func(s string) (ret []byte) {
|
d := common.StringToByteFunc(data, func(s string) (ret []byte) {
|
||||||
slice := regexp.MustCompile("\\n|\\s").Split(s, 1000000000)
|
slice := regexp.MustCompile("\\n|\\s").Split(s, 1000000000)
|
||||||
@ -203,6 +214,11 @@ func ImportChain(chain *core.ChainManager, fn string) error {
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return fmt.Errorf("at block %d: %v", n, err)
|
return fmt.Errorf("at block %d: %v", n, err)
|
||||||
}
|
}
|
||||||
|
// don't import first block
|
||||||
|
if b.NumberU64() == 0 {
|
||||||
|
i--
|
||||||
|
continue
|
||||||
|
}
|
||||||
blocks[i] = &b
|
blocks[i] = &b
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
@ -218,6 +234,7 @@ func ImportChain(chain *core.ChainManager, fn string) error {
|
|||||||
batch, blocks[0].Hash().Bytes()[:4], blocks[i-1].Hash().Bytes()[:4])
|
batch, blocks[0].Hash().Bytes()[:4], blocks[i-1].Hash().Bytes()[:4])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := chain.InsertChain(blocks[:i]); err != nil {
|
if _, err := chain.InsertChain(blocks[:i]); err != nil {
|
||||||
return fmt.Errorf("invalid block %d: %v", n, err)
|
return fmt.Errorf("invalid block %d: %v", n, err)
|
||||||
}
|
}
|
||||||
|
@ -131,6 +131,10 @@ var (
|
|||||||
Usage: "Megabytes of memory allocated to internal caching",
|
Usage: "Megabytes of memory allocated to internal caching",
|
||||||
Value: 0,
|
Value: 0,
|
||||||
}
|
}
|
||||||
|
OlympicFlag = cli.BoolFlag{
|
||||||
|
Name: "olympic",
|
||||||
|
Usage: "Use olympic style protocol",
|
||||||
|
}
|
||||||
|
|
||||||
// miner settings
|
// miner settings
|
||||||
MinerThreadsFlag = cli.IntFlag{
|
MinerThreadsFlag = cli.IntFlag{
|
||||||
@ -402,6 +406,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
|
|||||||
MaxPeers: ctx.GlobalInt(MaxPeersFlag.Name),
|
MaxPeers: ctx.GlobalInt(MaxPeersFlag.Name),
|
||||||
MaxPendingPeers: ctx.GlobalInt(MaxPendingPeersFlag.Name),
|
MaxPendingPeers: ctx.GlobalInt(MaxPendingPeersFlag.Name),
|
||||||
Port: ctx.GlobalString(ListenPortFlag.Name),
|
Port: ctx.GlobalString(ListenPortFlag.Name),
|
||||||
|
Olympic: ctx.GlobalBool(OlympicFlag.Name),
|
||||||
NAT: MakeNAT(ctx),
|
NAT: MakeNAT(ctx),
|
||||||
NatSpec: ctx.GlobalBool(NatspecEnabledFlag.Name),
|
NatSpec: ctx.GlobalBool(NatspecEnabledFlag.Name),
|
||||||
Discovery: !ctx.GlobalBool(NoDiscoverFlag.Name),
|
Discovery: !ctx.GlobalBool(NoDiscoverFlag.Name),
|
||||||
@ -444,6 +449,13 @@ func MakeChain(ctx *cli.Context) (chain *core.ChainManager, blockDB, stateDB, ex
|
|||||||
if extraDB, err = ethdb.NewLDBDatabase(filepath.Join(datadir, "extra"), cache); err != nil {
|
if extraDB, err = ethdb.NewLDBDatabase(filepath.Join(datadir, "extra"), cache); err != nil {
|
||||||
Fatalf("Could not open database: %v", err)
|
Fatalf("Could not open database: %v", err)
|
||||||
}
|
}
|
||||||
|
if ctx.GlobalBool(OlympicFlag.Name) {
|
||||||
|
InitOlympic()
|
||||||
|
_, err := core.WriteTestNetGenesisBlock(stateDB, blockDB, 42)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalln(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
eventMux := new(event.TypeMux)
|
eventMux := new(event.TypeMux)
|
||||||
pow := ethash.New()
|
pow := ethash.New()
|
||||||
|
@ -78,6 +78,7 @@ type Config struct {
|
|||||||
GenesisNonce int
|
GenesisNonce int
|
||||||
GenesisFile string
|
GenesisFile string
|
||||||
GenesisBlock *types.Block // used by block tests
|
GenesisBlock *types.Block // used by block tests
|
||||||
|
Olympic bool
|
||||||
|
|
||||||
BlockChainVersion int
|
BlockChainVersion int
|
||||||
SkipBcVersionCheck bool // e.g. blockchain export
|
SkipBcVersionCheck bool // e.g. blockchain export
|
||||||
@ -302,6 +303,14 @@ func New(config *Config) (*Ethereum, error) {
|
|||||||
glog.V(logger.Info).Infof("Successfully wrote genesis block. New genesis hash = %x\n", block.Hash())
|
glog.V(logger.Info).Infof("Successfully wrote genesis block. New genesis hash = %x\n", block.Hash())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.Olympic {
|
||||||
|
_, err := core.WriteTestNetGenesisBlock(stateDb, blockDb, 42)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
glog.V(logger.Error).Infoln("Starting Olympic network")
|
||||||
|
}
|
||||||
|
|
||||||
// This is for testing only.
|
// This is for testing only.
|
||||||
if config.GenesisBlock != nil {
|
if config.GenesisBlock != nil {
|
||||||
core.WriteBlock(blockDb, config.GenesisBlock)
|
core.WriteBlock(blockDb, config.GenesisBlock)
|
||||||
|
Loading…
Reference in New Issue
Block a user