Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
a1c830cd
Commit
a1c830cd
authored
Feb 26, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Defautl block
parent
49ded3aa
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
488 additions
and
316 deletions
+488
-316
info.html
cmd/mist/assets/examples/info.html
+5
-2
ethereum.js
cmd/mist/assets/ext/ethereum.js/dist/ethereum.js
+452
-282
api.go
rpc/api.go
+31
-32
No files found.
cmd/mist/assets/examples/info.html
View file @
a1c830cd
...
...
@@ -62,6 +62,8 @@
web3
.
setProvider
(
new
web3
.
providers
.
HttpSyncProvider
(
'http://localhost:8545'
));
eth
.
defaultBlock
=
-
2
document
.
querySelector
(
"#number"
).
innerHTML
=
eth
.
number
;
document
.
querySelector
(
"#coinbase"
).
innerHTML
=
eth
.
coinbase
document
.
querySelector
(
"#peer_count"
).
innerHTML
=
eth
.
peerCount
;
...
...
@@ -75,6 +77,7 @@
document
.
querySelector
(
"#number"
).
innerHTML
=
eth
.
number
;
});
</script>
</html>
...
...
cmd/mist/assets/ext/ethereum.js/dist/ethereum.js
View file @
a1c830cd
...
...
@@ -53,7 +53,6 @@ var inputTypes = types.inputTypes();
/// @returns bytes representation of input params
var
formatInput
=
function
(
inputs
,
params
)
{
var
bytes
=
""
;
var
padding
=
c
.
ETH_PADDING
*
2
;
/// first we iterate in search for dynamic
inputs
.
forEach
(
function
(
input
,
index
)
{
...
...
@@ -110,6 +109,7 @@ var formatOutput = function (outs, output) {
output
=
output
.
slice
(
dynamicPartLength
);
outs
.
forEach
(
function
(
out
,
i
)
{
/*jshint maxcomplexity:6 */
var
typeMatch
=
false
;
for
(
var
j
=
0
;
j
<
outputTypes
.
length
&&
!
typeMatch
;
j
++
)
{
typeMatch
=
outputTypes
[
j
].
type
(
outs
[
i
].
type
);
...
...
@@ -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.
...
...
@@ -264,7 +264,8 @@ module.exports = {
ETH_PADDING
:
32
,
ETH_SIGNATURE_LENGTH
:
4
,
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
};
...
...
@@ -340,6 +341,7 @@ var addFunctionsToContract = function (contract, desc, address) {
var
typeName
=
utils
.
extractTypeName
(
method
.
name
);
var
impl
=
function
()
{
/*jshint maxcomplexity:7 */
var
params
=
Array
.
prototype
.
slice
.
call
(
arguments
);
var
signature
=
abi
.
signatureFromAscii
(
method
.
name
);
var
parsed
=
inputParser
[
displayName
][
typeName
].
apply
(
null
,
params
);
...
...
@@ -416,11 +418,11 @@ var addEventsToContract = function (contract, desc, address) {
var
signature
=
abi
.
eventSignatureFromAscii
(
e
.
name
);
var
event
=
eventImpl
.
inputParser
(
address
,
signature
,
e
);
var
o
=
event
.
apply
(
null
,
params
);
o
.
_onWatchEventResult
=
function
(
data
)
{
var
outputFormatter
=
function
(
data
)
{
var
parser
=
eventImpl
.
outputParser
(
e
);
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
...
...
@@ -487,7 +489,131 @@ var contract = function (address, desc) {
module
.
exports
=
contract
;
},{
"./abi"
:
1
,
"./event"
:
4
,
"./utils"
:
12
,
"./web3"
:
13
}],
4
:[
function
(
require
,
module
,
exports
){
},{
"./abi"
:
1
,
"./event"
:
6
,
"./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/>.
*/
/** @file db.js
* @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/>.
*/
/** @file eth.js
* @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.
...
...
@@ -571,9 +697,9 @@ var getArgumentsObject = function (inputs, indexed, notIndexed) {
return
inputs
.
reduce
(
function
(
acc
,
current
)
{
var
value
;
if
(
current
.
indexed
)
value
=
indexed
.
splice
(
0
,
1
)[
0
];
value
=
indexed
Copy
.
splice
(
0
,
1
)[
0
];
else
value
=
notIndexed
.
splice
(
0
,
1
)[
0
];
value
=
notIndexed
Copy
.
splice
(
0
,
1
)[
0
];
acc
[
current
.
name
]
=
value
;
return
acc
;
...
...
@@ -589,6 +715,7 @@ var outputParser = function (event) {
args
:
{}
};
output
.
topics
=
output
.
topic
;
// fallback for go-ethereum
if
(
!
output
.
topic
)
{
return
result
;
}
...
...
@@ -624,7 +751,7 @@ module.exports = {
};
},{
"./abi"
:
1
,
"./utils"
:
1
2
}],
5
:[
function
(
require
,
module
,
exports
){
},{
"./abi"
:
1
,
"./utils"
:
1
5
}],
7
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -650,24 +777,33 @@ module.exports = {
* @date 2014
*/
var
web3
=
require
(
'./web3'
);
// jshint ignore:line
/// should be used when we want to watch something
/// it's using inner polling mechanism and is notified about changes
/// TODO: change 'options' name cause it may be not the best matching one, since we have events
var
Filter
=
function
(
options
,
impl
)
{
/// Should be called to check if filter implementation is valid
/// @returns true if it is, otherwise false
var
implementationIsValid
=
function
(
i
)
{
return
!!
i
&&
typeof
i
.
newFilter
===
'function'
&&
typeof
i
.
getMessages
===
'function'
&&
typeof
i
.
uninstallFilter
===
'function'
&&
typeof
i
.
startPolling
===
'function'
&&
typeof
i
.
stopPolling
===
'function'
;
};
/// 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
var
getOptions
=
function
(
options
)
{
if
(
typeof
options
===
'string'
)
{
return
options
;
}
if
(
typeof
options
!==
"string"
)
{
options
=
options
||
{};
// topics property is deprecated, warn about it!
if
(
options
.
topics
)
{
console
.
warn
(
'"topics" is deprecated, use
"topic" instead'
);
console
.
warn
(
'"topics" is deprecated, is
"topic" instead'
);
}
this
.
_onWatchResult
=
options
.
_onWatchEventResult
;
// evaluate lazy properties
options
=
{
return
{
to
:
options
.
to
,
topic
:
options
.
topic
,
earliest
:
options
.
earliest
,
...
...
@@ -676,58 +812,61 @@ var Filter = function(options, impl) {
skip
:
options
.
skip
,
address
:
options
.
address
};
};
/// Should be used when we want to watch something
/// it's using inner polling mechanism and is notified about changes
/// @param options are filter options
/// @param implementation, an abstract polling implementation
/// @param formatter (optional), callback function which formats output before 'real' callback
var
filter
=
function
(
options
,
implementation
,
formatter
)
{
if
(
!
implementationIsValid
(
implementation
))
{
console
.
error
(
'filter implemenation is invalid'
);
return
;
}
this
.
impl
=
impl
;
this
.
callbacks
=
[];
options
=
getOptions
(
options
);
var
callbacks
=
[];
var
filterId
=
implementation
.
newFilter
(
options
);
var
onMessages
=
function
(
messages
)
{
messages
.
forEach
(
function
(
message
)
{
message
=
formatter
?
formatter
(
message
)
:
message
;
callbacks
.
forEach
(
function
(
callback
)
{
callback
(
message
);
});
});
};
this
.
id
=
impl
.
newFilter
(
options
);
web3
.
provider
.
startPolling
({
method
:
impl
.
changed
,
params
:
[
this
.
id
]},
this
.
id
,
this
.
trigger
.
bind
(
this
));
};
implementation
.
startPolling
(
filterId
,
onMessages
,
implementation
.
uninstallFilter
);
/// alias for changed*
Filter
.
prototype
.
arrived
=
function
(
callback
)
{
this
.
changed
(
callback
);
};
Filter
.
prototype
.
happened
=
function
(
callback
)
{
this
.
changed
(
callback
);
};
/// gets called when there is new eth/shh message
Filter
.
prototype
.
changed
=
function
(
callback
)
{
this
.
callbacks
.
push
(
callback
);
};
var
changed
=
function
(
callback
)
{
callbacks
.
push
(
callback
);
};
/// trigger calling new message from people
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
);
}
}
};
var
messages
=
function
()
{
return
implementation
.
getMessages
(
filterId
);
};
/// should be called to uninstall current filter
Filter
.
prototype
.
uninstall
=
function
()
{
this
.
impl
.
uninstallFilter
(
this
.
i
d
);
web3
.
provider
.
stopPolling
(
this
.
id
)
;
};
var
uninstall
=
function
()
{
implementation
.
stopPolling
(
filterId
);
implementation
.
uninstallFilter
(
filterI
d
);
callbacks
=
[]
;
};
/// should be called to manually trigger getting latest messages from the client
Filter
.
prototype
.
messages
=
function
()
{
return
this
.
impl
.
getMessages
(
this
.
id
);
return
{
changed
:
changed
,
arrived
:
changed
,
happened
:
changed
,
messages
:
messages
,
logs
:
messages
,
uninstall
:
uninstall
};
};
/// alias for messages
Filter
.
prototype
.
logs
=
function
()
{
return
this
.
messages
();
};
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.
...
...
@@ -770,6 +909,7 @@ var padLeft = function (string, chars, sign) {
/// If the value is floating point, round it down
/// @returns right-aligned byte representation of int
var
formatInputInt
=
function
(
value
)
{
/*jshint maxcomplexity:7 */
var
padding
=
c
.
ETH_PADDING
*
2
;
if
(
value
instanceof
BigNumber
||
typeof
value
===
'number'
)
{
if
(
typeof
value
===
'number'
)
...
...
@@ -883,7 +1023,7 @@ module.exports = {
};
},{
"./const"
:
2
,
"./utils"
:
1
2
}],
7
:[
function
(
require
,
module
,
exports
){
},{
"./const"
:
2
,
"./utils"
:
1
5
}],
9
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -923,15 +1063,17 @@ HttpSyncProvider.prototype.send = function (payload) {
request
.
open
(
'POST'
,
this
.
host
,
false
);
request
.
send
(
JSON
.
stringify
(
payload
));
// check request.status
var
result
=
request
.
responseText
;
// check request.status
if
(
request
.
status
!==
200
)
return
;
return
JSON
.
parse
(
result
);
};
module
.
exports
=
HttpSyncProvider
;
},{}],
8
:[
function
(
require
,
module
,
exports
){
},{}],
10
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -998,7 +1140,7 @@ module.exports = {
},{}],
9
:[
function
(
require
,
module
,
exports
){
},{}],
11
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -1015,7 +1157,42 @@ module.exports = {
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/>.
*/
/** @file providermanager.js
/** @file qtsync.js
* @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.
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/>.
*/
/** @file requestmanager.js
* @authors:
* Jeffrey Wilcke <jeff@ethdev.com>
* Marek Kotewicz <marek@ethdev.com>
...
...
@@ -1024,51 +1201,28 @@ module.exports = {
* @date 2014
*/
var
web3
=
require
(
'./web3'
);
var
jsonrpc
=
require
(
'./jsonrpc'
);
var
c
=
require
(
'./const'
);
/**
* Provider manager object prototype
* 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
* Default poll timeout is 12 seconds
* 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
* Default poll timeout is 1 second
*/
var
ProviderManager
=
function
()
{
this
.
polls
=
[];
this
.
provider
=
undefined
;
var
self
=
this
;
var
poll
=
function
()
{
self
.
polls
.
forEach
(
function
(
data
)
{
var
result
=
self
.
send
(
data
.
data
);
if
(
!
(
result
instanceof
Array
)
||
result
.
length
===
0
)
{
return
;
}
data
.
callback
(
result
);
});
setTimeout
(
poll
,
1000
);
};
poll
();
};
var
requestManager
=
function
()
{
var
polls
=
[];
var
timeout
=
null
;
var
provider
;
/// sends outgoing requests
/// @params data - an object with at least 'method' property
ProviderManager
.
prototype
.
send
=
function
(
data
)
{
var
send
=
function
(
data
)
{
var
payload
=
jsonrpc
.
toPayload
(
data
.
method
,
data
.
params
);
if
(
this
.
provider
===
undefined
)
{
if
(
!
provider
)
{
console
.
error
(
'provider is not set'
);
return
null
;
}
var
result
=
this
.
provider
.
send
(
payload
);
var
result
=
provider
.
send
(
payload
);
if
(
!
jsonrpc
.
isValidResponse
(
result
))
{
console
.
log
(
result
);
...
...
@@ -1076,33 +1230,66 @@ ProviderManager.prototype.send = function(data) {
}
return
result
.
result
;
};
};
/// setups provider, which will be used for sending messages
ProviderManager
.
prototype
.
set
=
function
(
provider
)
{
this
.
provider
=
provider
;
};
var
setProvider
=
function
(
p
)
{
provider
=
p
;
};
/// this method is only used, when we do not have native qt bindings and have to do polling on our own
/// should be callled, on start watching for eth/shh changes
ProviderManager
.
prototype
.
startPolling
=
function
(
data
,
pollId
,
callback
)
{
this
.
polls
.
push
({
data
:
data
,
id
:
pollId
,
callback
:
callback
})
;
};
/*jshint maxparams:4 */
var
startPolling
=
function
(
data
,
pollId
,
callback
,
uninstall
)
{
polls
.
push
({
data
:
data
,
id
:
pollId
,
callback
:
callback
,
uninstall
:
uninstall
});
}
;
/*jshint maxparams:3 */
/// should be called to stop polling for certain watch changes
ProviderManager
.
prototype
.
stopPolling
=
function
(
pollId
)
{
for
(
var
i
=
this
.
polls
.
length
;
i
--
;)
{
var
poll
=
this
.
polls
[
i
];
var
stopPolling
=
function
(
pollId
)
{
for
(
var
i
=
polls
.
length
;
i
--
;)
{
var
poll
=
polls
[
i
];
if
(
poll
.
id
===
pollId
)
{
this
.
polls
.
splice
(
i
,
1
);
polls
.
splice
(
i
,
1
);
}
}
};
var
reset
=
function
()
{
polls
.
forEach
(
function
(
poll
)
{
poll
.
uninstall
(
poll
.
id
);
});
polls
=
[];
if
(
timeout
)
{
clearTimeout
(
timeout
);
timeout
=
null
;
}
poll
();
};
var
poll
=
function
()
{
polls
.
forEach
(
function
(
data
)
{
var
result
=
send
(
data
.
data
);
if
(
!
(
result
instanceof
Array
)
||
result
.
length
===
0
)
{
return
;
}
data
.
callback
(
result
);
});
timeout
=
setTimeout
(
poll
,
c
.
ETH_POLLING_TIMEOUT
);
};
poll
();
return
{
send
:
send
,
setProvider
:
setProvider
,
startPolling
:
startPolling
,
stopPolling
:
stopPolling
,
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.
...
...
@@ -1119,25 +1306,29 @@ module.exports = ProviderManager;
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/>.
*/
/** @file
qtsync
.js
/** @file
shh
.js
* @authors:
* Marek Kotewicz <marek@ethdev.com>
* Marian Oancea <marian@ethdev.com>
* @date 2014
* @date 2015
*/
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
)
{
var
result
=
navigator
.
qt
.
callMethod
(
JSON
.
stringify
(
payload
));
return
JSON
.
parse
(
result
);
module
.
exports
=
{
methods
:
methods
};
module
.
exports
=
QtSyncProvider
;
},{}],
1
1
:[
function
(
require
,
module
,
exports
){
},{}],
1
4
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -1218,7 +1409,7 @@ module.exports = {
};
},{
"./formatters"
:
6
}],
12
:[
function
(
require
,
module
,
exports
){
},{
"./formatters"
:
8
}],
15
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -1328,6 +1519,7 @@ var filterEvents = function (json) {
/// TODO: use BigNumber.js to parse int
/// TODO: add tests for it!
var
toEth
=
function
(
str
)
{
/*jshint maxcomplexity:7 */
var
val
=
typeof
str
===
"string"
?
str
.
indexOf
(
'0x'
)
===
0
?
parseInt
(
str
.
substr
(
2
),
16
)
:
parseInt
(
str
)
:
str
;
var
unit
=
0
;
var
units
=
c
.
ETH_UNITS
;
...
...
@@ -1362,7 +1554,7 @@ module.exports = {
};
},{
"./const"
:
2
}],
1
3
:[
function
(
require
,
module
,
exports
){
},{
"./const"
:
2
}],
1
6
:[
function
(
require
,
module
,
exports
){
/*
This file is part of ethereum.js.
...
...
@@ -1379,102 +1571,14 @@ module.exports = {
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/>.
*/
/** @file w
eb3
.js
/** @file w
atches
.js
* @authors:
* Jeffrey Wilcke <jeff@ethdev.com>
* Marek Kotewicz <marek@ethdev.com>
* Marian Oancea <marian@ethdev.com>
* Gav Wood <g@ethdev.com>
* @date 2014
* @date 2015
*/
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
:
'register'
,
call
:
'eth_register'
},
{
name
:
'unregister'
,
call
:
'eth_unregister'
},
{
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
var
eth
WatchMethods
=
function
()
{
var
eth
=
function
()
{
var
newFilter
=
function
(
args
)
{
return
typeof
args
[
0
]
===
'string'
?
'eth_newFilterString'
:
'eth_newFilter'
;
};
...
...
@@ -1487,7 +1591,7 @@ var ethWatchMethods = function () {
};
/// @returns an array of objects describing web3.shh.watch api methods
var
shh
WatchMethods
=
function
()
{
var
shh
=
function
()
{
return
[
{
name
:
'newFilter'
,
call
:
'shh_newFilter'
},
{
name
:
'uninstallFilter'
,
call
:
'shh_uninstallFilter'
},
...
...
@@ -1495,6 +1599,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/>.
*/
/** @file web3.js
* @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
/// setups api calls for these methods
var
setupMethods
=
function
(
obj
,
methods
)
{
...
...
@@ -1502,7 +1657,7 @@ var setupMethods = function (obj, methods) {
obj
[
method
.
name
]
=
function
()
{
var
args
=
Array
.
prototype
.
slice
.
call
(
arguments
);
var
call
=
typeof
method
.
call
===
'function'
?
method
.
call
(
args
)
:
method
.
call
;
return
web3
.
provid
er
.
send
({
return
web3
.
manag
er
.
send
({
method
:
call
,
params
:
args
});
...
...
@@ -1516,14 +1671,14 @@ var setupProperties = function (obj, properties) {
properties
.
forEach
(
function
(
property
)
{
var
proto
=
{};
proto
.
get
=
function
()
{
return
web3
.
provid
er
.
send
({
return
web3
.
manag
er
.
send
({
method
:
property
.
getter
});
};
if
(
property
.
setter
)
{
proto
.
set
=
function
(
val
)
{
return
web3
.
provid
er
.
send
({
return
web3
.
manag
er
.
send
({
method
:
property
.
setter
,
params
:
[
val
]
});
...
...
@@ -1533,10 +1688,32 @@ var setupProperties = function (obj, properties) {
});
};
/*jshint maxparams:4 */
var
startPolling
=
function
(
method
,
id
,
callback
,
uninstall
)
{
web3
.
manager
.
startPolling
({
method
:
method
,
params
:
[
id
]
},
id
,
callback
,
uninstall
);
};
/*jshint maxparams:3 */
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
var
web3
=
{
_callbacks
:
{},
_events
:
{},
manager
:
requestManager
(),
providers
:
{},
/// @returns ascii string representation of hex value prefixed with 0x
...
...
@@ -1575,12 +1752,15 @@ var web3 = {
/// @param filter may be a string, object or event
/// @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'...)
watch
:
function
(
filter
,
indexed
,
options
)
{
if
(
filter
.
_isEvent
)
{
return
filter
(
indexed
,
options
);
/// TODO: fix it, 4 params? no way
/*jshint maxparams:4 */
watch
:
function
(
fil
,
indexed
,
options
,
formatter
)
{
if
(
fil
.
_isEvent
)
{
return
fil
(
indexed
,
options
);
}
return
new
web3
.
filter
(
filter
,
ethWatch
);
return
filter
(
fil
,
ethWatch
,
formatter
);
}
/*jshint maxparams:3 */
},
/// db object prototype
...
...
@@ -1588,54 +1768,44 @@ var web3 = {
/// shh object prototype
shh
:
{
/// @param filter may be a string, object or event
watch
:
function
(
fil
ter
,
indexed
)
{
return
new
web3
.
filter
(
filter
,
shhWatch
);
watch
:
function
(
fil
)
{
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
setupMethods
(
web3
,
web3Methods
());
setupMethods
(
web3
.
eth
,
ethMethods
());
setupProperties
(
web3
.
eth
,
ethProperties
());
setupMethods
(
web3
.
db
,
dbMethods
());
setupMethods
(
web3
.
shh
,
shhMethods
());
var
ethWatch
=
{
changed
:
'eth_changed'
};
setupMethods
(
ethWatch
,
ethWatchMethods
());
var
shhWatch
=
{
changed
:
'shh_changed'
};
setupMethods
(
shhWatch
,
shhWatchMethods
());
web3
.
setProvider
=
function
(
provider
)
{
web3
.
provider
.
set
(
provider
);
};
setupMethods
(
web3
.
eth
,
eth
.
methods
());
setupProperties
(
web3
.
eth
,
eth
.
properties
());
setupMethods
(
web3
.
db
,
db
.
methods
());
setupMethods
(
web3
.
shh
,
shh
.
methods
());
setupMethods
(
ethWatch
,
watches
.
eth
());
setupMethods
(
shhWatch
,
watches
.
shh
());
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
ProviderManager
=
require
(
'./lib/providermanager'
);
web3
.
provider
=
new
ProviderManager
();
web3
.
filter
=
require
(
'./lib/filter'
);
web3
.
providers
.
HttpSyncProvider
=
require
(
'./lib/httpsync'
);
web3
.
providers
.
QtSyncProvider
=
require
(
'./lib/qtsync'
);
web3
.
eth
.
contract
=
require
(
'./lib/contract'
);
web3
.
abi
=
require
(
'./lib/abi'
);
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
rpc/api.go
View file @
a1c830cd
...
...
@@ -52,7 +52,7 @@ type EthereumApi struct {
db
ethutil
.
Database
defaultBlockAge
int
defaultBlockAge
int
64
}
func
NewEthereumApi
(
eth
*
xeth
.
XEth
)
*
EthereumApi
{
...
...
@@ -65,6 +65,7 @@ func NewEthereumApi(eth *xeth.XEth) *EthereumApi {
logs
:
make
(
map
[
int
]
*
logFilter
),
messages
:
make
(
map
[
int
]
*
whisperFilter
),
db
:
db
,
defaultBlockAge
:
-
1
,
}
go
api
.
filterManager
.
Start
()
go
api
.
start
()
...
...
@@ -72,6 +73,22 @@ func NewEthereumApi(eth *xeth.XEth) *EthereumApi {
return
api
}
func
(
self
*
EthereumApi
)
setStateByBlockNumber
(
num
int64
)
{
chain
:=
self
.
xeth
()
.
Backend
()
.
ChainManager
()
var
block
*
types
.
Block
if
self
.
defaultBlockAge
<
0
{
num
=
chain
.
CurrentBlock
()
.
Number
()
.
Int64
()
+
num
+
1
}
block
=
chain
.
GetBlockByNumber
(
uint64
(
num
))
if
block
!=
nil
{
self
.
useState
(
state
.
New
(
block
.
Root
(),
self
.
xeth
()
.
Backend
()
.
Db
()))
}
else
{
self
.
useState
(
chain
.
State
())
}
}
func
(
self
*
EthereumApi
)
start
()
{
timer
:=
time
.
NewTicker
(
filterTickerTime
)
events
:=
self
.
mux
.
Subscribe
(
core
.
ChainEvent
{})
...
...
@@ -83,12 +100,7 @@ done:
switch
ev
.
(
type
)
{
case
core
.
ChainEvent
:
if
self
.
defaultBlockAge
<
0
{
chain
:=
self
.
xeth
()
.
Backend
()
.
ChainManager
()
block
:=
chain
.
GetBlockByNumber
(
chain
.
CurrentBlock
()
.
Number
()
.
Uint64
()
-
uint64
(
self
.
defaultBlockAge
))
if
block
!=
nil
{
statedb
:=
state
.
New
(
block
.
Root
(),
self
.
db
)
self
.
useState
(
statedb
)
}
self
.
setStateByBlockNumber
(
self
.
defaultBlockAge
)
}
}
case
<-
timer
.
C
:
...
...
@@ -239,21 +251,6 @@ func (p *EthereumApi) GetBlock(args *GetBlockArgs, reply *interface{}) error {
return
nil
}
/*
func unlockAccount(server, account *Account) bool {
pwd, status := server.PasswordDialog()
switch status {
case Ok:
if !account.Unlock([]byte(pwd)) {
return unlockAccount(account)
}
return true
default:
return false
}
}
*/
func
(
p
*
EthereumApi
)
Transact
(
args
*
NewTxArgs
,
reply
*
interface
{})
error
{
if
len
(
args
.
Gas
)
==
0
{
args
.
Gas
=
defaultGas
.
String
()
...
...
@@ -378,8 +375,10 @@ func (p *EthereumApi) GetDefaultBlockAge(reply *interface{}) error {
return
nil
}
func
(
p
*
EthereumApi
)
SetDefaultBlockAge
(
defaultBlockAge
int
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
SetDefaultBlockAge
(
defaultBlockAge
int
64
,
reply
*
interface
{})
error
{
p
.
defaultBlockAge
=
defaultBlockAge
p
.
setStateByBlockNumber
(
p
.
defaultBlockAge
)
*
reply
=
true
return
nil
}
...
...
@@ -531,7 +530,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
if
err
!=
nil
{
return
err
}
return
p
.
SetDefaultBlockAge
(
args
,
reply
)
return
p
.
SetDefaultBlockAge
(
int64
(
args
)
,
reply
)
case
"eth_peerCount"
:
return
p
.
GetPeerCount
(
reply
)
case
"eth_number"
:
...
...
@@ -720,7 +719,7 @@ func (self *EthereumApi) useState(statedb *state.StateDB) {
self
.
xethMu
.
Lock
()
defer
self
.
xethMu
.
Unlock
()
self
.
eth
=
self
.
xeth
()
.
UseState
(
statedb
)
self
.
eth
=
self
.
eth
.
UseState
(
statedb
)
}
func
t
(
f
ui
.
Frontend
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment