aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/mist/assets/examples/coin.html20
-rw-r--r--cmd/mist/assets/html/home.html142
-rw-r--r--core/block_processor.go5
-rw-r--r--miner/miner.go42
-rw-r--r--pow/block.go1
5 files changed, 120 insertions, 90 deletions
diff --git a/cmd/mist/assets/examples/coin.html b/cmd/mist/assets/examples/coin.html
index ed5063a05..149c51a47 100644
--- a/cmd/mist/assets/examples/coin.html
+++ b/cmd/mist/assets/examples/coin.html
@@ -93,18 +93,18 @@
function transact() {
var to = document.querySelector("#address").value;
if( to.length == 0 ) {
- to = "0x4205b06c2cfa0e30359edcab94543266cb6fa1d3";
+ to = "0x4205b06c2cfa0e30359edcab94543266cb6fa1d3";
} else {
to = "0x"+to;
}
-
- var value = parseInt( document.querySelector("#amount").value );
-
- contract.transact({gas: "10000", gasprice: eth.gasPrice}).send( to, value );
- }
-
- reflesh();
-</script>
-
+
+ var value = parseInt( document.querySelector("#amount").value );
+
+ contract.transact({gas: "10000", gasprice: eth.gasPrice}).send( to, value );
+ }
+
+ reflesh();
+ </script>
+
</html>
diff --git a/cmd/mist/assets/html/home.html b/cmd/mist/assets/html/home.html
index 7116f5dde..3b27917fd 100644
--- a/cmd/mist/assets/html/home.html
+++ b/cmd/mist/assets/html/home.html
@@ -1,75 +1,75 @@
<!doctype>
<html>
-<head>
-<title>Ethereum</title>
-<script type="text/javascript" src="../ext/bignumber.min.js"></script>
-<script type="text/javascript" src="../ext/ethereum.js/dist/ethereum.js"></script>
-<style type="text/css">
- body {
- font-family: Helvetica;
- }
- div.logo {
- width: 192px;
- margin: 40px auto;
- }
-</style>
-</head>
-<body>
- <div class="logo"><img src="logo.png"></img></div>
- <h1>Info</h1>
-
- <table width="100%">
- <tr>
- <td>Block number</td>
- <td id="number"></td>
- </tr>
-
- <tr>
- <td>Peer count</td>
- <td id="peer_count"></td>
- </tr>
-
- <tr>
- <td>Accounts</td>
- <td id="accounts"></td>
- </tr>
-
- <tr>
- <td>Gas price</td>
- <td id="gas_price"></td>
- </tr>
-
- <tr>
- <td>Mining</td>
- <td id="mining"></td>
- </tr>
-
- <tr>
- <td>Listening</td>
- <td id="listening"></td>
- </tr>
-
- <tr>
- <td>Coinbase</td>
- <td id="coinbase"></td>
- </tr>
- </table>
-</body>
-
-<script type="text/javascript">
- var web3 = require('web3');
- var eth = web3.eth;
-
- web3.setProvider(new web3.providers.HttpSyncProvider('http://localhost:8080'));
-
- document.querySelector("#number").innerHTML = eth.number;
- document.querySelector("#coinbase").innerHTML = eth.coinbase
- document.querySelector("#peer_count").innerHTML = eth.peerCount;
- document.querySelector("#accounts").innerHTML = eth.accounts;
- document.querySelector("#gas_price").innerHTML = eth.gasPrice;
- document.querySelector("#mining").innerHTML = eth.mining;
- document.querySelector("#listening").innerHTML = eth.listening;
-</script>
-
+ <head>
+ <title>Ethereum</title>
+ <script type="text/javascript" src="../ext/bignumber.min.js"></script>
+ <script type="text/javascript" src="../ext/ethereum.js/dist/ethereum.js"></script>
+ <style type="text/css">
+ body {
+ font-family: Helvetica;
+ }
+ div.logo {
+ width: 192px;
+ margin: 40px auto;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="logo"><img src="logo.png"></img></div>
+ <h1>Info</h1>
+
+ <table width="100%">
+ <tr>
+ <td>Block number</td>
+ <td id="number"></td>
+ </tr>
+
+ <tr>
+ <td>Peer count</td>
+ <td id="peer_count"></td>
+ </tr>
+
+ <tr>
+ <td>Accounts</td>
+ <td id="accounts"></td>
+ </tr>
+
+ <tr>
+ <td>Gas price</td>
+ <td id="gas_price"></td>
+ </tr>
+
+ <tr>
+ <td>Mining</td>
+ <td id="mining"></td>
+ </tr>
+
+ <tr>
+ <td>Listening</td>
+ <td id="listening"></td>
+ </tr>
+
+ <tr>
+ <td>Coinbase</td>
+ <td id="coinbase"></td>
+ </tr>
+ </table>
+ </body>
+
+ <script type="text/javascript">
+ var web3 = require('web3');
+ var eth = web3.eth;
+
+ web3.setProvider(new web3.providers.HttpSyncProvider('http://localhost:8080'));
+
+ document.querySelector("#number").innerHTML = eth.number;
+ document.querySelector("#coinbase").innerHTML = eth.coinbase
+ document.querySelector("#peer_count").innerHTML = eth.peerCount;
+ document.querySelector("#accounts").innerHTML = eth.accounts;
+ document.querySelector("#gas_price").innerHTML = eth.gasPrice;
+ document.querySelector("#mining").innerHTML = eth.mining;
+ document.querySelector("#listening").innerHTML = eth.listening;
+ </script>
+
</html>
diff --git a/core/block_processor.go b/core/block_processor.go
index d59d7feca..a69ff1824 100644
--- a/core/block_processor.go
+++ b/core/block_processor.go
@@ -7,6 +7,7 @@ import (
"sync"
"time"
+ "github.com/ethereum/c-ethash/go-ethash"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethutil"
@@ -14,7 +15,7 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/pow"
- "github.com/ethereum/go-ethereum/pow/ezp"
+ _ "github.com/ethereum/go-ethereum/pow/ezp"
"github.com/ethereum/go-ethereum/state"
"gopkg.in/fatih/set.v0"
)
@@ -62,7 +63,7 @@ func NewBlockProcessor(db ethutil.Database, txpool *TxPool, chainManager *ChainM
sm := &BlockProcessor{
db: db,
mem: make(map[string]*big.Int),
- Pow: ezp.New(),
+ Pow: &ethash.Ethash{},
bc: chainManager,
eventMux: eventMux,
txpool: txpool,
diff --git a/miner/miner.go b/miner/miner.go
index 11d09d953..79ba68587 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -24,21 +24,43 @@
package miner
import (
+ "fmt"
"math/big"
"sort"
- "github.com/ethereum/go-ethereum/eth"
- "github.com/ethereum/go-ethereum/ethutil"
- "github.com/ethereum/go-ethereum/pow"
- "github.com/ethereum/go-ethereum/pow/ezp"
- "github.com/ethereum/go-ethereum/state"
-
+ "github.com/ethereum/c-ethash/go-ethash"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/eth"
+ "github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger"
+ "github.com/ethereum/go-ethereum/pow"
+ "github.com/ethereum/go-ethereum/state"
)
+var dx = []byte{0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42}
+var dy = []byte{0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43}
+
+const epochLen = uint64(1000)
+
+func getSeed(chainMan *core.ChainManager, block *types.Block) (x []byte, y []byte) {
+ if block.Number().Uint64() == 0 {
+ return dx, dy
+ } else if block.Number().Uint64()%epochLen == 0 {
+ x, y = getSeed(chainMan, chainMan.GetBlock(block.ParentHash()))
+ if (block.Number().Uint64()/epochLen)%2 > 0 {
+ y = crypto.Sha3(append(y, block.ParentHash()...))
+ } else {
+ x = crypto.Sha3(append(x, block.ParentHash()...))
+ }
+ return x, y
+ } else {
+ return getSeed(chainMan, chainMan.GetBlock(block.ParentHash()))
+ }
+}
+
type LocalTx struct {
To []byte `json:"to"`
Data []byte `json:"data"`
@@ -77,7 +99,6 @@ func New(coinbase []byte, eth *eth.Ethereum) *Miner {
return &Miner{
eth: eth,
powQuitCh: make(chan struct{}),
- pow: ezp.New(),
mining: false,
localTxs: make(map[int]*LocalTx),
MinAcceptedGasPrice: big.NewInt(10000000000000),
@@ -211,6 +232,13 @@ func (self *Miner) mine() {
minerlogger.Infof("Mining on block. Includes %v transactions", len(transactions))
+ x, _ := getSeed(chainMan, block)
+ self.pow, err = ethash.New(x, block)
+ if err != nil {
+ fmt.Println("miner gave back err", err)
+ return
+ }
+
// Find a valid nonce
nonce := self.pow.Search(block, self.powQuitCh)
if nonce != nil {
diff --git a/pow/block.go b/pow/block.go
index 62df2b5ff..31e194d8d 100644
--- a/pow/block.go
+++ b/pow/block.go
@@ -6,4 +6,5 @@ type Block interface {
Difficulty() *big.Int
HashNoNonce() []byte
N() []byte
+ Number() *big.Int
}