From 819ecd450860827ad1e5840104722f3f51858b5a Mon Sep 17 00:00:00 2001
From: Jeffrey Wilcke <geffobscura@gmail.com>
Date: Wed, 8 Jul 2015 15:18:52 +0200
Subject: [PATCH 1/2] miner, xeth: fire log event during mining. Fix return raw
 tx

---
 core/filter.go  | 2 +-
 miner/worker.go | 1 +
 xeth/xeth.go    | 1 -
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/filter.go b/core/filter.go
index 277976a55e..1359601177 100644
--- a/core/filter.go
+++ b/core/filter.go
@@ -99,7 +99,7 @@ done:
 		switch {
 		case block.NumberU64() == 0:
 			break done
-		case block.NumberU64() == earliestBlockNo:
+		case block.NumberU64() < earliestBlockNo:
 			break done
 		case self.max <= len(logs):
 			break done
diff --git a/miner/worker.go b/miner/worker.go
index 79514b2311..1dfc4c77ee 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -298,6 +298,7 @@ func (self *worker) wait() {
 				self.mux.Post(core.ChainEvent{block, block.Hash(), logs})
 				if stat == core.CanonStatTy {
 					self.mux.Post(core.ChainHeadEvent{block})
+					self.mux.Post(logs)
 				}
 			}(block, self.current.state.Logs())
 
diff --git a/xeth/xeth.go b/xeth/xeth.go
index d1085dc920..2781c67c94 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -781,7 +781,6 @@ func (self *XEth) PushTx(encodedTx string) (string, error) {
 
 		addr := crypto.CreateAddress(from, tx.Nonce())
 		glog.V(logger.Info).Infof("Tx(%x) created: %x\n", tx.Hash(), addr)
-		return addr.Hex(), nil
 	} else {
 		glog.V(logger.Info).Infof("Tx(%x) to: %x\n", tx.Hash(), tx.To())
 	}

From d25634662bf631fe073e25817b375a48fd436cad Mon Sep 17 00:00:00 2001
From: Jeffrey Wilcke <geffobscura@gmail.com>
Date: Wed, 8 Jul 2015 15:47:33 +0200
Subject: [PATCH 2/2] web3: updated

---
 jsre/ethereum_js.go | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/jsre/ethereum_js.go b/jsre/ethereum_js.go
index 0a240dd28e..f8cc88569f 100644
--- a/jsre/ethereum_js.go
+++ b/jsre/ethereum_js.go
@@ -1417,7 +1417,7 @@ module.exports = {
 
 },{"bignumber.js":"bignumber.js"}],8:[function(require,module,exports){
 module.exports={
-    "version": "0.8.0"
+    "version": "0.8.1"
 }
 
 },{}],9:[function(require,module,exports){
@@ -1840,14 +1840,14 @@ var contract = function (abi) {
 };
 
 /**
- * Should be called to create new ContractFactory
+ * Should be called to check if the contract gets properly deployed on the blockchain.
  *
  * @method checkForContractAddress
  * @param {Object} contract
  * @param {Function} callback
  * @returns {Undefined}
  */
-var checkForContractAddress = function(contract, callback){
+var checkForContractAddress = function(contract, abi, callback){
     var count = 0;
 
     // wait for receipt
@@ -1855,6 +1855,8 @@ var checkForContractAddress = function(contract, callback){
         if(!e) {
             count++;
 
+            // console.log('Checking for contract address', count);
+
             // stop watching after 50 blocks (timeout)
             if(count > 50) {
                 if(callback)
@@ -1870,8 +1872,14 @@ var checkForContractAddress = function(contract, callback){
                         web3.eth.getCode(receipt.contractAddress, function(e, code){
                             if(code.length > 2) {
 
+                                // console.log('Contract code deployed!');
+
                                 contract.address = receipt.contractAddress;
 
+                                // attach events and methods
+                                addFunctionsToContract(contract, abi);
+                                addEventsToContract(contract, abi);
+
                                 if(callback)
                                     callback(null, contract);
 
@@ -1909,6 +1917,7 @@ var ContractFactory = function (abi) {
  * @returns {Contract} returns contract instance
  */
 ContractFactory.prototype.new = function () {
+    var _this = this;
     var contract = new Contract(this.abi);
 
     // parse arguments
@@ -1940,14 +1949,14 @@ ContractFactory.prototype.new = function () {
             } else {
                 // add the transaction hash
                 contract.transactionHash = hash;
-                checkForContractAddress(contract, callback);
+                checkForContractAddress(contract, _this.abi, callback);
             }
         });
     } else {
         var hash = web3.eth.sendTransaction(options);
         // add the transaction hash
         contract.transactionHash = hash;
-        checkForContractAddress(contract);
+        checkForContractAddress(contract, _this.abi);
     }
 
     return contract;
@@ -1963,12 +1972,17 @@ ContractFactory.prototype.new = function () {
  * otherwise calls callback function (err, contract)
  */
 ContractFactory.prototype.at = function (address, callback) {
+    var contract = new Contract(this.abi, address);
     // TODO: address is required
+
+    // attach functions
+    addFunctionsToContract(contract, this.abi);
+    addEventsToContract(contract, this.abi);
     
     if (callback) {
-        callback(null, new Contract(this.abi, address));
+        callback(null, contract);
     } 
-    return new Contract(this.abi, address);
+    return contract;
 };
 
 /**
@@ -1980,8 +1994,6 @@ ContractFactory.prototype.at = function (address, callback) {
  */
 var Contract = function (abi, address) {
     this.address = address;
-    addFunctionsToContract(this, abi);
-    addEventsToContract(this, abi);
 };
 
 module.exports = contract;
@@ -2484,8 +2496,8 @@ SolidityEvent.prototype.encode = function (indexed, options) {
 
     result.topics = [];
 
+    result.address = this._address;
     if (!this._anonymous) {
-        result.address = this._address;
         result.topics.push('0x' + this.signature());
     }