@ -210,7 +210,7 @@ module.exports = {
} ;
} ;
} , { "./const" : 2 , "./formatters" : 6 , "./types" : 11 , "./utils" : 12 , "./web3" : 13 } ] , 2 : [ function ( require , module , exports ) {
} , { "./const" : 2 , "./formatters" : 8 , "./types" : 14 , "./utils" : 15 , "./web3" : 17 } ] , 2 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -264,7 +264,8 @@ module.exports = {
ETH_PADDING : 32 ,
ETH_PADDING : 32 ,
ETH_SIGNATURE_LENGTH : 4 ,
ETH_SIGNATURE_LENGTH : 4 ,
ETH_UNITS : ETH_UNITS ,
ETH_UNITS : ETH_UNITS ,
ETH_BIGNUMBER_ROUNDING_MODE : { ROUNDING_MODE : BigNumber . ROUND_DOWN }
ETH_BIGNUMBER_ROUNDING_MODE : { ROUNDING_MODE : BigNumber . ROUND_DOWN } ,
ETH_POLLING_TIMEOUT : 1000
} ;
} ;
@ -295,6 +296,7 @@ var web3 = require('./web3');
var abi = require ( './abi' ) ;
var abi = require ( './abi' ) ;
var utils = require ( './utils' ) ;
var utils = require ( './utils' ) ;
var eventImpl = require ( './event' ) ;
var eventImpl = require ( './event' ) ;
var filter = require ( './filter' ) ;
var exportNatspecGlobals = function ( vars ) {
var exportNatspecGlobals = function ( vars ) {
// it's used byt natspec.js
// it's used byt natspec.js
@ -416,11 +418,11 @@ var addEventsToContract = function (contract, desc, address) {
var signature = abi . eventSignatureFromAscii ( e . name ) ;
var signature = abi . eventSignatureFromAscii ( e . name ) ;
var event = eventImpl . inputParser ( address , signature , e ) ;
var event = eventImpl . inputParser ( address , signature , e ) ;
var o = event . apply ( null , params ) ;
var o = event . apply ( null , params ) ;
o . _ onWatchEventResult = function ( data ) {
var outputFormatter = function ( data ) {
var parser = eventImpl . outputParser ( e ) ;
var parser = eventImpl . outputParser ( e ) ;
return parser ( data ) ;
return parser ( data ) ;
} ;
} ;
return web3 . eth . watch ( o ) ;
return web3 . eth . watch ( o , undefined , undefined , outputFormatter ) ;
} ;
} ;
// this property should be used by eth.filter to check if object is an event
// this property should be used by eth.filter to check if object is an event
@ -487,7 +489,131 @@ var contract = function (address, desc) {
module . exports = contract ;
module . exports = contract ;
} , { "./abi" : 1 , "./event" : 4 , "./utils" : 12 , "./web3" : 13 } ] , 4 : [ function ( require , module , exports ) {
} , { "./abi" : 1 , "./event" : 6 , "./filter" : 7 , "./utils" : 15 , "./web3" : 17 } ] , 4 : [ function ( require , module , exports ) {
/ *
This file is part of ethereum . js .
ethereum . js is free software : you can redistribute it and / or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
ethereum . js is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
/ * * @ f i l e d b . j s
* @ authors :
* Marek Kotewicz < marek @ ethdev . com >
* @ date 2015
* /
/// @returns an array of objects describing web3.db api methods
var methods = function ( ) {
return [
{ name : 'put' , call : 'db_put' } ,
{ name : 'get' , call : 'db_get' } ,
{ name : 'putString' , call : 'db_putString' } ,
{ name : 'getString' , call : 'db_getString' }
] ;
} ;
module . exports = {
methods : methods
} ;
} , { } ] , 5 : [ function ( require , module , exports ) {
/ *
This file is part of ethereum . js .
ethereum . js is free software : you can redistribute it and / or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
ethereum . js is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
/ * * @ f i l e e t h . j s
* @ authors :
* Marek Kotewicz < marek @ ethdev . com >
* @ date 2015
* /
/// @returns an array of objects describing web3.eth api methods
var methods = function ( ) {
var blockCall = function ( args ) {
return typeof args [ 0 ] === "string" ? "eth_blockByHash" : "eth_blockByNumber" ;
} ;
var transactionCall = function ( args ) {
return typeof args [ 0 ] === "string" ? 'eth_transactionByHash' : 'eth_transactionByNumber' ;
} ;
var uncleCall = function ( args ) {
return typeof args [ 0 ] === "string" ? 'eth_uncleByHash' : 'eth_uncleByNumber' ;
} ;
var transactionCountCall = function ( args ) {
return typeof args [ 0 ] === "string" ? 'eth_transactionCountByHash' : 'eth_transactionCountByNumber' ;
} ;
var uncleCountCall = function ( args ) {
return typeof args [ 0 ] === "string" ? 'eth_uncleCountByHash' : 'eth_uncleCountByNumber' ;
} ;
return [
{ name : 'balanceAt' , call : 'eth_balanceAt' } ,
{ name : 'stateAt' , call : 'eth_stateAt' } ,
{ name : 'storageAt' , call : 'eth_storageAt' } ,
{ name : 'countAt' , call : 'eth_countAt' } ,
{ name : 'codeAt' , call : 'eth_codeAt' } ,
{ name : 'transact' , call : 'eth_transact' } ,
{ name : 'call' , call : 'eth_call' } ,
{ name : 'block' , call : blockCall } ,
{ name : 'transaction' , call : transactionCall } ,
{ name : 'uncle' , call : uncleCall } ,
{ name : 'compilers' , call : 'eth_compilers' } ,
{ name : 'flush' , call : 'eth_flush' } ,
{ name : 'lll' , call : 'eth_lll' } ,
{ name : 'solidity' , call : 'eth_solidity' } ,
{ name : 'serpent' , call : 'eth_serpent' } ,
{ name : 'logs' , call : 'eth_logs' } ,
{ name : 'transactionCount' , call : transactionCountCall } ,
{ name : 'uncleCount' , call : uncleCountCall }
] ;
} ;
/// @returns an array of objects describing web3.eth api properties
var properties = function ( ) {
return [
{ name : 'coinbase' , getter : 'eth_coinbase' , setter : 'eth_setCoinbase' } ,
{ name : 'listening' , getter : 'eth_listening' , setter : 'eth_setListening' } ,
{ name : 'mining' , getter : 'eth_mining' , setter : 'eth_setMining' } ,
{ name : 'gasPrice' , getter : 'eth_gasPrice' } ,
{ name : 'accounts' , getter : 'eth_accounts' } ,
{ name : 'peerCount' , getter : 'eth_peerCount' } ,
{ name : 'defaultBlock' , getter : 'eth_defaultBlock' , setter : 'eth_setDefaultBlock' } ,
{ name : 'number' , getter : 'eth_number' }
] ;
} ;
module . exports = {
methods : methods ,
properties : properties
} ;
} , { } ] , 6 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -624,7 +750,7 @@ module.exports = {
} ;
} ;
} , { "./abi" : 1 , "./utils" : 12 } ] , 5 : [ function ( require , module , exports ) {
} , { "./abi" : 1 , "./utils" : 15 } ] , 7 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -650,84 +776,96 @@ module.exports = {
* @ date 2014
* @ date 2014
* /
* /
var web3 = require ( './web3' ) ; // jshint ignore:line
/// Should be called to check if filter implementation is valid
/// @returns true if it is, otherwise false
/// should be used when we want to watch something
var implementationIsValid = function ( i ) {
/// it's using inner polling mechanism and is notified about changes
return ! ! i &&
/// TODO: change 'options' name cause it may be not the best matching one, since we have events
typeof i . newFilter === 'function' &&
var Filter = function ( options , impl ) {
typeof i . getMessages === 'function' &&
typeof i . uninstallFilter === 'function' &&
if ( typeof options !== "string" ) {
typeof i . startPolling === 'function' &&
typeof i . stopPolling === 'function' ;
// topics property is deprecated, warn about it!
} ;
if ( options . topics ) {
console . warn ( '"topics" is deprecated, use "topic" instead' ) ;
/// This method should be called on options object, to verify deprecated properties && lazy load dynamic ones
}
/// @param should be string or object
/// @returns options string or object
this . _ onWatchResult = options . _ onWatchEventResult ;
var getOptions = function ( options ) {
if ( typeof options === 'string' ) {
// evaluate lazy properties
return options ;
options = {
}
to : options . to ,
topic : options . topic ,
options = options || { } ;
earliest : options . earliest ,
latest : options . latest ,
if ( options . topics ) {
max : options . max ,
console . warn ( '"topics" is deprecated, is "topic" instead' ) ;
skip : options . skip ,
address : options . address
} ;
}
}
this . impl = impl ;
this . callbacks = [ ] ;
this . id = impl . newFilter ( options ) ;
// evaluate lazy properties
web3 . provider . startPolling ( { method : impl . changed , params : [ this . id ] } , this . id , this . trigger . bind ( this ) ) ;
return {
to : options . to ,
topic : options . topic ,
earliest : options . earliest ,
latest : options . latest ,
max : options . max ,
skip : options . skip ,
address : options . address
} ;
} ;
} ;
/// alias for changed*
/// Should be used when we want to watch something
Filter . prototype . arrived = function ( callback ) {
/// it's using inner polling mechanism and is notified about changes
this . changed ( callback ) ;
/// @param options are filter options
} ;
/// @param implementation, an abstract polling implementation
Filter . prototype . happened = function ( callback ) {
/// @param formatter (optional), callback function which formats output before 'real' callback
this . changed ( callback ) ;
var filter = function ( options , implementation , formatter ) {
} ;
if ( ! implementationIsValid ( implementation ) ) {
console . error ( 'filter implemenation is invalid' ) ;
return ;
}
/// gets called when there is new eth/shh message
options = getOptions ( options ) ;
Filter . prototype . changed = function ( callback ) {
var callbacks = [ ] ;
this . callbacks . push ( callback ) ;
var filterId = implementation . newFilter ( options ) ;
} ;
var onMessages = function ( messages ) {
messages . forEach ( function ( message ) {
messages = formatter ? formatter ( message ) : message ;
callbacks . forEach ( function ( callback ) {
callback ( message ) ;
} ) ;
} ) ;
} ;
/// trigger calling new message from people
implementation . startPolling ( filterId , onMessages , implementation . uninstallFilter ) ;
Filter . prototype . trigger = function ( messages ) {
for ( var i = 0 ; i < this . callbacks . length ; i ++ ) {
for ( var j = 0 ; j < messages . length ; j ++ ) {
var message = this . _ onWatchResult ? this . _ onWatchResult ( messages [ j ] ) : messages [ j ] ;
this . callbacks [ i ] . call ( this , message ) ;
}
}
} ;
/// should be called to uninstall current filter
var changed = function ( callback ) {
Filter . prototype . uninstall = function ( ) {
callbacks . push ( callback ) ;
this . impl . uninstallFilter ( this . id ) ;
} ;
web3 . provider . stopPolling ( this . id ) ;
} ;
/// should be called to manually trigger getting latest messages from the client
var messages = function ( ) {
Filter . prototype . messages = function ( ) {
return implementation . getMessages ( filterId ) ;
return this . impl . getMessages ( this . id ) ;
} ;
} ;
var uninstall = function ( callback ) {
implementation . stopPolling ( filterId ) ;
implementation . uninstallFilter ( filterId ) ;
callbacks = [ ] ;
} ;
/// alias for messages
return {
Filter . prototype . logs = function ( ) {
changed : changed ,
return this . messages ( ) ;
arrived : changed ,
happened : changed ,
messages : messages ,
logs : messages ,
uninstall : uninstall
} ;
} ;
} ;
module . exports = Filter ;
module . exports = filter ;
} , { "./web3" : 13 } ] , 6 : [ function ( require , module , exports ) {
} , { } ] , 8 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -883,7 +1021,7 @@ module.exports = {
} ;
} ;
} , { "./const" : 2 , "./utils" : 12 } ] , 7 : [ function ( require , module , exports ) {
} , { "./const" : 2 , "./utils" : 15 } ] , 9 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -918,20 +1056,22 @@ var HttpSyncProvider = function (host) {
HttpSyncProvider . prototype . send = function ( payload ) {
HttpSyncProvider . prototype . send = function ( payload ) {
//var data = formatJsonRpcObject(payload);
//var data = formatJsonRpcObject(payload);
var request = new XMLHttpRequest ( ) ;
var request = new XMLHttpRequest ( ) ;
request . open ( 'POST' , this . host , false ) ;
request . open ( 'POST' , this . host , false ) ;
request . send ( JSON . stringify ( payload ) ) ;
request . send ( JSON . stringify ( payload ) ) ;
// check request.status
var result = request . responseText ;
var result = request . responseText ;
// check request.status
if ( request . status !== 200 )
return ;
return JSON . parse ( result ) ;
return JSON . parse ( result ) ;
} ;
} ;
module . exports = HttpSyncProvider ;
module . exports = HttpSyncProvider ;
} , { } ] , 8 : [ function ( require , module , exports ) {
} , { } ] , 10 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -998,7 +1138,42 @@ module.exports = {
} , { } ] , 9 : [ function ( require , module , exports ) {
} , { } ] , 11 : [ function ( require , module , exports ) {
/ *
This file is part of ethereum . js .
ethereum . js is free software : you can redistribute it and / or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
ethereum . js is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
/ * * @ f i l e q t s y n c . j s
* @ authors :
* Marek Kotewicz < marek @ ethdev . com >
* Marian Oancea < marian @ ethdev . com >
* @ date 2014
* /
var QtSyncProvider = function ( ) {
} ;
QtSyncProvider . prototype . send = function ( payload ) {
var result = navigator . qt . callMethod ( JSON . stringify ( payload ) ) ;
return JSON . parse ( result ) ;
} ;
module . exports = QtSyncProvider ;
} , { } ] , 12 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -1015,7 +1190,7 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
* /
/ * * @ f i l e p r o v i d e r m a n a g e r . j s
/ * * @ f i l e r e q u e s t m a n a g e r . j s
* @ authors :
* @ authors :
* Jeffrey Wilcke < jeff @ ethdev . com >
* Jeffrey Wilcke < jeff @ ethdev . com >
* Marek Kotewicz < marek @ ethdev . com >
* Marek Kotewicz < marek @ ethdev . com >
@ -1024,85 +1199,86 @@ module.exports = {
* @ date 2014
* @ date 2014
* /
* /
var web3 = require ( './web3' ) ;
var jsonrpc = require ( './jsonrpc' ) ;
var jsonrpc = require ( './jsonrpc' ) ;
var c = require ( './const' ) ;
/ * *
/ * *
* Provider manager object prototype
* It ' s responsible for passing messages to providers
* It ' s responsible for passing messages to providers
* If no provider is set it ' s responsible for queuing requests
* It ' s also responsible for polling the ethereum node for incoming messages
* It ' s also responsible for polling the ethereum node for incoming messages
* Default poll timeout is 12 seconds
* Default poll timeout is 1 second
* If we are running ethereum . js inside ethereum browser , there are backend based tools responsible for polling ,
* and provider manager polling mechanism is not used
* /
* /
var Provider Manager = function ( ) {
var requestManager = function ( ) {
this . polls = [ ] ;
var polls = [ ] ;
this . provider = undefined ;
var provider ;
var self = this ;
var send = function ( data ) {
var poll = function ( ) {
var payload = jsonrpc . toPayload ( data . method , data . params ) ;
self . polls . forEach ( function ( data ) {
var result = self . send ( data . data ) ;
if ( ! provider ) {
console . error ( 'provider is not set' ) ;
if ( ! ( result instanceof Array ) || result . length === 0 ) {
return null ;
return ;
}
}
data . callback ( result ) ;
var result = provider . send ( payload ) ;
} ) ;
setTimeout ( poll , 1000 ) ;
if ( ! jsonrpc . isValidResponse ( result ) ) {
console . log ( result ) ;
return null ;
}
return result . result ;
} ;
} ;
poll ( ) ;
} ;
/// sends outgoing requests
/// @params data - an object with at least 'method' property
ProviderManager . prototype . send = function ( data ) {
var payload = jsonrpc . toPayload ( data . method , data . params ) ;
if ( this . provider === undefined ) {
console . error ( 'provider is not set' ) ;
return null ;
}
var result = this . provider . send ( payload ) ;
var setProvider = function ( p ) {
provider = p ;
} ;
if ( ! jsonrpc . isValidResponse ( result ) ) {
var startPolling = function ( data , pollId , callback , uninstall ) {
console . log ( result ) ;
polls . push ( { data : data , id : pollId , callback : callback , uninstall : uninstall } ) ;
return null ;
} ;
}
return result . result ;
var stopPolling = function ( pollId ) {
} ;
for ( var i = polls . length ; i -- ; ) {
var poll = polls [ i ] ;
if ( poll . id === pollId ) {
polls . splice ( i , 1 ) ;
}
}
} ;
/// setups provider, which will be used for sending messages
var reset = function ( ) {
ProviderManager . prototype . set = function ( provider ) {
polls . forEach ( function ( poll ) {
this . provider = provider ;
poll . uninstall ( poll . id ) ;
} ;
} ) ;
polls = [ ] ;
} ;
/// this method is only used, when we do not have native qt bindings and have to do polling on our own
var poll = function ( ) {
/// should be callled, on start watching for eth/shh changes
polls . forEach ( function ( data ) {
ProviderManager . prototype . startPolling = function ( data , pollId , callback ) {
var result = send ( data . data ) ;
this . polls . push ( { data : data , id : pollId , callback : callback } ) ;
if ( ! ( result instanceof Array ) || result . length === 0 ) {
} ;
return ;
}
data . callback ( result ) ;
} ) ;
setTimeout ( poll , c . ETH_POLLING_TIMEOUT ) ;
} ;
poll ( ) ;
/// should be called to stop polling for certain watch changes
return {
ProviderManager . prototype . stopPolling = function ( pollId ) {
send : send ,
for ( var i = this . polls . length ; i -- ; ) {
setProvider : setProvider ,
var poll = this . polls [ i ] ;
startPolling : startPolling ,
if ( poll . id === pollId ) {
stopPolling : stopPolling ,
this . polls . splice ( i , 1 ) ;
reset : reset
}
} ;
}
} ;
} ;
module . exports = Provider Manager;
module . exports = request Manager;
} , { "./jsonrpc" : 8 , "./web3" : 13 } ] , 10 : [ function ( require , module , exports ) {
} , { "./const" : 2 , "./jsonrpc" : 10 } ] , 13 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -1119,25 +1295,29 @@ module.exports = ProviderManager;
You should have received a copy of the GNU Lesser General Public License
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
* /
/ * * @ f i l e q t s y n c . j s
/ * * @ f i l e s h h . j s
* @ authors :
* @ authors :
* Marek Kotewicz < marek @ ethdev . com >
* Marek Kotewicz < marek @ ethdev . com >
* Marian Oancea < marian @ ethdev . com >
* @ date 2015
* @ date 2014
* /
* /
var QtSyncProvider = function ( ) {
/// @returns an array of objects describing web3.shh api methods
var methods = function ( ) {
return [
{ name : 'post' , call : 'shh_post' } ,
{ name : 'newIdentity' , call : 'shh_newIdentity' } ,
{ name : 'haveIdentity' , call : 'shh_haveIdentity' } ,
{ name : 'newGroup' , call : 'shh_newGroup' } ,
{ name : 'addToGroup' , call : 'shh_addToGroup' }
] ;
} ;
} ;
QtSyncProvider . prototype . send = function ( payload ) {
module . exports = {
var result = navigator . qt . callMethod ( JSON . stringify ( payload ) ) ;
methods : methods
return JSON . parse ( result ) ;
} ;
} ;
module . exports = QtSyncProvider ;
} , { } ] , 11 : [ function ( require , module , exports ) {
} , { } ] , 14 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -1218,7 +1398,7 @@ module.exports = {
} ;
} ;
} , { "./formatters" : 6 } ] , 12 : [ function ( require , module , exports ) {
} , { "./formatters" : 8 } ] , 15 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -1362,7 +1542,7 @@ module.exports = {
} ;
} ;
} , { "./const" : 2 } ] , 13 : [ function ( require , module , exports ) {
} , { "./const" : 2 } ] , 16 : [ function ( require , module , exports ) {
/ *
/ *
This file is part of ethereum . js .
This file is part of ethereum . js .
@ -1379,100 +1559,14 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
* /
/ * * @ f i l e w e b 3 . j s
/ * * @ f i l e w a t c h e s . j s
* @ authors :
* @ authors :
* Jeffrey Wilcke < jeff @ ethdev . com >
* Marek Kotewicz < marek @ ethdev . com >
* Marek Kotewicz < marek @ ethdev . com >
* Marian Oancea < marian @ ethdev . com >
* @ date 2015
* Gav Wood < g @ ethdev . com >
* @ date 2014
* /
* /
if ( "build" !== 'build' ) { / *
var BigNumber = require ( 'bignumber.js' ) ;
* / }
var utils = require ( './utils' ) ;
/// @returns an array of objects describing web3 api methods
var web3Methods = function ( ) {
return [
{ name : 'sha3' , call : 'web3_sha3' }
] ;
} ;
/// @returns an array of objects describing web3.eth api methods
var ethMethods = function ( ) {
var blockCall = function ( args ) {
return typeof args [ 0 ] === "string" ? "eth_blockByHash" : "eth_blockByNumber" ;
} ;
var transactionCall = function ( args ) {
return typeof args [ 0 ] === "string" ? 'eth_transactionByHash' : 'eth_transactionByNumber' ;
} ;
var uncleCall = function ( args ) {
return typeof args [ 0 ] === "string" ? 'eth_uncleByHash' : 'eth_uncleByNumber' ;
} ;
var methods = [
{ name : 'balanceAt' , call : 'eth_balanceAt' } ,
{ name : 'stateAt' , call : 'eth_stateAt' } ,
{ name : 'storageAt' , call : 'eth_storageAt' } ,
{ name : 'countAt' , call : 'eth_countAt' } ,
{ name : 'codeAt' , call : 'eth_codeAt' } ,
{ name : 'transact' , call : 'eth_transact' } ,
{ name : 'call' , call : 'eth_call' } ,
{ name : 'block' , call : blockCall } ,
{ name : 'transaction' , call : transactionCall } ,
{ name : 'uncle' , call : uncleCall } ,
{ name : 'compilers' , call : 'eth_compilers' } ,
{ name : 'flush' , call : 'eth_flush' } ,
{ name : 'lll' , call : 'eth_lll' } ,
{ name : 'solidity' , call : 'eth_solidity' } ,
{ name : 'serpent' , call : 'eth_serpent' } ,
{ name : 'logs' , call : 'eth_logs' }
] ;
return methods ;
} ;
/// @returns an array of objects describing web3.eth api properties
var ethProperties = function ( ) {
return [
{ name : 'coinbase' , getter : 'eth_coinbase' , setter : 'eth_setCoinbase' } ,
{ name : 'listening' , getter : 'eth_listening' , setter : 'eth_setListening' } ,
{ name : 'mining' , getter : 'eth_mining' , setter : 'eth_setMining' } ,
{ name : 'gasPrice' , getter : 'eth_gasPrice' } ,
{ name : 'accounts' , getter : 'eth_accounts' } ,
{ name : 'peerCount' , getter : 'eth_peerCount' } ,
{ name : 'defaultBlock' , getter : 'eth_defaultBlock' , setter : 'eth_setDefaultBlock' } ,
{ name : 'number' , getter : 'eth_number' }
] ;
} ;
/// @returns an array of objects describing web3.db api methods
var dbMethods = function ( ) {
return [
{ name : 'put' , call : 'db_put' } ,
{ name : 'get' , call : 'db_get' } ,
{ name : 'putString' , call : 'db_putString' } ,
{ name : 'getString' , call : 'db_getString' }
] ;
} ;
/// @returns an array of objects describing web3.shh api methods
var shhMethods = function ( ) {
return [
{ name : 'post' , call : 'shh_post' } ,
{ name : 'newIdentity' , call : 'shh_newIdentity' } ,
{ name : 'haveIdentity' , call : 'shh_haveIdentity' } ,
{ name : 'newGroup' , call : 'shh_newGroup' } ,
{ name : 'addToGroup' , call : 'shh_addToGroup' }
] ;
} ;
/// @returns an array of objects describing web3.eth.watch api methods
/// @returns an array of objects describing web3.eth.watch api methods
var ethWatchMethods = function ( ) {
var eth = function ( ) {
var newFilter = function ( args ) {
var newFilter = function ( args ) {
return typeof args [ 0 ] === 'string' ? 'eth_newFilterString' : 'eth_newFilter' ;
return typeof args [ 0 ] === 'string' ? 'eth_newFilterString' : 'eth_newFilter' ;
} ;
} ;
@ -1485,7 +1579,7 @@ var ethWatchMethods = function () {
} ;
} ;
/// @returns an array of objects describing web3.shh.watch api methods
/// @returns an array of objects describing web3.shh.watch api methods
var shhWatchMethods = function ( ) {
var shh = function ( ) {
return [
return [
{ name : 'newFilter' , call : 'shh_newFilter' } ,
{ name : 'newFilter' , call : 'shh_newFilter' } ,
{ name : 'uninstallFilter' , call : 'shh_uninstallFilter' } ,
{ name : 'uninstallFilter' , call : 'shh_uninstallFilter' } ,
@ -1493,6 +1587,57 @@ var shhWatchMethods = function () {
] ;
] ;
} ;
} ;
module . exports = {
eth : eth ,
shh : shh
} ;
} , { } ] , 17 : [ function ( require , module , exports ) {
/ *
This file is part of ethereum . js .
ethereum . js is free software : you can redistribute it and / or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
ethereum . js is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with ethereum . js . If not , see < http : //www.gnu.org/licenses/>.
* /
/ * * @ f i l e w e b 3 . j s
* @ authors :
* Jeffrey Wilcke < jeff @ ethdev . com >
* Marek Kotewicz < marek @ ethdev . com >
* Marian Oancea < marian @ ethdev . com >
* Gav Wood < g @ ethdev . com >
* @ date 2014
* /
if ( "build" !== 'build' ) { / *
var BigNumber = require ( 'bignumber.js' ) ;
* / }
var eth = require ( './eth' ) ;
var db = require ( './db' ) ;
var shh = require ( './shh' ) ;
var watches = require ( './watches' ) ;
var filter = require ( './filter' ) ;
var utils = require ( './utils' ) ;
var requestManager = require ( './requestmanager' ) ;
/// @returns an array of objects describing web3 api methods
var web3Methods = function ( ) {
return [
{ name : 'sha3' , call : 'web3_sha3' }
] ;
} ;
/// creates methods in a given object based on method description on input
/// creates methods in a given object based on method description on input
/// setups api calls for these methods
/// setups api calls for these methods
var setupMethods = function ( obj , methods ) {
var setupMethods = function ( obj , methods ) {
@ -1500,7 +1645,7 @@ var setupMethods = function (obj, methods) {
obj [ method . name ] = function ( ) {
obj [ method . name ] = function ( ) {
var args = Array . prototype . slice . call ( arguments ) ;
var args = Array . prototype . slice . call ( arguments ) ;
var call = typeof method . call === 'function' ? method . call ( args ) : method . call ;
var call = typeof method . call === 'function' ? method . call ( args ) : method . call ;
return web3 . provid er. send ( {
return web3 . manag er. send ( {
method : call ,
method : call ,
params : args
params : args
} ) ;
} ) ;
@ -1514,14 +1659,14 @@ var setupProperties = function (obj, properties) {
properties . forEach ( function ( property ) {
properties . forEach ( function ( property ) {
var proto = { } ;
var proto = { } ;
proto . get = function ( ) {
proto . get = function ( ) {
return web3 . provid er. send ( {
return web3 . manag er. send ( {
method : property . getter
method : property . getter
} ) ;
} ) ;
} ;
} ;
if ( property . setter ) {
if ( property . setter ) {
proto . set = function ( val ) {
proto . set = function ( val ) {
return web3 . provid er. send ( {
return web3 . manag er. send ( {
method : property . setter ,
method : property . setter ,
params : [ val ]
params : [ val ]
} ) ;
} ) ;
@ -1531,10 +1676,30 @@ var setupProperties = function (obj, properties) {
} ) ;
} ) ;
} ;
} ;
var startPolling = function ( method , id , callback , uninstall ) {
web3 . manager . startPolling ( {
method : method ,
params : [ id ]
} , id , callback , uninstall ) ;
} ;
var stopPolling = function ( id ) {
web3 . manager . stopPolling ( id ) ;
} ;
var ethWatch = {
startPolling : startPolling . bind ( null , 'eth_changed' ) ,
stopPolling : stopPolling
} ;
var shhWatch = {
startPolling : startPolling . bind ( null , 'shh_changed' ) ,
stopPolling : stopPolling
} ;
/// setups web3 object, and it's in-browser executed methods
/// setups web3 object, and it's in-browser executed methods
var web3 = {
var web3 = {
_ callbacks : { } ,
manager : requestManager ( ) ,
_ events : { } ,
providers : { } ,
providers : { } ,
/// @returns ascii string representation of hex value prefixed with 0x
/// @returns ascii string representation of hex value prefixed with 0x
@ -1573,11 +1738,12 @@ var web3 = {
/// @param filter may be a string, object or event
/// @param filter may be a string, object or event
/// @param indexed is optional, this is an object with optional event indexed params
/// @param indexed is optional, this is an object with optional event indexed params
/// @param options is optional, this is an object with optional event options ('max'...)
/// @param options is optional, this is an object with optional event options ('max'...)
watch : function ( filter , indexed , options ) {
/// TODO: fix it, 4 params? no way
if ( filter . _ isEvent ) {
watch : function ( fil , indexed , options , formatter ) {
return filter ( indexed , options ) ;
if ( fil . _ isEvent ) {
return fil ( indexed , options ) ;
}
}
return new web3 . filter ( filter , ethWatch ) ;
return filter ( fil , ethWatch , formatter ) ;
}
}
} ,
} ,
@ -1586,54 +1752,44 @@ var web3 = {
/// shh object prototype
/// shh object prototype
shh : {
shh : {
/// @param filter may be a string, object or event
/// @param filter may be a string, object or event
watch : function ( filter , indexed ) {
watch : function ( fil ) {
return new web3 . filter ( filter , shhWatch ) ;
return filter ( fil , shhWatch ) ;
}
}
} ,
} ,
setProvider : function ( provider ) {
web3 . manager . setProvider ( provider ) ;
} ,
/// Should be called to reset state of web3 object
/// Resets everything except manager
reset : function ( ) {
web3 . manager . reset ( ) ;
}
} ;
} ;
/// setups all api methods
/// setups all api methods
setupMethods ( web3 , web3Methods ( ) ) ;
setupMethods ( web3 , web3Methods ( ) ) ;
setupMethods ( web3 . eth , ethMethods ( ) ) ;
setupMethods ( web3 . eth , eth . methods ( ) ) ;
setupProperties ( web3 . eth , ethProperties ( ) ) ;
setupProperties ( web3 . eth , eth . properties ( ) ) ;
setupMethods ( web3 . db , dbMethods ( ) ) ;
setupMethods ( web3 . db , db . methods ( ) ) ;
setupMethods ( web3 . shh , shhMethods ( ) ) ;
setupMethods ( web3 . shh , shh . methods ( ) ) ;
setupMethods ( ethWatch , watches . eth ( ) ) ;
var ethWatch = {
setupMethods ( shhWatch , watches . shh ( ) ) ;
changed : 'eth_changed'
} ;
setupMethods ( ethWatch , ethWatchMethods ( ) ) ;
var shhWatch = {
changed : 'shh_changed'
} ;
setupMethods ( shhWatch , shhWatchMethods ( ) ) ;
web3 . setProvider = function ( provider ) {
web3 . provider . set ( provider ) ;
} ;
module . exports = web3 ;
module . exports = web3 ;
} , { "./utils " : 12 } ] , "web3" : [ function ( require , module , exports ) {
} , { "./db" : 4 , "./eth" : 5 , "./filter" : 7 , "./requestmanager" : 12 , "./shh" : 13 , "./utils" : 15 , "./watches" : 16 } ] , "web3" : [ function ( require , module , exports ) {
var web3 = require ( './lib/web3' ) ;
var web3 = require ( './lib/web3' ) ;
var ProviderManager = require ( './lib/providermanager' ) ;
web3 . provider = new ProviderManager ( ) ;
web3 . filter = require ( './lib/filter' ) ;
web3 . providers . HttpSyncProvider = require ( './lib/httpsync' ) ;
web3 . providers . HttpSyncProvider = require ( './lib/httpsync' ) ;
web3 . providers . QtSyncProvider = require ( './lib/qtsync' ) ;
web3 . providers . QtSyncProvider = require ( './lib/qtsync' ) ;
web3 . eth . contract = require ( './lib/contract' ) ;
web3 . eth . contract = require ( './lib/contract' ) ;
web3 . abi = require ( './lib/abi' ) ;
web3 . abi = require ( './lib/abi' ) ;
module . exports = web3 ;
module . exports = web3 ;
} , { "./lib/abi" : 1 , "./lib/contract" : 3 , "./lib/filter" : 5 , "./lib/ httpsync" : 7 , "./lib/providermanager" : 9 , "./lib/qtsync" : 10 , "./lib/web3" : 13 } ] } , { } , [ "web3" ] )
} , { "./lib/abi" : 1 , "./lib/contract" : 3 , "./lib/httpsync" : 9 , "./lib/qtsync" : 11 , "./lib/web3" : 17 } ] } , { } , [ "web3" ] )
//# sourceMappingURL=ethereum.js.map
//# sourceMappingURL=ethereum.js.map