obscuren 10 年之前
父節點
當前提交
9d2166a964
共有 3 個文件被更改,包括 116 次插入88 次删除
  1. 10 10
      cmd/mist/assets/examples/coin.html
  2. 71 71
      cmd/mist/assets/html/home.html
  3. 35 7
      miner/miner.go

+ 10 - 10
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>
 

+ 71 - 71
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>
 

+ 35 - 7
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),
@@ -213,6 +234,13 @@ func (self *Miner) mine() {
 
 	minerlogger.Infof("Mining on block. Includes %v transactions", len(transactions))
 
+	x, y := getSeed(chainMan, block)
+	self.pow, err = ethash.New(append(x, y...), block)
+	if err != nil {
+		fmt.Println("err", err)
+		return
+	}
+
 	// Find a valid nonce
 	nonce := self.pow.Search(block, self.powQuitCh)
 	if nonce != nil {