aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/geth/admin.go27
-rw-r--r--core/chain_makers.go2
-rw-r--r--core/chain_manager.go2
-rw-r--r--core/genesis.go2
-rw-r--r--core/types/block.go6
-rw-r--r--miner/miner.go5
-rw-r--r--miner/worker.go9
-rw-r--r--tests/blocktest.go2
8 files changed, 41 insertions, 14 deletions
diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index 1515cd6ac..5f1cb8c96 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -26,8 +26,6 @@ func (js *jsre) adminBindings() {
admin := t.Object()
admin.Set("suggestPeer", js.suggestPeer)
admin.Set("startRPC", js.startRPC)
- admin.Set("startMining", js.startMining)
- admin.Set("stopMining", js.stopMining)
admin.Set("nodeInfo", js.nodeInfo)
admin.Set("peers", js.peers)
admin.Set("newAccount", js.newAccount)
@@ -37,7 +35,30 @@ func (js *jsre) adminBindings() {
admin.Set("dumpBlock", js.dumpBlock)
admin.Set("verbosity", js.verbosity)
admin.Set("backtrace", js.backtrace)
- admin.Set("hashrate", js.hashrate)
+
+ admin.Set("miner", struct{}{})
+ t, _ = admin.Get("miner")
+ miner := t.Object()
+ miner.Set("start", js.startMining)
+ miner.Set("stop", js.stopMining)
+ miner.Set("hashrate", js.hashrate)
+ miner.Set("setExtra", js.setExtra)
+}
+
+func (js *jsre) setExtra(call otto.FunctionCall) otto.Value {
+ extra, err := call.Argument(0).ToString()
+ if err != nil {
+ fmt.Println(err)
+ return otto.UndefinedValue()
+ }
+
+ if len(extra) > 1024 {
+ fmt.Println("error: cannot exceed 1024 bytes")
+ return otto.UndefinedValue()
+ }
+
+ js.ethereum.Miner().SetExtra([]byte(extra))
+ return otto.UndefinedValue()
}
func (js *jsre) hashrate(otto.FunctionCall) otto.Value {
diff --git a/core/chain_makers.go b/core/chain_makers.go
index 6597cc315..bbf1b1439 100644
--- a/core/chain_makers.go
+++ b/core/chain_makers.go
@@ -55,7 +55,7 @@ func NewCanonical(n int, db common.Database) (*BlockProcessor, error) {
// block time is fixed at 10 seconds
func newBlockFromParent(addr common.Address, parent *types.Block) *types.Block {
- block := types.NewBlock(parent.Hash(), addr, parent.Root(), common.BigPow(2, 32), 0, "")
+ block := types.NewBlock(parent.Hash(), addr, parent.Root(), common.BigPow(2, 32), 0, nil)
block.SetUncles(nil)
block.SetTransactions(nil)
block.SetReceipts(nil)
diff --git a/core/chain_manager.go b/core/chain_manager.go
index 0c2eb0fe1..c2e241e90 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -228,7 +228,7 @@ func (bc *ChainManager) NewBlock(coinbase common.Address) *types.Block {
root,
common.BigPow(2, 32),
0,
- "")
+ nil)
block.SetUncles(nil)
block.SetTransactions(nil)
block.SetReceipts(nil)
diff --git a/core/genesis.go b/core/genesis.go
index 13656c40c..8ef1e140f 100644
--- a/core/genesis.go
+++ b/core/genesis.go
@@ -20,7 +20,7 @@ var ZeroHash160 = make([]byte, 20)
var ZeroHash512 = make([]byte, 64)
func GenesisBlock(db common.Database) *types.Block {
- genesis := types.NewBlock(common.Hash{}, common.Address{}, common.Hash{}, params.GenesisDifficulty, 42, "")
+ genesis := types.NewBlock(common.Hash{}, common.Address{}, common.Hash{}, params.GenesisDifficulty, 42, nil)
genesis.Header().Number = common.Big0
genesis.Header().GasLimit = params.GenesisGasLimit
genesis.Header().GasUsed = common.Big0
diff --git a/core/types/block.go b/core/types/block.go
index d5cd8a21e..116acbf79 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -39,7 +39,7 @@ type Header struct {
// Creation time
Time uint64
// Extra data
- Extra string
+ Extra []byte
// Mix digest for quick checking to prevent DOS
MixDigest common.Hash
// Nonce
@@ -121,7 +121,7 @@ type storageblock struct {
TD *big.Int
}
-func NewBlock(parentHash common.Hash, coinbase common.Address, root common.Hash, difficulty *big.Int, nonce uint64, extra string) *Block {
+func NewBlock(parentHash common.Hash, coinbase common.Address, root common.Hash, difficulty *big.Int, nonce uint64, extra []byte) *Block {
header := &Header{
Root: root,
ParentHash: parentHash,
@@ -371,7 +371,7 @@ func (self *Header) String() string {
GasLimit: %v
GasUsed: %v
Time: %v
- Extra: %v
+ Extra: %s
MixDigest: %x
Nonce: %x`,
self.ParentHash, self.UncleHash, self.Coinbase, self.Root, self.TxHash, self.ReceiptHash, self.Bloom, self.Difficulty, self.Number, self.GasLimit, self.GasUsed, self.Time, self.Extra, self.MixDigest, self.Nonce)
diff --git a/miner/miner.go b/miner/miner.go
index 581de9674..23e48db40 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -13,7 +13,6 @@ type Miner struct {
worker *worker
MinAcceptedGasPrice *big.Int
- Extra string
mining bool
eth core.Backend
@@ -58,3 +57,7 @@ func (self *Miner) Stop() {
func (self *Miner) HashRate() int64 {
return self.worker.HashRate()
}
+
+func (self *Miner) SetExtra(extra []byte) {
+ self.worker.extra = extra
+}
diff --git a/miner/worker.go b/miner/worker.go
index 17afa25de..da10cf7cd 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -69,10 +69,12 @@ type worker struct {
pow pow.PoW
atWork int64
- eth core.Backend
- chain *core.ChainManager
- proc *core.BlockProcessor
+ eth core.Backend
+ chain *core.ChainManager
+ proc *core.BlockProcessor
+
coinbase common.Address
+ extra []byte
current *environment
@@ -213,6 +215,7 @@ func (self *worker) commitNewWork() {
if block.Time() == self.chain.CurrentBlock().Time() {
block.Header().Time++
}
+ block.Header().Extra = self.extra
self.current = env(block, self.eth)
for _, ancestor := range self.chain.GetAncestors(block, 7) {
diff --git a/tests/blocktest.go b/tests/blocktest.go
index 1c4f1c2f2..6b8ee9d4a 100644
--- a/tests/blocktest.go
+++ b/tests/blocktest.go
@@ -186,7 +186,7 @@ func mustConvertHeader(in btHeader) *types.Header {
Coinbase: mustConvertAddress(in.Coinbase),
UncleHash: mustConvertHash(in.UncleHash),
ParentHash: mustConvertHash(in.ParentHash),
- Extra: string(mustConvertBytes(in.ExtraData)),
+ Extra: mustConvertBytes(in.ExtraData),
GasUsed: mustConvertBigInt10(in.GasUsed),
GasLimit: mustConvertBigInt10(in.GasLimit),
Difficulty: mustConvertBigInt10(in.Difficulty),