diff --git a/core/filter.go b/core/filter.go index 277976a55..135960117 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/jsre/ethereum_js.go b/jsre/ethereum_js.go index 0a240dd28..f8cc88569 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()); } diff --git a/miner/worker.go b/miner/worker.go index 085721751..9f804bf30 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 d1085dc92..2781c67c9 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()) }