Compare commits

...

5089 Commits

Author SHA1 Message Date
Jeffrey Wilcke
f213a9d8e8 VERSION, cmd/geth: bumped version 1.4.3 2016-05-10 13:46:03 +02:00
Jeffrey Wilcke
6826b2040f [release/1.4.3] miner: fixed pending state by not shutting down update loop
(cherry picked from commit a824c3f02f)
2016-05-10 13:46:03 +02:00
Jeffrey Wilcke
2a3657d8d9 VERSION, cmd/geth: bumped version 1.4.2 2016-05-10 13:46:02 +02:00
Jeffrey Wilcke
290e851f57 VERSION, cmd/geth: bumped version 1.4.2 2016-05-09 22:06:27 +02:00
Jeffrey Wilcke
8f96d66241 Merge branch 'develop' into release/1.4 2016-05-09 22:04:40 +02:00
Péter Szilágyi
5782164a35 Merge pull request #2529 from fjl/fdlimit-bsd
cmd/utils: fix build on *BSD
2016-05-09 16:39:34 +03:00
Péter Szilágyi
27f657478f Merge pull request #2524 from fjl/windows-ci-scripts
build: add CI scripts for windows
2016-05-09 15:59:49 +03:00
Péter Szilágyi
756b62988c Merge pull request #2523 from fjl/shutdown
core, eth, miner: improve shutdown synchronisation
2016-05-09 15:59:41 +03:00
Felix Lange
f61e203c10 cmd/utils: fix build on *BSD 2016-05-09 13:13:44 +02:00
Felix Lange
56ed6152a1 core, eth, miner: improve shutdown synchronisation
Shutting down geth prints hundreds of annoying error messages in some
cases. The errors appear because the Stop method of eth.ProtocolManager,
miner.Miner and core.TxPool is asynchronous. Left over peer sessions
generate events which are processed after Stop even though the database
has already been closed.

The fix is to make Stop synchronous using sync.WaitGroup.

For eth.ProtocolManager, in order to make use of WaitGroup safe, we need
a way to stop new peer sessions from being added while waiting on the
WaitGroup. The eth protocol Run function now selects on a signaling
channel and adds to the WaitGroup only if ProtocolManager is not
shutting down.

For miner.worker and core.TxPool the number of goroutines is static,
WaitGroup can be used in the usual way without additional
synchronisation.
2016-05-09 13:03:08 +02:00
Péter Szilágyi
dc7f202ecd Merge pull request #2528 from karalabe/fix-web3-eth_syncing
jsre: hotfix web3 for the console eth.syncing formatting
2016-05-09 12:46:48 +03:00
Péter Szilágyi
1d42061e2c jsre: hotfix web3 for the console eth.syncing formatting 2016-05-09 11:59:59 +03:00
Jeffrey Wilcke
b6135a72dd Merge pull request #2527 from obscuren/trace-transaction-fix
eth: fixed tracing functions using the current header instead of parent
2016-05-09 10:34:53 +02:00
Jeffrey Wilcke
7d59c5c58d eth: fixed tracing functions using the current header instead of parent
Fixes #2525
2016-05-09 10:24:31 +02:00
Péter Szilágyi
8aa4597c9e Merge pull request #2520 from karalabe/makefile-cross-update
Makefile: go build instead of install (solves cross compile issues)
2016-05-09 11:12:28 +03:00
Péter Szilágyi
57ba1824ac Merge pull request #2514 from bas-vk/startRPC_WS
node: start RPC/WS interface on localhost by default
2016-05-08 17:37:35 +03:00
Felix Lange
c89f4352d0 build: add CI scripts for windows 2016-05-08 01:23:07 +02:00
Péter Szilágyi
6a00a3ade1 Makefile: go build instead of install (solves cross compile issues) 2016-05-06 16:56:22 +03:00
Péter Szilágyi
f821b0188a Merge pull request #2518 from fjl/debug-go-trace
internal/debug: also rename debug_startTrace to debug_startGoTrace
2016-05-06 13:05:54 +03:00
Bas van Kervel
d79f2f2656 node: start RPC/WS interface on localhost by default 2016-05-06 12:00:47 +02:00
Felix Lange
130bccc763 cmd/utils: flush trace and CPU profile data when force-qutting
Also reduce log messages a little bit.
2016-05-06 11:16:47 +02:00
Felix Lange
ae9ed5c420 internal/debug: also rename debug_startTrace to debug_startGoTrace
This was missing from the previous change.
2016-05-06 11:15:05 +02:00
Jeffrey Wilcke
a1c201a5ac Merge pull request #2517 from fjl/debug-go-trace
internal/debug: rename debug_trace to debug_goTrace
2016-05-06 11:09:15 +02:00
Felix Lange
844e911129 internal/debug: rename debug_trace to debug_goTrace
Reduces confusion with EVM execution tracing methods.
2016-05-06 10:27:24 +02:00
Jeffrey Wilcke
4b9de75623 Merge branch 'develop' into release/1.4 2016-05-03 14:05:30 +02:00
Jeffrey Wilcke
2d7d7ef2fe Merge pull request #2511 from obscuren/ver-fix
cmd/geth: fixed to use proper version string for output
2016-05-03 14:04:53 +02:00
Jeffrey Wilcke
14d5033c9d cmd/geth: fixed to use proper version string for output 2016-05-03 14:01:37 +02:00
Jeffrey Wilcke
d52a693f80 Merge branch 'develop' into release/1.4
Conflicts:
	cmd/geth/main.go
2016-05-03 13:52:58 +02:00
Jeffrey Wilcke
258cc73ea9 Merge pull request #2510 from fjl/p2p-fixups
p2p/discover: prevent bonding self
2016-05-03 13:30:51 +02:00
Jeffrey Wilcke
79b7b5eeaa Merge pull request #2505 from karalabe/make-readme-suck-less
Make the README suck less :P
2016-05-03 13:30:42 +02:00
Péter Szilágyi
b4fbcd5060 README: Polish up exec section, rewrite contrib and add license. 2016-05-03 14:26:55 +03:00
Jeffrey Wilcke
488528e9e4 Merge pull request #2497 from karalabe/version-contract-3
Geth release oracle
2016-05-03 13:19:05 +02:00
Felix Lange
8110671960 p2p/discover: prevent bonding self 2016-05-02 18:50:16 +02:00
Felix Lange
32bb280179 p2p: improve readability of dial task scheduling code 2016-05-02 18:50:15 +02:00
Péter Szilágyi
4536b993ff cmd/geth, release: polish and deploy live release contract 2016-05-02 16:20:58 +03:00
Péter Szilágyi
586eddfd09 release, all: integrate the release service into geth 2016-05-02 16:20:21 +03:00
Péter Szilágyi
d46da273c6 common/releases: rewrite release version contract + use native dapps 2016-05-02 16:20:04 +03:00
Gustav Simonsson
ecd7199c43 common/versions, cmd/utils: add geth version contract 2016-05-02 10:31:54 +03:00
Felix Lange
1c20313a6a Merge pull request #2493 from almindor/develop
eth: add personal_importRawKey
2016-04-29 23:09:37 +02:00
Péter Szilágyi
cfa999f006 Merge pull request #2504 from Arachnid/public-vmconfig
Provide a public accessor for ChainConfig
2016-04-29 14:50:10 +03:00
Nicholas Johnson
c74a575725 core: Provide a public accessor for ChainConfig
This is necessary for external users of the go-ethereum code who want to, for instance, build a custom node that plays back transactions, as core.ApplyTransaction requires a ChainConfig as a parameter.
2016-04-29 12:42:03 +01:00
Péter Szilágyi
9672a62a38 Merge pull request #2485 from karalabe/fakepow
cmd: add a `--fakepow` flag to help benchmarking database changes
2016-04-29 14:19:38 +03:00
Ales Katona
572da73d4d eth: add personal_importRawKey for runtime private key import 2016-04-28 09:11:40 -06:00
Péter Szilágyi
0f722df2d9 Merge pull request #2435 from obscuren/abi-array-fixes
accounts/abi: refactored ABI package
2016-04-28 15:23:07 +03:00
Jeffrey Wilcke
1b77d5090d Merge pull request #2499 from bas-vk/reorg-logs
eth/filters: ignore logs that don't match filter criteria on chain reorg
2016-04-28 12:59:07 +02:00
Jeffrey Wilcke
e62c2aeb1b Merge pull request #2491 from obscuren/genesis-config-fix
core, eth: added json tag field for proper unmarshalling
2016-04-28 12:58:56 +02:00
Jeffrey Wilcke
4880868c88 accounts/abi: fixed string and fixed size bytes packing 2016-04-28 12:41:47 +02:00
Jeffrey Wilcke
c3d5250473 accounts/abi: added unpacking "anything" in to interface{} 2016-04-28 12:41:42 +02:00
Jeffrey Wilcke
e0dc45fce2 accounts/abi: fixed strict go-like unpacking 2016-04-28 12:41:37 +02:00
Bas van Kervel
48cc36ce83 eth/filters: ignore logs that don't match filter criteria on chain reorg 2016-04-28 12:33:42 +02:00
Péter Szilágyi
123aa659e4 Merge pull request #2496 from karalabe/abibind-missing-contract-error
accounts/abi/bind, eth: add contract non-existent error
2016-04-27 17:31:12 +03:00
Péter Szilágyi
cdcbb2f160 accounts/abi/bind, eth: add contract non-existent error 2016-04-27 17:15:23 +03:00
Péter Szilágyi
db62979514 Merge pull request #2492 from fjl/accounts-arm64
accounts: disable file system watch on linux/arm64
2016-04-26 16:15:18 +03:00
Péter Szilágyi
5137c04ccf Merge pull request #2484 from pcasaretto/address-test-coverage
Improve Address test coverage
2016-04-26 16:13:49 +03:00
Paulo L F Casaretto
a20d3fc362 common: Add tests for Address#UnmarshalJSON 2016-04-26 09:12:36 -03:00
Felix Lange
3d6d828caf Merge pull request #2478 from fjl/geth-js-tweak
cmd/geth, jsre: improve the js command
2016-04-26 10:39:19 +02:00
Felix Lange
6a543607ef accounts: disable file system watch on linux/arm64 2016-04-25 13:30:28 +02:00
Jeffrey Wilcke
c1a4dcfc87 core, eth: added json tag field for proper unmarshalling
According to our own instructions the genesis config attribute should be
"config". The genesis definition in the go code, however, has a field
called `ChainConfig`. This field now has a `json:"config"` struct tag so
that the json is properly unmarshalled.

This fixes #2482
2016-04-25 12:48:31 +02:00
Felix Lange
70b8b54cd2 Merge pull request #2481 from fjl/bootnode-fixup
cmd/bootnode: fix -genkey, add logging options
2016-04-25 12:42:28 +02:00
Felix Lange
c88c89fd9e cmd/bootnode: fix -genkey, add logging options 2016-04-22 13:35:40 +02:00
Péter Szilágyi
b06f44ecc2 cmd: add a --fakepow flag to help benchmarking database changes 2016-04-21 12:14:57 +03:00
Felix Lange
87ae0df476 cmd/geth, jsre: improve the js command
geth js stopped the JS runtime after running the first input file
and blocked for pending callbacks. This commit makes it process
all files and enables quitting with Ctrl-C regardless of callbacks.

Error reporting is also improved. If a script fails to load, the error
is printed and includes the backtrace. package jsre now ensures that
otto is aware of the filename, the backtrace will contain them.

Before:

$ geth js bad.js; echo "exit $?"
... log messages ...
exit 0

After:

$ geth js bad.js; echo "exit $?"
... log messages ...
Fatal: JavaScript Error: Invalid number of input parameters
    at web3.js:3109:20
    at web3.js:4917:15
    at web3.js:4960:5
    at web3.js:4984:23
    at checkWork (bad.js:11:9)
    at bad.js:19:1

exit 1
2016-04-20 23:33:43 +02:00
Jeffrey Wilcke
5127ec10cb accouns/abi: refactored ABI package
Refactored the abi package parsing and type handling. Relying mostly on
package reflect as opposed to most of our own type reflection. Our own
type reflection is still used however for cases such as Bytes and
FixedBytes (abi: bytes•).

This also inclused several fixes for slice handling of arbitrary and
fixed size for all supported types.

This also further removes implicit type casting such as assigning,
for example `[2]T{} = []T{1}` will fail, however `[2]T{} == []T{1, 2}`
(notice assigning *slice* to fixed size *array*). Assigning arrays to
slices will always succeed if they are of the same element type.

Incidentally also fixes #2379
2016-04-20 16:43:57 +02:00
Jeffrey Wilcke
18580e152c VERSION, cmd/geth: bumped version 2016-04-19 18:17:44 +02:00
Jeffrey Wilcke
8241fa5227 VERSION, cmd/geth: bumped version 2016-04-19 18:15:04 +02:00
Péter Szilágyi
a6ca8fd268 Merge pull request #2463 from fjl/rpc-context-key
rpc: remove NotifierContextKey
2016-04-19 10:22:48 +03:00
Felix Lange
27116bd46c Merge pull request #2462 from fjl/rpc-remove-js
rpc: move web3.js extensions to internal/web3ext
2016-04-15 18:13:24 +02:00
Felix Lange
a40e61b4ac rpc: remove NotifierContextKey
Context keys must have a unique type in order to prevent
any unintented clashes. The code used int(1) as key.

Fix it by implementing the pattern recommended by package context.
2016-04-15 18:10:52 +02:00
Péter Szilágyi
16d10aae0c Merge pull request #2461 from karalabe/fix-simulator-estimates
accounts/abi/bind/backends: estimate needed gas, not used
2016-04-15 18:50:50 +03:00
Felix Lange
e728aaca72 rpc: move web3.js extensions to internal/web3ext 2016-04-15 17:36:01 +02:00
Péter Szilágyi
e581f2690a accounts/abi/bind/backends: estimate needed gas, not used 2016-04-15 18:32:21 +03:00
Felix Lange
6197fbf8d7 Merge pull request #2458 from fjl/go-vet
all: fix go vet warnings
2016-04-15 13:45:15 +02:00
Péter Szilágyi
5c17b2f521 Merge pull request #2460 from fjl/whisper-expiration-test-delay
whisper: deflake Test*MessageExpiration
2016-04-15 14:44:36 +03:00
Felix Lange
3a5bdef962 whisper: deflake Test*MessageExpiration
These tests have become a common annoyance on CI. Fix them by allowing
messages with expiration == now into the cache and delaying the check
for expired message handling slightly.
2016-04-15 13:28:46 +02:00
Felix Lange
bf5ae502ef Makefile: enable go vet on Travis CI 2016-04-15 11:17:27 +02:00
Felix Lange
6fdd0893c3 all: fix go vet warnings 2016-04-15 11:17:27 +02:00
Felix Lange
68c755a238 core/state: fix TestDump
Lazy "I'll just put return here instead of fixing the test" found by go vet.
2016-04-15 11:16:56 +02:00
Felix Lange
ebf3cf8f7d logger/glog: fix go vet issues
logging.printf triggered a format string warning. Silence it
by renaming the function.
2016-04-15 10:58:41 +02:00
Felix Lange
24cdac41f3 core, core/types, eth: add and use Block.Body
This fixes a few uses of unkeyed Body literals which go vet was
complaining about.
2016-04-15 10:57:37 +02:00
Felix Lange
fdc5a7dc1a Merge pull request #2457 from fjl/license-update-1.4
all: update license information
2016-04-15 10:09:40 +02:00
Felix Lange
d04a2e7557 all: update license information 2016-04-15 09:48:05 +02:00
Felix Lange
728ad6f47d build: tweak update-license.go 2016-04-15 09:46:54 +02:00
Péter Szilágyi
499d63f706 Merge pull request #2456 from bas-vk/rpc-arg-whitespace
cmd/utils: strip excessive whitespace from api command line arguments
2016-04-14 18:26:56 +03:00
Péter Szilágyi
5f917715c5 Merge pull request #2454 from karalabe/trace-fix
eth: fix single transaction tracing (run prev mutations)
2016-04-14 17:52:34 +03:00
Bas van Kervel
529897ea2b cmd/utils: strip excessive whitespace from api command line arguments 2016-04-14 16:23:43 +02:00
Péter Szilágyi
53016c1225 eth, rpc: make trace configs optional 2016-04-14 15:10:29 +03:00
Péter Szilágyi
bbc77f488e eth: fix single transaction tracing (run prev mutations) 2016-04-14 14:29:47 +03:00
Felix Lange
e50e3bea49 Merge pull request #2235 from fjl/chaindb-api-and-console-fixes
eth: add chaindbProperty to debug API (+ console fixes)
2016-04-13 13:05:29 +02:00
Felix Lange
bea56d84e5 internal/debug: add memStats and gcStats to API 2016-04-13 12:08:07 +02:00
Felix Lange
bcd8aeefdd eth: add chaindbProperty to debug API 2016-04-13 12:08:07 +02:00
Felix Lange
05e257c22c jsre: hide fields with prefix _ when pretty-printing
This makes web3 internals like _requestManager invisible.
2016-04-13 12:06:42 +02:00
Felix Lange
f08680985a jsre: fix <tab><tab> completion magic 2016-04-13 12:06:42 +02:00
Felix Lange
5542b51b50 jsre: expose Do 2016-04-13 12:06:42 +02:00
Péter Szilágyi
b34b130fb5 Merge pull request #2450 from karalabe/fix-ios-kqueue
accounts: disable filesystem notifications on iOS
2016-04-13 12:48:51 +03:00
Péter Szilágyi
fd36448d6a accounts: disable filesystem notifications on ios 2016-04-13 12:29:39 +03:00
Felix Lange
9d81f4fdd1 Merge pull request #2448 from fjl/jsre-bignum
jsre: print BigNumber objects with custom constructor as number
2016-04-12 18:52:40 +02:00
Felix Lange
4e85be0717 jsre: print BigNumber objects with custom constructor as number 2016-04-12 17:42:14 +02:00
Felix Lange
f460b0217f Merge pull request #2446 from karalabe/console-unlock-fix
cmd/utils: fix accounts merge error on console unlock
2016-04-12 17:07:37 +02:00
Péter Szilágyi
a1f1c404c3 cmd/utils: fix accounts merge error on console unlock 2016-04-12 18:01:37 +03:00
Péter Szilágyi
1e9b504ee7 Merge pull request #2284 from fjl/accounts-addr-cache
accounts: cache key addresses
2016-04-12 17:51:09 +03:00
Péter Szilágyi
33e4f51749 Merge pull request #2444 from karalabe/gethrpctest-chainconfig-panic
cmd/gethrpctest: add missing chain configuration config field
2016-04-12 17:01:51 +03:00
Felix Lange
6498df7b02 accounts: ensure TimedUnlock does not override indefinite unlock timeout 2016-04-12 15:59:18 +02:00
Felix Lange
46df50be18 accounts: improve API and add documentation
- Sign takes common.Address, not Account
- Import/Export methods work with encrypted JSON keys
2016-04-12 15:59:18 +02:00
Felix Lange
91aaddaeb3 cmd/geth: add recovery procedure for AmbiguousAddrError 2016-04-12 15:59:18 +02:00
Felix Lange
ea005a0295 cmd/utils: fix --password on Windows
Text files created on Windows typically have \r\n line endings.
Trim them when reading password files.
2016-04-12 15:59:18 +02:00
Felix Lange
aca9d6a1fb cmd/geth: print actual error when --unlock fails 2016-04-12 15:59:17 +02:00
Felix Lange
549f1add29 eth: report unlock errors to RPC clients 2016-04-12 15:59:12 +02:00
Felix Lange
6f1ca0bc91 accounts: add ErrDecrypt 2016-04-12 15:58:07 +02:00
Felix Lange
a9f26dcd0d accounts: cache key addresses
In order to avoid disk thrashing for Accounts and HasAccount,
address->key file mappings are now cached in memory. This makes it no
longer necessary to keep the key address in the file name. The address
of each key is derived from file content instead.

There are minor user-visible changes:

- "geth account list" now reports key file paths alongside the address.
- If multiple keys are present for an address, unlocking by address is
  not possible. Users are directed to remove the duplicate files
  instead. Unlocking by index is still possible.
- Key files are overwritten written in place when updating the password.
2016-04-12 15:58:07 +02:00
Felix Lange
ef63e9af55 Godeps: add github.com/rjeczalik/notify 2016-04-12 15:58:07 +02:00
Felix Lange
ee1682ffe6 cmd/geth: add tests for account commands 2016-04-12 15:58:07 +02:00
Felix Lange
6cb08d8328 Godeps: add github.com/cspeare/cp 2016-04-12 15:58:06 +02:00
Felix Lange
46e8940b19 accounts: streamline API
- Manager.Accounts no longer returns an error.
- Manager methods take Account instead of common.Address.
- All uses of Account with unkeyed fields are converted.
2016-04-12 15:58:01 +02:00
Felix Lange
2dc20963e7 cmd/geth: move account commands to accountcmd.go 2016-04-12 15:56:49 +02:00
Felix Lange
4e6d8b348d accounts: fix go vet warnings 2016-04-12 15:56:49 +02:00
Felix Lange
85e6c40c00 accounts, crypto: move keystore to package accounts
The account management API was originally implemented as a thin layer
around crypto.KeyStore, on the grounds that several kinds of key stores
would be implemented later on. It turns out that this won't happen so
KeyStore is a superflous abstraction.

In this commit crypto.KeyStore and everything related to it moves to
package accounts and is unexported.
2016-04-12 15:56:49 +02:00
Felix Lange
dff9b4246f cmd/geth, cmd/utils: improve input handling
These changes make prompting behave consistently on all platforms:

* The input buffer is now global.
  Buffering was previously set up for each prompt, which can cause weird
  behaviour, e.g. when running "geth account update <input.txt" where
  input.txt contains three lines. In this case, the first password
  prompt would fill up the buffer with all lines and then use only the
  first one.

* Print the "unsupported terminal" warning only once.
  Now that stdin prompting has global state, we can use it to track
  the warning there.

* Work around small liner issues, particularly on Windows.
  Prompting didn't work under most of the third-party terminal emulators
  on Windows because liner assumes line editing is always available.
2016-04-12 15:56:49 +02:00
Péter Szilágyi
aceaaa5178 eth: gracefully fail if chain config is missing 2016-04-12 16:48:43 +03:00
Péter Szilágyi
9027981280 cmd/gethrpctest: add missing chain configuration config field 2016-04-12 16:44:42 +03:00
Felix Lange
83877a0f9d tests: remove eth, node, accounts dependencies
Unlocking the accounts in the test doesn't help with anything.
2016-04-12 15:34:39 +02:00
Jeffrey Wilcke
8627680e24 Merge pull request #2359 from bas-vk/rpc-optional-args
rpc: several fixes and support for optional arguments
2016-04-12 14:03:21 +02:00
Bas van Kervel
aa9fff3e68 rpc: various fixes/enhancements
rpc: be less restrictive on the request id
rpc: improved documentation
console: upgrade web3.js to version 0.16.0
rpc: cache http connections
rpc: rename wsDomains parameter to wsOrigins
2016-04-12 11:02:39 +02:00
Jeffrey Wilcke
934f587bd5 Merge pull request #2431 from bas-vk/js-preload
cmd/geth: add JS preload parameter
2016-04-12 11:00:42 +02:00
Jeffrey Wilcke
e456451a89 Merge pull request #2440 from karalabe/update-ethash
Update ethash
2016-04-11 20:03:47 +02:00
Péter Szilágyi
bf1f620343 eth: fix GPU miner chain config regression 2016-04-11 17:31:00 +03:00
Péter Szilágyi
701ac1ce6c Godeps: pull in the ethash opencl fix 2016-04-11 17:14:32 +03:00
Bas van Kervel
3c5329599c cmd/geth: add JS preload parameter 2016-04-11 13:32:26 +02:00
Péter Szilágyi
8abf06d378 Merge pull request #2430 from bas-vk/chaincmd
cmd/utils: bugfix where database is opened multiple times
2016-04-11 13:21:47 +03:00
Péter Szilágyi
a7161caedf Merge pull request #2427 from bas-vk/pending-tx-console-format
console: use transaction output formatter for eth.pendingTransactions…
2016-04-11 12:34:48 +03:00
Péter Szilágyi
4b2492b614 Merge pull request #2423 from karalabe/abigen-support-arrays
accounts/abi/bind: support generating bindings for various arrays
2016-04-11 11:40:07 +03:00
Bas van Kervel
4081868452 cmd/utils: bugfix where database is opened multiple times 2016-04-07 12:49:00 +02:00
Bas van Kervel
18490d833c console: use transaction output formatter for eth.pendingTransactions output 2016-04-06 11:27:05 +02:00
Péter Szilágyi
fc4fffd5ac accounts/abi/bind: support generating bindings for various arrays 2016-04-05 18:20:50 +03:00
Jeffrey Wilcke
7e02105672 Merge pull request #2417 from fjl/rpc-go-winio
rpc: use go-winio instead of vendoring a named pipe implementation
2016-04-05 09:43:45 +02:00
Jeffrey Wilcke
ed92f116f7 Merge pull request #2407 from bas-vk/rpc-notifications
RPC pub sub
2016-04-05 09:43:32 +02:00
Jeffrey Wilcke
6a185531d2 Merge pull request #2416 from karalabe/kill-canary
core, miner: remove Frontier canary
2016-04-04 20:43:01 +02:00
Jeffrey Wilcke
8d8e2248b2 Merge pull request #2396 from obscuren/abi-slices
abi: support for input and output slices & removed support for implicit type conversion
2016-04-04 20:42:48 +02:00
Jeffrey Wilcke
a306e17a26 abi: removed implicit type casting & refactored type parsing 2016-04-04 20:30:59 +02:00
Jeffrey Wilcke
968d8ffe94 abi: accept output slices of all supported types 2016-04-04 20:30:59 +02:00
Jeffrey Wilcke
022cbd6800 abi: accept input slices of all supported types 2016-04-04 20:30:58 +02:00
Felix Lange
467bb7a719 rpc: use go-winio instead of vendoring a named pipe implementation 2016-04-04 13:56:17 +02:00
Péter Szilágyi
e9254bb0f9 core, miner: remove Frontier canary 2016-04-04 13:18:34 +03:00
Péter Szilágyi
3a2da31c3e Merge pull request #2412 from fjl/p2p-eip8-enable
p2p: enable EIP-8 handshake sending
2016-04-04 13:10:48 +03:00
Jeffrey Wilcke
52dc7cb452 Merge pull request #2378 from obscuren/enable-jit-a-b
cmd/utils, miner: A/B testing JIT VM. Disabled for miners
2016-04-04 11:15:23 +02:00
Jeffrey Wilcke
f6f7e7a870 Merge pull request #2415 from karalabe/fix-missing-gastarget
cmd/geth: add missing gas target flag (fixing 0 convergence issue)
2016-04-04 11:14:04 +02:00
Péter Szilágyi
c90fc3503d cmd/geth: add missing gas target flag (fixing 0 convergence issue) 2016-04-04 12:04:04 +03:00
Felix Lange
659c0cb9e8 p2p: enable EIP-8 handshake sending
With the Ethereum Homestead fork is now behind us, we can
assume that everyone runs an EIP-8 capable client.
2016-04-03 23:10:11 +02:00
Jeffrey Wilcke
96c7c39ae4 Merge pull request #2409 from fjl/geth-fixup-init
cmd/geth: fix startup with empty database
2016-04-02 11:40:25 +02:00
Felix Lange
cf842b3fe5 cmd/geth, eth: move --genesis deprecation warning to cmd/geth
This prevents display of the warning for --dev and --olympic.
2016-04-01 21:59:35 +02:00
Felix Lange
78b70d79ec cmd/utils: fix geth startup with empty database 2016-04-01 21:59:23 +02:00
Bas van Kervel
f7328c5ecb rpc: add pub/sub support 2016-04-01 18:26:35 +02:00
Jeffrey Wilcke
fb578f4550 Merge pull request #2405 from karalabe/abigen-default-methods
accounts/abi/bind: surface raw wrappers to access low level ops
2016-04-01 15:42:05 +02:00
Jeffrey Wilcke
8b2aca96c5 Merge pull request #2404 from obscuren/common-hash-json-length-validation
common: added Hash unmarshal json length validation
2016-04-01 14:53:38 +02:00
Jeffrey Wilcke
bbeaab7e64 cmd/utils, miner: A/B testing JIT VM. Disabled for miners
This PR introduces a 10% probability that you'll run the client with the
JIT enabled testing the new client and helps us potentially catch
errors when reported.

This feature is **disabled** for miners (disabling the JIT completely).
The JIT can however be force for miners if they enable both --jitvm and
--forcejit.
2016-04-01 13:44:58 +02:00
Jeffrey Wilcke
be44651523 Merge pull request #2402 from obscuren/eth-sign-fix
eth: enforce signing hashes using eth_sign instead of arbitrary data
2016-04-01 13:42:48 +02:00
Jeffrey Wilcke
c58079461b Merge pull request #2281 from obscuren/configurable-genesis
core: homestead chain configuration & artificial gas floor target mining flag
2016-04-01 13:42:19 +02:00
Jeffrey Wilcke
d63e29241d common: added Hash unmarshal json length validation 2016-04-01 12:56:54 +02:00
Péter Szilágyi
4097478884 accounts/abi/bind: surface raw wrappers to access low level ops 2016-04-01 13:07:05 +03:00
Jeffrey Wilcke
1f3596c25a core: transition db now also returns the required gas amount
Exposes some core methods to transition and compute new state
information and adds an additional return value to the transition db
method to fetch required gas for that particular message (excluding gas
refunds from any SSTORE[X] = 0 and SUICIDE.

Fixes #2395
2016-04-01 01:01:10 +02:00
Jeffrey Wilcke
9055c16efa accounts/a/b/backends, core: chain maker homestead block set to 0
The chain maker and the simulated backend now run with a homestead phase
beginning at block 0 (i.e. there's no frontier).

This commit also fixes up #2388
2016-04-01 01:01:10 +02:00
Jeffrey Wilcke
f0cbebb19f core: added basic chain configuration
Added chain configuration options and write out during genesis database
insertion. If no "config" was found, nothing is written to the database.

Configurations are written on a per genesis base. This means
that any chain (which is identified by it's genesis hash) can have their
own chain settings.
2016-04-01 01:01:10 +02:00
Jeffrey Wilcke
916fe11241 eth: enforce signing hashes using eth_sign instead of arbitrary data 2016-04-01 00:43:14 +02:00
Péter Szilágyi
10d3466c93 Merge pull request #2383 from karalabe/goabi-exclusions-duplicates
accounts/abi/bind, cmd/abigen: dedup structs, exclude patterns
2016-03-31 19:29:31 +03:00
Jeffrey Wilcke
db739b506a Merge pull request #2399 from karalabe/fix-trace-json-output
eth: fix accidental nil panic on nil errors
2016-03-31 17:39:21 +02:00
Péter Szilágyi
4326061e35 eth: fix accidental nil panic on nil errors 2016-03-31 18:26:25 +03:00
Péter Szilágyi
f115f077d7 Merge pull request #2398 from karalabe/fix-trace-json-output
eth: manually convert errors to strings on the trace API (json cannot)
2016-03-31 17:59:28 +03:00
Péter Szilágyi
6c670eff01 eth: manually convert errors to strings on the trace API (json cannot) 2016-03-31 17:41:26 +03:00
Péter Szilágyi
4ab593c5a1 accounts/abi/bind: support account slices, drop hash type 2016-03-31 12:48:50 +03:00
Péter Szilágyi
c2bbff6116 accounts/abi/bind: merge all tests into a single suite 2016-03-31 12:45:50 +03:00
Péter Szilágyi
787d688c2f accounts/abi/bind: use anonymous ephemeral call result structs 2016-03-31 12:45:30 +03:00
Péter Szilágyi
b813e4d411 accounts/abi/bind, cmd/abigen: dedup structs, exclude patterns 2016-03-26 11:43:09 +02:00
Jeffrey Wilcke
798e4fb4ed Merge pull request #2381 from karalabe/fix-abigen-tuples
accounts/abi/bind: fix double pointer in generated code
2016-03-25 17:17:43 +01:00
Péter Szilágyi
9b4a45f6e8 accounts/abi/bind: fix double pointer in generated code 2016-03-25 15:09:06 +02:00
Péter Szilágyi
cfb3a8ea8f Merge pull request #2357 from karalabe/abi-binding-generator
accounts/abi/bind: Go ABI binding generator
2016-03-24 17:35:42 +02:00
Péter Szilágyi
73308dbe0e accounts/abi/bind, cmd/abigen: port to templates, bind to solidity 2016-03-24 17:09:45 +02:00
Péter Szilágyi
86cfc22c79 accounts/abi/bind: constructor, auth utils and various backends 2016-03-24 14:15:32 +02:00
Péter Szilágyi
72826bb5ad accounts/abi/bind, cmd/abigen: Go API generator around an EVM ABI 2016-03-24 14:15:18 +02:00
Jeffrey Wilcke
75c86f8646 Merge pull request #2141 from obscuren/evm-init
core, core/vm, tests: changed the initialisation behaviour of the EVM
2016-03-23 23:20:51 +01:00
Jeffrey Wilcke
0cfa21fc7f core, eth, cmd: temporary work around for enabling the jit
This commit serves as a temporary workaround for enabling the jit until
the block customisation PR is merged in.
2016-03-23 23:02:44 +01:00
Jeffrey Wilcke
5f92606be2 eth/api: added root to the receipts 2016-03-23 23:02:44 +01:00
Jeffrey Wilcke
3601320ccd eth, rpc: implemented block debugging rpc calls
Implemented the following block debugging RPC calls

* Block(RLP)
* BlockByFile(fileName)
* BlockByNumber(number)
* BlockByHash(hash)
2016-03-23 23:02:44 +01:00
Jeffrey Wilcke
14013372ae core: Added EVM configuration options
The EVM is now initialised with an additional configured object that
allows you to turn on debugging options.
2016-03-23 23:02:42 +01:00
Jeffrey Wilcke
9866f19d6a Merge pull request #2371 from hiddentao/fix_prompt_passwd_input
Strip extraneous carriage return from end of entered password
2016-03-23 18:06:27 +01:00
Ramesh Nair
6f30034413 cmd/utils: removed password line endings when not using liner. 2016-03-23 22:53:20 +08:00
Jeffrey Wilcke
77d21e472d Merge pull request #2259 from bas-vk/http
rpc/http: improve request handling
2016-03-23 13:01:22 +01:00
Bas van Kervel
a7bae3b2a6 rpc/http: improve request handling 2016-03-23 11:27:08 +01:00
Jeffrey Wilcke
342ae7ce7d core, core/vm, tests: changed the initialisation behaviour of the EVM
The EVM was previously initialised and created for every CALL, CALLCODE,
DELEGATECALL and CREATE. This PR changes this behaviour so that the same
EVM can be used through the session and beyond as long as the
Environment sticks around.
2016-03-23 00:04:00 +01:00
Péter Szilágyi
b3b110bc95 Merge pull request #2348 from obscuren/abi-variable-input
accounts/abi: Fixed bytes input accept []byte and variable input support
2016-03-17 10:21:34 +02:00
Péter Szilágyi
138e7af96c Merge pull request #2354 from karalabe/miner-atomic-pending
eth, miner: fetch pending block/state in on go (data race)
2016-03-16 13:12:46 +02:00
Péter Szilágyi
8b6ae6bf86 Merge pull request #2355 from karalabe/abi-constant-functions-2
accounts/abi: handle the "constant" modifier for functions
2016-03-16 13:12:14 +02:00
Péter Szilágyi
270ea6eec3 accounts/abi: handle the "constant" modifier for functions 2016-03-16 11:24:16 +02:00
Péter Szilágyi
0228fb57cd eth, miner: fetch pending block/state in on go (data race) 2016-03-16 11:23:26 +02:00
Péter Szilágyi
2855a93ede Merge pull request #2341 from leijurv/patch-2
core: fixed various typos
2016-03-16 11:22:33 +02:00
Felix Lange
b5cee9738b Merge pull request #2350 from leijurv/patch-3
core, eth: replace reorganiz with reorganis
2016-03-15 20:33:38 +01:00
Leif Jurvetson
434e4b31d8 core, eth: replace reorganiz with reorganis 2016-03-15 12:03:17 -07:00
Felix Lange
06fe6310a3 Merge pull request #2351 from leijurv/patch-4
core: various typos
2016-03-15 19:39:36 +01:00
Felix Lange
066d301520 Merge pull request #2352 from leijurv/patch-5
eth: various typos
2016-03-15 19:38:24 +01:00
Leif Jurvetson
bbbe2360d0 eth: various typos 2016-03-15 11:27:49 -07:00
Leif Jurvetson
b7bb2d8589 core: various typos 2016-03-15 11:08:18 -07:00
Leif Jurvetson
c7727191ae core: fixed various typos 2016-03-15 09:12:03 -07:00
Jeffrey Wilcke
fe45210c55 accounts/abi: Fixed bytes input accept []byte and variable input support
Fixed up `[]byte` slice support such that `function print(bytes input)`
accepts `[]byte` as input and treats it as 1 element rather than a slice
of multiple elements.

Added support for variable length input parameters like `bytes` and
`strings`.
2016-03-15 14:10:39 +01:00
Péter Szilágyi
e189fb839c Merge pull request #2327 from fjl/debug-fixes
cmd/utils, internal/debug: fixes for debugging
2016-03-15 11:01:31 +02:00
Jeffrey Wilcke
42c049e519 Merge pull request #2342 from obscuren/issue-templates
templates: added issue template
2016-03-14 23:45:53 +01:00
Jeffrey Wilcke
a0e2e22a4f templates: added issue template 2016-03-14 23:39:21 +01:00
Péter Szilágyi
b8f4a48ada Merge pull request #2337 from karalabe/upnp-error-hang
p2p/nat: fix #2291, NAT discovery did't abort on failure
2016-03-14 17:17:21 +02:00
Péter Szilágyi
64c8e2f2ca p2p/nat: fix #2291, NAT discovery did't abort on failure 2016-03-14 17:08:15 +02:00
Felix Lange
c1343c8872 cmd/utils, internal/debug: show all stacks for 10x Ctrl-C induced panic
Go 1.6 only prints stacks for the current goroutine by default,
but for this panic we want to see all of them.
2016-03-12 00:59:37 +01:00
Felix Lange
cafdd5931e internal/debug: don't disable heap profile collection by default
Setting runtime.MemProfileRate to 0 through the flag default
value makes it impossible to get an 'in-use' profile.
2016-03-12 00:41:34 +01:00
Jeffrey Wilcke
8a3ce5450a Merge pull request #2311 from obscuren/future-proc-fix
core: added future proc mutex lock
2016-03-11 18:26:57 +01:00
Péter Szilágyi
08759b0aaf Merge pull request #2322 from karalabe/headerchain-preformance-fixes
core: cache fresh headers and tds to avoid db trashing
2016-03-11 16:49:21 +02:00
Jeffrey Wilcke
558d18d2b0 core: added future proc mutex lock
Added a future lock which prevents the anything being added or removed
from or to the set when looping over the set of blocks. This fixes a nil
pointer in the range loop when trying to retrieve a block from the set
which was previously available but removed due to regular chain
processing.

Fixes #2305
2016-03-11 09:52:36 +01:00
Péter Szilágyi
c3a4874e5e Merge pull request #2326 from karalabe/goleveldb-datarace-fix
Godeps: pull in the leveldb upstream write race fix
2016-03-11 10:30:46 +02:00
Péter Szilágyi
9ff07304a3 Godeps: pull in the leveldb upstream write race fix 2016-03-11 09:30:25 +02:00
Péter Szilágyi
daad2b2559 core: cache fresh headers and tds to avoid db trashing 2016-03-10 21:40:34 +02:00
Péter Szilágyi
850f41b374 Merge pull request #2321 from karalabe/downloader-throughput-datarace
eth/downloader: fix a throughput estimation data race
2016-03-10 20:38:55 +02:00
Jeffrey Wilcke
8b58cd0190 Merge pull request #2081 from zsfelfoldi/light-chain
core: create a header chain structure shared by full and light clients
2016-03-10 15:16:11 +01:00
zsfelfoldi
73d21ea6af core: create a header chain structure shared by core.BlockChain and light.LightChain 2016-03-10 14:57:32 +01:00
Jeffrey Wilcke
bff9ceb6b8 Merge pull request #2301 from obscuren/uncle-fix
core: announce ChainSideEvent during reorg
2016-03-10 14:21:41 +01:00
Jeffrey Wilcke
6d3cd03a03 Merge pull request #2320 from karalabe/update-goleveldb
Godeps: update goleveldb to fix a compaction data race
2016-03-10 12:24:34 +01:00
Péter Szilágyi
e3f2b541f2 eth/downloader: fix a throughput estimation data race 2016-03-10 12:58:46 +02:00
Péter Szilágyi
ea19e61fba Godeps: update goleveldb to fix a compaction data race 2016-03-10 12:57:59 +02:00
Péter Szilágyi
edd7aa054c Merge pull request #2228 from karalabe/allocate-cache-to-chaindata
cmd, eth, ethdb, node: prioritise chaindata for resources, bump cache
2016-03-09 10:43:07 +02:00
Péter Szilágyi
e90958cd29 cmd, eth, ethdb, node: prioritise chaindata for resources, bump cache 2016-03-09 10:33:39 +02:00
Jeffrey Wilcke
ba3fb9e6f4 core: announce ChainSideEvent during reorg
Previously all blocks that were already in our chain were never re
announced as potential uncle block (e.g. ChainSideEvent). This is
problematic during mining where you want to gather as much possible
uncles as possible increasing the profit. This is now addressed in this
PR where during reorganisations of chains the old chain is regarded as
uncles.

Fixed #2298
2016-03-08 16:12:48 +01:00
Péter Szilágyi
05c86c2c9f Merge pull request #2309 from bas-vk/passwd
console: allow optional password on the command line
2016-03-08 17:07:12 +02:00
Péter Szilágyi
31b4ff8cc1 Merge pull request #2310 from karalabe/ethash-future-cache
Godeps: pull in ethash future cache generator
2016-03-08 16:55:22 +02:00
Péter Szilágyi
119b724362 Godeps: pull in ethash future cache generator 2016-03-08 16:43:56 +02:00
Bas van Kervel
0fd251c7f7 console: allow optional password on the command line 2016-03-08 15:02:21 +01:00
Felix Lange
848e50d6fb Merge pull request #2293 from kobigurk/develop
Adds --keystore
2016-03-08 09:32:33 +01:00
Felix Lange
bc63a3d282 Merge pull request #2292 from remyroy/fix-solc-win-path
Fix path problem with Solidity compile with filepath.Glob on Windows
2016-03-08 00:05:48 +01:00
Rémy Roy
de1831b6e9 common/compiler: fix path problem with filepath.Glob on Windows 2016-03-07 17:52:19 -05:00
Kobi Gurkan
627c2311fb cmd/utils: add --keystore 2016-03-07 14:38:56 -08:00
Jeffrey Wilcke
d45f01d5f7 Merge pull request #2285 from karalabe/forward-empty-bodies
eth: forward empty body responses to the downlaoder
2016-03-03 15:02:10 +01:00
Péter Szilágyi
ae4982a365 eth: forward empty body responses to the downlaoder 2016-03-03 13:06:23 +02:00
Jeffrey Wilcke
41f35d7913 Merge pull request #2280 from bas-vk/js-cleanup
console: cleanup old autocompletations relics
2016-03-02 21:23:47 +01:00
Péter Szilágyi
5adc461d58 Merge pull request #2267 from karalabe/pending-state-events
core, miner: add PendingStateEvent to track non-log updates.
2016-03-02 11:24:27 +02:00
Bas van Kervel
789b9a9f16 console: cleanup old autocompletations relics 2016-03-01 18:27:08 +01:00
Péter Szilágyi
c0bf321ec8 Merge pull request #2278 from fjl/rpc-inproc-pipe
rpc: simplify inproc client
2016-03-01 14:54:52 +02:00
Felix Lange
e8e6df5159 rpc: simplify inproc client
Fixes #2277
2016-03-01 12:47:36 +01:00
Péter Szilágyi
8255afbc75 Merge pull request #2221 from karalabe/expost-key-decryption
crypto: expose key decryption method to parse a string direclty
2016-03-01 11:01:06 +02:00
Péter Szilágyi
f30b809f00 Merge pull request #2215 from bas-vk/estimategas
core: improved check for contract creation
2016-03-01 10:59:12 +02:00
Jeffrey Wilcke
7d598af493 params: updated homestead block 2016-02-29 16:19:32 +01:00
Jeffrey Wilcke
0d89e6c2f1 cmd/utils, params: homestead block 2016-02-29 15:04:55 +01:00
Jeffrey Wilcke
7cbcae3fac Merge pull request #2269 from obscuren/repl-multi-line
cmd/geth: removed multiline support
2016-02-29 15:04:33 +01:00
Jeffrey Wilcke
8ce04ae8e7 Merge pull request #2273 from obscuren/lower-min-accepted-ga-price
cmd/utils: lower the min accepted gas price for relay and GPO
2016-02-29 14:52:29 +01:00
Jeffrey Wilcke
ab92678fb3 cmd/utils: lower the min accepted gas price for relay and GPO to 20 shannon 2016-02-29 14:45:47 +01:00
Jeffrey Wilcke
b1c1d09f83 Merge pull request #2272 from karalabe/fix-premature-downloader-exit
eth/downloader: fix premature exit before notifying all part fetchers
2016-02-29 13:49:01 +01:00
Péter Szilágyi
64ee5763ee eth/downloader: fix premature exit before notifying all part fetchers 2016-02-29 14:22:28 +02:00
Péter Szilágyi
b534106cc8 core, miner: add PendingStateEvent to track non-log updates 2016-02-29 11:24:58 +02:00
Jeffrey Wilcke
cec92f5940 cmd/geth: removed multiline support
When attempting to paste very long lines of text the REPL goes
completely fubar, never completing the paste. Removing the multiline
support "fixes" this.

Long lines of text are usually pasted when deploying contracts and as it
stands right now makes creating new contracts from the REPL impossible.
2016-02-27 16:58:27 +01:00
Jeffrey Wilcke
4e7abcff30 Merge pull request #2266 from obscuren/up-gas-floor
params: settle the Pi vs Tau dispute
2016-02-26 19:26:30 +01:00
Jeffrey Wilcke
f954a8b666 params: settle the Pi vs Tau dispute
This commit increases the artificial gas floor to 4712388
2016-02-26 16:18:11 +01:00
Jeffrey Wilcke
85865a51b6 Merge pull request #2265 from fjl/downloader-mem
eth/downloader: fix header download limiting
2016-02-26 16:02:28 +01:00
Felix Lange
26e72b2ccd eth/downloader: fix header download limiting
Fixes #2201
2016-02-26 15:24:51 +01:00
Péter Szilágyi
a6903ad6a5 Merge pull request #2260 from karalabe/ethash-cache-fixes
Godeps, eth, tests: update ethash, used shared for testing
2016-02-24 17:58:12 +02:00
Péter Szilágyi
45d08a8aa7 crypto: expose key encryption method, add ping-pong test 2016-02-24 16:28:25 +02:00
Péter Szilágyi
0969b35eec crypto: code polish + ensure key file contents match with name 2016-02-24 16:27:32 +02:00
Péter Szilágyi
cda91ee180 crypto: expose key decryption method to parse a string direclty 2016-02-24 16:27:32 +02:00
Péter Szilágyi
66b148dd8f Merge pull request #2251 from karalabe/increase-downlaoder-queue
eth/downloader: bump the download queue size to prevent starvation
2016-02-24 15:55:21 +02:00
Jeffrey Wilcke
483feb0d3f Merge pull request #2242 from jimenezrick/upstream-crypto
Closes #2241: Use Keccak-256 from golang.org/x/crypto/sha3 and mention explicitly
2016-02-24 12:57:57 +01:00
Péter Szilágyi
0a5ee08e2b Godeps, eth, tests: update ethash, used shared for testing 2016-02-24 13:29:47 +02:00
Péter Szilágyi
1415669ac3 Merge pull request #2218 from karalabe/time-drift-warning
p2p/discover: NTP sanity check clock drift in case of expirations
2016-02-24 13:12:52 +02:00
Péter Szilágyi
1e62cd6c79 Merge pull request #2252 from karalabe/disable-metrics-metaops
ethdb: fully disable metrics if not requested (oops?)
2016-02-24 12:50:45 +02:00
Péter Szilágyi
ac954f48bd p2p/discover: emphasize warning, add 10 min cooldown 2016-02-24 12:16:28 +02:00
Péter Szilágyi
b1908f6a16 psp/discovery: NTP sanity check clock drift in case of expirations 2016-02-24 12:14:15 +02:00
Péter Szilágyi
f1ddb1a7ad ethdb: fully disable metrics if not requested (oops?) 2016-02-23 15:47:04 +02:00
Péter Szilágyi
7841f0cc09 Merge pull request #2147 from prasanna/add-vagrantfile
Added Vagrantfile so that developers can spin up a VM to build geth
2016-02-23 13:48:32 +02:00
Péter Szilágyi
93c0012000 eth/downloader: bump the download queue size to prevent starvation 2016-02-23 13:12:11 +02:00
Péter Szilágyi
b57a3f154f Merge pull request #2234 from obscuren/tx-rpc-fix
eth: fixed homestead tx check
2016-02-23 10:29:25 +02:00
Péter Szilágyi
1f281dcaab Merge pull request #2220 from karalabe/fix-rollback-lock
eth/downloader: fix partial rollback and ancestor lookup
2016-02-23 10:27:51 +02:00
Péter Szilágyi
3dca9cc550 Merge pull request #2095 from karalabe/trie-node-iterator
core/state, trie: add node iterator, test state/trie sync consistency
2016-02-23 10:26:25 +02:00
Ricardo Catalinas Jiménez
139f6a0f4c generators: Don't generate params/protocol_params.go with +x bit 2016-02-21 22:46:32 +00:00
Ricardo Catalinas Jiménez
8f65444bf3 common/natspec: Remove old unnused file 2016-02-21 22:46:31 +00:00
Ricardo Catalinas Jiménez
53ce0a76d8 ethdb: Remove outdated README pointing to an old link 2016-02-21 22:46:31 +00:00
Ricardo Catalinas Jiménez
e6af65d02a common: Remove dead code 2016-02-21 22:46:31 +00:00
Ricardo Catalinas Jiménez
fbf3b2ede2 common: Remove empty lines 2016-02-21 22:46:31 +00:00
Ricardo Catalinas Jiménez
3d971c5a34 crypto: Remove dead code 2016-02-21 22:46:31 +00:00
Ricardo Catalinas Jiménez
0c6665558a crypto: Add backward compatible aliases for Sha3{,Hash}() 2016-02-21 22:46:31 +00:00
Ricardo Catalinas Jiménez
436fc8d76a all: Rename crypto.Sha3{,Hash}() to crypto.Keccak256{,Hash}()
As we aren't really using the standarized SHA-3
2016-02-21 22:34:34 +00:00
Ricardo Catalinas Jiménez
c20d6e5e4e crypto/sha3: Export Keccak-256 hash function
This hash function is slightly different from the standarized NIST SHA-3
as both of them use different domain separation bits.
2016-02-21 22:34:34 +00:00
Ricardo Catalinas Jiménez
5387ad760f crypto/sha3: Remove import path checking from vendored code 2016-02-21 22:34:34 +00:00
Ricardo Catalinas Jiménez
e4b138a593 crypto/sha3: Copy latest code from "golang.org/x/crypto/sha3"
Revision: 1f22c0103821b9390939b6776727195525381532
2016-02-21 22:34:34 +00:00
Ricardo Catalinas Jiménez
0a1da69fac crypto/sha3: Delete old copied code 2016-02-21 22:34:34 +00:00
Jeffrey Wilcke
c616391df2 eth: fixed homestead tx check
When a block is queried for retrieval we should add a check whether the
block falls within the frontier rules. If we'd always use `From`
retrieving transaction might fail. This PR temporarily changes
everything to `FromFrontier` (safe!).
2016-02-20 12:39:41 +01:00
Jeffrey Wilcke
f8d98f7fcd Merge pull request #2116 from obscuren/homestead
core, core/vm: consensus changes necessary for the homestead release
2016-02-19 14:41:57 +01:00
Felix Lange
c305005d83 Merge pull request #2227 from bas-vk/mathrandom
console: seed random number generator
2016-02-19 13:17:10 +01:00
Bas van Kervel
6777531a2d console: seed random number generator 2016-02-19 12:55:31 +01:00
Jeffrey Wilcke
17649edd85 Merge pull request #2226 from fjl/eip-8
p2p, p2p/discover: EIP-8 changes
2016-02-19 11:53:50 +01:00
Felix Lange
7d8155714b p2p: EIP-8 changes 2016-02-19 11:14:48 +01:00
Felix Lange
ee1debda53 p2p/discover: EIP-8 changes 2016-02-19 11:14:42 +01:00
Felix Lange
bb07ce3eed rlp: add "tail" struct tag 2016-02-19 11:14:29 +01:00
Péter Szilágyi
216729009b eth/downloader: fix partial rollback and ancestor lookup 2016-02-19 11:17:02 +02:00
Jeffrey Wilcke
5b283663b4 core: Added new TD strategy which mitigate the risk for selfish mining
Assuming the following scenario where a miner has 15% of all hashing
power and the ability to exert a moderate control over the network to
the point where if the attacker sees a message A, it can't stop A from
propagating, but what it **can** do is send a message B and ensure that
most nodes see B before A. The attacker can then selfish mine and
augment selfish mining strategy by giving his own blocks an advantage.

This change makes the time at which a block is received less relevant
and so the level of control an attacker has over the network no longer
makes a difference.

This change changes the current td algorithm `B_td > C_td` to the new
algorithm `B_td > C_td || B_td == C_td && rnd < 0.5`.
2016-02-18 10:12:13 +01:00
Jeffrey Wilcke
b6d88a0e9f core, core/vm, crypto: fixes for homestead
* Removed some strange code that didn't apply state reverting properly
* Refactored code setting from vm & state transition to the executioner
* Updated tests
2016-02-18 10:11:48 +01:00
Jeffrey Wilcke
4f4d2b6474 tests: updated homestead tests 2016-02-18 10:08:18 +01:00
Gustav Simonsson
371871d685 parmas, crypto, core, core/vm: homestead consensus protocol changes
* change gas cost for contract creating txs
* invalidate signature with s value greater than secp256k1 N / 2
* OOG contract creation if not enough gas to store code
* new difficulty adjustment algorithm
* new DELEGATECALL op code
2016-02-18 10:08:11 +01:00
Jeffrey Wilcke
aa36a6ae4f Merge pull request #2206 from fjl/update-deps
Godeps: update all dependencies
2016-02-17 13:46:30 +01:00
Péter Szilágyi
b8d59d9c98 core/state, trie: switch iterator panics to error fields 2016-02-16 12:37:00 +02:00
Péter Szilágyi
151c7bef41 core/state, trie: node iterator reports parent hashes too 2016-02-16 12:21:08 +02:00
Péter Szilágyi
5a057a8ded core/state, trie: surface iterator entry hashes 2016-02-16 12:21:08 +02:00
Péter Szilágyi
7e29b0b5b4 core/state, trie: add node iterator, test state/trie sync consistency 2016-02-16 12:21:08 +02:00
Bas van Kervel
0ff2adb21b core: improved check for contract creation 2016-02-16 10:52:46 +01:00
Felix Lange
6ba7bbbe29 jsre: include constructor properties in auto-completion 2016-02-15 16:43:25 +01:00
Felix Lange
ae5bc89cad cmd/geth, jsre: improve auto-completion 2016-02-15 15:03:26 +01:00
Prasanna Pendse
3ab1fb0215 Added Vagrantfile so that developers can spin up a VM to build geth 2016-02-14 21:48:35 -05:00
Jeffrey Wilcke
4f28c5b69d Merge pull request #2210 from obscuren/abi-typed-array
accounts/abi: support for typed array
2016-02-14 19:13:48 +01:00
Jeffrey Wilcke
6fe917ecb8 accounts/abi: support for typed array
Added support for fixed size and arbitrary length byte arrays to be
marshallable in fixed size (typed) byte slices.
2016-02-14 18:56:56 +01:00
Péter Szilágyi
cb85923828 Merge pull request #2205 from obscuren/pending-filters
eth/filters:  pending logs 
2016-02-13 14:53:59 +02:00
Péter Szilágyi
770b29fd80 Merge pull request #2175 from karalabe/refactor-http-rpc
cmd, common, node, rpc: move HTTP RPC into node, drop singleton aspect
2016-02-13 14:53:48 +02:00
Jeffrey Wilcke
987c1a595a eth/filters: pending logs
Pending logs are now filterable through the Go API. Filter API changed
such that each filter type has it's own bucket and adding filter
explicitly requires you specify the bucket to put it in.
2016-02-13 13:14:02 +01:00
Felix Lange
fdb936ee95 crypto/ecies: make authenticated shared data work
The s2 parameter was not actually written to the MAC.
2016-02-12 09:49:18 +01:00
Felix Lange
2abf1a36b9 cmd/geth: enable multi-line mode
This was requested by some users earlier but liner didn't support
it at the time. It does now.
2016-02-12 02:41:29 +01:00
Felix Lange
4063d30b5e cmd/geth: gofmt js.go and rename ethereum.js to web3.js
Fixing the filename matters now because it will actually show
up in JS backtraces.
2016-02-12 02:20:18 +01:00
Felix Lange
2680e23b15 jsre: fix pretty printer for upstream otto change 2016-02-12 02:19:52 +01:00
Péter Szilágyi
d6c6bcc9f3 cmd/geth: update monitor to new termui code 2016-02-11 16:46:28 +02:00
Péter Szilágyi
b019f3ee29 Godeps: update all dependencies to latest code 2016-02-11 16:16:52 +02:00
Jeffrey Wilcke
b05e472c07 Merge pull request #2192 from obscuren/runtime-abi-fixes
account/abi, vm/runtime: abi fixes & simplified runtime calling mechanism
2016-02-11 11:44:01 +01:00
Jeffrey Wilcke
6cace73bea core/vm/runtime: simplified runtime calling mechanism
Implemented `runtime.Call` which uses - unlike Execute - the given state
for the execution and the address of the contract you wish to execute.
Unlike `Execute`, `Call` requires a config.
2016-02-11 10:17:16 +01:00
Jeffrey Wilcke
ecc876cec0 accounts/abi: fixed return tuple and string, bytes return type parsing
Removed old unmarshalling of return types: `abi.Call(...).([]byte)`.
This is now replaced by a new syntax:

```
var a []byte
err := abi.Call(&a, ...)
```

It also addresses a few issues with Bytes and Strings and can also
handle both fixed and arbitrary sized byte slices, including strings.
2016-02-11 10:16:38 +01:00
Péter Szilágyi
537774e049 Merge pull request #2195 from obscuren/gpo-rpc
eth: Added GPO to suggest default gas prices
2016-02-11 10:36:37 +02:00
Péter Szilágyi
1cc4bd76db Merge pull request #2193 from karalabe/sync-state-reports
eth, eth/downloader, jsre: surface state sync progress through the API
2016-02-10 20:20:59 +02:00
Jeffrey Wilcke
725f2a4cf7 eth: Added GPO to suggest default gas prices
This PR fixes a regression of the RPC where the default gas price that
was being used for transaction wasn't properly using the GPO. This PR
adds the GPO back to suggest gas prices rather than the hardcoded
default of 10000000000000.

Closes #2194
2016-02-10 16:50:50 +01:00
Péter Szilágyi
59cd60b266 eth, eth/downloader, jsre: surface state sync progress through the API 2016-02-10 14:30:41 +02:00
Péter Szilágyi
be79b4aacb Merge pull request #2189 from karalabe/fix-nil-miner
eth, miner: move the public miner api into eth to access etherbase
2016-02-09 16:38:00 +02:00
Péter Szilágyi
dda5af0e6c eth, miner: move the public miner api into eth to access etherbase 2016-02-09 16:03:04 +02:00
Péter Szilágyi
df75dbfd68 cmd, node, rpc: readd inproc RPC client, expose via node 2016-02-09 14:10:40 +02:00
Péter Szilágyi
900e124bee cmd, common, node, rpc: rework naming convention to canonical one 2016-02-09 13:24:42 +02:00
Péter Szilágyi
8b5b635db7 Merge pull request #2184 from karalabe/fix-fastsync-state-serializer-bug
eth/downloader: raise pending state limit that prevented concurrency
2016-02-09 12:14:48 +02:00
Péter Szilágyi
f1ec226d80 eth/downloader: raise pending state limit that prevented concurrency 2016-02-08 14:57:02 +02:00
Péter Szilágyi
856b9e9c50 Merge pull request #2183 from bas-vk/issue2180
eth_sendTransaction, error not reported
2016-02-08 12:41:39 +02:00
Bas van Kervel
5fb68f4b39 eth: sendTransaction would not report the error when tx could not be added to tx pool 2016-02-08 11:11:07 +01:00
Jeffrey Wilcke
707ac67bab Merge pull request #2106 from obscuren/out-of-bound-logs
eth/filters: added notifications for out of bound log events
2016-02-06 01:11:42 +01:00
Jeffrey Wilcke
68dda34905 eth/filters: added notifications for out of bound log events
Out of Bound log events are events that were removed due to a fork. When
logs are received the filtering mechanism should check for the `removed`
field on the json structure.
2016-02-05 16:55:27 +01:00
Péter Szilágyi
7486904b92 cmd, node, rpc: move websockets into node, break singleton 2016-02-05 16:53:47 +02:00
Jeffrey Wilcke
7d2d141b34 Merge pull request #2178 from isghe/fix_typo
cmd/utils: fix jspath flag typo
2016-02-05 15:37:42 +01:00
Isidoro Ghezzi
cf47ef12d3 cmd/utils: fix jspath flag typo 2016-02-05 15:32:00 +01:00
Péter Szilágyi
a13bc9d7a1 cmd, common, node, rpc: move HTTP RPC into node, drop singletone aspect 2016-02-05 13:45:36 +02:00
Péter Szilágyi
ba7c125153 Merge pull request #2168 from karalabe/move-rpc-into-node
cmd, common, node, rpc: move IPC into the node itself
2016-02-05 11:33:24 +02:00
Péter Szilágyi
2128289631 Merge pull request #2171 from karalabe/rpc-modules-fix
rpc: add jsonrpc version to module request, use json types
2016-02-05 11:33:10 +02:00
Péter Szilágyi
6b939fbeaa rpc: add jsonrpc version to module request, use json types 2016-02-04 16:55:50 +02:00
Péter Szilágyi
188ab928c3 cmd, common, node, rpc: move IPC into the node itself 2016-02-04 11:23:15 +02:00
Jeffrey Wilcke
3274db19c7 Merge pull request #2169 from karalabe/fix-http-rpc-method
rpc: allow RPC requests on GET too
2016-02-03 23:34:36 +01:00
Péter Szilágyi
a50bccc642 Merge pull request #2134 from karalabe/save-state-writes
core/state, trie: don't leak database writes before commit
2016-02-03 10:56:21 +02:00
Péter Szilágyi
fbbedb4c03 Merge pull request #2154 from karalabe/rpc-fixes
cmd, eth, rpc: fix some RPC issues with pending blocks
2016-02-03 10:50:34 +02:00
Péter Szilágyi
5da7ec7c18 cmd, eth, rpc: fix some RPC issues with pending blocks 2016-02-03 10:35:59 +02:00
Péter Szilágyi
a8fd0de0d3 Merge pull request #2156 from ppratscher/add_replay_tx
core/vm, rpc/api: added debug_replayTransaction RPC call
2016-02-03 10:34:52 +02:00
Péter Szilágyi
2e2f093ec2 Merge pull request #2167 from obscuren/abi-event-fixes
account/abi: implements event parsing
2016-02-03 10:34:27 +02:00
Péter Szilágyi
da645f007b Merge pull request #2166 from obscuren/contrib
CONTRIBUTING: Added a feature section
2016-02-03 10:34:16 +02:00
Péter Szilágyi
72c255caef rpc: allow RPC requests on GET too 2016-02-03 00:50:02 +02:00
Péter Szilágyi
db056eeafe Merge pull request #2170 from karalabe/fix-miner-registration
miner: register newly created remote agent in the API
2016-02-03 00:09:20 +02:00
Péter Szilágyi
9aa7158057 miner: register newly created remote agent in the API 2016-02-02 20:22:21 +02:00
Jeffrey Wilcke
1894c9239f CONTRIBUTING: Added a feature section 2016-02-02 15:44:27 +01:00
Jeffrey Wilcke
bddf8f76c8 account/abi: implements event parsing
Implementation of basic event parsing and its input types. This
separates methods and events and fixes an issue with go type parsing and
validation.
2016-02-02 15:28:59 +01:00
Peter Pratscher
15780ead07 core/vm, rpc/api: renamed to debug.replayTransaction, migrated to new RPC, integrated feedback
Integrated code review suggestions

Integrated last review comments
2016-02-02 15:20:18 +01:00
Jeffrey Wilcke
6005dcef5b Merge pull request #2098 from karalabe/rpc-txpool-queue-inspection
core, eth, rpc/api: rpc method to inspect the txpool queue
2016-02-02 10:53:23 +01:00
Péter Szilágyi
d3642b0715 core, eth, rpc/api: rpc method to inspect the txpool queue 2016-02-01 14:58:14 +02:00
Jeffrey Wilcke
f85212aa86 Merge pull request #2146 from fjl/discover-win32-large-packets
p2p/discover: fix Windows-specific issue for larger-than-buffer packets
2016-02-01 11:36:31 +01:00
Péter Szilágyi
d951ff300e Merge pull request #2165 from karalabe/gmp-dep-master-alpine
containers/docker/master-alpine: add the legacy gmp lib back for now
2016-01-31 16:23:47 +02:00
Péter Szilágyi
0781fd7aa0 containers/docker/master-alpine: add the legacy gmp lib back for now 2016-01-31 16:19:55 +02:00
Péter Szilágyi
aed25640a4 Merge pull request #2164 from karalabe/add-alpine-images
containers: regroup and add Alpine images (31 MB)
2016-01-31 15:08:52 +02:00
Péter Szilágyi
f9b2fd79e8 containers: regroup and add Alpine images (31 MB) 2016-01-30 20:55:44 +02:00
Jeffrey Wilcke
528dcc3814 Merge pull request #2151 from fjl/debug-api
internal/debug: APIs for profiling and tracing
2016-01-28 16:11:24 +01:00
Jeffrey Wilcke
ae1a137ce7 Merge pull request #2143 from karalabe/fix-transaction-sort-2
core, core/types, miner: fix transaction nonce-price combo sort
2016-01-28 16:11:14 +01:00
Felix Lange
3750d835a1 internal/debug: APIs for profiling and tracing
The debug package provides an RPC wrapper for glog settings and the
debugging facilities of the Go runtime. They can be triggered through
both command line flags and the IPC listener.
2016-01-28 13:36:11 +01:00
Felix Lange
e287b56b69 logger/glog: clean up flag getters 2016-01-27 00:51:14 +01:00
Felix Lange
a411fe7e6e logger/glog: fix TraceLocation.Set("") 2016-01-27 00:51:14 +01:00
Felix Lange
5728dd381d rpc: fix success response encoding for null return value
The "result" field of JSON-RPC 2.0 responses was omitted
if the result was nil, causing exceptions in web3.js.
2016-01-27 00:06:37 +01:00
Jeffrey Wilcke
63e76482ac Merge pull request #2140 from obscuren/rpc2-console
Rpc2 console
2016-01-26 14:01:00 +01:00
Bas van Kervel
19b2640e89 rpc: migrated the RPC insterface to a new reflection based RPC layer 2016-01-26 13:51:50 +01:00
Felix Lange
f2ab351e8d Merge pull request #2136 from fjl/glog-prefix
logger/glog: improve vmodule
2016-01-25 23:35:25 +01:00
Felix Lange
2871781f64 p2p/discover: fix Windows-specific issue for larger-than-buffer packets
On Windows, UDPConn.ReadFrom returns an error for packets larger
than the receive buffer. The error is not marked temporary, causing
our loop to exit when the first oversized packet arrived. The fix
is to treat this particular error as temporary.

Fixes: #1579, #2087
Updates: #2082
2016-01-22 23:44:25 +01:00
Felix Lange
6e6931ef73 Merge pull request #2145 from caktux/develop
separate and optimize Dockerfile for master and develop
2016-01-22 21:55:13 +01:00
Péter Szilágyi
a2dc074b1d core, core/types, miner: fix transaction nonce-price combo sort 2016-01-22 12:33:34 +02:00
caktux
896c134d30 separate and optimize Dockerfile for master and develop 2016-01-22 04:03:41 -05:00
Felix Lange
e4d794851b node, rpc/api: add debug_vmodule, move admin_verbosity to debug_verbosity 2016-01-21 13:37:38 +01:00
Felix Lange
0edcbc797f logger/glog: add SetVmodule 2016-01-21 13:37:38 +01:00
Felix Lange
a15b02320e logger/glog: add directory context to output and vmodule matching
This change allows setting the verbosity for directory prefixes
using the syntax:

    --vmodule=eth/=6
2016-01-21 13:37:38 +01:00
Jeffrey Wilcke
78f1964095 Merge pull request #2115 from karalabe/vm-debug-storage
core/vm: resolve circular dependency to debug vm storage
2016-01-20 22:18:19 +01:00
Jeffrey Wilcke
7b11e94441 Merge pull request #2132 from bas-vk/console-sleep
console: add admin.sleep and admin.sleepBlocks
2016-01-20 22:17:46 +01:00
Péter Szilágyi
f3d4ce0d16 core/state, ethdb, trie: test intermediate secure key leak, fix memdb bug 2016-01-20 16:06:28 +02:00
Péter Szilágyi
886478b18b core/state, trie: don't leak database writes before commit 2016-01-20 12:09:24 +02:00
Felix Lange
e7f6798b59 Merge pull request #2130 from bas-vk/nodeinfo-format
Nodeinfo format Genesis and Header
2016-01-19 13:21:40 +01:00
Bas van Kervel
cdd34fcb16 console: add admin.sleep and admin.sleepBlocks 2016-01-19 12:30:33 +01:00
Bas van Kervel
6e7620afe0 eth: changed NodeInfo Genesis and Head types 2016-01-18 13:28:03 +01:00
Jeffrey Wilcke
5945a33350 Merge pull request #2119 from karalabe/statedb-batch-commit
core/state: always commit in batches, just finish if not needed later
2016-01-14 12:17:59 +01:00
Péter Szilágyi
2d5d6d9d0e core/state: always commit in batches, just finish if not needed later 2016-01-13 12:04:03 +02:00
Péter Szilágyi
752c75fb21 core/vm: resolve circular dependency to debug vm storage 2016-01-11 18:21:39 +02:00
Felix Lange
1b8566a7b1 Merge pull request #2114 from karalabe/chain-maker-state-remake
core: fix invalid state reuse in chain maker based tests
2016-01-11 16:40:28 +01:00
Péter Szilágyi
e5b480b638 core: fix invalid state reuse in chain maker based tests 2016-01-11 16:53:06 +02:00
Felix Lange
0ab8a175d8 Merge pull request #2110 from LefterisJP/determining_home_for_ubuntu_core
common: Fix HomeDir detection
2016-01-08 14:24:49 +01:00
Lefteris Karapetsas
e2fdd33541 common: Fix HomeDir detection
I am working on porting geth to [Ubuntu Core](https://developer.ubuntu.com/en/snappy/https://developer.ubuntu.com/en/snappy/). I am testing geth on a Raspberry PI and for Ubuntu Core the $HOME directory is unique for each application. See [here](https://developer.ubuntu.com/en/snappy/guides/filesystem-layout) for more information of their filesystem layout.

For some reason in Go `usr.HomeDir` returns a different value than `$HOME` in Ubuntu Core.

Adding this at the end of `HomeDir()`
```go
fmt.Printf("at HomeDir, user.HomeDir = %s and $HOME is %s\n", usr.HomeDir, os.Getenv("HOME"))
```

gives the following output

```
at HomeDir, user.HomeDir = /home/ubuntu and $HOME is /home/ubuntu/apps/geth.sideload/IJcODREBYbHO
```

With this commit, I propose giving precedence to the `$HOME` environment variable as is also suggested by the [homedir](https://github.com/mitchellh/go-homedir/blob/master/homedir.go) project.
2016-01-08 13:36:37 +01:00
Jeffrey Wilcke
32226f1b0c Merge pull request #2097 from karalabe/block-state-checks
core, eth/downloader: ensure state presence in ancestor lookup
2016-01-05 12:26:38 +01:00
Jeffrey Wilcke
a7fc4fa9b7 Merge pull request #2101 from karalabe/delete-outoffund-transactions
core: transaction invalidation and reorganization fixes
2016-01-05 12:26:28 +01:00
Péter Szilágyi
649787a9bf core: fix transaction reorg issues within the tx pool 2016-01-05 11:22:59 +02:00
Péter Szilágyi
9e011ff1cd core, eth/downloader: ensure state presence in ancestor lookup 2016-01-04 16:27:23 +02:00
Felix Lange
36137623ed Merge pull request #2099 from karalabe/fix-throttling-test
eth/downloader: throttling tests are time-sensitive, don't run parallel
2015-12-30 13:55:03 +01:00
Péter Szilágyi
1f39746886 eth/downloader: throttling tests are time-sensitive, don't run parallel 2015-12-30 14:42:21 +02:00
Jeffrey Wilcke
dbbcf558e2 Merge pull request #2064 from fjl/remove-common-rlp
common: remove old RLP implementation, Value and ExtPackage
2015-12-18 20:26:19 +01:00
Jeffrey Wilcke
4811409e99 Merge pull request #2084 from bas-vk/rpcnilptr
console crash on nil ptr
2015-12-18 20:25:55 +01:00
Bas van Kervel
3c9a2c752f console: bugfix that causes the console to crash when connection to an endpoint without the personal api enabled 2015-12-18 15:30:08 +01:00
Jeffrey Wilcke
fd69d2b7a8 Merge pull request #2019 from zsfelfoldi/light-state
Light state
2015-12-18 12:40:01 +01:00
Felix Lange
e6fb69296e common: remove old RLP implementation, Value and ExtPackage
In order to make this happen, kill all remaining trivial uses of
common/{rlp,value}.go. The non-trivial ones have been updated earlier.
2015-12-18 12:09:10 +01:00
Felix Lange
1b89bd5d26 core/state, core/types use package rlp for state, receipt serialisation 2015-12-18 12:09:10 +01:00
Felix Lange
9be5d5cd90 eth/downloader: fix negative balance issue in tests
The test chain generated by makeChainFork included invalid uncle
headers, crashing the generator during the state commit.

The headers were invalid because they used the iteration counter as the
block number, even though makeChainFork uses a block with number > 0 as
the parent. Fix this by introducing BlockGen.Number, which allows
accessing the actual number of the block being generated.
2015-12-18 12:09:10 +01:00
Jeffrey Wilcke
2baf1de00d Merge pull request #1925 from fjl/p2p-dial-resolve
p2p: resolve incomplete dial targets
2015-12-18 11:31:55 +01:00
Felix Lange
b3f1f4c673 p2p/discover: attempt to deflake TestUDP_responseTimeouts
The test expected the timeout to fire after a matcher for the response
was added, but the timeout is random and fired sooner sometimes.
2015-12-17 23:44:56 +01:00
Felix Lange
6c41e675ec p2p: resolve incomplete dial targets
This change makes it possible to add peers without providing their IP
address. The endpoint of the target node is resolved using the discovery
protocol.
2015-12-17 23:39:49 +01:00
Felix Lange
04c6369a09 p2p, p2p/discover: track bootstrap state in p2p/discover
This change simplifies the dial scheduling logic because it
no longer needs to track whether the discovery table has been
bootstrapped.
2015-12-17 23:38:54 +01:00
Felix Lange
d1f507b7f1 p2p/discover: support incomplete node URLs, add Resolve 2015-12-17 23:38:54 +01:00
zsfelfoldi
ef422ee1e1 light: implemented odr-capable trie and state structures 2015-12-17 16:07:54 +01:00
Jeffrey Wilcke
82a024d425 Merge pull request #1997 from zsfelfoldi/gasprice2
core: tx pool skip price validation for "owned" transactions
2015-12-17 12:45:45 +01:00
Jeffrey Wilcke
24f856ad6b Merge pull request #2077 from karalabe/fix-header-query-duplication
eth: fix #2076, where end of hash query was interpreted number query
2015-12-17 10:37:21 +01:00
Felix Lange
e640861704 Merge pull request #2061 from zsfelfoldi/rpc-context
rpc: optionally passing context argument to rpc v2 api methods
2015-12-16 11:12:06 +01:00
Péter Szilágyi
e51eeb8104 eth: fix #2076, where end of hash query was interpreted number query 2015-12-16 08:44:13 +02:00
zsfelfoldi
f3aac71fad rpc/v2: optionally passing context argument to rpc v2 api methods 2015-12-16 03:48:08 +01:00
zsfelfoldi
975c591261 core: tx pool skip price validation for "owned" transactions 2015-12-16 03:21:17 +01:00
Felix Lange
b9aedeab0b Merge pull request #2072 from karalabe/admin-debug-apis
core, eth, node, rpc: port the admin and debug API
2015-12-15 11:33:18 +01:00
Felix Lange
9c636d2490 Merge pull request #2070 from karalabe/android-archives
Makefile, cmd/geth: support building Android archives
2015-12-14 21:32:00 +01:00
Péter Szilágyi
d8370a4e15 core, eth, node, rpc: port the admin and debug API 2015-12-14 19:36:51 +02:00
Felix Lange
fa187a366d Merge pull request #2035 from bas-vk/rcp-v2-rebase
rpc: new RPC implementation with pub/sub support
2015-12-14 17:38:10 +01:00
Bas van Kervel
eae81465c1 rpc: new RPC implementation with pub/sub support 2015-12-14 16:34:05 +01:00
Péter Szilágyi
03f090b30b Makefile, cmd/geth: support building Android archives 2015-12-14 14:28:14 +02:00
Jeffrey Wilcke
787d71d659 Merge pull request #2056 from fjl/fix-account-format
crypto: "Crypto" -> "crypto" in web3 key format
2015-12-10 10:45:00 +01:00
Felix Lange
b2ffb76ca2 Merge pull request #2058 from karalabe/geth-framework
Makefile, cmd/geth: assemble ios xcode frameworks
2015-12-09 18:04:27 +01:00
Péter Szilágyi
0e4deeb6e7 Makefile, cmd/geth: assemble ios xcode frameworks 2015-12-08 18:05:43 +02:00
Felix Lange
38ff815485 Merge pull request #2003 from obscuren/abi-calling
accounts/abi: added output parsing & added call mechanism
2015-12-07 23:24:41 +01:00
Felix Lange
659d6b9b7c Merge pull request #2051 from karalabe/store-transaction-fastsync
core: write individual transactions and receipts too on fast sync
2015-12-07 23:24:15 +01:00
Felix Lange
032453b3e7 crypto: "Crypto" -> "crypto" in web3 key format 2015-12-07 17:01:29 +01:00
Jeffrey Wilcke
2a3322ea14 Merge pull request #2034 from karalabe/always-allow-dyndials
p2p: always allow dynamic dials if network not disabled
2015-12-07 11:26:05 +01:00
Péter Szilágyi
1cecda8333 core: write individual transactions and receipts too on fast sync 2015-12-04 15:30:59 +02:00
Péter Szilágyi
4dee2000a3 Merge pull request #2037 from fjl/no-libgmp
crypto/secp256k1: remove dependency on libgmp
2015-12-04 12:27:16 +02:00
Jeffrey Wilcke
fece1fa9be Merge pull request #2024 from obscuren/exp-logs
core: added a new RemovedLogEvent
2015-12-03 22:27:44 +01:00
Felix Lange
02356b36d6 crypto/secp256k1: remove dependency on libgmp
Turns out we actually don't need it, USE_NUM_NONE works
because we also set USE_FIELD_INV_BUILTIN.
2015-12-03 21:12:13 +01:00
Felix Lange
6d3a924283 Merge pull request #2036 from karalabe/ios-arm64-cross
Makefile: support 64bit ARM iOS cross builds
2015-12-03 21:09:09 +01:00
Péter Szilágyi
9acec62cf8 Makefile: support 64bit ARM iOS cross builds 2015-12-03 20:33:24 +02:00
Péter Szilágyi
abb53644c6 p2p: always allow dynamic dials if network not disabled 2015-12-03 11:45:35 +02:00
Jeffrey Wilcke
3eebeae363 Merge pull request #2032 from karalabe/linux-arm64-cross
Makefile: enable 64-bit ARM builds on Linux
2015-12-02 21:27:52 +01:00
Péter Szilágyi
98d68cfa91 Makefile: enable 64-bit ARM builds on Linux 2015-12-02 16:57:15 +02:00
Jeffrey Wilcke
888e7bc765 Merge pull request #1862 from Gustav-Simonsson/libsecp256k1_ecdh
crypto, crypto/secp256k1: use libsecp256k1 for scalar multiplication
2015-12-02 13:19:33 +01:00
Felix Lange
8db9d44ca9 Merge pull request #2025 from karalabe/windows-account-unlock-testfix
accounts: increase re-lock timeout to account for slow CI servers
2015-12-01 13:23:31 +01:00
Péter Szilágyi
2d4c228933 Merge pull request #2022 from karalabe/multiversion-arm-builds
Makefile: build ARM v5/v6/v7, drop high API mobile clients
2015-12-01 13:40:22 +02:00
Jeffrey Wilcke
96d86740a1 Merge pull request #2005 from zsfelfoldi/light-trie
Trie error handling
2015-12-01 12:28:26 +01:00
Jeffrey Wilcke
23031b1554 Merge pull request #2021 from fjl/fix-etherbase-no-accounts
cmd/utils: restore starting geth without any accounts and etherbase
2015-12-01 12:21:25 +01:00
Péter Szilágyi
2e43414c79 accounts: increase re-lock timeout to account for slow CI servers 2015-12-01 13:20:43 +02:00
Jeffrey Wilcke
9901a40f04 core: added a new RemovedLogEvent
When a chain reorganisation occurs we collect the logs that were deleted
during the chain reorganisation. The removed logs are posted to the
event mux indicating that those were deleted during the reorg.
2015-12-01 12:12:30 +01:00
Felix Lange
d648e96b3d cmd/utils: restore starting geth without any accounts and etherbase
Also remove some duplication around address/index parsing.
2015-12-01 11:55:52 +01:00
Péter Szilágyi
391ca61678 Makefile: build ARM v5/v6/v7, drop high API mobile clients 2015-12-01 12:40:55 +02:00
Jeffrey Wilcke
f801ec78ce Merge pull request #2020 from bas-vk/issue2016
eth package creates new event mux
2015-12-01 11:13:57 +01:00
Bas van Kervel
61ca14bc44 eth: use global event mux instead 2015-12-01 11:01:40 +01:00
zsfelfoldi
52904ae32f trie: added error handling
Created alternate versions of Trie and SecureTrie functions that can return a MissingNodeError (used by ODR services)
2015-12-01 01:38:32 +01:00
Jeffrey Wilcke
f4a6470a7b Merge pull request #2015 from bas-vk/console-instance-name
console: fix instance name printed incorrect on start
2015-11-30 14:46:21 +01:00
Gustav Simonsson
c8ad64f33c crypto, crypto/ecies, crypto/secp256k1: libsecp256k1 scalar mult
thanks to Felix Lange (fjl) for help with design & impl
2015-11-30 13:43:32 +01:00
Gustav Simonsson
27a50c8f4b core/secp256k1: update libsecp256k1 Go wrapper and tests 2015-11-30 13:24:04 +01:00
Bas van Kervel
1ead43c88c console: fix instance name printed incorrect on start 2015-11-30 09:49:10 +01:00
Felix Lange
66d47ced48 Merge pull request #2014 from karalabe/enable-ios-builds
Makefile: enable iOS experimental builds (fix prev omission)
2015-11-29 17:18:34 +01:00
Péter Szilágyi
9af4065243 Makefile: enable iOS experimental builds (fix prev omission) 2015-11-29 17:52:52 +02:00
Jeffrey Wilcke
a0d203a874 Merge pull request #2011 from karalabe/fix-hex-address
common: fix #2008, wrong hex prefix check
2015-11-27 19:16:31 +01:00
Péter Szilágyi
18ea468cf8 common: fix #2008, wrong hex prefix check 2015-11-27 19:32:46 +02:00
Jeffrey Wilcke
7dde2b902c Merge pull request #1970 from karalabe/customizable-protocol-stacks
Customizable protocol stacks
2015-11-27 10:41:22 +01:00
Péter Szilágyi
3e1000fda3 cmd, eth, node, rpc, xeth: use single-instance services 2015-11-27 11:06:12 +02:00
Péter Szilágyi
1e806c4c77 cmd, common, core, eth, node, rpc, tests, whisper, xeth: use protocol stacks 2015-11-27 11:06:12 +02:00
Péter Szilágyi
8a44451edf cmd: drop blocktest command, create gethrpctest program 2015-11-27 11:06:12 +02:00
Péter Szilágyi
9e1d9bff3b node: customizable protocol and service stacks 2015-11-27 11:06:12 +02:00
Jeffrey Wilcke
ffe58bf5ab Merge pull request #2002 from karalabe/ios-cross-builds
Makefile: add support for iOS cross compilation
2015-11-26 23:00:59 +01:00
Jeffrey Wilcke
de75d542f3 Merge pull request #1999 from karalabe/javascript-timer-argcheck
jrse: fix #1082, fail if setTimeout/setInterval lack callback
2015-11-26 23:00:36 +01:00
Jeffrey Wilcke
b9db5b37f2 Merge pull request #2001 from obscuren/fixes
cmd, crypto: updated web3
2015-11-26 23:00:05 +01:00
Jeffrey Wilcke
b1e0143444 cmd, crypto: fixed nil public keys and updated web3 2015-11-26 13:38:53 +01:00
Jeffrey Wilcke
168d0e9e45 Merge pull request #1996 from obscuren/whisper-spam-fix
whisper: fixed broadcast race
2015-11-25 13:19:45 +01:00
Jeffrey Wilcke
a0bf2ea7e7 accounts/abi: added output parsing & added call mechanism
Added calling mechanism and return value parsing
2015-11-25 12:23:29 +01:00
Jeffrey Wilcke
5f0a4416db whisper: fixed broadcast race
Whisper's expire and broadcast loops happen in two separate go routines.
Whenever an envelope is being expired it's removed from the set of
envelopes and it looses all information about the envelope, including
the "known hash". After the envelope has been removed it can be
re-accepted by a broadcasting peer putting back the envelope in the set
of envelopes. Since the envelope broadcast loop is separate of the
expire loop expired messages may be broadcast to other peer, resulting
in messages **never** being dropped.

This PR includes an expire check before adding new messages to the set
of envelopes.
2015-11-25 12:10:47 +01:00
Péter Szilágyi
83a22b457c Makefile: support library build modes 2015-11-24 19:49:08 +02:00
Péter Szilágyi
2c42e54519 Makefile: add support for iOS cross compilation 2015-11-24 17:24:43 +02:00
Jeffrey Wilcke
b0fb48c389 Merge pull request #1988 from bas-vk/issue1971
miner: bugfix where blockhash in receipts and logs is left empty
2015-11-24 10:55:07 +01:00
Péter Szilágyi
f27e826b14 jrse: fix #1082, fail if setTimeout/setInterval lack callback 2015-11-23 13:03:31 +02:00
Gustav-Simonsson
ae9e9efa31 Merge pull request #1991 from Gustav-Simonsson/common_tests
Update common test files
2015-11-23 10:26:21 +01:00
Jeffrey Wilcke
6bb29aebee Merge pull request #1666 from obscuren/create-transaction
rpc/api, xeth: added signTransaction method
2015-11-20 21:36:56 +01:00
Jeffrey Wilcke
314c031ff2 Merge pull request #1995 from karalabe/parametrize-crosscompile-go
Makefile: individual platforms, configurable Go runtime
2015-11-20 21:10:21 +01:00
Péter Szilágyi
fea819f74f Makefile: individual platforms, configurable Go runtime 2015-11-20 16:06:35 +02:00
Gustav Simonsson
220b0bf6e5 Update common test files 2015-11-20 12:53:36 +01:00
Jeffrey Wilcke
f16fab91c8 Merge pull request #1953 from karalabe/switch-to-fast-peers
eth/downloader: fetch data proportionally to peer capacity
2015-11-19 18:48:53 +01:00
Bas van Kervel
98cbe1356e miner: bugfix were blockhash in receipts and logs is left empty 2015-11-19 16:02:49 +01:00
Péter Szilágyi
b6f5523bdc eth/downloader: fetch data proportionally to peer capacity 2015-11-19 17:01:39 +02:00
Jeffrey Wilcke
4c2933ad82 Merge pull request #1993 from obscuren/remove-legalese
cmd/geth, cmd/utils: removed legalese
2015-11-19 15:29:49 +01:00
Jeffrey Wilcke
7399b138a8 Merge pull request #1923 from karalabe/cleanup-receipt-data-access
core, eth, miner, xeth: clean up tx/receipt db accessors
2015-11-19 15:28:15 +01:00
Jeffrey Wilcke
65bb07fb4e Merge pull request #1980 from fjl/downloader-deliver-hang
eth/downloader: don't hang for spurious deliveries
2015-11-19 15:19:21 +01:00
Péter Szilágyi
e86e0ecdc8 core, eth, miner, xeth: clean up tx/receipt db accessors 2015-11-19 16:03:32 +02:00
Felix Lange
dd09af27af eth/downloader: run tests in parallel 2015-11-19 14:18:35 +01:00
Felix Lange
b7b62d4b3c eth/downloader: also drain stateCh, receiptCh in eth/61 mode
State and receipt deliveries from a previous eth/62+ sync can hang if
the downloader has moved on to syncing with eth/61. Fix this by also
draining the eth/63 channels while waiting for eth/61 data.

A nicer solution would be to take care of the channels in a central
place, but that would involve a major rewrite.
2015-11-19 14:18:35 +01:00
Felix Lange
db52a6a0ff eth: remove workaround for asynchronous processing in the downloader 2015-11-19 14:18:34 +01:00
Felix Lange
900da3d800 eth/downloader: don't hang for spurious deliveries
Unexpected deliveries could block indefinitely if they arrived at the
right time. The fix is to ensure that the cancellation channel is
always closed when the sync ends, unblocking any deliveries. Also remove
the atomic check for whether a sync is currently running because it
doesn't help and can be misleading.

Cancelling always seems to break the tests though. The downloader
spawned d.process whenever new data arrived, making it somewhat hard to
track when block processing was actually done. Fix this by running
d.process in a dedicated goroutine that is tied to the lifecycle of the
sync. d.process gets notified of new work by the queue instead of being
invoked all the time. This removes a ton of weird workaround code,
including a hairy use of atomic CAS.
2015-11-19 14:18:34 +01:00
Jeffrey Wilcke
1c63d08ed1 cmd/geth, cmd/utils: removed legalese
Removed the legalese confirmation dialog. This closes #1992
2015-11-19 12:03:33 +01:00
Jeffrey Wilcke
ae37a8013d Merge pull request #1917 from obscuren/validator-interface
core, eth, rpc: split out block validator and state processor
2015-11-19 10:57:00 +01:00
Jeffrey Wilcke
23f42d9463 Merge pull request #1964 from obscuren/evm-runtime
core/vm/runtime: added simple execution runtime
2015-11-18 17:39:27 +01:00
Jeffrey Wilcke
1372b991c3 core/vm/runtime: added simple execution runtime
The runtime environment can be used for simple basic execution of
contract code without the requirement of setting up a full stack and
operates fully in memory.
2015-11-18 16:50:20 +01:00
Jeffrey Wilcke
a1d9ef48c5 core, eth, rpc: split out block validator and state processor
This removes the burden on a single object to take care of all
validation and state processing. Now instead the validation is done by
the `core.BlockValidator` (`types.Validator`) that takes care of both
header and uncle validation through the `ValidateBlock` method and state
validation through the `ValidateState` method. The state processing is
done by a new object `core.StateProcessor` (`types.Processor`) and
accepts a new state as input and uses that to process the given block's
transactions (and uncles for rewords) to calculate the state root for
the next block (P_n + 1).
2015-11-18 14:24:42 +01:00
Felix Lange
4a938406dc Merge pull request #1990 from karalabe/fix-whisper-autocomplete
rpc/api: fix #1986, newIdentity autocomplete
2015-11-18 12:32:39 +01:00
Péter Szilágyi
53f28e71dc rpc/api: fix #1986, newIdentity autocomplete 2015-11-18 13:03:20 +02:00
Jeffrey Wilcke
10475f444c Merge pull request #1984 from fjl/secp256k1-recover-id-verify
crypto/secp256k1: verify recovery ID before calling libsecp256k1
2015-11-17 19:39:42 +01:00
Jeffrey Wilcke
6ea05f5a54 rpc/api, xeth: added signTransaction method
SignTransaction creates a transaction but does submit it to the
network. SignTransaction returns a structure which includes the
transaction object details as well as the RLP encoded transaction that
could possibly be submitted by the SendRawTransaction method.
2015-11-17 17:51:05 +01:00
Felix Lange
e344e1d490 crypto/secp256k1: drop pkgsrc paths from CFLAGS
They cause compiler warnings for people who don't have these
directories. People with pkgsrc can add the directory through CGO_CFLAGS
instead.
2015-11-17 09:53:10 +01:00
Felix Lange
5159f8f649 crypto/secp256k1: raise internal errors as recoverable Go panic 2015-11-17 09:53:10 +01:00
Felix Lange
1b29aed128 crypto/secp256k1: verify recovery ID before calling libsecp256k1
The C library treats the recovery ID as trusted input and crashes
the process for invalid values, so it needs to be verified before
calling into C. This will inhibit the crash in #1983.

Also remove VerifySignature because we don't use it.
2015-11-17 09:51:59 +01:00
Jeffrey Wilcke
9422eec554 Merge pull request #1976 from karalabe/enable-light-kdf
cmd/geth, cmd/utils: surface the light KDF flag to the CLI
2015-11-11 12:45:30 +01:00
Péter Szilágyi
9aa77a3769 cmd/geth, cmd/utils: surface the light KDF flag to the CLI 2015-11-10 15:47:19 +02:00
Jeffrey Wilcke
da6696862e Merge pull request #1974 from karalabe/fix-rpc-regression
rpc/api: fix #1972 api regression (nil eth panic) in attach
2015-11-06 13:10:28 +01:00
Péter Szilágyi
6e5349880e rpc/api: fix #1972 api regression (nil eth panic) in attach 2015-11-06 11:47:57 +02:00
Jeffrey Wilcke
6d09468cab Merge pull request #1967 from karalabe/fix-filter-test-datarace
event/filter: fix data race in the test
2015-11-05 20:31:11 +01:00
Jeffrey Wilcke
2334ee97d0 Merge pull request #1963 from karalabe/fix-database-regression
eth: fix error casting regression during database open
2015-11-05 20:27:11 +01:00
Péter Szilágyi
5d89bbdda1 eth: fix error casting regression during database open 2015-11-05 16:59:16 +02:00
Péter Szilágyi
8e2bf42c46 event/filter: fix data race in the test 2015-11-05 16:55:53 +02:00
Felix Lange
76390ef892 Merge pull request #1966 from karalabe/fix-recover-noparam-panic
cmd/geth: fix recover command crash if no param is supplied
2015-11-05 13:15:23 +01:00
Felix Lange
636f67f232 Merge pull request #1969 from karalabe/fix-whisper-tests-datarace
whisper: fix datarace in expiration test
2015-11-05 13:03:36 +01:00
Felix Lange
eb11c0e597 Merge pull request #1965 from karalabe/fix-natto-test
jsre: fix #1876, sleep too short on a slow test server
2015-11-05 13:03:06 +01:00
Felix Lange
ca4f6d0fdd Merge pull request #1968 from karalabe/fix-json-tests-datarace
tests: fix data race in bad-block-report disabling during tests
2015-11-05 12:59:07 +01:00
Péter Szilágyi
60e0abb595 whisper: fix datarace in expiration test 2015-11-05 13:36:25 +02:00
Péter Szilágyi
9dc5de51a2 tests: fix data race in bad-block-report disabling during tests 2015-11-05 13:29:50 +02:00
Péter Szilágyi
90655736ed cmd/geth: fix recover command crash if no param is supplied 2015-11-05 11:53:50 +02:00
Péter Szilágyi
bddb13d436 jsre: fix #1876, sleep too short on a slow test server 2015-11-05 11:36:10 +02:00
Jeffrey Wilcke
e3f36d9728 Merge pull request #1960 from karalabe/fix-peer-ignore-list
eth/downloader: fix dysfunctional ignore list hidden by generic set
2015-11-04 14:43:58 +01:00
Péter Szilágyi
b658a73ed5 eth/downloader: fix dysfunctional ignore list hidden by generic set 2015-11-04 13:11:52 +02:00
Jeffrey Wilcke
e165c2d23c Merge pull request #1934 from karalabe/polish-protocol-infos
eth, p2p, rpc/api: polish protocol info gathering
2015-11-04 11:59:31 +01:00
Jeffrey Wilcke
dda3bf3ce7 Merge pull request #1943 from obscuren/abi-fixes
accounts/abi: ABI fixes & added types
2015-11-03 15:22:37 +01:00
Jeffrey Wilcke
6dfbbc3e11 Merge pull request #1948 from bas-vk/rpcfix
Infinite loop in filters
2015-11-03 15:22:02 +01:00
Jeffrey Wilcke
5ff0814b1f VERSION, cmd/geth: bumped version 1.4.0 2015-11-03 11:48:18 +01:00
Felix Lange
001684fb11 Merge pull request #1958 from fjl/secp256k1-pkgsrc
crypto/secp256k1: add C compiler flags for pkgsrc
2015-11-03 10:46:04 +01:00
Felix Lange
16b0bc7c3b crypto/secp256k1: add C compiler flags for pkgsrc
pkgsrc is a cross-platform package manager that also
supports OS X.
2015-11-03 10:33:31 +01:00
Jeffrey Wilcke
c841e39476 Merge pull request #1954 from obscuren/regression-miner
miner: synchronise start / stop
2015-10-31 20:00:34 +01:00
Jeffrey Wilcke
8c38f8d815 miner: synchronise start / stop
This PR fixes an issue where the remote worker was stopped twice and not
properly handled. This adds a synchronised running check to the start
and stop methods preventing closing of a channel more than once.
2015-10-31 02:18:41 +01:00
Jeffrey Wilcke
016ad3e962 Merge pull request #1952 from obscuren/testnet-peers
eth: added new testnet peers
2015-10-30 11:00:31 +01:00
Jeffrey Wilcke
98b036ddb6 Merge pull request #1949 from karalabe/update-command-usage
cmd/geth, cmd/utils, eth: group CLI flags by purpose
2015-10-30 10:59:36 +01:00
Péter Szilágyi
3c6e285d3b cmd/geth, cmd/utils, eth: group CLI flags by purpose 2015-10-30 11:33:12 +02:00
Jeffrey Wilcke
1bc789553a eth: added new testnet peers 2015-10-30 10:01:19 +01:00
Jeffrey Wilcke
1abbe05e93 Merge pull request #1951 from fjl/godeps-upgrade-goupnp
Godeps: upgrade github.com/huin/goupnp
2015-10-30 00:14:15 +01:00
Felix Lange
f570b68ed1 p2p/nat: add docs for discover 2015-10-29 22:54:44 +01:00
Felix Lange
bf11a47f22 Godeps: upgrade github.com/huin/goupnp to 90f71cb5 2015-10-29 22:53:59 +01:00
Jeffrey Wilcke
1f72952f04 accounts/abi: ABI fixes & added types
Changed field `input` to new `inputs`. Addad Hash and Address as input
types.

Added bytes[N] and N validation
2015-10-29 21:40:18 +01:00
Jeffrey Wilcke
fc46cf337a Merge pull request #1946 from fjl/xeth-oom
Fix for xeth OOM issue
2015-10-29 17:42:55 +01:00
Bas van Kervel
76410df6a2 rpc: return an unsupported error when "pending" was used to create a filter 2015-10-29 17:35:43 +01:00
Felix Lange
fbdb44dcc1 cmd/utils, rpc/comms: stop XEth when IPC connection ends
There are a bunch of changes required to make this work:

- in miner: allow unregistering agents, fix RemoteAgent.Stop
- in eth/filters: make FilterSystem.Stop not crash
- in rpc/comms: move listen loop to platform-independent code

Fixes #1930. I ran the shell loop there for a few minutes and didn't see
any changes in the memory profile.
2015-10-29 17:26:26 +01:00
Jeffrey Wilcke
fd27f074fe Merge pull request #1945 from bas-vk/rpcparsing
Argument parsing can lead to panic in rpc channel
2015-10-29 16:55:51 +01:00
Jeffrey Wilcke
8202bae070 Merge pull request #1939 from karalabe/fix-blocked-sync-goroutines
eth: don't block sync goroutines that short circuit
2015-10-29 16:54:43 +01:00
Bas van Kervel
c3c5f8b654 rpc: fixed params parsing problem which could lead to a panic
check argument type before parsing params
 recover from panic in ipc channel
2015-10-29 09:23:03 +01:00
Felix Lange
56f8699a6c Merge pull request #1940 from wildfjre/lightkdfflag
cmd/utils, crypto: add --lightkdf flag for lighter KDF
2015-10-28 18:54:50 +01:00
Drake Burroughs
05ea8926c3 cmd/utils, crypto: add --lightkdf flag for lighter KDF 2015-10-28 18:46:39 +01:00
Péter Szilágyi
667987e7d0 core: only reset head header/fastblock if stale 2015-10-28 17:40:24 +02:00
Péter Szilágyi
2019ed71b4 eth: don't block sync goroutines that short circuit 2015-10-28 16:41:01 +02:00
Jeffrey Wilcke
6b5a42a15c Merge pull request #1937 from karalabe/make-ldflags
makefile: fix evm ld flags, pass them to xgo too
2015-10-28 11:46:23 +01:00
Péter Szilágyi
e46ab3bdcd eth, p2p, rpc/api: polish protocol info gathering 2015-10-28 12:44:15 +02:00
Péter Szilágyi
e655626268 makefile: dump mist leftover, add phony targets 2015-10-28 12:34:40 +02:00
Péter Szilágyi
04f8d05bd4 makefile: fix evm ld flags, pass them to xgo too 2015-10-28 12:31:20 +02:00
Jeffrey Wilcke
05f74077fb Merge pull request #1919 from ethersphere/getnatspec
rpc api: eth_getNatSpec
2015-10-28 10:49:53 +01:00
Jeffrey Wilcke
2e4fdce743 Merge pull request #1932 from fjl/gpo-defootgunize
eth, xeth: fix GasPriceOracle goroutine leak
2015-10-28 10:32:35 +01:00
Felix Lange
ae1b5b3ff2 eth, xeth: fix GasPriceOracle goroutine leak
XEth.gpo was being initialized as needed. WithState copies the XEth
struct including the gpo field. If gpo was nil at the time of the copy
and Call or Transact were invoked on it, an additional GPO listenLoop
would be spawned.

Move the lazy initialization to GasPriceOracle instead so the same GPO
instance is shared among all created XEths.

Fixes #1317
Might help with #1930
2015-10-27 18:43:47 +01:00
caktux
57ab147388 update Dockerfile, remove supervisord and unattended-upgrades 2015-10-26 18:06:19 -04:00
zelig
4d005a2c1d rpc api: eth_getNatSpec
* xeth, rpc: implement eth_getNatSpec for tx confirmations
* rename silly docserver -> httpclient
* eth/backend: httpclient now accessible via eth.Ethereum init-d via config.DocRoot
* cmd: introduce separate CLI flag for DocRoot (defaults to homedir)
* common/path: delete unused assetpath func, separate HomeDir func
2015-10-26 22:24:09 +01:00
caktux
3b4ffacd0c bump VERSION to 1.3.0 2015-10-25 17:49:01 -04:00
Jeffrey Wilcke
491dd49419 Merge pull request #1928 from Gustav-Simonsson/common_tests
tests: update JSON files, add new wrappers
2015-10-25 06:17:19 -07:00
Jeffrey Wilcke
c43db8a2ee Merge pull request #1924 from fjl/eth-status-timeout
eth: time out status message exchange after 5s
2015-10-23 16:43:10 -07:00
Jeffrey Wilcke
0aeab5fd83 Merge pull request #1929 from ethersphere/develop
fix console history, lines with leadning whitespace NOT included
2015-10-23 16:18:52 -07:00
zelig
6b5d077c09 fix console history, lines with leadning whitespace NOT included 2015-10-23 20:37:12 +02:00
Gustav Simonsson
145366c07e tests: update JSON files, add new wrappers 2015-10-23 14:25:18 +02:00
Felix Lange
3cf74336c9 eth: time out status message exchange after 5s 2015-10-22 22:22:04 +02:00
Jeffrey Wilcke
77878f76a9 Merge pull request #1922 from karalabe/fix-receipt-storage-regression
core: fix #1921, decode all receipt field, not just consensus
2015-10-22 10:17:15 -07:00
Jeffrey Wilcke
dce503779b Merge pull request #1840 from ethersphere/console
console, cli, api fixes
2015-10-22 09:27:05 -07:00
Péter Szilágyi
28c7b54d68 core: fix #1921, decode all receipt field, not just consensus 2015-10-22 13:09:30 +03:00
zelig
8b81ad1fc4 console:
* lines with leading space are ommitted from history
* exit processed even with whitespace around
* all whitespace lines (not only empty ones) are ignored

add 7 missing commands to admin api autocomplete

registrar: methods now return proper error if reg addresses are not set. fixes #1457

rpc/console: fix personal.newAccount() regression. Now all comms accept interactive password

registrar: add registrar tests for errors

crypto: catch AES decryption error on presale wallet import + fix error msg format. fixes #1580

CLI: improve error message when starting a second instance of geth. fixes #1564

cli/accounts: unlock multiple accounts. fixes #1785
* make unlocking multiple accounts work with inline <() fd
* passwdfile now correctly read only once
* improve logs
* fix CLI help text for unlocking

fix regression with docRoot / admin API
* docRoot/jspath passed to rpc/api ParseApis, which passes onto adminApi
* docRoot field for JS console in order to pass when RPC is (re)started
* improve flag desc for jspath

common/docserver: catch http errors from response

fix rpc/api tests

common/natspec: fix end to end test (skipped because takes 8s)

registrar: fix major regression:
* deploy registrars on frontier
* register HashsReg and UrlHint in GlobalRegistrar.
* set all 3 contract addresses in code
* zero out addresses first in tests
2015-10-22 00:22:39 +02:00
Jeffrey Wilcke
58d0752fdd Merge pull request #1883 from obscuren/jit-vm-optimisations
core/vm: JIT segmentation
2015-10-21 12:34:32 -07:00
Jeffrey Wilcke
0467a6ceec Merge pull request #1889 from karalabe/fast-sync-rebase
eth/63 fast synchronization algorithm
2015-10-21 11:44:22 -07:00
Péter Szilágyi
5b0ee8ec30 core, eth, trie: fix data races and merge/review issues 2015-10-21 16:49:55 +03:00
Jeffrey Wilcke
dba15d9c36 Merge pull request #1918 from obscuren/get-hash-fix
core, tests: get_hash fix
2015-10-21 03:54:59 -07:00
Jeffrey Wilcke
80f26086ee core, tests: get_hash fix
Make sure that we're fetching the hash from the current chain and not
the canonical chain.
2015-10-21 02:31:46 +02:00
Jeffrey Wilcke
796952a49a Merge pull request #1758 from fjl/coinbase
core, core/state: move gas tracking out of core/state
2015-10-20 03:31:36 -07:00
Péter Szilágyi
aa0538db0b eth: clean out light node notions from eth 2015-10-19 10:03:10 +03:00
Péter Szilágyi
a9d8dfc8e7 core, eth: roll back uncertain headers in failed fast syncs 2015-10-19 10:03:10 +03:00
Péter Szilágyi
b97e34a8e4 eth/downloader: concurrent receipt and state processing 2015-10-19 10:03:10 +03:00
Péter Szilágyi
ab27bee25a core, eth, trie: direct state trie synchronization 2015-10-19 10:03:09 +03:00
Péter Szilágyi
832b37c822 core, eth: receipt chain reconstruction 2015-10-19 10:03:09 +03:00
Péter Szilágyi
42c8afd440 core: differentiate receipt concensus and storage decoding 2015-10-19 10:03:09 +03:00
Péter Szilágyi
b99fe27f8b core: fix block canonical mark / content write race 2015-10-19 10:03:09 +03:00
Péter Szilágyi
f186b39018 eth/downloader: add fast and light sync strategies 2015-10-19 10:03:09 +03:00
Péter Szilágyi
c33cc382b3 core: support inserting pure header chains 2015-10-19 10:03:09 +03:00
Péter Szilágyi
92f9a3e5fa cmd, eth: support switching client modes of operation 2015-10-19 10:03:09 +03:00
Felix Lange
de8d5aaa92 core, core/state: move gas tracking out of core/state
The amount of gas available for tx execution was tracked in the
StateObject representing the coinbase account. This commit makes the gas
counter a separate type in package core, which avoids unintended
consequences of intertwining the counter with state logic.
2015-10-17 10:24:34 +02:00
Jeffrey Wilcke
8c85532412 core/vm: added parsing utilities 2015-10-16 22:30:42 +02:00
Jeffrey Wilcke
b196278044 core/vm: added JIT segmenting / optimisations
* multi-push segments
* static jumps segments
2015-10-16 22:30:42 +02:00
Jeffrey Wilcke
9d61d78de6 core/vm: abstracted instruction execution away from JIT
Moved the execution of instructions to the instruction it self. This
will allow for specialised instructions (e.g. segments) to be execution
in the same manner as regular instructions.
2015-10-16 22:17:35 +02:00
Jeffrey Wilcke
10ed107ba2 Merge pull request #1899 from obscuren/mipmap-bloom
core, eth/filters, miner, xeth: Optimised log filtering
2015-10-16 12:35:24 -07:00
Jeffrey Wilcke
6dc14788a2 core, eth/filters, miner, xeth: Optimised log filtering
Log filtering is now using a MIPmap like approach where addresses of
logs are added to a mapped bloom bin. The current levels for the MIP are
in ranges of 1.000.000, 500.000, 100.000, 50.000, 1.000. Logs are
therefor filtered in batches of 1.000.
2015-10-16 21:28:59 +02:00
Jeffrey Wilcke
c5ef2afda5 Merge pull request #1907 from Gustav-Simonsson/ethash_godep
godeps: update ethash following GPU miner merge
2015-10-16 07:39:42 -07:00
Gustav Simonsson
d5f56ad5c5 godeps: update ethash following GPU miner merge 2015-10-16 16:27:51 +02:00
Jeffrey Wilcke
d5327ddc5f Merge pull request #1869 from Gustav-Simonsson/gpu_miner
all: Add GPU mining, disabled by default
2015-10-16 06:25:33 -07:00
Jeffrey Wilcke
b747754009 Merge pull request #1881 from Gustav-Simonsson/state_new_error
core/state, core, miner: handle missing root error from state.New
2015-10-16 06:18:41 -07:00
Gustav Simonsson
1b1f293082 core/state, core, miner: handle missing root error from state.New 2015-10-16 02:22:06 +02:00
Jeffrey Wilcke
f466243417 Merge pull request #1853 from Gustav-Simonsson/libsecp256k1_update
Update libsecp256k1, Go wrapper and tests
2015-10-15 10:46:57 -07:00
Jeffrey Wilcke
30f057aaf9 eth/filters: added benchmark 2015-10-15 19:45:44 +02:00
Jeffrey Wilcke
cefe5c80b1 Merge pull request #1898 from karalabe/eventmux-post-race
core, eth, event, miner, xeth: fix event post / subscription race
2015-10-15 10:44:30 -07:00
Jeffrey Wilcke
2f1f2e4811 Merge pull request #1887 from Gustav-Simonsson/icap
common, crypto: add ICAP functions
2015-10-15 10:32:05 -07:00
Gustav Simonsson
2db9798646 common, crypto: add ICAP functions 2015-10-13 17:44:14 +02:00
Péter Szilágyi
402fd6e8c6 core, eth, event, miner, xeth: fix event post / subscription race 2015-10-12 16:22:03 +03:00
Jeffrey Wilcke
0de9b16b11 Merge pull request #1896 from karalabe/fix-vm-stack-logs
core/vm: copy stack element to prevent overwrites
2015-10-12 05:32:45 -07:00
Péter Szilágyi
af9afb686b core/vm: copy stack element to prevent overwrites 2015-10-12 00:14:35 +03:00
Gustav Simonsson
f32fa075f1 core/secp256k1: update libsecp256k1 Go wrapper and tests 2015-10-09 14:47:55 +02:00
Jeffrey Wilcke
315a422ba7 Merge pull request #1888 from obscuren/testnet
cmd, core, eth: added official testnet
2015-10-09 01:31:37 -07:00
Jeffrey Wilcke
1de796f101 cmd, core, eth: added official testnet 2015-10-08 22:01:39 +02:00
Jeffrey Wilcke
9e91579105 Merge pull request #1885 from karalabe/olympic-fix
cmd: properly initialize Olympic for all subcommands
2015-10-08 11:33:28 -07:00
Jeffrey Wilcke
bba4dcb72f Merge pull request #1880 from Gustav-Simonsson/core_transfer
core, core/vm, cmd/evm: remove redundant balance check
2015-10-08 11:32:30 -07:00
Jeffrey Wilcke
37abbcb54b Merge pull request #1833 from Gustav-Simonsson/crypto_tests
crypto: correct sig validation, add missing unit tests of exported functions
2015-10-08 11:31:12 -07:00
Péter Szilágyi
2547c9c9b7 cmd: properly initialize Olympic for all subcommands 2015-10-07 18:25:33 +03:00
Gustav Simonsson
ec6a548ee3 all: Add GPU mining, disabled by default 2015-10-07 13:19:30 +02:00
Jeffrey Wilcke
27528ad3d2 Merge pull request #1851 from bas-vk/historyfile
console/history respect datadir
2015-10-07 01:51:13 -07:00
Jeffrey Wilcke
f8786defd0 Merge pull request #1850 from karalabe/genesis-block-receipts
core: fix #1848, block receipts db entry for the genesis too
2015-10-07 01:50:37 -07:00
Gustav Simonsson
e1616f77c7 core, core/vm, cmd/evm: remove redundant balance check 2015-10-06 12:42:34 +02:00
Jeffrey Wilcke
44fd395141 Merge pull request #1879 from obscuren/versioning
cmd/geth: dev version number
2015-10-05 12:35:42 -07:00
Jeffrey Wilcke
7b44b8aece cmd/geth: dev version number 2015-10-05 21:11:39 +02:00
Jeffrey Wilcke
13699e2dd9 Merge pull request #1877 from obscuren/head-write
core: fixed head write on block insertion
2015-10-05 11:00:57 -07:00
Jeffrey Wilcke
20ab29f885 core: fixed head write on block insertion
Due to a rebase this probably got overlooked / ignored. This fixes the
issue of a block insertion never writing the last block.
2015-10-05 17:00:59 +02:00
Jeffrey Wilcke
5b34fa538e Merge pull request #1756 from obscuren/core-refactor
core, core/vm: refactor
2015-10-05 07:14:01 -07:00
Jeffrey Wilcke
7c7692933c cmd/geth, cmd/utils, core, rpc: renamed to blockchain
* Renamed ChainManager to BlockChain
* Checkpointing is no longer required and never really properly worked
when the state was corrupted.
2015-10-04 01:13:56 +02:00
Jeffrey Wilcke
361082ec4b cmd/evm, core/vm, test: refactored VM and core
* Moved `vm.Transfer` to `core` package and changed execution to call
`env.Transfer` instead of `core.Transfer` directly.
* core/vm: byte code VM moved to jump table instead of switch
* Moved `vm.Transfer` to `core` package and changed execution to call
  `env.Transfer` instead of `core.Transfer` directly.
* Byte code VM now shares the same code as the JITVM
* Renamed Context to Contract
* Changed initialiser of state transition & unexported methods
* Removed the Execution object and refactor `Call`, `CallCode` &
  `Create` in to their own functions instead of being methods.
* Removed the hard dep on the state for the VM. The VM now
  depends on a Database interface returned by the environment. In the
  process the core now depends less on the statedb by usage of the env
* Moved `Log` from package `core/state` to package `core/vm`.
2015-10-04 01:13:54 +02:00
Jeffrey Wilcke
f7a71996fb core, event/filter, xeth: refactored filter system
Moved the filtering system from `event` to `eth/filters` package and
removed the `core.Filter` object. The `filters.Filter` object now
requires a `common.Database` rather than a `eth.Backend` and invokes the
`core.GetBlockByX` directly rather than thru a "manager".
2015-10-02 22:47:43 +02:00
Jeffrey Wilcke
8b865fa9bf Merge pull request #1866 from karalabe/honor-eth-capabilities
eth/downloader: match capabilities when querying idle peers
2015-10-02 03:49:56 -07:00
Jeffrey Wilcke
0d78f96205 Merge pull request #1865 from obscuren/deadlock-chainmanager-fix
core: deadlock in chainmanager after posting RemovedTransactionEvent
2015-10-02 03:39:43 -07:00
Péter Szilágyi
47f62a67aa eth/downloader: match capabilities when querying idle peers 2015-10-02 13:20:41 +03:00
Jeffrey Wilcke
a6cc02f68f core: deadlock in chainmanager after posting RemovedTransactionEvent
This PR solves an issue with the chain manager posting a
`RemovedTransactionEvent`, the tx pool will try to
acquire the chainmanager lock which has previously been locked prior to
posting `RemovedTransactionEvent`. This results in a deadlock in the
core.
2015-10-02 12:20:18 +02:00
Jeffrey Wilcke
49ae538506 Merge pull request #1405 from fjl/lean-trie
core, trie: new trie
2015-10-01 04:34:38 -07:00
Jeffrey Wilcke
581c0901af Merge pull request #1856 from karalabe/andorid-path-fix
common: fix #1818, secondary datadir paths to fall back to
2015-10-01 04:03:04 -07:00
Péter Szilágyi
74578ab22b common: fix #1818, secondary datadir paths to fall back to 2015-10-01 12:26:19 +03:00
Jeffrey Wilcke
e3ac56d502 Merge pull request #1859 from fjl/fix-discover-refresh-race
p2p/discover: fix race involving the seed node iterator
2015-09-30 08:21:40 -07:00
Felix Lange
32dda97602 p2p/discover: ignore packet version numbers
The strict matching can get in the way of protocol upgrades.
2015-09-30 16:23:03 +02:00
Felix Lange
631bf36102 p2p/discover: remove unused lastLookup field 2015-09-30 16:23:03 +02:00
Felix Lange
b4374436f3 p2p/discover: fix race involving the seed node iterator
nodeDB.querySeeds was not safe for concurrent use but could be called
concurrenty on multiple goroutines in the following case:

- the table was empty
- a timed refresh started
- a lookup was started and initiated refresh

These conditions are unlikely to coincide during normal use, but are
much more likely to occur all at once when the user's machine just woke
from sleep. The root cause of the issue is that querySeeds reused the
same leveldb iterator until it was exhausted.

This commit moves the refresh scheduling logic into its own goroutine
(so only one refresh is ever active) and changes querySeeds to not use
a persistent iterator. The seed node selection is now more random and
ignores nodes that have not been contacted in the last 5 days.
2015-09-30 16:23:03 +02:00
Jeffrey Wilcke
46ad5a5f5b Merge pull request #1852 from obscuren/filter-nil-fix
xeth: fixed nil pointer of filter retrieval
2015-09-30 03:06:36 -07:00
Jeffrey Wilcke
9b94076717 Merge pull request #1854 from karalabe/badhasherror-formatting-loop
core: fix a formatting loop in BadHashError
2015-09-29 02:26:01 -07:00
Péter Szilágyi
b8b996be74 core: fix a formatting loop in BadHashError 2015-09-29 09:11:38 +03:00
Gustav Simonsson
1d20b0247c Update libsecp256k1 2015-09-28 17:46:38 +02:00
Jeffrey Wilcke
b9359981f4 xeth: fixed nil pointer of filter retrieval
This fix addresses an issue with filters that were (possibly) not yet
added to the filter queues but were expected. I've added additional nil
checks making sure it doesn't crash and swapped the installation of the
filter around so it's installed before use.

Closes #1665
2015-09-25 13:56:53 +02:00
Jeffrey Wilcke
7977e87ce1 Merge pull request #1843 from karalabe/cleanup-downloader-channel
eth/downloader: always send termination wakes, clean leftover
2015-09-25 04:34:59 -07:00
Bas van Kervel
8636f0e1c3 console/history respect datadir 2015-09-25 13:08:48 +02:00
Péter Szilágyi
830ddcee60 core: fix #1848, block receipts db entry for the genesis too 2015-09-24 19:38:59 +03:00
Jeffrey Wilcke
69d86442a5 Merge pull request #1803 from Gustav-Simonsson/badhashes
core: Add BadHashErr and test for BadHashes handling
2015-09-23 11:10:25 -07:00
Jeffrey Wilcke
36f46a61a7 Merge pull request #1844 from obscuren/version-file
VERSION: added version
2015-09-23 05:48:00 -07:00
Jeffrey Wilcke
6e1dc321f4 VERSION: added version 2015-09-23 14:47:20 +02:00
Felix Lange
7a2a918067 Merge pull request #1842 from fjl/rpc-fix-unknown-block
rpc/api: don't crash for unknown blocks
2015-09-23 12:57:33 +02:00
Péter Szilágyi
f459a3f0ae eth/downloader: always send termination wakes, clean leftover 2015-09-23 12:39:17 +03:00
Jeffrey Wilcke
e456f27795 Merge pull request #1827 from Gustav-Simonsson/common_tests
tests: add test for StateTests/stCallCodes.json
2015-09-23 02:12:59 -07:00
Felix Lange
90cd8ae9f2 rpc/api: don't crash for unknown blocks
Most eth RPC calls that work with blocks crashed when the block was not
found because they called Hash on a nil block. This is a regression
introduced in cdc2662c40 (#1779).

While here, remove the insane conversions in get*CountBy*. There is no
need to construct a complete BlockRes and converting
int->int64->*big.Int->[]byte->hexnum->string to format the length of a
slice as hex.
2015-09-22 23:59:26 +02:00
Felix Lange
70b6174748 cmd/geth, core: make "geth blocktest" work again
The test genesis block was not written properly, block insertion failed
immediately.

While here, fix the panic when shutting down "geth blocktest" with
Ctrl+C. The signal handler is now installed automatically, causing
ethereum.Stop to crash because everything is already stopped.
2015-09-22 23:55:31 +02:00
Felix Lange
c1a352c108 trie: add merkle proof functions 2015-09-22 22:57:37 +02:00
Felix Lange
a2d5a60418 core, core/state: batch-based state sync 2015-09-22 22:57:37 +02:00
Felix Lange
565d9f2306 core, trie: new trie 2015-09-22 22:53:49 +02:00
Felix Lange
6b91a4abe5 trie: improve benchmarks 2015-09-22 22:49:27 +02:00
Gustav Simonsson
bfde1a4305 core: Add BadHashErr and test for BadHashes handling 2015-09-22 18:02:26 +02:00
Gustav Simonsson
3340b56593 crypto: correct sig validation, add more unit tests 2015-09-22 17:33:39 +02:00
Jeffrey Wilcke
e56cbc225e Merge pull request #1835 from karalabe/make-cross
makefile: built in cross compilation targets
2015-09-21 11:47:10 -07:00
Jeffrey Wilcke
7bf8e949e7 Merge pull request #1669 from obscuren/tx-pool-auto-resend
core, xeth: chain reorg move missing transactions to transaction pool
2015-09-21 11:45:59 -07:00
Péter Szilágyi
6a05c569f2 makefile: built in cross compilation targets 2015-09-21 21:36:01 +03:00
Jeffrey Wilcke
eaa4473dbd core, core/types: readd transactions after chain re-org
Added a `Difference` method to `types.Transactions` which sets the
receiver to the difference of a to b (NOTE: not a **and** b).

Transaction pool subscribes to RemovedTransactionEvent adding back to
those potential missing from the chain.

When a chain re-org occurs remove any transactions that were removed
from the canonical chain during the re-org as well as the receipts that
were generated in the process.

Closes #1746
2015-09-21 20:33:28 +02:00
Jeffrey Wilcke
be76a68aea cmd/geth: changed version number to 1.2.0
Changed the version number of geth to 1.2.0 so that dev builds are now properly build (instead of master). Note to self; increase version number to 1.2.1 for our next actual release.
2015-09-21 16:13:07 +02:00
Jeffrey Wilcke
12c0afe4fe Merge pull request #1822 from karalabe/contain-pow
core: separate and contain POW verifier, extensive tests
2015-09-21 06:52:11 -07:00
Gustav Simonsson
5621308949 tests: add test for StateTests/stCallCodes.json 2015-09-21 11:34:02 +02:00
Péter Szilágyi
399c920380 core: separate and contain POW verifier, extensive tests 2015-09-21 10:24:49 +03:00
Jeffrey Wilcke
e40b447fea Merge pull request #1814 from Gustav-Simonsson/common_tests
tests: update common test wrappers and test files
2015-09-18 16:34:54 -07:00
Jeffrey Wilcke
b94b9b0158 Merge pull request #1817 from obscuren/nonce-fix
core: transaction nonce recovery
2015-09-18 15:56:10 -07:00
Gustav Simonsson
47ca6904b3 tests: use lastblockhash field to validate reorgs and block headers 2015-09-18 17:48:31 +02:00
Gustav Simonsson
075815e5ff tests: update common test wrappers and test files 2015-09-18 13:08:36 +02:00
Jeffrey Wilcke
b60a27627b core: transaction nonce recovery fix
When the transaction state recovery kicked in it assigned the last
(incorrect) nonce to the pending state which caused transactions with
the same nonce to occur.

Added test for nonce recovery
2015-09-18 11:59:21 +02:00
Felix Lange
216c486a3a Merge pull request #1815 from karalabe/chain-maker-timer
core: allow modifying test-chain block times
2015-09-18 11:23:31 +02:00
Felix Lange
ac6248ed7a Merge pull request #1793 from jeffallen/typo
common: Update README.md for the current package name
2015-09-17 19:26:49 +02:00
Felix Lange
bdf4fd6091 Merge pull request #1813 from kobigurk/develop
cmd/geth: extradata is correcly initialized with console
2015-09-17 19:25:32 +02:00
Felix Lange
69f48e4689 Merge pull request #1811 from bas-vk/timer-clearinterval
timer bugfix when clearInterval was called from within the callback
2015-09-17 19:21:49 +02:00
Péter Szilágyi
6f3cb12924 core: allow modifying test-chain block times 2015-09-17 13:43:52 +03:00
Jeffrey Wilcke
58fbcaa750 Merge pull request #1810 from karalabe/pure-header-verifications-2
core, eth, miner: use pure header validation
2015-09-16 14:21:12 -07:00
Kobi Gurkan
1a1a1ee4ff cmd/geth: extradata is correcly initialized with console 2015-09-16 21:01:21 +03:00
Jeffrey Wilcke
985b5f29ed Merge pull request #1801 from fjl/ethdb
all: move common.Database to ethdb and add NewBatch
2015-09-16 07:50:14 -07:00
Bas van Kervel
2f65ddc501 jsre: timer bugfix when clearInterval was called from within the callback 2015-09-16 11:57:33 +02:00
Jeffrey Wilcke
1cc2f08041 Merge pull request #1784 from karalabe/standard-sync-stats
eth, rpc: standardize the chain sync progress counters
2015-09-16 02:31:58 -07:00
Péter Szilágyi
821619e1c3 core, eth, miner: use pure header validation 2015-09-16 10:46:28 +03:00
Jeffrey Wilcke
e9a80518c7 Merge pull request #1744 from kobigurk/develop
adds extradata flag
2015-09-15 13:56:10 -07:00
Kobi Gurkan
321733ab23 cmd/geth: adds extradata flag 2015-09-15 23:35:36 +03:00
Péter Szilágyi
d4d3fc6a70 jsre, rpc/api: pull in new web3 and use hex numbers 2015-09-15 17:05:12 +03:00
Péter Szilágyi
99b62f36b6 eth/downloader: header-chain order and ancestry check 2015-09-15 14:45:53 +03:00
Péter Szilágyi
0a7d059b6a eth, rpc: standardize the chain sync progress counters 2015-09-15 14:45:53 +03:00
Jeffrey Wilcke
55bdcfaeac Merge pull request #1806 from ethersphere/solc2
new solc api - late fixes
2015-09-15 01:08:30 -07:00
zelig
3a5e7ed9a6 new solc api:
* use legacy version matcher
* optimise just a boolean flag
* skipf for messages in tests
2015-09-15 00:35:22 +02:00
Felix Lange
b252589960 ethdb: remove Flush 2015-09-14 23:36:30 +02:00
Felix Lange
d581dfee5f ethdb: copy stored memdb values
Storing a value in LevelDB copies the bytes, modifying the value
afterwards does not affect the content of the database. This commit
ensures that MemDatabase satisfies the same property.
2015-09-14 23:36:30 +02:00
Felix Lange
8b32f10f16 ethdb: add NewBatch 2015-09-14 23:36:30 +02:00
Felix Lange
8c4dab77ba all: move common.Database to package ethdb 2015-09-14 23:36:30 +02:00
Felix Lange
071e2cd08e Merge pull request #1786 from ethersphere/solc
common/compiler: new solc API
2015-09-14 23:32:40 +02:00
Felix Lange
47b9c640f5 Merge pull request #1797 from karalabe/ensure-ipcpath-exists
rpc/comms: fix #1795, ensure IPC path exists before binding
2015-09-14 14:45:11 +02:00
Felix Lange
a9c809b441 Merge pull request #1792 from jeffallen/uuid
Change go-uuid to use the current supported repository.
2015-09-14 12:06:59 +02:00
Jeff R. Allen
0d40727775 Change go-uuid to use the current supported repository. 2015-09-12 16:49:24 +06:00
zelig
17b729759b Solidity Compiler - solc new API
* adapt to new compiler versioning
* use compiler version as language version
* implement new solc API for versions >= 0.1.[2-9][0-9]* fixes #1770
* add optimize=1 to options
* backward compatibility (for now) for <= 0.1.1, and old versions (0.[2-9][0-9]*.[0-9]+)
* introduce compilerOptions to ContractInfo
* clean up flair, include full version string to version line and ContractInfo
2015-09-12 10:52:52 +02:00
Jeffrey Wilcke
55ed8d108d Merge pull request #1789 from Gustav-Simonsson/core_remove_unused_functions
core, core/vm, core/state: remove unused functions
2015-09-11 15:29:27 -07:00
Jeffrey Wilcke
f1a4b330dd Merge pull request #1796 from karalabe/ethash-android-support
godeps: pull in ethash android fix
2015-09-11 15:26:01 -07:00
Jeffrey Wilcke
0eac601b5b Merge pull request #1779 from karalabe/split-block-storage-3000
core: split the db blocks into components, move TD out top level
2015-09-11 08:10:37 -07:00
Péter Szilágyi
cdc2662c40 core: split out TD from database and all internals 2015-09-11 17:42:25 +03:00
Péter Szilágyi
2b339cbbd8 core, eth: split the db blocks into headers and bodies 2015-09-11 17:42:25 +03:00
Péter Szilágyi
3e6964b841 rpc/comms: fix #1795, ensure IPC path exists before binding 2015-09-11 17:03:31 +03:00
Péter Szilágyi
c6013725a8 godeps: pull in ethash android fix 2015-09-11 15:53:23 +03:00
Felix Lange
4e075e4013 Merge pull request #1773 from obscuren/dev-mode
cmd/geth, cmd/utils, eth: added dev mode flag
2015-09-10 21:15:33 +02:00
Gustav Simonsson
b81a6e6ab8 core, core/vm, core/state: remove unused functions 2015-09-10 21:10:58 +02:00
Jeffrey Wilcke
62bbf8a09e Merge pull request #1778 from fjl/rlp-trie-changes
rlp: precursor changes for trie, p2p
2015-09-10 12:02:16 -07:00
Jeff R. Allen
4ce3dfe9c8 common: Update README.md for the current package name 2015-09-10 23:59:38 +06:00
Felix Lange
fc8b246109 rlp: move ListSize to raw.go 2015-09-10 19:41:51 +02:00
Felix Lange
24bb68e7cf rlp: add RawValue 2015-09-10 19:41:51 +02:00
Felix Lange
bc17dba8fb rlp: add Split functions
These functions allow destructuring of raw rlp-encoded bytes
without the overhead of reflection or copying.
2015-09-10 19:41:51 +02:00
Felix Lange
ac32f52ca6 rlp: fix encReader returning nil buffers to the pool
The bug can cause crashes if Read is called after EOF has been returned.
No code performs such calls right now, but hitting the bug gets more
likely as rlp.EncodeToReader gets used in more places.
2015-09-10 19:12:32 +02:00
Felix Lange
90f1fe0ed2 Merge pull request #1781 from Gustav-Simonsson/state_object_copy
core/state: deleted field in StateObject Copy() and unit test
2015-09-09 18:42:36 +02:00
Jeffrey Wilcke
28b13a4d1e Merge pull request #1780 from bas-vk/miner-crash
agent/miner Prevent the CpuAgent to be started multiple times
2015-09-09 04:49:28 -07:00
Jeffrey Wilcke
f04b3a6f29 cmd/geth, cmd/utils, eth: added dev mode flag
Dev mode enabled some debugging flags such as:

* VM debugging mode
* Simpler proof of work
* Whisper enabled by default
* Datadir to a tmp datadir
* Maxpeers set to 0
* Gas price of 0
* Random listen port
2015-09-09 08:53:05 +02:00
Gustav Simonsson
bf879ef230 core/state: test formatting adhering to Go convention 2015-09-09 00:26:18 +02:00
Gustav Simonsson
004ed786b4 core/state: deleted field in StateObject Copy() and unit test 2015-09-08 15:56:11 +02:00
Bas van Kervel
652eea71fe put unlock after lock 2015-09-08 12:42:29 +02:00
Bas van Kervel
618065895b agent/miner Prevent the CpuAgent to be started multiple times 2015-09-08 11:27:55 +02:00
Péter Szilágyi
edaea69817 Merge pull request #1777 from hectorchu/develop
rpc/comms: fix bug attaching the console over http
2015-09-08 11:02:09 +03:00
Péter Szilágyi
6fe46cc743 Merge pull request #1774 from bas-vk/console-crash
cmd/geth Autocompletion bugfix which let the console crash
2015-09-08 10:33:09 +03:00
Hector Chu
4ea81f170a rpc/comms: fix bug attaching the console over http 2015-09-07 15:09:59 +01:00
Bas van Kervel
f69121357d cmd/geth Autocompletion bugfix which let the console crash 2015-09-06 16:25:55 +02:00
Felix Lange
e2d7c1a523 Merge pull request #1752 from karalabe/fix-eth61-test
eth/downloader: fix race causing occasional test failure
2015-09-03 15:52:18 +02:00
Péter Szilágyi
ebbe25ee71 Merge pull request #1764 from kobigurk/honor_ipc_datadir
honors datadir when attaching
2015-09-03 10:48:23 +03:00
Kobi Gurkan
1a86adc5a2 cmd/geth: honor datadir when attaching 2015-09-03 10:28:30 +03:00
Jeffrey Wilcke
e98854588b Merge pull request #1761 from CJentzsch/patch-3
fix block time issue
2015-09-02 15:13:14 -07:00
Christoph Jentzsch
0fda4c4e15 fix block time issue
currently, under normal circumstances, you always set the timestamp to previous.Time() + 1.
credits to https://www.reddit.com/r/ethereum/comments/3jcs5r/code_avg_block_time_vs_difficulty_adjustment/cuoi4op

style
2015-09-03 00:05:05 +02:00
Felix Lange
b2c17a5a63 Merge pull request #1726 from Gustav-Simonsson/update_tests
Add TestBcForkUncle tests & update JSON files
2015-09-02 22:02:44 +02:00
Gustav Simonsson
e9b031b88b Merge pull request #1755 from fjl/coinbase
core: improve block gas tracking
2015-09-01 23:36:05 +02:00
Felix Lange
00b45acb9e core: improve block gas tracking 2015-09-01 23:11:03 +02:00
Felix Lange
1ffc5b0cfd Merge pull request #1751 from maran/fix_filters
core: Filter on addresses should work as an OR not an AND.
2015-09-01 20:10:27 +02:00
Felix Lange
5e4cd599eb Merge pull request #1745 from mrdomino/obsd-build-master
Pull in ethash and go-isatty updates
2015-09-01 20:06:13 +02:00
Péter Szilágyi
1f1d73ab74 eth/downloader: fix race causing occasional test failure 2015-09-01 16:11:14 +03:00
Maran
67225de255 Filter on addresses should work as an OR not an AND. 2015-09-01 09:19:45 +02:00
Steven Dee
540eb3d02d Pull in ethash and go-isatty updates
Fixes build on OpenBSD.
2015-08-31 12:14:32 -04:00
Gustav Simonsson
fe8093b71f Add TestBcForkUncleTests and update JSON files 2015-08-31 16:45:00 +02:00
Felix Lange
9dc23ce284 Merge pull request #1742 from fjl/rpc-receipt-root
rpc: add receiptRoot to getBlock* responses
2015-08-31 14:50:21 +02:00
Felix Lange
1801748ccd Merge pull request #1734 from fjl/ldflags-warning-go1.5
build: avoid -X separator warning with Go >= 1.5
2015-08-31 14:49:50 +02:00
Felix Lange
8b12bcc0ac rpc: add receiptRoot to getBlock* responses
Fixes #1679
2015-08-29 11:12:01 +02:00
Felix Lange
e1037bd0cf Merge pull request #1724 from Gustav-Simonsson/get_work
rpc: return error code for eth_getWork when no work ready
2015-08-29 10:54:10 +02:00
Felix Lange
2d1ced8759 Merge pull request #1739 from bas-vk/empty-password
rpc/api allow empty password
2015-08-28 13:14:51 +02:00
Bas van Kervel
39e9560600 rpc/api allow empty password 2015-08-28 12:49:41 +02:00
Gustav Simonsson
d9addf79fa Improve error string and remove unneeded else clause 2015-08-28 03:42:01 +02:00
Felix Lange
cfd84a6ad9 build: avoid -X separator warning with Go >= 1.5 2015-08-27 13:26:13 +02:00
Felix Lange
6ec13e7e2b Merge pull request #1701 from karalabe/eth62-sync-rebase
eth: implement eth/62 synchronization logic
2015-08-27 00:03:59 +02:00
Felix Lange
79b644c7a3 Merge pull request #1717 from karalabe/forward-solidity-errors
common/compiler: fix #1598, expose solidity errors
2015-08-26 19:00:11 +02:00
Felix Lange
14370a2260 Merge pull request #1718 from caktux/develop
add missing shh_getMessages to RPC mappings
2015-08-26 18:55:51 +02:00
Felix Lange
3df6f3fc14 Merge pull request #1721 from bas-vk/console-error-parsing
Improved console error handling
2015-08-26 18:55:31 +02:00
Felix Lange
847794a321 Merge pull request #1722 from bas-vk/remote-deleteaccount
Remove personal.deleteAccount from RPC interface
2015-08-26 18:02:51 +02:00
Gustav Simonsson
829201382b rpc: return error code for eth_getWork when no work ready 2015-08-26 12:46:50 +02:00
Bas van Kervel
5dd2462816 rpc/api - remove personal.deleteAccount from RPC interface 2015-08-26 11:39:43 +02:00
Bas van Kervel
f448310eef bugfix console error handling 2015-08-26 11:33:02 +02:00
Péter Szilágyi
101418b275 common/compiler: fix #1598, expose solidity errors 2015-08-26 10:04:23 +03:00
caktux
a1d8015817 add missing shh_getMessages to RPC mappings 2015-08-25 14:42:57 -04:00
Péter Szilágyi
17f65cd1e5 eth: update metrics collection to handle eth/62 algos 2015-08-25 17:48:47 +03:00
Péter Szilágyi
47a7fe5d22 eth: port the synchronisation algo to eth/62 2015-08-25 17:48:47 +03:00
Felix Lange
abce09954b Merge pull request #1711 from Gustav-Simonsson/timestamp_big_int
Add tests for uncle timestamps and refactor timestamp type
2015-08-25 15:49:36 +02:00
Felix Lange
a219159e7e Merge pull request #1710 from bas-vk/useragent
user agent messages were dumped in some cases
2015-08-25 12:23:25 +02:00
Gustav Simonsson
7324176f70 Add tests for uncle timestamps and refactor timestamp type 2015-08-25 04:46:11 +02:00
Péter Szilágyi
ca88e18f59 eth: kill off protocol eth/60 in preparation for eth/62 2015-08-24 17:57:28 +03:00
Péter Szilágyi
42f44dda54 eth, eth/downloader: handle header requests, table driven proto tests 2015-08-24 17:57:28 +03:00
Bas van Kervel
d910148a96 Set ipc channel as user agent client 2015-08-24 12:41:34 +02:00
Péter Szilágyi
c51e153b5c eth, metrics, p2p: prepare metrics and net packets to eth/62 2015-08-21 10:30:57 +03:00
Jeffrey Wilcke
d51d0022ce cmd/geth: bumped version 1.1.0 2015-08-20 21:43:36 +02:00
Jeffrey Wilcke
3793991c0e remove 0x 2015-08-20 18:50:47 +02:00
Jeffrey Wilcke
b884d6ebaa canary update 2015-08-20 18:38:21 +02:00
Jeffrey Wilcke
36f7fe61c3 core, tests: Double SUICIDE fix 2015-08-20 18:22:50 +02:00
Jeffrey Wilcke
54088b0b8b cmd/geth: bumped version 1.0.3 2015-08-20 13:08:08 +02:00
Jeffrey Wilcke
9fb7bc7443 geth: bumped version 1.0.2 2015-08-19 23:05:39 +02:00
Jeffrey Wilcke
e2d44814a5 Merge pull request #1694 from obscuren/hide-fdtrack
fdtrack: hide message
2015-08-19 13:50:54 -07:00
Jeffrey Wilcke
bd3a44cac9 Merge pull request #1652 from bas-vk/autoreconnect
rpc/comms: reconnect ipc client after write error
2015-08-19 13:29:51 -07:00
Jeffrey Wilcke
61a6911eeb Merge pull request #1689 from fjl/discover-ignore-temp-errors
p2p, p2p/discover: small fixes
2015-08-19 12:55:40 -07:00
Bas van Kervel
9bf17eb05a rpc/comms reconnect ipc client after write error 2015-08-19 21:48:56 +02:00
Jeffrey Wilcke
269c5c7107 Revert "fdtrack: temporary hack for tracking file descriptor usage"
This reverts commit 5c949d3b3b.
2015-08-19 21:46:01 +02:00
Jeffrey Wilcke
382d35bf40 Merge pull request #1688 from karalabe/fix-double-imports
eth: fix an issue with pulling and inserting blocks twice
2015-08-19 08:19:37 -07:00
Felix Lange
dd54fef898 p2p/discover: don't attempt to replace nodes that are being replaced
PR #1621 changed Table locking so the mutex is not held while a
contested node is being pinged. If multiple nodes ping the local node
during this time window, multiple ping packets will be sent to the
contested node. The changes in this commit prevent multiple packets by
tracking whether the node is being replaced.
2015-08-19 14:57:16 +02:00
Felix Lange
edccc7ae34 p2p: continue listening after temporary errors 2015-08-19 14:39:04 +02:00
Felix Lange
7d5ff770e2 p2p/discover: continue reading after temporary errors
Might solve #1579
2015-08-19 14:38:55 +02:00
Jeffrey Wilcke
c6a11fe372 Merge pull request #1680 from maran/fix_removedb
cmd/geth: Fix chain purging from cmd line
2015-08-19 05:17:22 -07:00
Péter Szilágyi
941920f2aa eth: fix an issue with pulling and inserting blocks twice 2015-08-19 15:14:26 +03:00
Jeffrey Wilcke
3b997c3e16 Merge pull request #1454 from ethersphere/frozen-cryptoclean
crypto: remove obsolete code
2015-08-19 02:39:02 -07:00
Jeffrey Wilcke
0737cbc5c1 Merge pull request #1683 from ethereum/travis
Switch from Coveralls to Codecov code coverage service
2015-08-18 14:26:14 -07:00
Jeffrey Wilcke
227ff4d2d6 Merge pull request #1682 from obscuren/readme-improvements
Updated README, Added CONTRIBUTING
2015-08-18 14:16:42 -07:00
Jeffrey Wilcke
18d450b2d0 Updated README, Added CONTRIBUTING 2015-08-18 23:00:15 +02:00
Taylor Gerring
cc87551edc Codecov integration 2015-08-18 22:46:48 +02:00
Jeffrey Wilcke
d0dc1b4a60 Merge pull request #1681 from obscuren/miner-receipt-fix
core, miner: write miner receipts
2015-08-18 12:53:26 -07:00
Jeffrey Wilcke
b4369e1015 core, miner: write miner receipts 2015-08-18 21:46:26 +02:00
Maran
4d5501c46a cmd/geth: Fix chain purging from cmd line 2015-08-18 15:56:37 +02:00
zelig
d4da2f630e crypto: remove obsolete key files 2015-08-18 01:25:04 +02:00
Jeffrey Wilcke
e1da124415 Merge pull request #1675 from obscuren/submithashrate-change
rpc/api: return boolean value for eth_submitHashrate
2015-08-17 11:49:15 -07:00
Jeffrey Wilcke
36081505c4 Merge pull request #1673 from karalabe/fix-api-xeth-responses
rpc: update the xeth over RPC API to use the success/failure messages
2015-08-17 11:47:55 -07:00
Jeffrey Wilcke
2497f28aa9 Merge pull request #1627 from zsfelfoldi/gpo
GPO update
2015-08-17 06:37:58 -07:00
zsfelfoldi
49ece3155c GPO update 2015-08-17 15:20:33 +02:00
Jeffrey Wilcke
8839fee415 rpc/api: return boolean value for eth_submitHashrate 2015-08-17 15:09:30 +02:00
Jeffrey Wilcke
ff1f6fa09d Merge pull request #1649 from maran/pending_tx_response
rpc/api: format pendingTx response. Fixes #1648
2015-08-17 06:02:08 -07:00
Jeffrey Wilcke
7ea30f18f9 Merge pull request #1674 from tgerring/bootnodes
Added SG bootnode
2015-08-17 05:56:38 -07:00
Jeffrey Wilcke
12805c738c Merge pull request #1667 from fjl/pretty-printer-improvements
jsre: pretty printer improvements
2015-08-17 05:55:09 -07:00
Taylor Gerring
80b294c3c7 Update CPP pubkey 2015-08-17 14:51:27 +02:00
Taylor Gerring
8884f856ef Added SG bootnode 2015-08-17 14:36:57 +02:00
Péter Szilágyi
309788de37 rpc: update the xeth over RPC API to use the success/failure messages 2015-08-17 14:04:20 +03:00
Jeffrey Wilcke
f6367548e4 Merge pull request #1654 from obscuren/call-gas
xeth: call fix when doing 'create'-like calls
2015-08-16 16:33:29 -07:00
Jeffrey Wilcke
1c3ca3ce6a xeth: max gas limit 2015-08-16 15:27:30 +02:00
Maran
8603ec7055 rpc/api: format pendingTx response. Fixes #1648 2015-08-16 11:12:22 +02:00
Felix Lange
1086e2f298 jsre: fix annoying indentation when printing arrays of objects
The pretty printer, dumb as it is, printed arrays of objects as

  [{
    ...
    }]

With this change, they now print as:

  [{
    ...
  }]
2015-08-16 00:35:00 +01:00
Felix Lange
49703bea0a jsre: bind the pretty printer to "inspect" in JS 2015-08-15 23:55:42 +01:00
Jeffrey Wilcke
59b28cfa31 Merge pull request #1663 from obscuren/issue-1662
xeth: added a transact mu
2015-08-15 14:55:04 -07:00
Jeffrey Wilcke
5c5c3930b7 Merge pull request #1659 from bas-vk/exec-output
Javascript --exec output
2015-08-15 06:23:29 -07:00
Jeffrey Wilcke
7bb5ac045e xeth: added a transact mu
Added a transact mutex. The transact mutex will fix an issue where
transactions were created with the same nonce resulting in some
transactions being dropped. This happened when two concurrent calls
would call the `Transact` method (which is OK) which would both call
`GetNonce`. While the managed is thread safe it does not help us in this
case.
2015-08-15 00:33:52 +02:00
Jeffrey Wilcke
cd81356ace Merge pull request #1658 from bas-vk/liner-ctrl-c
Clear current line on ctrl-C
2015-08-14 04:36:15 -07:00
Bas van Kervel
c472b8f725 main clear current line on ctrl-C 2015-08-14 13:23:41 +02:00
Jeffrey Wilcke
3a66c4ed47 Merge pull request #1642 from ethereum/fix-js-console-windows
cmd/geth, jsre: restore command line editing on windows
2015-08-14 04:14:11 -07:00
Jeffrey Wilcke
29181003d4 Merge pull request #1655 from obscuren/db-merge-fix
eth, trie: removed key prefixing from state entries & merge db fix
2015-08-14 04:12:33 -07:00
Bas van Kervel
87d1cde7e4 main print console output for js statement given by the exec argument 2015-08-14 13:06:34 +02:00
Jeffrey Wilcke
28b14d3e6d Merge pull request #1635 from bas-vk/useragent
support for user agents
2015-08-13 16:25:33 -07:00
Jeffrey Wilcke
73c4e6005c Merge pull request #1638 from obscuren/jit-fixes
core/vm: fixed jit error & added inline docs
2015-08-13 11:49:01 -07:00
Jeffrey Wilcke
b8ca0a830e eth, trie: removed key prefixing from state entries & merge db fix
Fixed database merge strategy to use the correct database. Due to a copy
paste fail when doing type evaluation the same database was being
iterated (chain), all others were ignored.

Removed state prefixing because {H(code): code} is stored in the same
database as the rest of the state.
2015-08-13 20:44:03 +02:00
Felix Lange
a89cfe92cc Merge pull request #1470 from ebuchman/encHandshake
p2p: validate recovered ephemeral pubkey
2015-08-13 11:59:27 +02:00
Felix Lange
0b0b31c7d2 Merge pull request #1651 from karalabe/rlp-boolean-support
rlp: boolean support
2015-08-13 11:10:26 +02:00
Péter Szilágyi
1d2420323c rlp: add support for boolean encoding/decoding 2015-08-13 12:05:39 +03:00
Felix Lange
0dd6911c62 Merge pull request #1647 from fjl/fix-disc-reason
p2p: fix value of DiscSubprotocolError
2015-08-12 21:20:21 +02:00
Felix Lange
28feafe7af Merge pull request #1646 from fjl/fix-client-identifier
cmd/geth: remove spaces in client identifier
2015-08-12 14:38:48 +02:00
Felix Lange
0d10d5a0a5 p2p: fix value of DiscSubprotocolError
We had the wrong value (12) since forever.
2015-08-12 14:15:54 +02:00
Felix Lange
31a2793662 cmd/geth: remove spaces in client identifier 2015-08-12 13:32:52 +02:00
Bas van Kervel
f9cbd16f27 support for user agents 2015-08-12 12:22:16 +02:00
Felix Lange
0ef80bb3d0 cmd/geth, jsre: restore command line editing on windows
PR #856 broke command line editing by wrapping stdout with a filter that
interprets ANSI escape sequences to fix colored printing on windows.
Implement the printer in Go instead so it can do its own
platform-dependent coloring.

As a nice side effect, the JS console is now noticeably more responsive
when printing results.

Fixes #1608
Fixes #1612
2015-08-12 12:04:00 +02:00
Jeffrey Wilcke
05c66529b2 Merge pull request #1621 from ethereum/fix-discover-hangs
p2p/discover: fix two major bugs in reply packet handling
2015-08-11 12:17:13 -07:00
Jeffrey Wilcke
9cacec70f9 cmd/evm, core/vm, tests: changed DisableVm to EnableVm 2015-08-11 18:43:22 +02:00
Jeffrey Wilcke
94b6f38869 Merge pull request #1641 from obscuren/web3-update
web3: updated
2015-08-11 08:55:55 -07:00
Jeffrey Wilcke
bf6ea2919d web3: updated 2015-08-11 17:17:20 +02:00
Jeffrey Wilcke
c32d6fdf74 Merge pull request #1640 from obscuren/trace-flag-ethtest
cmd/ethtest: added trace flag for debugging
2015-08-11 02:53:02 -07:00
Jeffrey Wilcke
67c8ccc309 cmd/ethtest: added trace flag for debugging 2015-08-11 11:46:52 +02:00
Felix Lange
590c99a98f p2p/discover: fix UDP reply packet timeout handling
If the timeout fired (even just nanoseconds) before the deadline of the
next pending reply, the timer was not rescheduled. The timer would've
been rescheduled anyway once the next packet was sent, but there were
cases where no next packet could ever be sent due to the locking issue
fixed in the previous commit.

As timing-related bugs go, this issue had been present for a long time
and I could never reproduce it. The test added in this commit did
reproduce the issue on about one out of 15 runs.
2015-08-11 11:42:17 +02:00
Felix Lange
01ed3fa1a9 p2p/discover: unlock the table during ping replacement
Table.mutex was being held while waiting for a reply packet, which
effectively made many parts of the whole stack block on that packet,
including the net_peerCount RPC call.
2015-08-11 11:42:17 +02:00
Jeffrey Wilcke
32395ddb89 core/vm: fixed jit error & added inline docs
opNumber did not create a new big int which could lead to the block's
number being modified.
2015-08-11 00:16:38 +02:00
Jeffrey Wilcke
2fcf7f1241 Merge pull request #1604 from obscuren/db-merge
core, eth, trie, xeth: merged state, chain, extra databases in one
2015-08-09 05:16:37 -07:00
Jeffrey Wilcke
07cb8092e7 Merge pull request #1611 from obscuren/expdiff-olympic-fix
cmd/utils, core: disable exp diff for olympic net
2015-08-09 05:15:13 -07:00
Jeffrey Wilcke
1cbd53add8 Merge pull request #1626 from obscuren/defaults-fix
cmd/geth, core/vm: setup vm settings and defaulted JIT disabled
2015-08-08 17:11:28 -07:00
Jeffrey Wilcke
eec38c5853 cmd/geth, core/vm: setup vm settings and defaulted JIT disabled 2015-08-09 02:06:16 +02:00
Jeffrey Wilcke
c93f0b9f4b Merge pull request #1490 from obscuren/jit-vm
core/vm: jit vm
2015-08-08 06:36:26 -07:00
Jeffrey Wilcke
a23478c0be core, eth, trie, xeth: merged state, chain, extra databases in one 2015-08-07 22:29:02 +02:00
Jeffrey Wilcke
312128384b Merge pull request #1620 from caktux/develop
string version for build server
2015-08-07 11:41:41 -07:00
caktux
3ccab5a1e8 string version for build server 2015-08-07 14:13:33 -04:00
Jeffrey Wilcke
dcb23bc3ab Merge pull request #1615 from obscuren/contract-addr-fix
xeth: fixed contract addr check
2015-08-07 05:38:02 -07:00
Jeffrey Wilcke
b6c5b3b4a7 xeth: fixed contract addr check 2015-08-07 14:32:06 +02:00
Jeffrey Wilcke
d7580f21f6 Merge pull request #1595 from obscuren/extra-data
cmd/geth, eth: added canonical extra data
2015-08-07 05:00:36 -07:00
Jeffrey Wilcke
b1fac4270d Merge pull request #1614 from obscuren/web3-finite-fix
web3: regression. Fixes #1613
2015-08-07 04:59:15 -07:00
Jeffrey Wilcke
ac697326a6 core/vm: reduced big int allocations
Reduced big int allocation by making stack items modifiable. Instead of
adding items such as `common.Big0` to the stack, `new(big.Int)` is
added instead. One must expect that any item that is added to the stack
might change.
2015-08-07 12:52:23 +02:00
Jeffrey Wilcke
184e9ae9a8 core, tests: reduced state copy by N calls
Reduced the amount of state copied that are required by N calls by doing
a balance check prior to any state modifications.
2015-08-07 12:52:23 +02:00
Jeffrey Wilcke
846f34f78b core/vm, tests: implemented semi-jit vm
* changed stack and removed stack ptr. Let go decide on slice reuse.
2015-08-07 12:52:17 +02:00
Jeffrey Wilcke
a33726b7db web3: regression. Fixes #1613 2015-08-07 12:33:12 +02:00
Jeffrey Wilcke
132df860d9 miner, rpc: added length check for extra data 2015-08-07 12:24:44 +02:00
Jeffrey Wilcke
785b3e7a57 cmd/geth, eth: added canonical extra data
Implemented canonical extra data according to
https://github.com/ethereum/wiki/wiki/Extra-Data
2015-08-07 12:24:32 +02:00
Jeffrey Wilcke
e89536ca0b Merge pull request #1596 from obscuren/submit-hashrate
miner, rpc: added submit hashrate for remote agents
2015-08-07 03:08:48 -07:00
Jeffrey Wilcke
ac10c9352e Merge pull request #1610 from obscuren/address-check
xeth: added address hex check and length check
2015-08-07 02:05:54 -07:00
Jeffrey Wilcke
cf7cef4293 xeth: added address hex check and length check 2015-08-07 09:52:12 +02:00
Jeffrey Wilcke
698e98d981 Merge pull request #1600 from ethereum/fix-tests-windows
Fix tests on windows
2015-08-06 12:39:29 -07:00
Jeffrey Wilcke
a3b8169938 Merge pull request #1603 from ebuchman/trie_hex_fix
trie: hex fix
2015-08-06 12:02:55 -07:00
Ethan Buchman
46c9594081 trie: run codec tests, add benchmarks, faster 2015-08-06 14:04:16 -04:00
Jeffrey Wilcke
7baa5977c8 Merge pull request #1594 from ebuchman/trie_hex_fix
faster hex-prefix codec and string -> []byte
2015-08-06 08:44:19 -07:00
Felix Lange
803096ca0f .gitattributes: add 2015-08-06 17:18:59 +02:00
Felix Lange
6ee908848c p2p/nat: disable UPnP test on windows 2015-08-06 17:18:59 +02:00
Felix Lange
3832019964 common/compiler, common/docserver, jsre: fix tests on windows 2015-08-06 17:18:59 +02:00
Felix Lange
eae1191904 cmd/utils: fix path expansion on windows 2015-08-06 17:18:59 +02:00
Felix Lange
78b101e15d common: remove windows path functions
They were unused and their tests failed on Windows.
2015-08-06 16:43:43 +02:00
Jeffrey Wilcke
74f6d90153 cmd/utils, core: disable exp diff for olympic net 2015-08-06 13:29:06 +02:00
Jeffrey Wilcke
c32073b11f miner, rpc: added submit hashrate for remote agents 2015-08-06 12:58:54 +02:00
Felix Lange
b23b4dbd79 p2p/discover: close Table during testing
Not closing the table used to be fine, but now the table has a database.
2015-08-06 12:27:59 +02:00
Ethan Buchman
c1d516546d faster hex-prefix codec and string -> []byte 2015-08-06 03:17:59 -04:00
Jeffrey Wilcke
82ef26f600 Merge branch 'develop' 2015-08-05 18:41:08 +02:00
Jeffrey Wilcke
ee5728ec03 fake commit for build server :( 2015-08-05 18:41:00 +02:00
Jeffrey Wilcke
9a02f53726 Merge branch 'develop' 2015-08-05 18:35:28 +02:00
Jeffrey Wilcke
98100f472c cmd/geth: bumped version number 2015-08-05 18:35:23 +02:00
Jeffrey Wilcke
80e5f50713 Merge branch 'develop' 2015-08-05 18:08:52 +02:00
Jeffrey Wilcke
26f838796b Merge pull request #1583 from obscuren/miner-price-order
miner, core: sort txs by price, nonce
2015-08-05 09:03:18 -07:00
Jeffrey Wilcke
35f271b264 miner, core: sort txs by price, nonce 2015-08-05 17:44:19 +02:00
Jeffrey Wilcke
f12e0161ca Merge pull request #1588 from obscuren/diff-bomb
core, miner: added difficulty bomb
2015-08-05 04:26:57 -07:00
Jeffrey Wilcke
71d32f54f7 core, miner: added difficulty bomb 2015-08-05 13:09:09 +02:00
Jeffrey Wilcke
1f4ac6b05a Merge pull request #1587 from obscuren/miner-race
miner: fixed worker race condition
2015-08-05 01:50:49 -07:00
Jeffrey Wilcke
d8590d9790 miner: fixed worker race condition 2015-08-04 20:54:21 +02:00
Jeffrey Wilcke
56219a5e7a Merge pull request #1578 from Gustav-Simonsson/frontier_thawing
miner: gas limit strategy, target 3141592 & def gas price 50 Shannon
2015-08-04 11:53:39 -07:00
Gustav Simonsson
26c6e3b206 miner: gas limit strategy, target 3141592 & def gas price 50 Shannon 2015-08-04 15:20:28 +02:00
Jeffrey Wilcke
b01f2c29ae Merge pull request #1574 from fjl/fdtrack
fdtrack: hack to track file descriptor usage
2015-08-04 03:51:16 -07:00
Jeffrey Wilcke
ff66e8fa29 Merge pull request #1562 from ethersphere/blankpasswd
jsre: leave out lines from history possibly containing passwords
2015-08-04 03:10:59 -07:00
Jeffrey Wilcke
17b481e3c3 Merge pull request #1581 from obscuren/olympic
cmd, core, eth: support for the olympic network
2015-08-04 00:54:07 -07:00
Felix Lange
5c949d3b3b fdtrack: temporary hack for tracking file descriptor usage
Package fdtrack logs statistics about open file descriptors.
This should help identify the source of #1549.
2015-08-04 03:10:27 +02:00
Jeffrey Wilcke
dcdb7059cc cmd, core, eth: support for the olympic network
Added a --olympic flag which initialiser the olympic protocol settings
2015-08-03 18:15:48 +02:00
Felix Lange
bf48ed32dd metrics: fix file descriptor leak when reading disk stats on linux
The disk stats file was not closed after reading.
2015-08-03 16:27:36 +02:00
Felix Lange
ba14957cf3 rpc/comms: use ConnState to track HTTP connections
The JSON-RPC server wraps TCP connections in order to be able to shut
down them down when RPC is stopped. This is rather scary code. Go 1.3
introduced the http.Server.ConnState hook for such purposes. We can use
this facility now that we depend on Go 1.4.

There are multiple reasons for the switch apart from making the code
less scary:

* the TCP listener no longer ticks every second to check a channel
* pending requests are allowed to finish after stopping the server
* we can time out idle keep-alive connections
2015-08-03 16:27:36 +02:00
Jeffrey Wilcke
97cdf84899 Merge pull request #1479 from tgerring/ethtest
Update ethtest default path for BlockTests
2015-08-03 07:18:48 -07:00
Jeffrey Wilcke
98db08c42f Merge pull request #1548 from fjl/accounts-test-deflake
accounts: bump timeout in TestSignRace
2015-08-03 07:16:36 -07:00
Jeffrey Wilcke
cc6c5846e5 Merge pull request #1568 from obscuren/issue-1559
core: added a running flag to prevent panics in the chainmanager
2015-08-03 07:15:19 -07:00
Jeffrey Wilcke
db988a46dd Merge pull request #1569 from obscuren/default-genesis
core: added default genesis block
2015-08-03 04:49:30 -07:00
Jeffrey Wilcke
7a75da63c6 core: added default genesis block
When a user runs a freshly setup geth w/o a database initialised the
default genesis block is decoded and inserted in to the database.
2015-08-02 01:23:02 +02:00
Jeffrey Wilcke
33efb3381c Merge pull request #1461 from bas-vk/eth_resend
Old transaction after resend was not removed from pool
2015-08-01 16:18:54 -07:00
Felix Lange
5aec1d94ad accounts: bump timeout and spin less in TestSignRace
This should fix the flakeyness.
2015-08-02 00:49:53 +02:00
Jeffrey Wilcke
a8b39b5cc0 Merge pull request #1541 from bas-vk/issue1518
Improved error handling for NewTransactionFromBytes
2015-08-01 08:47:32 -07:00
Jeffrey Wilcke
acd2c4e520 core: added a running flag to prevent panics in the chainmanager
The running flag will determine whether the chain manager is still
running or not. This will prevent the quit channel from being closed
twice resulting in a panic. This PR should fix this issue.

Closes #1559
2015-08-01 12:32:28 +02:00
Jeffrey Wilcke
ab85a3593a Merge pull request #1545 from obscuren/log-index
core/state: Set log index. Closes #1226
2015-07-31 10:36:42 -07:00
Jeffrey Wilcke
c1c06fffcb Merge pull request #1561 from karalabe/add-missing-autocompletes
rpc/api: add missing autocomplete commands
2015-07-31 03:09:08 -07:00
zelig
6628eeb6ca jsre: leave out lines from history containing methods of the personal module 2015-07-31 11:51:18 +02:00
Péter Szilágyi
0d3a8ad6dd rpc/api: add missing autocomplete commands 2015-07-31 12:46:16 +03:00
Jeffrey Wilcke
4231de3914 Merge pull request #1553 from prusnak/develop
remove elliptic.P224 usage
2015-07-30 03:59:25 -07:00
Pavol Rusnak
3f07afbbd2 remove elliptic.P224 usage
Fedora/RedHat distros comply with US patent law and remove this curve,
which makes it impossible to run ethereum with distro provided Golang.

File crypto/ecies/README claims it is unsupported anyway.
2015-07-30 12:47:45 +02:00
Jeffrey Wilcke
64e2f52c2e Merge pull request #1534 from obscuren/issue-1040
rpc: to in eth_call no longer required. Fixed eth_estimateGas
2015-07-30 03:25:47 -07:00
Jeffrey Wilcke
d261c3f455 rpc: to in Call no longer required. Fixed eth_estimateGas 2015-07-29 15:12:12 +02:00
Jeffrey Wilcke
e7f4232b10 Merge pull request #1544 from karalabe/fix-stall-detector
eth, eth/downloader: don't report stall if fetcher filled the block
2015-07-29 06:11:43 -07:00
Jeffrey Wilcke
f715547fc7 core/state: Set log index. Closes #1226 2015-07-29 15:08:59 +02:00
Jeffrey Wilcke
fa286688ab Merge pull request #1546 from obscuren/tests-update
tests: updated
2015-07-29 06:07:19 -07:00
Jeffrey Wilcke
03c39d4fc0 tests: updated 2015-07-29 15:01:42 +02:00
Péter Szilágyi
6adbaabc65 eth, eth/downloader: don't report stall if fetcher filled the block 2015-07-29 15:39:08 +03:00
Bas van Kervel
81e2124ea2 improved error detection and handling for NewTransactionFromBytes
integrated review comments
2015-07-29 10:30:00 +02:00
Jeffrey Wilcke
cc27be9d44 Merge pull request #1543 from enriquefynn/develop
FreeBSD support
2015-07-28 16:20:13 -07:00
Fynn
7065ebd2ed FreeBSD support 2015-07-28 19:16:16 -03:00
Jeffrey Wilcke
a281df783d Merge pull request #1533 from ethersphere/frontier/etherbase
Etherbase defaults to first account even if it is created during the session
2015-07-28 05:11:43 -07:00
Jeffrey Wilcke
1fad8798ec Merge pull request #1515 from fjl/license-fixes
all: fix license headers one more time
2015-07-28 04:29:42 -07:00
Bas van Kervel
7e31df3987 bugfix, pending transaction was resend with new gas price/limit but not removed from transaction pool 2015-07-28 10:42:31 +02:00
Felix Lange
572e78cee0 Merge pull request #1536 from fjl/fix-go1.5-build
crypto: fix build with Go 1.5
2015-07-28 00:59:52 +02:00
Felix Lange
453d2c9ce1 crypto: fix build with Go 1.5 2015-07-27 19:13:45 +02:00
zelig
1356daad27 etherbase defaults to first account even if created during the session 2015-07-27 10:50:29 +02:00
Jeffrey Wilcke
d18d256442 Merge pull request #1529 from obscuren/extra-data-fix
core: genesis extra data field fix
2015-07-26 15:15:36 -07:00
Jeffrey Wilcke
3530acb9e2 core: genesis extra data field fix 2015-07-26 14:44:54 +02:00
Jeffrey Wilcke
8a5ea466e4 Merge pull request #1528 from obscuren/reduce-extra-data
params: reduce extra data to 32 bytes & target block time
2015-07-26 04:04:10 -07:00
Jeffrey Wilcke
1e241e84f7 params: reduce extra data to 32 bytes 2015-07-26 12:47:57 +02:00
Jeffrey Wilcke
e86233abc9 Merge pull request #1525 from obscuren/genesis-write-fix
core: fixed genesis write out to write only canon number
2015-07-25 13:13:27 -07:00
Jeffrey Wilcke
c1c895a36b core: fixed genesis write out to write only canon number 2015-07-25 21:48:53 +02:00
Jeffrey Wilcke
73a576c9af Merge pull request #1524 from obscuren/default-extra
eth: set default miner extra to client name
2015-07-25 08:58:08 -07:00
Jeffrey Wilcke
665eaff9b9 Merge pull request #1520 from obscuren/reward-5eth
core: 5 ether block reward
2015-07-25 08:57:33 -07:00
Jeffrey Wilcke
9afda6ab8c core: 5 ether block reward 2015-07-25 17:47:20 +02:00
Jeffrey Wilcke
3adaeb1dbc eth: set default miner extra to client name 2015-07-25 17:36:56 +02:00
Jeffrey Wilcke
0efcd7ed05 Merge pull request #1521 from obscuren/client-update
cmd/geth, core, eth: Version 1.0.0
2015-07-25 08:36:04 -07:00
Jeffrey Wilcke
4019e2a6f2 Merge pull request #1497 from obscuren/remove-rle
ethdb, trie: removed RLE compression
2015-07-25 08:35:40 -07:00
Jeffrey Wilcke
f6097f4a0a Merge pull request #1522 from obscuren/genesis-block-check
core: check genesis block before writeout
2015-07-25 08:10:08 -07:00
Jeffrey Wilcke
d4428cc77f Merge pull request #1523 from obscuren/lower-gasprice
cmd/util: lowered default gas price
2015-07-25 08:09:55 -07:00
Jeffrey Wilcke
ba15f9d282 cmd/util: lowered default gas price 2015-07-25 17:03:10 +02:00
Jeffrey Wilcke
0c718afe90 core: check genesis block before writeout 2015-07-25 16:53:35 +02:00
Jeffrey Wilcke
036e6301af cmd/geth, core, eth: Version 1.0.0
Genesis release. Closes #1402

Conflicts:
	cmd/geth/main.go
2015-07-25 13:55:56 +02:00
Jeffrey Wilcke
6cffa743ee Merge pull request #1519 from obscuren/develop
web3: updated 0.9.1
2015-07-25 04:06:43 -07:00
Jeffrey Wilcke
5001f778aa web3: updated 0.9.1 2015-07-25 12:22:39 +02:00
Felix Lange
cd657b9878 Godeps: use BSD-licensed version of gopkg.in/karalabe/cookiejar.v2 2015-07-24 14:23:02 +02:00
Felix Lange
67598d9d08 crypto/sha3: add full license headers 2015-07-24 12:32:58 +02:00
Felix Lange
fd2356c620 common: remove config.go
The code in config.go is unused. The main reason for removing it is to
get rid github.com/rakyll/goini in Godeps (it has no license).
2015-07-24 11:43:32 +02:00
Felix Lange
bfbcfbe4a9 all: fix license headers one more time
I forgot to update one instance of "go-ethereum" in commit 3f047be5a.
2015-07-23 18:35:11 +02:00
Jeffrey Wilcke
adc7ab0dd6 Merge pull request #1507 from obscuren/batch-write
cmd/core,xeth: removed unneeded states & added batch writes
2015-07-23 07:50:07 -07:00
Jeffrey Wilcke
8f56eea77d ethdb, trie: removed RLE compression 2015-07-23 12:57:33 +02:00
Jeffrey Wilcke
8fc9830971 cmd/core,xeth: removed unneeded states & added batch writes 2015-07-23 10:45:31 +02:00
Jeffrey Wilcke
0cff61beda Merge pull request #1510 from fjl/license-fixes
all: license fixes
2015-07-23 01:43:11 -07:00
Jeffrey Wilcke
b403b9e4c3 Merge pull request #1508 from karalabe/database-caching
cmd, core, eth, ethdb: cache flag to allocate memory for db internal use
2015-07-23 01:17:18 -07:00
Felix Lange
26a269ea09 Merge pull request #1511 from karalabe/rlp-data-race
core: fix an RLP encoding data race due to deep struct copy
2015-07-22 20:10:41 +02:00
Péter Szilágyi
04bb89604e core: fix an RLP encoding data race due to deep struct copy 2015-07-22 20:54:53 +03:00
Felix Lange
0428cae226 remove LICENSE files 2015-07-22 18:54:45 +02:00
Felix Lange
3f047be5aa all: update license headers to distiguish GPL/LGPL
All code outside of cmd/ is licensed as LGPL. The headers
now reflect this by calling the whole work "the go-ethereum library".
2015-07-22 18:51:45 +02:00
Felix Lange
f4acdea402 crypto: fix license of curve.go
crypto/curve.go is not our code and has its own license. This commit
excludes it in update-license.go and removes our GPL header.
2015-07-22 18:50:31 +02:00
Péter Szilágyi
c7e7778f2a cmd, core, eth, ethdb: cache flag to allocate memory for db internal use 2015-07-22 14:00:52 +03:00
Felix Lange
d1d45aa839 Merge pull request #1503 from fjl/fix-accounts-race
accounts: fix data race when key is locked after the unlock timeout
2015-07-22 13:00:09 +02:00
Taylor Gerring
d103af5dd4 Disassociate test directory from test name 2015-07-22 11:39:36 +01:00
Jeffrey Wilcke
ed1d2f858e Merge pull request #1481 from tgerring/legalese
Legalese updates
2015-07-22 03:35:33 -07:00
Jeffrey Wilcke
482cc4957d Merge pull request #1500 from karalabe/fix-miner-race
miner: fix current work data race
2015-07-22 03:16:13 -07:00
Jeffrey Wilcke
f1daed65b1 Merge pull request #1502 from ethereum/canaryFix
Fixed canary to require 2+ nonzero, not sum 2+
2015-07-20 16:17:48 -07:00
Taylor Gerring
cf5313f13e Update disclaimer 2015-07-20 18:49:25 +02:00
Felix Lange
06d5898d6a crypto: remove debug print call after decrypting a key from disk 2015-07-20 18:04:23 +02:00
Felix Lange
7662dd9bbb accounts: fix data race when key is locked after the unlock timeout
While here, also improve the docs and speed up the tests.
The tests used the scrypt keystore with ridiculous settins and took 20s
each.
2015-07-20 18:04:23 +02:00
Vitalik Buterin
8160b8618d Fixed canary to require 2+ nonzero, not sum 2+ 2015-07-20 16:28:28 +02:00
Péter Szilágyi
3029349761 miner: fix current work data race 2015-07-20 14:37:43 +03:00
Jeffrey Wilcke
02c5022742 Merge pull request #1496 from karalabe/fix-xeth-races
xeth: fix #1485, data race in fiilter creation and event firing
2015-07-20 04:27:10 -07:00
Péter Szilágyi
3642441ca3 xeth: fix #1485, data race in fiilter creation and event firing 2015-07-20 14:02:02 +03:00
Jeffrey Wilcke
12bb743b35 Merge pull request #1484 from fjl/rlp-json-tests
cmd/ethtest, tests: add support for RLP JSON tests
2015-07-19 05:05:16 -07:00
Jeffrey Wilcke
26c0fa1cb0 Merge pull request #1480 from obscuren/miner-state-sync
miner: moved state sync
2015-07-19 05:03:59 -07:00
Jeffrey Wilcke
a38f3740d6 Merge pull request #1488 from ethereum/travis
Travis container support
2015-07-18 09:05:29 -07:00
Felix Lange
345590f27f rlp: fix check for canonical byte array size
Decoding did not reject byte arrays of length one with a single element
b where 55 < b < 128. Such byte arrays must be rejected because
they must be encoded as the single byte b instead.
2015-07-18 16:23:35 +02:00
Taylor Gerring
5a41326521 Travis container support 2015-07-18 16:12:48 +02:00
Felix Lange
cefd948267 rlp: reject trailing data when using DecodeBytes 2015-07-18 01:47:17 +02:00
Felix Lange
593b1b65e7 tests: document RLP tests 2015-07-17 15:42:23 +02:00
Felix Lange
5da82077d1 cmd/ethtest, tests: add support for RLP JSON tests 2015-07-17 15:13:24 +02:00
Jeffrey Wilcke
1b9ef0e52d miner: moved state sync
Moved the state sync so it only syncs the state when the block mining yield a possitive result
2015-07-16 14:19:27 +02:00
Jeffrey Wilcke
a75b95b876 Merge pull request #1477 from tgerring/legalese
Prompt user to accept legalese when datadir doesn't exist
2015-07-16 04:40:15 -07:00
Jeffrey Wilcke
e954375109 Merge pull request #1469 from obscuren/smart-mining
miner: smart mining
2015-07-16 04:39:07 -07:00
Taylor Gerring
618991f136 Move text to separate file 2015-07-16 13:34:34 +02:00
Jeffrey Wilcke
bc6b6932d0 Merge pull request #1476 from obscuren/deadlock-logs
xeth: removed mutex lock
2015-07-16 03:35:43 -07:00
Taylor Gerring
1909d26fe2 Prompt user to accept legalese when datadir doesn't exist 2015-07-16 12:27:42 +02:00
Jeffrey Wilcke
b1d0d3c0ed xeth: removed unneeded mutex lock 2015-07-16 11:04:53 +02:00
Jeffrey Wilcke
9addb3df3a Merge pull request #1475 from obscuren/issue1473
core: during chain reorg rewrite receipts and transactions
2015-07-15 13:17:07 -07:00
Jeffrey Wilcke
e870e61bc9 miner: smart mining
Work is now handled and carried over multiple sessions. Previously one
session only was assumed, potentially resulting in invalid (outdated)
work

* Larger work / result queue
* Full validation option
2015-07-15 20:37:12 +02:00
Jeffrey Wilcke
cecc9cdd2f Merge pull request #1468 from Gustav-Simonsson/xeth_transact_logging
xeth: log signed tx hash
2015-07-15 11:35:51 -07:00
Jeffrey Wilcke
e17d8ddbeb core: during chain reorg rewrite receipts and transactions
Added PutBlockReceipts; storing receipts by blocks. Eventually this will
require pruning during some cleanup cycle. During forks the receipts by
block are used to get the new canonical receipts and transactions.

This PR fixes #1473 by rewriting transactions and receipts from the point
of where the fork occured.
2015-07-14 18:40:03 +02:00
Ethan Buchman
37efd08b42 p2p: validate recovered ephemeral pubkey against checksum in decodeAuthMsg 2015-07-14 03:06:44 +00:00
Gustav Simonsson
afba798357 xeth: log signed tx hash 2015-07-13 03:09:02 +02:00
Jeffrey Wilcke
796c18db93 Merge pull request #1462 from obscuren/genesis
core: genesis preparation
2015-07-12 03:45:45 -07:00
Jeffrey Wilcke
a32c51effd cmd, core, eth, common: genesis preparation
Implemented the --genesis flag thru which we can set a custom genesis
block, including the official Ethereum genesis block.
2015-07-10 17:37:41 +02:00
Jeffrey Wilcke
5a810758db cmd/geth: bump version 0.9.39 2015-07-09 18:07:52 +02:00
Jeffrey Wilcke
6f9377475c Merge branch 'release/0.9.38' into develop 2015-07-09 18:06:49 +02:00
Jeffrey Wilcke
98f4c936f2 Merge branch 'release/0.9.38' 2015-07-09 18:06:39 +02:00
Jeffrey Wilcke
344277d026 cmd/geth: version bump 0.9.38 2015-07-09 17:43:45 +02:00
Jeffrey Wilcke
3add8cfdb0 Merge pull request #1452 from obscuren/develop
core/vm: added str to op
2015-07-09 08:42:38 -07:00
Jeffrey Wilcke
8b5a65c14a core/vm: added str to op 2015-07-09 17:08:33 +02:00
Jeffrey Wilcke
0646cc8d14 Merge pull request #1453 from ethersphere/frozen-accounts
accounts, crypto: fixed file naming for windows
2015-07-09 08:08:09 -07:00
Jeffrey Wilcke
97d22be318 Merge pull request #1441 from obscuren/logs-return-fix
miner, xeth: fire log event during mining. Fix return raw tx
2015-07-09 07:24:35 -07:00
Jeffrey Wilcke
4c62ce831b Merge pull request #1451 from karalabe/handle-potential-TD-forge-attack
eth/downloader: drop peer if advertised TD but won't delvier
2015-07-09 07:23:50 -07:00
Jeffrey Wilcke
b041aed660 Merge pull request #1450 from karalabe/fix-propagation-td
eth: calculate the correct TD, only update if better
2015-07-09 07:23:16 -07:00
Jeffrey Wilcke
cd6d703e94 Merge pull request #1447 from karalabe/fix-database-metrics-race-3
eth, ethdb: fix a data race during startup/shutdown
2015-07-09 07:22:54 -07:00
Jeffrey Wilcke
dd140beb73 Merge pull request #1443 from Gustav-Simonsson/core_uint64_ts
Core uint64 ts
2015-07-09 07:22:38 -07:00
Jeffrey Wilcke
06afabb631 Merge pull request #1436 from bas-vk/net_version
added net.version
2015-07-09 07:22:20 -07:00
Jeffrey Wilcke
505b77a0d5 Merge pull request #1432 from tgerring/develop
Adjust .mailmap
2015-07-09 07:21:41 -07:00
zelig
c3f5403b64 fix wallet key duplicate write - how did it get there? mystery. fixes #1411 2015-07-09 14:07:35 +01:00
zelig
589f1c85b9 : colon => dash - in keyfile name - slight deviation from ISO8601 for WIN FS compatibility 2015-07-09 13:55:09 +01:00
Péter Szilágyi
492d5454b1 eth/downloader: drop peer if advertised TD but won't delvier 2015-07-09 14:40:18 +03:00
Péter Szilágyi
4f95e2f9ec eth: calculate the correct TD, only update if better 2015-07-09 13:55:06 +03:00
Péter Szilágyi
eb2d168710 eth, ethdb: fix a data race during startup/shutdown 2015-07-09 12:44:07 +03:00
Jeffrey Wilcke
d25634662b web3: updated 2015-07-08 15:47:33 +02:00
Jeffrey Wilcke
819ecd4508 miner, xeth: fire log event during mining. Fix return raw tx 2015-07-08 15:34:11 +02:00
Gustav Simonsson
5d6d40f329 Use uint64 on ts in chain_manager, block_processor 2015-07-08 13:21:06 +02:00
Gustav Simonsson
b08abe64e4 Unskip SimpleTx3, check err in pre/post state validations 2015-07-08 13:09:22 +02:00
Gustav Simonsson
0b53a5c673 Update Ethereum JSON test files and wrappers 2015-07-08 13:08:42 +02:00
Bas van Kervel
e84f3ec1d4 added net.version 2015-07-08 08:03:20 +02:00
Taylor Gerring
b1af5af30e Adjust .mailmap 2015-07-07 11:50:49 -05:00
Jeffrey Wilcke
423c2f499c Merge branch 'release/0.9.36' 2015-07-07 15:33:55 +02:00
Jeffrey Wilcke
a2333bcbb4 Merge pull request #1430 from obscuren/web3-0.8.0
web3 update
2015-07-07 06:33:38 -07:00
Jeffrey Wilcke
c6578d2336 Merge branch 'release/0.9.36' 2015-07-07 15:32:04 +02:00
Jeffrey Wilcke
c5972b4ac7 web3 update 2015-07-07 15:21:24 +02:00
Jeffrey Wilcke
0c9c5439d4 Merge branch 'release/0.9.36' into develop 2015-07-07 15:13:11 +02:00
Jeffrey Wilcke
193c62fdba Merge branch 'release/0.9.36' 2015-07-07 15:12:56 +02:00
Jeffrey Wilcke
d673c34c8d Merge branch 'release/0.9.36' of github.com-obscure:ethereum/go-ethereum into release/0.9.36 2015-07-07 14:55:39 +02:00
Jeffrey Wilcke
df54510e3e common/natspec: fixed test 2015-07-07 14:55:27 +02:00
Jeffrey Wilcke
ee04b71887 cmd/geth, cmd/utils: changed ParamsToAddress to return error
ParamsToAddress no longer aborts the process, it now returns an error
instead so that the caller can handle the error properly.
2015-07-07 14:55:27 +02:00
Jeffrey Wilcke
4b5c99d97f cmd/geth: version number 0.9.36 2015-07-07 14:55:27 +02:00
Jeffrey Wilcke
9e7d5d9d3b Merge pull request #1426 from fjl/license
all: update license information and godoc comments
2015-07-07 05:55:06 -07:00
Felix Lange
b2d18393c4 README.md: update copyright 2015-07-07 14:12:45 +02:00
Felix Lange
335d7f4855 LICENSE, cmd/LICENSE: the go-ethereum authors have copyright 2015-07-07 14:12:45 +02:00
Felix Lange
4fb28e0dab all: goimports -w 2015-07-07 14:12:45 +02:00
Felix Lange
bdae4fd573 all: add some godoc synopsis comments 2015-07-07 14:12:45 +02:00
Felix Lange
e813626ee1 all: remove @author comments 2015-07-07 14:12:44 +02:00
Felix Lange
7bb77c02da build: change license regexp for // comments 2015-07-07 14:12:44 +02:00
Felix Lange
ea54283b30 all: update license information 2015-07-07 14:12:44 +02:00
Felix Lange
46fbd34c70 .mailmap: update 2015-07-07 14:01:33 +02:00
Felix Lange
3ff5cfd028 build: new update-license.go
This version is less clever. All names are listed in a single file,
AUTHORS. All source files have the same header. This is an improvement
over the previous version, which attempted to list copyright holders in
each source file.
2015-07-07 14:01:33 +02:00
Jeffrey Wilcke
922f881c3d common/natspec: fixed test 2015-07-07 13:01:39 +02:00
Jeffrey Wilcke
bfcac89881 cmd/geth, cmd/utils: changed ParamsToAddress to return error
ParamsToAddress no longer aborts the process, it now returns an error
instead so that the caller can handle the error properly.
2015-07-07 12:53:36 +02:00
Jeffrey Wilcke
db06906c4f cmd/geth: version number 0.9.36 2015-07-07 12:21:36 +02:00
Jeffrey Wilcke
3016f23864 cmd/geth: fixed test 2015-07-07 12:18:05 +02:00
Jeffrey Wilcke
e5fba8fd70 Merge pull request #1428 from obscuren/coinbase-fixes
cmd,eth,rpc,tests: default coinbase
2015-07-07 02:55:33 -07:00
Jeffrey Wilcke
916d155467 Merge pull request #1429 from obscuren/rebase-registrar
Rebase registrar
2015-07-07 02:55:23 -07:00
zelig
c5cb6e8e70 fix/skip tests, adapt registrar to no contract address
registry initialisers now return the txhash which caller can use to retrieve receipt
2015-07-07 11:30:55 +02:00
Bas van Kervel
3791831081 rebase with zelig/frontier/registrar 2015-07-07 11:30:45 +02:00
Bas van Kervel
7e6c1f8024 corrected input formatters as suggested during review 2015-07-07 11:30:23 +02:00
Bas van Kervel
ceb0739ba1 fixed web3 formatters mismatch 2015-07-07 11:30:11 +02:00
Jeffrey Wilcke
37c1a8f69d eth,miner,rpc: set coinbase 2015-07-07 10:58:47 +02:00
Bas van Kervel
6ea28f93b9 output BigNumbers objects in console as strings 2015-07-07 10:43:49 +02:00
zelig
1208ac83d5 fix natspec test
* registar url string retrieval chop leading zeros now
* rewrite test using test mining
* remove temporary applyTxs from xeth
2015-07-07 10:43:49 +02:00
zelig
aa22cf323e fix js arguments and TestContract passes 2015-07-07 10:43:49 +02:00
zelig
492e5049d7 rename js methods in js_test for new console API
+ rebase fixes
2015-07-07 10:43:49 +02:00
zelig
042c3290b3 fix GPO missing flags 2015-07-07 10:43:49 +02:00
zelig
518dc87db3 fix sleepBlocks, implement sleep 2015-07-07 10:43:49 +02:00
zelig
6391ec0c8f add missing method to api/admin 2015-07-07 10:43:31 +02:00
zelig
2739233719 Registrar and contractInfo handling
* resolver -> common/registrar
  * global registrar name registry interface
  * add Call to resolver backend interface
  * the hashReg and UrlHing contracts now initialised from global registry
  * initialization of contracts uniform
  * improve errors and more econsistent method names
* common/registrar/ethreg: versioned registrar
* integrate new naming and registrar in natspec
* js console api: setGlobalRegistrar, setHashReg, setUrlHint
* js test TestContract uses mining - tests fixed all pass
* eth/backend: allow PoW test mode (small ethash DAG)
* console jsre refers to resolver.abi/addr,
* cmd/geth/contracts.go moved to common/registrar
2015-07-07 10:43:31 +02:00
zelig
83ee39448e Registrar and contractInfo handling
* resolver -> common/registrar
  * global registrar name registry interface
  * add Call to resolver backend interface
  * the hashReg and UrlHing contracts now initialised from global registry
  * initialization of contracts uniform
  * improve errors and more econsistent method names
* common/registrar/ethreg: versioned registrar
* integrate new naming and registrar in natspec
* js console api: setGlobalRegistrar, setHashReg, setUrlHint
* js test TestContract uses mining - tests fixed all pass
* eth/backend: allow PoW test mode (small ethash DAG)
* console jsre refers to resolver.abi/addr,
* cmd/geth/contracts.go moved to common/registrar
2015-07-07 10:43:31 +02:00
Jeffrey Wilcke
35cd355c14 cmd,eth,rpc,tests: default coinbase 2015-07-07 10:32:05 +02:00
Jeffrey Wilcke
d764bd0584 Merge pull request #1423 from obscuren/gasused-receipt-fix
core, eth, rpc: proper gas used. Closes #1422
2015-07-06 12:41:55 -07:00
Jeffrey Wilcke
666a7dda36 core, eth, rpc: proper gas used. Closes #1417
Added some additional backward compatibility code for old receipts
2015-07-06 21:18:24 +02:00
Jeffrey Wilcke
45618d5f6b Merge pull request #1418 from fjl/one-interrupt
cmd/utils: fix interrupt handling to actually see subsequent interrupts
2015-07-06 11:05:54 -07:00
Felix Lange
d4c2e9de32 cmd/utils: fix interrupt handling to actually see subsequent interrupts 2015-07-06 16:48:34 +02:00
Jeffrey Wilcke
6220707e03 Merge pull request #1414 from Gustav-Simonsson/update_tests
Add TestBcGasPricer, comments and unskip tests
2015-07-06 06:39:19 -07:00
Jeffrey Wilcke
4c30f0f9ac Merge pull request #1416 from fjl/one-interrupt
cmd/geth, cmd/utils: improve interrupt handling
2015-07-06 06:32:24 -07:00
Felix Lange
5615fc4714 cmd/geth, cmd/utils: improve interrupt handling
The new strategy for interrupts is to handle them explicitly.
Ethereum.Stop is now only called once, even if multiple interrupts
are sent. Interrupting ten times in a row forces a panic.

Fixes #869
Fixes #1359
2015-07-06 15:06:11 +02:00
Jeffrey Wilcke
fa7b3b7276 Merge pull request #1415 from obscuren/web3-update
web3: updated
2015-07-06 05:01:39 -07:00
Jeffrey Wilcke
b0aec6402a web3: updated 2015-07-06 14:01:03 +02:00
Jeffrey Wilcke
cc29b4bc27 Merge pull request #1413 from obscuren/receipt-fix
rpc, xeth: fixed returned tx hash & receipt logs
2015-07-06 05:00:17 -07:00
Gustav Simonsson
b7e8d954ef Add TestBcGasPricer, comments and unskip tests 2015-07-06 13:56:56 +02:00
Jeffrey Wilcke
4f7fc7b23f rpc, xeth: fixed returned tx hash & receipt logs 2015-07-06 13:43:02 +02:00
Jeffrey Wilcke
457a3c8f76 Merge pull request #1410 from obscuren/newerrors-fix
core, miner: adopted new style errors
2015-07-06 04:00:37 -07:00
Jeffrey Wilcke
e6bb9c1cad core, miner: removed vm errors from consensus err checking
Removed VM errors from the consensus errors. They now used for output
only.
2015-07-06 12:43:05 +02:00
Jeffrey Wilcke
aa4502060b Merge pull request #1400 from obscuren/badblock-reporting
core, miner, tests: added test, implemented bad block reporting
2015-07-06 02:03:50 -07:00
Jeffrey Wilcke
b533aaa765 Merge pull request #1409 from fjl/fix-tx-hash
core/types, xeth: separate tx hash and tx signature hash
2015-07-06 01:59:41 -07:00
Jeffrey Wilcke
35add89c87 Merge pull request #1397 from tgerring/rpcreceipt
getTransactionReceipt RPC support
2015-07-06 01:53:21 -07:00
Jeffrey Wilcke
46e7c8512e Merge pull request #1395 from Gustav-Simonsson/fix_core_errors_in_apply_txs
Fix core errors in apply txs
2015-07-06 01:51:14 -07:00
Felix Lange
ec9620fb2f core/types, xeth: separate tx hash and tx signature hash 2015-07-06 10:45:45 +02:00
Taylor Gerring
6c7f5e3d0e Add autocomplete support for console 2015-07-05 15:42:04 -05:00
Taylor Gerring
dd521ece3f Always return transaction hash 2015-07-05 12:25:44 -05:00
Jeffrey Wilcke
bcc1660abc core, miner, tests: added test, implemented bad block reporting 2015-07-05 15:14:31 +02:00
Taylor Gerring
62559ac330 Cleanup 2015-07-04 12:14:06 -05:00
Taylor Gerring
30afd37604 Compose additional fields 2015-07-04 12:03:37 -05:00
Taylor Gerring
cd4cc309ae Remove redundant function 2015-07-04 11:28:30 -05:00
Taylor Gerring
3be9046c21 Rename local variable for clarity 2015-07-04 10:24:52 -05:00
Jeffrey Wilcke
9c3db1be1d Merge pull request #1369 from obscuren/statedb-update-cleanup
core, core/state: throw out intermediate state
2015-07-04 03:42:13 -07:00
Jeffrey Wilcke
9bb575be7d Merge pull request #1283 from ethersphere/frontier/accounts
Account management improvements
2015-07-04 03:40:23 -07:00
Gustav Simonsson
0f04af5916 Fix core error forwarding, unify OOG VM err 2015-07-04 09:27:42 +02:00
Taylor Gerring
481b221279 Decode full receipt storage 2015-07-04 00:00:23 -05:00
Taylor Gerring
80eb8f46b7 Fix hex conversion 2015-07-03 23:46:59 -05:00
Taylor Gerring
3a983d2419 Initial getTransactionReceipt support 2015-07-03 23:03:11 -05:00
Jeffrey Wilcke
47460b3b4a trie: removed shallow copies (thanks to @fjl) 2015-07-04 02:51:37 +02:00
Jeffrey Wilcke
0a1ff68c11 trie: dirty tracking 2015-07-04 02:51:36 +02:00
Jeffrey Wilcke
ab16ce70fc core, miner, tests: renamed state methods
* Update => SyncIntermediate
* Added SyncObjects

SyncIntermediate only updates whatever has changed, but, as a side
effect, requires much more disk space.

SyncObjects will only sync whatever is required for a block and will not
save intermediate state to disk. As drawback this requires more time
when more txs come in.
2015-07-04 02:51:36 +02:00
Jeffrey Wilcke
08caeedd84 core, core/state: only write necessary state. Skip intermediate 2015-07-04 02:51:36 +02:00
Jeffrey Wilcke
6f69b4d61f Merge pull request #1399 from obscuren/receipts-storing-fix
core, eth, miner, xeth: receipt storage fix
2015-07-03 17:50:46 -07:00
Jeffrey Wilcke
2feb23c1da core, eth, miner, xeth: receipt storage fix
* Added GetReceiptsFromBlock, GetReceipt, PutReceipts
* Added ContractAddress to receipt. See #1042
2015-07-04 02:32:10 +02:00
Jeffrey Wilcke
efd7da0ce8 Merge pull request #1385 from Gustav-Simonsson/update_tests
Update Ethereum JSON test files, skip failing tests
2015-07-03 09:20:21 -07:00
Jeffrey Wilcke
acd85fe95f Merge pull request #1393 from bas-vk/issue1377
Upgrade web3 to version 0.7.1
2015-07-03 08:27:04 -07:00
Jeffrey Wilcke
4dfcd6012b Merge pull request #1392 from bas-vk/ipcpipelining
Several bugfixes to IPC channel
2015-07-03 08:26:57 -07:00
Jeffrey Wilcke
546c0f631c Merge pull request #1394 from obscuren/develop
miner: ignore future errors
2015-07-03 08:22:30 -07:00
Jeffrey Wilcke
0e33fbdcb9 miner: ignore future errors 2015-07-03 17:21:23 +02:00
Bas van Kervel
8150c0a726 upgrade web3 to version 0.7.1 2015-07-03 17:08:41 +02:00
Bas van Kervel
e8c1399bbf fixed unittest after new implementation 2015-07-03 16:57:40 +02:00
Jeffrey Wilcke
1cbab291a9 Merge pull request #1389 from obscuren/txpool-issues
core, miner: miner header validation, transaction & receipt writing
2015-07-03 07:50:30 -07:00
Jeffrey Wilcke
8181929c9a Merge pull request #1391 from tgerring/consolefalse
Prevent false from printing on console
2015-07-03 07:46:49 -07:00
Bas van Kervel
d9efaf754c simplified implementation and improved performance 2015-07-03 15:44:35 +02:00
Taylor Gerring
6afdc52483 Prevent debug value from printing on console 2015-07-03 07:40:47 -05:00
Jeffrey Wilcke
29e2fb38f8 core, miner: miner header validation, transaction & receipt writing
* Miners do now verify their own header, not their state.
* Changed old putTx and putReceipts to be exported
* Moved writing of transactions and receipts out of the block processer
  in to the chain manager. Closes #1386
* Miner post ChainHeadEvent & ChainEvent. Closes #1388
2015-07-03 13:56:50 +02:00
Jeffrey Wilcke
03129e7c93 Merge pull request #1390 from karalabe/fix-downloader-test-race
eth/downloader: fix a rare test race on the OSX CI
2015-07-03 04:22:14 -07:00
Bas van Kervel
f0e94b4d71 display rpc error in console 2015-07-03 12:22:20 +02:00
Péter Szilágyi
f857fb7600 eth/downloader: fix a rare test race on the OSX CI 2015-07-03 13:01:22 +03:00
Gustav Simonsson
ff97059a99 Update Ethereum JSON tests, skip failing 2015-07-03 09:40:07 +02:00
zelig
1959346793 account update: migrate or change password
* account.Update
* KeyStore.Cleanup
* fix dir rm for old format deleteKey
2015-07-03 07:52:37 +01:00
zelig
fc17a527bc fix account ordering
* chronological order of creation
* new naming scheme keystore/UTC--<created_at UTC ISO8601>-<address hex>
* KeyStore2 -> KeyStore
* backward compatibility
* refactor keyStore methods
2015-07-03 03:19:32 +01:00
zelig
a4df9d74ea accounts order by keyfile ctime 2015-07-02 23:29:07 +01:00
zelig
eb82ca4563 rpc/js coinbase returns null if no etherbase set 2015-07-02 23:28:12 +01:00
zelig
09b6983175 no primary when listing accounts 2015-07-02 23:28:12 +01:00
zelig
65a26e40a8 require explicit etherbase address for mining. Falling back to primary is risky given it is inconsistent if keys are imported/merged/created or copied/transfered 2015-07-02 23:28:12 +01:00
zelig
fc2e33c594 unlock multiple passes and obsolete primary
* multiple passwords allowed in password file
* split on "\n", sideeffect: chop trailing slashes. fixes common mistake <(echo 'pass')
* remove accounts.Primary method
* do not fall back to primary account for mining
2015-07-02 23:28:11 +01:00
zelig
1d72aaa0cd simplify account unlocking 2015-07-02 23:28:11 +01:00
Bas van Kervel
cf66826223 merge conflict 2015-07-02 17:33:21 +02:00
Bas van Kervel
56ed408436 ipcpath issue fix 2015-07-02 17:25:11 +02:00
Bas van Kervel
6be527dd52 prevent discarding requests when parsing fails 2015-07-02 17:25:11 +02:00
Bas van Kervel
effe9cc2cf added pipelining support 2015-07-02 17:25:11 +02:00
Bas van Kervel
89525fcb4e ipcpath issue fix 2015-07-02 17:20:58 +02:00
Bas van Kervel
c2590af7fd prevent discarding requests when parsing fails 2015-07-02 15:26:55 +02:00
Vitalik Buterin
9f6016e877 Merge branch 'develop' of github.com:ethereum/go-ethereum into develop 2015-07-02 05:27:31 -04:00
Jeffrey Wilcke
75f41dedca Merge pull request #1378 from obscuren/issue1367
core, xeth: core.AddressFromMessage removed => crypto.CreateAddress
2015-07-02 02:27:20 -07:00
Vitalik Buterin
744af9f497 Switched canary addresses 2015-07-02 05:27:19 -04:00
Jeffrey Wilcke
529fb7a7d7 core, xeth: core.AddressFromMessage removed => crypto.CreateAddress 2015-07-02 11:19:10 +02:00
Jeffrey Wilcke
5caff3bc24 Merge pull request #1351 from karalabe/eth61
Implement eth/61
2015-07-01 08:16:44 -07:00
Jeffrey Wilcke
507869bff1 Merge pull request #1373 from obscuren/recovery-tools
core, cmd/geth: improved recover functionality
2015-07-01 08:09:33 -07:00
Jeffrey Wilcke
70d5d791cc core, cmd/geth: improved recover functionality
`geth recover` now accepts both hashes and numbers using "#" and no
longer requires the ethereum instance.
2015-07-01 16:34:35 +02:00
Péter Szilágyi
d6f2c0a76f eth, eth/downloader: fix #1231, DOS vulnerability in hash queueing 2015-07-01 15:21:35 +03:00
Jeffrey Wilcke
bb418a43c1 Merge pull request #1370 from obscuren/force-checkpoint
core, cmd/geth: recover by number
2015-07-01 03:57:13 -07:00
Jeffrey Wilcke
2e5242f9bb Merge pull request #1355 from Gustav-Simonsson/block_header_ts_uint64
Use uint64 for block header timestamp
2015-07-01 03:57:02 -07:00
Péter Szilágyi
1ae80aaf64 eth: fix #1371, double lock during block/txn known set limitation 2015-07-01 11:12:05 +03:00
Bas van Kervel
41de1cb723 added pipelining support 2015-07-01 08:23:17 +02:00
Jeffrey Wilcke
29ab1fa8a5 core, cmd/geth: recover by number 2015-07-01 00:52:44 +02:00
Péter Szilágyi
60454da650 eth/downloader: reduce hash fetches in prep for eth/61 2015-07-01 01:20:49 +03:00
Jeffrey Wilcke
cb2c10d862 Merge pull request #1366 from ethers/rpcRequest
fix logging jsonrpc request #1365
2015-06-30 12:17:59 -07:00
ethers
d05305473e fix logging jsonrpc request #1365 2015-06-30 12:14:16 -07:00
Jeffrey Wilcke
be935bff84 Merge pull request #1363 from obscuren/safeguard
core: added checkpoint for last block
2015-06-30 09:25:10 -07:00
Péter Szilágyi
f43c07cb3c eth, eth/downloader: transition to eth 61 2015-06-30 19:05:06 +03:00
Péter Szilágyi
af51dc4d63 eth, eth/downloader: pass the eth protocol version through 2015-06-30 19:00:01 +03:00
Péter Szilágyi
aac2b6ae4c eth: add the blocks from numbers protocol message 2015-06-30 19:00:01 +03:00
Péter Szilágyi
5db8f447d5 eth: fix #1319, put an upper limit on the known txns and blocks 2015-06-30 19:00:01 +03:00
Péter Szilágyi
6fc85f1ec2 eth: clean up peer struct a bit, fix double txn bcast 2015-06-30 19:00:01 +03:00
Péter Szilágyi
2c8ed76e01 eth: start cleaning up old protocol implementation, add metrics 2015-06-30 19:00:00 +03:00
Péter Szilágyi
393d675690 cmd/geth, cmd/utils, eth: advertise both eth/60 and eth/61 2015-06-30 19:00:00 +03:00
Jeffrey Wilcke
a748afce03 core: txpool listen for ChainHeadEvent instead of ChainEvent
Changed the transaction pool to listen for ChainHeadEvent when resetting
the state instead of ChainEvent. It makes very little sense to burst
through transactions while we are catching up (e.g., have more than one
block to process)
2015-06-30 17:27:47 +02:00
Jeffrey Wilcke
c14f0a4471 core: added checkpoint for last block
* Add a checkpoint every X blocks
* Removed queued write
2015-06-30 17:27:47 +02:00
Jeffrey Wilcke
ba95e445e1 Merge pull request #1328 from bas-vk/issue1327
Add pendingTransactions and resend
2015-06-30 08:27:03 -07:00
Bas van Kervel
8c4d493c66 solved merge conflicts 2015-06-30 15:32:02 +02:00
Bas van Kervel
a5d5387dee rebase with develop 2015-06-30 15:27:27 +02:00
Jeffrey Wilcke
130f3b270a Merge pull request #1362 from obscuren/txpool-cleanup
core: reduce CPU load by reducing calls to checkQueue
2015-06-30 05:18:51 -07:00
Jeffrey Wilcke
61ca780f3b core: reduce CPU load by reducing calls to checkQueue
* Reduced maxQueue count
* Added proper deletion past maxQueue limit
* Added cheap stats method to txpool

queueCheck was called for **every** transaction instead of:
1. add all txs
2. check queue

previously

1. add txs[i]
2. check queue
3. if i < len(txs) goto 1.
2015-06-30 14:01:12 +02:00
Bas van Kervel
57dff6f1d7 initialize fields to prevent nil pointer exception 2015-06-30 11:20:31 +02:00
Bas van Kervel
7ffabf1d39 add json parsing method for resend transaction 2015-06-30 11:20:31 +02:00
Bas van Kervel
6fdddc5ac9 improved error handling in parsing request 2015-06-30 11:20:31 +02:00
Bas van Kervel
02c6af66bf fixed unittest compilation issue 2015-06-30 11:20:31 +02:00
Bas van Kervel
ec866b066a added eth.resend 2015-06-30 11:20:31 +02:00
Bas van Kervel
056e9dd393 added eth.pendingTransactions 2015-06-30 11:20:31 +02:00
Jeffrey Wilcke
9226369b5d Merge branch 'hotfix/0.9.34-1' into develop 2015-06-30 11:15:08 +02:00
Jeffrey Wilcke
a2ce7b9950 Merge branch 'hotfix/0.9.34-1' 2015-06-30 11:14:59 +02:00
Jeffrey Wilcke
d8fe64acaa core, miner: added queued write to WriteBlock
This fixes an issue with the lru cache not being available when calling
WriteBlock. WriteBlock previously always assumed to be called from the
InsertChain where the lru cache was always created prior to calling
WriteBlock. When being called from the worker this could lead in to a
nil pointer exception being thrown and causing database corruption.
2015-06-30 11:14:43 +02:00
Gustav Simonsson
4c490db6af Use uint64 for block header timestamp 2015-06-30 10:52:11 +02:00
Jeffrey Wilcke
b047f05e7e cmd/geth: version bump 0.9.35 2015-06-30 02:30:26 +02:00
Jeffrey Wilcke
8d016ced6b Merge branch 'release/0.9.34' into develop 2015-06-30 02:22:40 +02:00
Jeffrey Wilcke
7625b07dd9 Merge branch 'release/0.9.34' 2015-06-30 02:22:19 +02:00
Jeffrey Wilcke
8f504063f4 cmd/geth: version bump 0.9.34 2015-06-30 02:11:54 +02:00
Jeffrey Wilcke
e896cab82c Merge pull request #1360 from obscuren/peter-metrics
Rebased peter's PR
2015-06-29 16:58:49 -07:00
Péter Szilágyi
5f3792c2a7 cmd/geth: decent error message if metrics are disabled 2015-06-30 00:57:55 +02:00
Péter Szilágyi
01fe972113 cmd, core, eth, metrics, p2p: require enabling metrics 2015-06-30 00:51:46 +02:00
Péter Szilágyi
ccbb56b4f2 cmd/geth, eth, ethdb: monitor database compactions 2015-06-30 00:51:29 +02:00
Péter Szilágyi
2aeeb72fa5 cmd/geth, metrics: separate process metric collection, add disk 2015-06-30 00:51:02 +02:00
Jeffrey Wilcke
7c4ed8055c Merge pull request #1357 from obscuren/core-optimisations-2
core: optimisations
2015-06-29 15:44:23 -07:00
Jeffrey Wilcke
992e4f83cb core: replaced BlockCache with lru.Cache 2015-06-30 00:36:25 +02:00
Jeffrey Wilcke
a8ebf756c7 Merge branch 'miner-broadcast' into core-optimisations-2
Conflicts:
	core/chain_manager.go
	miner/worker.go
2015-06-29 18:55:49 +02:00
zsfelfoldi
5d9df7348d gpo non-existent block checks 2015-06-29 18:53:04 +02:00
Jeffrey Wilcke
ac80ec59dc miner: update root only when mining 2015-06-29 18:51:49 +02:00
Jeffrey Wilcke
e349fac97d core: fixed tests 2015-06-29 18:51:49 +02:00
Jeffrey Wilcke
aba901e13c core: removed write's go routine 2015-06-29 18:51:49 +02:00
obscuren
07db098ccf core: renamed next to pending & fixed tests 2015-06-29 18:51:49 +02:00
obscuren
855e76fddd core: reduced cache limit to 256 2015-06-29 18:51:49 +02:00
obscuren
4d11747836 deps: Added golang-lru 2015-06-29 18:51:49 +02:00
obscuren
6ca3a44638 core: switched to proper LRU 2015-06-29 18:51:49 +02:00
obscuren
4460dc9d1a core: added LRU caching and added batch writing when LDB is used 2015-06-29 18:51:49 +02:00
obscuren
2a5a55efaf ethdb: accessor for LDB. TODO remove this interface 2015-06-29 18:51:48 +02:00
obscuren
c850c41ec1 trie: Implemented a batch write approach for flushing 2015-06-29 18:51:48 +02:00
Felix Lange
76821d167a core, eth, rpc: avoid unnecessary block header copying 2015-06-29 18:51:48 +02:00
Felix Lange
fccc7d71eb core: remove superfluous big.Int allocations
With blocks now being immutable, use big.Int values from
accessor functions instead of copying their results.
2015-06-29 18:51:48 +02:00
Felix Lange
d0bb90c69e core: generate benchmark keys only once 2015-06-29 18:51:48 +02:00
Felix Lange
992dc74efd core: avoid duplicate calls to Transaction.Data 2015-06-29 18:51:48 +02:00
Felix Lange
0b22ad99c1 core: optimize IntrinsicGas 2015-06-29 18:51:48 +02:00
Felix Lange
a8889b092b core/types: cache computed block values 2015-06-29 18:51:48 +02:00
Felix Lange
11b8d1df59 core/types: cache computed transaction values 2015-06-29 18:51:48 +02:00
Felix Lange
8743cc1c1c rlp: add ListSize 2015-06-29 18:51:48 +02:00
Felix Lange
a0566c1058 rlp: remove Flat 2015-06-29 18:51:47 +02:00
Felix Lange
3d0c6a8345 rlp: pool encoder allocations 2015-06-29 18:51:47 +02:00
Felix Lange
c3d6228023 core: add InsertChain benchmarks 2015-06-29 18:51:47 +02:00
Felix Lange
7098ec691c rpc: unmask pending block fields
This pleases the RPC tests.
2015-06-29 18:51:47 +02:00
Felix Lange
e0e5f74776 eth/downloader, eth/fetcher: use core.GenerateChain in tests
TestMadeupParentBlockChainAttack has been deleted because it was too
hard to port and the attack that it checks the prevention of is being
averted in a different way (through a protocol change).
2015-06-29 18:51:47 +02:00
Felix Lange
ceaf1c080b core: add GenerateChain, GenesisBlockForTesting 2015-06-29 18:51:47 +02:00
Felix Lange
1d42888d30 core/types: make blocks immutable 2015-06-29 18:51:47 +02:00
Felix Lange
654564e164 core/types: make transactions immutable 2015-06-29 18:51:47 +02:00
Jeffrey Wilcke
9d8b512b27 Merge pull request #1356 from Gustav-Simonsson/debug_develop
Debug develop
2015-06-29 09:33:19 -07:00
Jeffrey Wilcke
b39042db56 core, miner: implemented canary 2015-06-29 13:31:49 +02:00
Jeffrey Wilcke
d1e93db3eb core, miner: added write block method & changed mining propagation 2015-06-29 13:31:49 +02:00
Jeffrey Wilcke
059a1e9e4e miner: broadcast block before insertion/validation 2015-06-29 13:31:49 +02:00
Jeffrey Wilcke
5e7db8f5cd Merge pull request #1353 from karalabe/fix-double-fetch
eth/fetcher: don't double filter/fetch the same block
2015-06-29 04:31:13 -07:00
Péter Szilágyi
a7d22658ad eth/fetcher: don't drop on future blocks, just not propagate 2015-06-29 14:20:13 +03:00
Péter Szilágyi
29d53b2073 eth/fetcher: don't double filter/fetch the same block 2015-06-29 13:49:04 +03:00
Bas van Kervel
61ccc39b56 initialize fields to prevent nil pointer exception 2015-06-29 12:42:47 +02:00
Bas van Kervel
f9264e87ec add json parsing method for resend transaction 2015-06-29 12:32:01 +02:00
Bas van Kervel
a355777ff8 improved error handling in parsing request 2015-06-29 11:13:28 +02:00
Felix Lange
a0191910fc Merge pull request #1341 from karalabe/proto-version-negotiation
p2p: support protocol version negotiation
2015-06-28 13:52:37 +02:00
Jeffrey Wilcke
b9ebdffd83 Merge pull request #1335 from tgerring/mistcleanup
Travis and README cleanup
2015-06-27 02:17:35 -07:00
Jeffrey Wilcke
1169ec7681 Merge pull request #1344 from karalabe/monitor-fixes
Monitor fixes
2015-06-27 02:16:12 -07:00
Péter Szilágyi
d099a42c85 cmd/geth: fix monitor panic, don't pre-fill with dummy data 2015-06-26 22:05:49 +03:00
Péter Szilágyi
7e69392249 cmd/geth: re-scale charts when changing unit magnitudes 2015-06-26 21:48:21 +03:00
Péter Szilágyi
216fc267fa p2p: fix local/remote cap/protocol mixup 2015-06-26 20:45:13 +03:00
Péter Szilágyi
d84638bd31 p2p: support protocol version negotiation 2015-06-26 15:48:50 +03:00
Jeffrey Wilcke
b0a5be4495 Merge pull request #1321 from karalabe/cut-it-open-3000
Metrics collecting and reporting support
2015-06-25 08:18:42 -07:00
Jeffrey Wilcke
e64625aa82 Merge pull request #1332 from bas-vk/ipcbatch
IPC interface improvements
2015-06-25 08:06:19 -07:00
Taylor Gerring
c6dbe9dc07 Travis and README cleanup 2015-06-25 16:46:54 +02:00
Bas van Kervel
662285074e improved logging for IPC connection lifetime management 2015-06-25 15:54:16 +02:00
Péter Szilágyi
e9c0b5431c cmd/geth: finalize mem stats 2015-06-25 16:19:42 +03:00
Péter Szilágyi
fdbf8be735 cmd/geth, rpc/api: fix reported metrics issues 2015-06-25 15:33:26 +03:00
Bas van Kervel
5757a0edb5 added IPC timeout support 2015-06-25 14:32:22 +02:00
unknown
04910c902a support for large request/response on windows 2015-06-25 04:53:41 -07:00
Bas van Kervel
ffbe5656ff support for large requests/responses 2015-06-25 13:18:10 +02:00
Péter Szilágyi
c0343c8f17 cmd/geth: add memory stat collection too 2015-06-25 13:47:06 +03:00
Bas van Kervel
6d92fdc0df added support for batch requests 2015-06-25 12:01:28 +02:00
Jeffrey Wilcke
6b2a03faa2 Merge pull request #1085 from Gustav-Simonsson/key_store_v3
crypto: key store v3
2015-06-25 02:16:54 -07:00
Péter Szilágyi
c6e2af14c0 cmd/geth: limit the maximum chart colums to 6 2015-06-25 12:12:11 +03:00
Jeffrey Wilcke
8774fdcd64 Merge pull request #1329 from Gustav-Simonsson/ethash_input_validations
Update Ethash Godeps
2015-06-25 02:06:06 -07:00
Péter Szilágyi
3ea6b5ae32 cmd/geth: list the available metrics if none specified 2015-06-25 11:42:45 +03:00
Péter Szilágyi
d02f07a983 cmd/geth: polish monitor visuals, add footer, refresh flag 2015-06-25 11:32:21 +03:00
Péter Szilágyi
b98b444179 cmd/geth: add attach and rows flags to the monitor command 2015-06-25 10:36:47 +03:00
Péter Szilágyi
1ce40d7581 Godeps: remove mist remnants, add termui deps 2015-06-24 18:40:18 +03:00
Péter Szilágyi
92ef33d97a rpc/api, cmd/geth: retrievel all percentiles, add time units 2015-06-24 18:34:05 +03:00
Péter Szilágyi
302187ae39 cmd/geth: allow branching metric patterns 2015-06-24 18:34:05 +03:00
Péter Szilágyi
bf99d5b33c cmd/geth: polish the monitoring charts a bit 2015-06-24 18:34:05 +03:00
Péter Szilágyi
e5b820c47b cmd/geth, rpc/api: extend metrics API, add a basic monitor command 2015-06-24 18:34:05 +03:00
Péter Szilágyi
bde2ff0343 cmd/geth, rpc/api: move the metrics into the new console 2015-06-24 18:34:05 +03:00
Péter Szilágyi
803b3c4a82 eth, ethdb: measure database operation latencies too 2015-06-24 18:34:05 +03:00
Péter Szilágyi
0609fcf030 eth: make sure dbs are lvldb before instrumenting 2015-06-24 18:34:04 +03:00
Péter Szilágyi
792b0ddccd core, eth, eth/fetcher, ethdb: polish metrics gathering a bit 2015-06-24 18:34:04 +03:00
Péter Szilágyi
6260b86c15 eth/fetcher: fix failed merge 2015-06-24 18:34:04 +03:00
Péter Szilágyi
43e4a6501b core, ethdb: instrument the block and state db
Conflicts:
	ethdb/database.go
2015-06-24 18:34:04 +03:00
Péter Szilágyi
7bd71fa800 godeps: pull in go-metrics 2015-06-24 18:34:04 +03:00
Péter Szilágyi
7f92e708c5 cmd/geth, core: impl. percentile reporting, instrument insertions 2015-06-24 18:34:04 +03:00
Péter Szilágyi
b426301467 cmd/geth, eth/fetcher: polish metrics reporting, add some more 2015-06-24 18:34:04 +03:00
Péter Szilágyi
6994a3daaa p2p: instrument P2P networking layer 2015-06-24 18:33:33 +03:00
Péter Szilágyi
821e01b013 cmd/geth, eth/fetcher: initial metrics support
Conflicts:
	cmd/geth/admin.go
2015-06-24 18:33:33 +03:00
Bas van Kervel
ee73f09727 fixed unittest compilation issue 2015-06-24 16:07:44 +02:00
Bas van Kervel
dc58568a25 added eth.resend 2015-06-24 14:56:53 +02:00
Bas van Kervel
f1a4a6e563 added eth.pendingTransactions 2015-06-24 13:53:37 +02:00
Gustav Simonsson
8363aba7ac Update Ethash Godeps 2015-06-24 07:17:21 +02:00
Gustav Simonsson
d23ec6c419 Change keystore to version 3
* Change password protection crypto in keystore to version 3
* Update KeyStoreTests/basic_tests.json
* Add support for PBKDF2 with HMAC-SHA256
* Change MAC and encryption key to avoid unnecessary hashing
* Add tests for test vectors in new wiki page defining version 3
* Add tests for new keystore tests in ethereum/tests repo
* Move JSON loading util to common for use in both tests and
  crypto packages
* Add backwards compatibility with key store version 1
2015-06-24 06:03:23 +02:00
Jeffrey Wilcke
22c7ce0162 cmd/geth: version bump 0.9.33 2015-06-23 19:20:20 +02:00
Jeffrey Wilcke
983a33cf11 Merge branch 'release/0.9.32' into develop 2015-06-23 19:19:49 +02:00
Jeffrey Wilcke
72e2613a9f Merge branch 'release/0.9.32' 2015-06-23 19:19:33 +02:00
Jeffrey Wilcke
67e6f74e9a cmd/geth: bump 2015-06-23 19:11:20 +02:00
Jeffrey Wilcke
d21c2bfb68 Merge pull request #1314 from karalabe/handle-fetcher-attacks-2
eth/fetcher: handle and test various DOS attacks
2015-06-23 10:04:44 -07:00
Jeffrey Wilcke
6b5532ab0d Merge pull request #1279 from bas-vk/rpc-http
Integrate console and remove old rpc package structure
2015-06-23 07:44:03 -07:00
Jeffrey Wilcke
139439dcdc Merge pull request #1309 from fjl/p2p-fix-lookup-spin
p2p: throttle all discovery lookups
2015-06-23 05:36:58 -07:00
Bas van Kervel
2b3957f373 fixed relative path issue with javascript files 2015-06-23 09:38:30 +02:00
Bas van Kervel
55424a11af improved action description 2015-06-23 09:11:57 +02:00
Bas van Kervel
57c911c398 bugfix in startRPC error handling 2015-06-23 08:26:17 +02:00
Péter Szilágyi
3ce17d2862 eth/fetcher: fix a closure data race 2015-06-22 20:13:18 +03:00
Péter Szilágyi
99ca4b619b eth/fetcher: clean up test assertions 2015-06-22 18:28:38 +03:00
Péter Szilágyi
b53f701c27 eth/fetcher: remove test sleeps (15s -> 2.8s) 2015-06-22 18:08:28 +03:00
Péter Szilágyi
1989d1491a eth/fetcher: handle and (crude) test block memory DOS 2015-06-22 16:49:47 +03:00
Bas van Kervel
4ee7f6fc88 added missing change for sign test 2015-06-22 13:54:13 +02:00
Bas van Kervel
6d596b1ad1 fixed eth sign unittest 2015-06-22 13:19:59 +02:00
Péter Szilágyi
d36c25bcbc eth/fetcher: handle and test block announce DOS attacks 2015-06-22 14:07:08 +03:00
Bas van Kervel
2e0b56a72b added RPC start/stop support 2015-06-22 12:47:32 +02:00
Bas van Kervel
2737baa657 fixed unittests 2015-06-22 09:17:09 +02:00
Bas van Kervel
f87501b1c5 added batch support to console and attach actions 2015-06-22 09:17:09 +02:00
Bas van Kervel
3ff272b618 moved solidity test to new rpc structure 2015-06-22 09:17:09 +02:00
Bas van Kervel
29297d3b82 fixed bug where history file was create in cwd 2015-06-22 09:17:09 +02:00
Bas van Kervel
ce5c94e471 added attach over http/rpc support 2015-06-22 09:17:09 +02:00
Bas van Kervel
f202563777 added attach over ipc command 2015-06-22 09:17:09 +02:00
Bas van Kervel
36a6b16a3b removed console command 2015-06-22 09:17:09 +02:00
Bas van Kervel
603192cfa7 cleanup comments/code 2015-06-22 09:17:09 +02:00
Bas van Kervel
a4a4e9fcf8 removed old rpc structure and added new inproc api client 2015-06-22 09:17:09 +02:00
Bas van Kervel
3e1d635f8d fixed rpc test failure in eth.blockNumber 2015-06-22 08:54:21 +02:00
Bas van Kervel
9ac1b4e59e fixed rpc test failure in net_peerCount 2015-06-22 08:54:21 +02:00
Bas van Kervel
5fdf72b1ab fixed web3 rpc test failures 2015-06-22 08:54:21 +02:00
Bas van Kervel
c3f6c322c0 added DB api 2015-06-22 08:54:21 +02:00
Bas van Kervel
5c25403b13 refactored old rpc structure to new 2015-06-22 08:54:21 +02:00
Bas van Kervel
fd764d4ff7 added comms http 2015-06-22 08:54:21 +02:00
Bas van Kervel
60c2ccd99c made ipc handler generic and reusable 2015-06-22 08:54:21 +02:00
Jeffrey Wilcke
9cf7913c61 Merge pull request #1304 from obscuren/state-renames
core, miner, xeth: renamed gas methods
2015-06-21 16:49:47 -07:00
Jeffrey Wilcke
7633dfdc08 Merge pull request #1305 from obscuren/database-error-check
core, ethdb, trie: validate database errors
2015-06-21 16:49:14 -07:00
Felix Lange
6fb810adaa p2p: throttle all discovery lookups
Lookup calls would spin out of control when network connectivity was
lost. The throttling that was in place only took effect when the table
returned zero results, which doesn't happen very often.

The new throttling should not have a negative impact when the host is
online. Lookups against the network take some time and dials for all
results must complete or hit the cache before a new one is started. This
usually takes longer than four seconds, leaving online lookups
unaffected.

Fixes #1296
2015-06-22 01:07:58 +02:00
obscuren
398d08a8dd tests: SetGasLimit 2015-06-21 17:09:19 +02:00
obscuren
07c3de3f75 core, miner, xeth: renamed gas methods
* BuyGas => SubGas
* RefundGas => AddGas
* SetGasPool => SetGasLimit
2015-06-21 17:09:19 +02:00
obscuren
a40a91d60f trie: fixed tests 2015-06-21 17:08:47 +02:00
obscuren
c590b505ed core, ethdb, trie: validate database errors 2015-06-21 16:59:15 +02:00
Jeffrey Wilcke
3deded28a5 Merge pull request #1302 from obscuren/mist-removal
mist: R.I.P.
2015-06-21 07:58:08 -07:00
obscuren
46bd6c43db travis: removed qt deps 2015-06-20 20:33:25 +02:00
obscuren
42a14b8a09 mist: R.I.P.
/"""""/""""""".
    /     /         \             __
   /     /           \            ||
  /____ /             \           ||
 |     |  In Loving    |          ||
 |     |   Memory      |          ||
 |     |               |          ||
 |     |   2014-2015   |          ||
 |     |     * *   * * |         _||_
 |     |     *\/* *\/* |        | TT |
 |     |     *_\_  /   ...""""""| || |.""...."""""""".""
 |     |         \/.."""""..."""\ || /.""".......""""...
 |     |...."""""""........""""""^^^^"......."""""""".."
 |......"""""""""""""""........"""""...."""""..""-Jeff W.
2015-06-20 14:37:00 +02:00
Jeffrey Wilcke
9c69c051ba Merge pull request #1236 from tgerring/ethtest
ethtest improvements
2015-06-20 05:32:33 -07:00
Taylor Gerring
53e042f0c4 Added link to ARM develop build 2015-06-19 18:49:15 +02:00
Jeffrey Wilcke
4c2ba1af1d Merge pull request #1298 from karalabe/slack-n-bound
eth/fetcher: lower max cache size, add timeout slack
2015-06-19 07:46:45 -07:00
Jeffrey Wilcke
0fa2750fc9 Merge pull request #1290 from tgerring/dataargs
unit test coverage for NewDataArgs
2015-06-19 07:44:39 -07:00
Péter Szilágyi
8c4c7ea192 eth/fetcher: lower max cache size, add timeout slack 2015-06-19 16:46:16 +03:00
Taylor Gerring
d1e589289c Expand --test switch 2015-06-19 15:08:53 +02:00
Taylor Gerring
0743243dce Add --skip option to CLI
Disassociates hardcoded tests to skip when running via CLI. Tests still
skipped when running `go test`
2015-06-19 11:38:23 +02:00
Péter Szilágyi
d5871fc200 Merge pull request #1295 from karalabe/fix-broadcast-order
eth: fix the propagation/announce order for mined blocks
2015-06-19 10:15:20 +03:00
Péter Szilágyi
4180ca7fe4 eth: fix the propagation/announce order for mined blocks 2015-06-19 10:07:37 +03:00
Taylor Gerring
a9659e6dcf recover test logic 2015-06-18 23:46:42 +02:00
Taylor Gerring
8d3faf69d0 Build error fixes 2015-06-18 22:38:17 +02:00
Taylor Gerring
baea8e87e5 Rebase cleanup 2015-06-18 22:27:44 +02:00
Taylor Gerring
01ec4dbb12 Add stdin option 2015-06-18 22:24:07 +02:00
Taylor Gerring
a86452d22c Minor cleanup 2015-06-18 22:20:45 +02:00
Taylor Gerring
49336675f3 Expand CLI options to allow running all tests 2015-06-18 22:20:45 +02:00
Taylor Gerring
516362bcad Allow specifying single depth directory 2015-06-18 22:20:45 +02:00
Taylor Gerring
30444db020 Add lost rebase changes 2015-06-18 22:20:45 +02:00
Taylor Gerring
c941a39b75 Cleanup logging 2015-06-18 22:20:45 +02:00
Taylor Gerring
8507c867b9 Fix geth blocktest command 2015-06-18 22:20:45 +02:00
Taylor Gerring
6931267324 Wire ethtest to new tests structure 2015-06-18 22:20:45 +02:00
Taylor Gerring
6ff956394a DRY file loading 2015-06-18 22:20:45 +02:00
Taylor Gerring
ac0637c413 More consistent test interfaces + test skipping 2015-06-18 22:20:44 +02:00
Taylor Gerring
b6d40a9312 Cleanup/reorg 2015-06-18 22:20:44 +02:00
Taylor Gerring
c5d6fcbaba Return error up stack instead of passing testing var down 2015-06-18 22:20:44 +02:00
Taylor Gerring
24554629b1 DRY log check 2015-06-18 22:15:08 +02:00
Taylor Gerring
7c6ef0ddac Separate and identify tests runners 2015-06-18 22:15:07 +02:00
Taylor Gerring
1b26d4f220 Flatten helper directory 2015-06-18 22:15:07 +02:00
Taylor Gerring
e82100367f Fix paths 2015-06-18 22:13:42 +02:00
Taylor Gerring
a67a15528a Split tests from helper code 2015-06-18 22:13:42 +02:00
Taylor Gerring
7b9fbb088a Flatten vm directory 2015-06-18 22:13:41 +02:00
Taylor Gerring
6415ed0730 Require a first argument of test type 2015-06-18 22:13:41 +02:00
Jeffrey Wilcke
e4f9ec886b Merge pull request #1267 from SilentCicero/develop
eth_sendRawTransaction JSON RPC
2015-06-18 11:33:50 -07:00
Jeffrey Wilcke
8eaaf24b1e Merge pull request #1275 from karalabe/optimise-fetcher
eth/fetcher: separate the announce based sync into its own package
2015-06-18 11:14:26 -07:00
Péter Szilágyi
13c25036ea eth/fetcher: since uncles are allowed, drop phase test 2015-06-18 20:10:07 +03:00
Péter Szilágyi
ecd19919c5 eth/fetcher: allow backward uncle imports too 2015-06-18 19:43:47 +03:00
Péter Szilágyi
90d45f0397 eth: fix test breakage from the previous commit 2015-06-18 18:25:27 +03:00
Péter Szilágyi
b91b581b80 eth, eth/fetcher: propagate after header verify, announce only on insert 2015-06-18 18:00:19 +03:00
Péter Szilágyi
629705ad53 eth: clean the block request packet handling a bit 2015-06-18 16:09:34 +03:00
Péter Szilágyi
5ec6ecc511 eth, eth/fetcher: move propagated block import into fetcher 2015-06-18 15:56:08 +03:00
Péter Szilágyi
a9ada0b5ba eth/fetcher: make tests thread safe 2015-06-18 15:56:08 +03:00
Péter Szilágyi
37c5ff392f eth/fetcher: build longest chain until proven otherwise 2015-06-18 15:56:08 +03:00
Péter Szilágyi
2a7411bc96 eth/fetcher: fix premature queue cleanup, general polishes 2015-06-18 15:56:08 +03:00
Péter Szilágyi
497a7f1717 eth, eth/fetcher: define and enforce propagation boundaries 2015-06-18 15:56:08 +03:00
Péter Szilágyi
026ee40650 eth/fetcher: deduplicate future blocks 2015-06-18 15:56:08 +03:00
Péter Szilágyi
11c8f83a58 eth, eth/fetcher: cache future propagated blocks too 2015-06-18 15:56:08 +03:00
Péter Szilágyi
057bc237ad eth, eth/fetcher: use an import queue to store out of order blocks 2015-06-18 15:56:07 +03:00
Péter Szilágyi
8b64e041d6 eth/fetcher: add test to check for duplicate downloads 2015-06-18 15:56:07 +03:00
Péter Szilágyi
2a1b722d04 eth/fetcher: fix timer reset bug, add initial tests 2015-06-18 15:56:07 +03:00
Péter Szilágyi
7c2af1c117 eth, eth/fetcher: separate notification sync mechanism 2015-06-18 15:56:07 +03:00
Jeffrey Wilcke
2cea410656 Merge pull request #1282 from obscuren/state-cleanup
core/state: cleanup & optimisations
2015-06-18 05:29:53 -07:00
obscuren
430bcdb219 core/vm: clarified SSTORE 2015-06-18 12:25:02 +02:00
Jeffrey Wilcke
53a6145a2b Merge pull request #1287 from karalabe/fix-downloader-cancel-interrupt
eth, eth/downloader: fix processing interrupt caused by temp cancel
2015-06-18 02:50:19 -07:00
obscuren
15e169e5b6 core: ValidatedHeader (method => function)
Changed header validation method to function in preparation of
@karalabe's PR.
2015-06-18 11:47:50 +02:00
Péter Szilágyi
4365668462 eth/downloader: extend slow test to fix even slower CI server... 2015-06-18 00:42:02 +03:00
Péter Szilágyi
55dd8fd621 eth/downloader: always reenter processing if not exiting 2015-06-18 00:26:54 +03:00
Péter Szilágyi
2f4cbe22f5 eth, eth/downloader: fix processing interrupt caused by temp cancel 2015-06-18 00:04:57 +03:00
Taylor Gerring
5afebc2a4b unit test coverage for NewDataArgs 2015-06-17 18:07:45 +02:00
obscuren
f5abc9f188 core, core/vm: state improvements and tx pool speed up
Removed full tx validation during state transitions
2015-06-17 17:10:22 +02:00
obscuren
753d62a4dd core: TMP testing code 2015-06-17 17:10:13 +02:00
Jeffrey Wilcke
ae36beb38f Merge pull request #1269 from bas-vk/console-batch
added batch mode to console
2015-06-17 07:56:09 -07:00
obscuren
bdd63837ea core/state: removed trie copy 2015-06-17 13:39:19 +02:00
obscuren
aa699a1283 core/state: removed state from state object 2015-06-17 13:27:51 +02:00
obscuren
aaddc99c35 core/state: fixed state tests 2015-06-17 12:53:22 +02:00
Jeffrey Wilcke
e4b54f18c6 Merge pull request #1281 from karalabe/fix-overlapping-delivery-hang
eth/downloader: fix #1280, overlapping (good/bad) delivery hang
2015-06-17 03:24:46 -07:00
Jeffrey Wilcke
a3fdef7529 Merge pull request #1274 from Gustav-Simonsson/update_ethash_godep
Update ethash godep
2015-06-17 03:05:51 -07:00
obscuren
a977f3c0dc xeth, tests: fixed api 2015-06-17 11:44:40 +02:00
obscuren
30b27336ea core/state: remove the need for common.Value 2015-06-17 11:30:42 +02:00
obscuren
787a61bb27 core/state, core/vm: reworked storage get / set to use common.Hash 2015-06-17 11:24:40 +02:00
Péter Szilágyi
4a1e82cf3f eth/downloader: fix #1280, overlapping (good/bad) delivery hang 2015-06-17 12:03:16 +03:00
obscuren
5721fcf668 core/state, core/vm: cleanup refunds 2015-06-17 10:20:33 +02:00
Gustav Simonsson
be303ba186 Update ethash Godep (again) 2015-06-17 00:56:25 +02:00
SilentCicero
1f34daccc3 Added glog messages like Transaction 2015-06-16 12:47:34 -04:00
SilentCicero
6add45cd10 Remove Extra Loggers 2015-06-16 12:30:07 -04:00
SilentCicero
7ec8c257ff New DataArgs and eth_sendRawTransaction 2015-06-16 12:28:10 -04:00
Gustav Simonsson
a9d6846f92 Update ethash Godep 2015-06-16 12:09:39 +02:00
Gustav Simonsson
8f372c867d Update Ethereum JSON test files 2015-06-16 12:09:25 +02:00
Nick Dodson
e952bb65e7 thanks subtly :) 2015-06-16 00:06:28 -04:00
Nick Dodson
2642e091e9 NewSigArgs arg change. 2015-06-15 16:01:01 -04:00
obscuren
dfd18d245a cmd/geth: bump 0.9.31 2015-06-15 19:29:22 +02:00
obscuren
4699ebf534 Merge branch 'release/0.9.30' into develop 2015-06-15 19:29:06 +02:00
obscuren
5daf8729be Merge branch 'release/0.9.30' 2015-06-15 19:28:48 +02:00
obscuren
4673b04503 cmd/geth: bump version number 0.9.30 2015-06-15 19:14:34 +02:00
Jeffrey Wilcke
cc0b451119 Merge pull request #1260 from obscuren/tx-drop-low-tx
core: drop low gas tx
2015-06-15 09:09:44 -07:00
Jeffrey Wilcke
f2a2164184 Merge pull request #990 from zsfelfoldi/gasprice
eth: add GasPriceOracle
2015-06-15 08:44:25 -07:00
Jeffrey Wilcke
f475a01326 Merge pull request #1261 from fjl/p2p-no-writes-at-shutdown
p2p: prevent writes at shutdown time
2015-06-15 08:21:30 -07:00
obscuren
2628103f1d rpc/api: fixed default gas-(price) issue. 2015-06-15 17:21:08 +02:00
Nick Dodson
ad56aef5d2 Update utils.go 2015-06-15 11:10:40 -04:00
Nick Dodson
c3b80123e3 Update eth.go 2015-06-15 11:10:24 -04:00
Nick Dodson
f9f9352ceb Change eth_pushTx case to eth_sendRawTransaction 2015-06-15 10:50:07 -04:00
zsfelfoldi
1e3f4877c0 Changed miner and gpo min gas price to 1 szabo 2015-06-15 16:48:59 +02:00
obscuren
e79cc42dfe core: moved check for max queue to checkQueue
Moved the queue to check to the checkQueue method so no undeeded loops
need to be initiated or sorting needs to happen twice.
2015-06-15 16:46:45 +02:00
Jeffrey Wilcke
263903378b Merge pull request #1243 from karalabe/instrument-downloader-sync
eth, eth/downloader: separate concerns, clean up test suite
2015-06-15 07:43:37 -07:00
Bas van Kervel
f06f220c7c added printing support for objects 2015-06-15 16:33:36 +02:00
SilentCicero
d6233c7d2d Changed variable names 2015-06-15 10:07:32 -04:00
zsfelfoldi
b42b70eb5f fixed rpc/api.GasPrice 2015-06-15 15:55:39 +02:00
zsfelfoldi
610adfd83f fixed xeth.gpo = nil bug 2015-06-15 15:55:39 +02:00
zsfelfoldi
3c7b64ce20 removed duplicate function after rebase 2015-06-15 15:55:39 +02:00
zsfelfoldi
a977cecbe4 fixed gas price corr. factor 2015-06-15 15:55:38 +02:00
zsfelfoldi
6e212bdc6d fallback for uninitialized GPO config values 2015-06-15 15:55:38 +02:00
zsfelfoldi
2e8016c80d fixed initial base price bug 2015-06-15 15:55:38 +02:00
zsfelfoldi
0930e190a7 added missing source 2015-06-15 15:55:38 +02:00
zsfelfoldi
3f94d09c1f fixed saving receipts 2015-06-15 15:55:38 +02:00
Felix Lange
70da79f04c p2p: improve disconnect logging 2015-06-15 15:03:46 +02:00
Felix Lange
8dcbdcad0a p2p: track write errors and prevent writes during shutdown
As of this commit, we no longer rely on the protocol handler to report
write errors in a timely fashion. When a write fails, shutdown is
initiated immediately and no new writes can start. This will also
prevent new writes from starting after Server.Stop has been called.
2015-06-15 15:03:46 +02:00
Péter Szilágyi
aa250e228a eth: don't refetch non fitting blocks to avoid duplicates 2015-06-15 15:18:31 +03:00
Péter Szilágyi
cf7c44a7f6 eth/downloader: detailed comment for the race corner case 2015-06-15 15:18:04 +03:00
obscuren
21fa29111b core: reduce max allowed queued txs per address
Transactions in the queue are now capped to a maximum of 200
transactions. This number is completely arbitrary.
2015-06-15 12:16:29 +02:00
Péter Szilágyi
9c03c374e3 eth/downloader: fix import statistic reset, fetch hashes async 2015-06-15 13:05:01 +03:00
obscuren
6d817e16c1 core, miner: tx pool drops txs below ask price 2015-06-15 11:33:08 +02:00
Péter Szilágyi
b240983e2b eth, eth/downloader: do async block fetches, add dl tests 2015-06-15 12:26:05 +03:00
Péter Szilágyi
30a9939388 eth/downloader: sanity test for multi peer syncs 2015-06-15 09:22:37 +03:00
Péter Szilágyi
fc7abd9886 eth, eth/downloader: move block processing into the downlaoder 2015-06-15 09:22:37 +03:00
Péter Szilágyi
0fc71877a7 eth/downloader: add valid peer during attacks (check interference) 2015-06-15 09:22:37 +03:00
Péter Szilágyi
80833f8137 eth/downloader: instreument and test the sync peer drop 2015-06-15 09:22:37 +03:00
Péter Szilágyi
faae8b7dd8 eth: fix an accidental test compile error 2015-06-15 09:22:37 +03:00
Péter Szilágyi
2dd6a62f67 eth/downloader: support individual peers in the test suite 2015-06-15 09:22:36 +03:00
Péter Szilágyi
2937903299 eth/downloader: remove uneeded testing functions 2015-06-15 09:22:36 +03:00
Péter Szilágyi
66d3dc8690 eth, eth/downloader: move peer removal into downloader 2015-06-15 09:22:36 +03:00
SilentCicero
f9a0a13fa9 eth_pushTx send raw signed encoded TX data to the chain through RPC 2015-06-14 18:07:03 -04:00
Bas van Kervel
2a0528303f added batch mode to console 2015-06-13 19:02:46 +02:00
Jeffrey Wilcke
6f5c6150b7 Merge pull request #1255 from obscuren/chain-proc-interupt
eth, core: interrupt the chain processing on stop
2015-06-12 08:04:02 -07:00
obscuren
645dfd9693 core: changed interrupt strategy
Removed chain manager's select/channel approach when checking for
interrupts. Now using an atomic int32 instead which checked for every
block processed.
2015-06-12 16:52:54 +02:00
Jeffrey Wilcke
1bca2f6ec4 Merge pull request #1256 from obscuren/fix-printable-chars
core/vm: fixed strange output for trace logging & error reporting
2015-06-12 07:46:59 -07:00
obscuren
90c4493a10 eth, core: interupt the chain processing on stop
Added an additional channel which is used to interupt the chain manager
when it's processing blocks.
2015-06-12 13:41:34 +02:00
Jeffrey Wilcke
aaac1f0cdd Merge pull request #1254 from bas-vk/ipcwindowspathfix
Invalid named pipe name
2015-06-12 04:39:38 -07:00
obscuren
287f990891 core/vm: Improved error reporting for trace logging 2015-06-12 13:35:14 +02:00
obscuren
02d629af8f core/vm: fixed printable characters using unicode instead 2015-06-12 11:18:17 +02:00
Bas van Kervel
55a796b7c3 removed obsolete console flag 2015-06-12 09:42:57 +02:00
Bas van Kervel
359e6414e5 fixed windows ipc path issue 2015-06-12 09:32:37 +02:00
Jeffrey Wilcke
4bb9a61049 Merge pull request #1245 from bas-vk/ipcdatadirfix
ipc socket always uses default path
2015-06-11 12:01:07 -07:00
Bas van Kervel
22080e1fdd ipc socket always used default path 2015-06-11 20:35:19 +02:00
Jeffrey Wilcke
e2c2d8e15e Merge pull request #1239 from bas-vk/rpc-apis
RPC refactoring
2015-06-11 07:41:43 -07:00
Bas van Kervel
b3c07f167f fixed incomplete merge action 2015-06-11 15:06:12 +02:00
Bas van Kervel
ec6a7b35f6 removed obsolete print statement 2015-06-11 15:00:33 +02:00
Bas van Kervel
ebaa9b9feb removed binary files 2015-06-11 14:54:03 +02:00
Bas van Kervel
7584e68c21 upgrade web3.js with _extend support 2015-06-11 14:43:05 +02:00
Bas van Kervel
1fe617fa57 added net API 2015-06-11 14:40:38 +02:00
Bas van Kervel
87dace1fa9 added miner API 2015-06-11 14:20:50 +02:00
Bas van Kervel
aa258dcc5f added console binary 2015-06-11 14:18:54 +02:00
Bas van Kervel
3c93034a32 fixed windows build problem 2015-06-11 14:18:08 +02:00
Bas van Kervel
594a34a88d changed send methods for backwards compatability in geth console 2015-06-11 14:17:28 +02:00
Bas van Kervel
1b59f89095 added console command 2015-06-11 14:17:27 +02:00
Bas van Kervel
bbfa0a3dcb added API/IPC commandline flags 2015-06-11 14:15:33 +02:00
Bas van Kervel
348f1562e2 restructured eth rpc API 2015-06-11 14:13:57 +02:00
Bas van Kervel
7e41d7ac51 added shh API 2015-06-11 14:01:41 +02:00
Bas van Kervel
bd38428f33 cleanup of javascript API 2015-06-11 14:01:41 +02:00
Bas van Kervel
87b62f75a7 added txpool API 2015-06-11 14:01:41 +02:00
Bas van Kervel
c6c443385b changed console welcome message 2015-06-11 14:01:41 +02:00
Bas van Kervel
5f8e5a4875 upgrade web3.js with _extend support 2015-06-11 14:01:41 +02:00
Bas van Kervel
cc9ae39933 added admin API 2015-06-11 14:01:41 +02:00
Bas van Kervel
08d72a9245 added personal API 2015-06-11 14:01:41 +02:00
Bas van Kervel
09d0d55fc5 added debug API 2015-06-11 14:01:41 +02:00
Bas van Kervel
faab931ce1 only load supported api's 2015-06-11 14:01:40 +02:00
Bas van Kervel
d2a87f6f72 added net API 2015-06-11 14:01:40 +02:00
Bas van Kervel
4b9b633dfe added miner API 2015-06-11 14:01:40 +02:00
Bas van Kervel
cb7f2d43b6 added console binary 2015-06-11 14:01:40 +02:00
Bas van Kervel
8aea85e374 fixed windows build problem 2015-06-11 14:01:39 +02:00
Bas van Kervel
0a600a03ee fixed unittest build problem 2015-06-11 14:01:39 +02:00
Bas van Kervel
862117e4bd changed send methods for backwards compatability in geth console 2015-06-11 14:01:39 +02:00
Bas van Kervel
a1a475fb92 added console command 2015-06-11 14:01:39 +02:00
Bas van Kervel
2a0d888326 added API/IPC commandline flags 2015-06-11 14:01:39 +02:00
Bas van Kervel
8ebf2d8fad added RPC/IPC support 2015-06-11 14:01:39 +02:00
Bas van Kervel
2f55a1d798 restructured eth rpc API 2015-06-11 14:01:39 +02:00
Jeffrey Wilcke
6609d45ef4 Merge pull request #1228 from obscuren/vm-optimisations
core/vm: optimisations
2015-06-11 03:32:39 -07:00
Jeffrey Wilcke
13bd452faf Merge pull request #1227 from karalabe/block-fetcher-optimisations
eth: optimize the notification/explicit fetch mechanism
2015-06-11 03:31:41 -07:00
obscuren
37111aa4bd core: retry block now also parellise nonce checks 2015-06-11 12:06:05 +02:00
obscuren
f599a1b5f1 core/vm: added a comment regarding the uint64 vs *big.Int 2015-06-11 11:59:30 +02:00
obscuren
9e9bd35557 cmd/geth: Added optional debug flag for reprocess block 2015-06-11 11:44:39 +02:00
Jeffrey Wilcke
979ebfc126 Merge pull request #1224 from karalabe/report-import-progress
cmd/geth, eth/downloader: collect and report import progress too
2015-06-10 15:30:20 -07:00
Jeffrey Wilcke
8482855bc7 Merge pull request #1218 from tgerring/rpcsign
Updated RPC sign test
2015-06-10 15:11:19 -07:00
Jeffrey Wilcke
acb59f3243 Merge pull request #1223 from obscuren/tx-pool-vroooooom
core: fixed race condition in the transaction pool
2015-06-10 12:10:18 -07:00
obscuren
5cfae0536f cmd/evm: print trace when running programs 2015-06-10 21:09:12 +02:00
obscuren
e7627623b9 core/vm: reverse loop stack 2015-06-10 21:08:54 +02:00
obscuren
f94c5473ad core/vm: fixed a bug where Data ignored the stack ptr 2015-06-10 21:08:04 +02:00
obscuren
10af69b57c core, core/vm: moved logger and added gas cost to struct logging 2015-06-10 19:56:40 +02:00
Péter Szilágyi
3c1cccc801 eth/downloader: fetch the block hashes on the fly, when needed 2015-06-10 20:12:22 +03:00
Péter Szilágyi
e61db7145a eth: dedup fetches to ensure no blocks are pulled twice 2015-06-10 19:47:59 +03:00
Péter Szilágyi
355b1e3bb1 eth: randomly fetch announced block (don't hammer origin) 2015-06-10 19:47:59 +03:00
Péter Szilágyi
b9affbf9fe eth: discard fetched blocks that don't fit (no goroutine) 2015-06-10 19:47:59 +03:00
Taylor Gerring
2e0694b606 Updated test 2015-06-10 12:35:35 -04:00
obscuren
fc2a061d51 core/vm: unexported stack again. No longer required 2015-06-10 17:47:36 +02:00
obscuren
065aff9ffa core/vm: documentation and name changes 2015-06-10 17:47:36 +02:00
obscuren
4407524d13 core: fixed race condition for subscriptions 2015-06-10 17:13:32 +02:00
obscuren
29f7902fee core: fixed test 2015-06-10 17:13:32 +02:00
obscuren
65a48f9cd8 core: fixed race condition in the transaction pool
Removed `Stop/Start` mechanism from the transaction pool.
2015-06-10 17:13:32 +02:00
Péter Szilágyi
c4af70d0cc cmd/geth: round the import ETA before converting to string 2015-06-10 18:07:23 +03:00
Péter Szilágyi
271fb20ecb cmd/geth, eth/downloader: rough guess at the import eta 2015-06-10 18:01:05 +03:00
Jeffrey Wilcke
858a6f0be9 Merge pull request #1230 from fjl/p2p-discover-fix-ping-test
p2p/discover: deflake TestUDP_successfulPing
2015-06-10 07:51:48 -07:00
obscuren
f249ccaa89 cmd/evm: implements vm.Environment 2015-06-10 16:46:43 +02:00
Felix Lange
a8e4cb6dfe p2p/discover: use separate rand.Source instances in tests
rand.Source isn't safe for concurrent use.
2015-06-10 15:18:01 +02:00
obscuren
cf3aabb9d3 miner: update gas used after tx proc for pending block 2015-06-10 13:52:38 +02:00
Felix Lange
261a8077c4 p2p/discover: deflake TestUDP_successfulPing 2015-06-10 13:08:21 +02:00
obscuren
1774c49456 core: log tx count for each set of blocks we're importing 2015-06-10 12:57:58 +02:00
obscuren
6fb6e6679e core/vm, core/state: added storage to structured vm logging 2015-06-10 12:57:37 +02:00
obscuren
38c61f6f25 core, core/vm: added structure logging
This also reduces the time required spend in the VM
2015-06-10 12:23:49 +02:00
obscuren
ff5b3ef087 core/vm: added structured logging 2015-06-10 10:59:44 +02:00
obscuren
468501cb86 core/vm: changed program counter to uint64 2015-06-10 10:44:46 +02:00
Péter Szilágyi
b3d5ce7d48 cmd/geth, eth/downloader: collect and report import progress too 2015-06-10 01:20:35 +03:00
Jeffrey Wilcke
dffe6d32d6 Merge pull request #1222 from obscuren/state-vm-test-suit-fix
tests: check gas limit error
2015-06-09 14:20:41 -07:00
obscuren
6a5c9aff3b tests: check gas limit error 2015-06-09 22:49:33 +02:00
Felix Lange
e972a116ac Merge pull request #1221 from karalabe/fix-p2p-dial-test
p2p: fix a close race in the dial test
2015-06-09 22:00:49 +02:00
Péter Szilágyi
1cbbfbe7fa p2p: fix a close race in the dial test 2015-06-09 22:26:26 +03:00
obscuren
7e58949c3f cmd/geth: develop version bump 0.9.29 2015-06-09 21:14:11 +02:00
obscuren
667f5a09c3 Merge branch 'release/0.9.28' into develop 2015-06-09 21:12:44 +02:00
obscuren
bac9a94ddf Merge branch 'release/0.9.28' 2015-06-09 21:12:25 +02:00
obscuren
14994fa21b rpc: skip test if solc version doesn't match 2015-06-09 21:02:24 +02:00
obscuren
bc6031e7bb core, xeth: moved nonce management burden from xeth to txpool 2015-06-09 21:01:02 +02:00
obscuren
93f4852844 cmd/geth: bumped version number 0.9.28 2015-06-09 21:01:02 +02:00
Jeffrey Wilcke
5950755b12 Merge pull request #1220 from karalabe/fix-chain-deadlock2
core: fix a lock annoyance and potential deadlock
2015-06-09 12:00:47 -07:00
Péter Szilágyi
4541c22964 event/filter: hack around data race in the test 2015-06-09 21:33:39 +03:00
Péter Szilágyi
d652a58ada core: fix a race condition accessing the gas limit 2015-06-09 21:13:21 +03:00
Péter Szilágyi
fecf214175 core: fix a lock annoyance and potential deadlock 2015-06-09 21:02:26 +03:00
Jeffrey Wilcke
5f341e5db5 Merge pull request #1212 from fjl/p2p-eth-block-timeout
eth, p2p: improve write timeouts and behaviour under load
2015-06-09 09:51:09 -07:00
Felix Lange
73c355591f core, eth: document that result of GetTransactions is modifiable 2015-06-09 17:07:10 +02:00
Felix Lange
8dc3048f65 eth/downloader: fix hash fetch timeout handling
Fixes #1206
2015-06-09 17:07:10 +02:00
Felix Lange
3239aca69b p2p: bump global write timeout to 20s
The previous value of 5 seconds causes timeouts for legitimate messages
if large messages are sent.
2015-06-09 17:07:10 +02:00
Felix Lange
2c24a73e25 eth: add protocol tests
The protocol tests were commented out when eth/downloader was introduced.
2015-06-09 17:07:10 +02:00
Felix Lange
6c73a59806 eth: limit number of sent transactions based on message size
Nodes that are out of sync will queue many transactions, which causes
the initial transactions message to grow very large. Larger transactions
messages can make communication impossible if the message is too big to
send. Big transactions messages also exhaust egress bandwidth, which
degrades other peer connections.

The new approach to combat these issues is to send transactions in
smaller batches. This commit introduces a new goroutine that handles
delivery of all initial transaction transfers. Size-limited packs of
transactions are sent to one peer at a time, conserving precious egress
bandwidth.
2015-06-09 17:07:10 +02:00
Felix Lange
41b2008a66 eth: limit number of sent blocks based on message size
If blocks get larger, sending 256 at once can make messages large
enough to exceed the low-level write timeout.
2015-06-09 17:06:31 +02:00
Felix Lange
7aefe123e9 core/types: add Transaction.Size 2015-06-09 17:06:31 +02:00
Jeffrey Wilcke
fda49f2b52 Merge pull request #1213 from karalabe/polish-console-prettyprinter
jsre: patch up the pretty printer to have a decent look
2015-06-09 07:29:32 -07:00
Péter Szilágyi
d6f4c515f5 jsre: print function arguments too 2015-06-09 17:23:44 +03:00
Jeffrey Wilcke
c71ab2a6a3 Merge pull request #1219 from Gustav-Simonsson/precompiled_ec_recover_padding
Precompiled ec recover padding
2015-06-09 07:21:23 -07:00
Péter Szilágyi
7842559353 jsre: sort pretty print output, fields before funcs 2015-06-09 17:19:56 +03:00
Gustav Simonsson
6e3b58e491 Remove unneeded if check on EC recover padding 2015-06-09 16:03:05 +02:00
Jeffrey Wilcke
365576620a Merge pull request #1216 from karalabe/fix-eth-dataraces
Fix various data races in eth and core
2015-06-09 06:53:49 -07:00
Gustav Simonsson
15166f880b Skip BlockTests/bcValidBlockTests SimpleTx3 2015-06-09 15:53:31 +02:00
Gustav Simonsson
ad5b5a4895 Pad precompiled EC recover input and add validations 2015-06-09 15:41:15 +02:00
Gustav Simonsson
d8e55a5cc3 Skip VMTests RandomTests temporarily until they are fixed 2015-06-09 15:40:43 +02:00
Gustav Simonsson
e885a2912b Update Ethereum JSON test files 2015-06-09 15:39:24 +02:00
Péter Szilágyi
ebf2aabd25 core: fix up a deadlock caused by double locking 2015-06-09 16:26:44 +03:00
Jeffrey Wilcke
60b780c21b Merge pull request #1217 from tgerring/rpcsign
Fix RPC sign
2015-06-09 06:19:39 -07:00
obscuren
76148515fa skip sol on new compiler 2015-06-09 15:19:20 +02:00
Péter Szilágyi
ff84352fb7 p2p: fix close data race 2015-06-09 16:12:24 +03:00
Jeffrey Wilcke
f371e6c81a Merge pull request #1156 from tgerring/issue1145
Differentiate between 0 and unspecified gas/gasprice
2015-06-09 05:49:55 -07:00
Taylor Gerring
046411866b Fixed signing + tests 2015-06-09 08:47:20 -04:00
Péter Szilágyi
ca8cb65b73 core: fix data race accessing ChainManager.currentBlock 2015-06-09 15:30:46 +03:00
Péter Szilágyi
07baf66200 core: fix data race in accessing ChainManager.td 2015-06-09 15:23:20 +03:00
Taylor Gerring
1a96798642 gas -> gasprice 2015-06-09 08:13:26 -04:00
Taylor Gerring
1c364b6beb gas -> gasprice 2015-06-09 08:13:25 -04:00
Taylor Gerring
c8a9a4e76d Differentiate between 0 and unspecified gas/gasprice 2015-06-09 08:13:25 -04:00
Péter Szilágyi
d09ead546c eth: fix a data race in the hash announcement processing 2015-06-09 15:09:15 +03:00
Péter Szilágyi
f86707713c eth: fix data race accessing peer.td 2015-06-09 14:56:27 +03:00
Jeffrey Wilcke
3054fd4811 Merge pull request #1215 from obscuren/issue1202
core: skip genesis block for reprocess. Closes #1202
2015-06-09 04:46:13 -07:00
obscuren
7da8ebdfd0 Fixed readme links and description 2015-06-09 13:45:35 +02:00
Péter Szilágyi
44147d057d eth: fix data race accessing peer.recentHash 2015-06-09 14:27:44 +03:00
obscuren
190c1b688a core: skip genesis block for reprocess. Closes #1202 2015-06-09 13:24:32 +02:00
Jeffrey Wilcke
05cae69d72 Merge pull request #1188 from karalabe/newblockhashes-proposal
eth: implement the NewBlockHashes protocol proposal
2015-06-09 04:07:46 -07:00
Jeffrey Wilcke
087949227c Merge pull request #1153 from karalabe/downloader-banned-starvation-attack
eth/downloader: gather and ban hashes from invalid chains
2015-06-09 03:45:41 -07:00
Péter Szilágyi
3f4ce70d92 jsre: fix wrong separator comma placing due to non consistent field orders 2015-06-09 13:27:45 +03:00
Jeffrey Wilcke
11f65cf885 Merge pull request #1211 from obscuren/genesis_writout_fix
core: write accounts to statedb. Closes #1210
2015-06-09 02:55:47 -07:00
obscuren
a5b977aa90 core: write accounts to statedb. Closes #1210 2015-06-09 11:37:01 +02:00
Jeffrey Wilcke
0f1cdfa53a Merge pull request #1193 from tgerring/hotbackup
Improve export command
2015-06-08 16:32:38 -07:00
Jeffrey Wilcke
81ceac1b96 Merge pull request #1209 from obscuren/txpool_test_and_pending_fix
core: added a test for missing nonces
2015-06-08 16:04:30 -07:00
obscuren
5245bd7b20 core: added a test for missing nonces
This test showed the logic in the queue was slightly flawed sending out
transactions to its peer it couldn't even resolve itself.
2015-06-09 00:41:47 +02:00
Péter Szilágyi
8216bb901c eth: clean up pending announce download map, polish logs 2015-06-09 00:37:10 +03:00
Jeffrey Wilcke
55b7c14554 Merge pull request #1199 from obscuren/settable_genesis_nonce
core: settable genesis nonce
2015-06-08 13:43:41 -07:00
Jeffrey Wilcke
75522f95ce Merge pull request #1204 from carver/deep-log-crashfix
crash fix: skip deep log if self.chain is not caught up
2015-06-08 13:35:11 -07:00
Jason Carver
a9c058dfe0 crash fix: skip deep log if self.chain is not caught up
@see trace https://gist.github.com/eupraxic/87fdfefe702c51d5944d
2015-06-08 11:49:59 -07:00
Péter Szilágyi
9ed166c196 eth: split and handle explicitly vs. download requested blocks 2015-06-08 20:38:39 +03:00
Taylor Gerring
44e5ff7d15 Fix blocktest 2015-06-08 12:55:15 -04:00
obscuren
6244b10a8f core: settable genesis nonce
You can set the nonce of the block with `--genesisnonce`. When the
genesis nonce changes and it doesn't match with the first block in your
database it will fail. A new `datadir` must be given if the nonce of the
genesis block changes.
2015-06-08 18:33:43 +02:00
Péter Szilágyi
fdccce781e eth: fetch announced hashes from origin, periodically 2015-06-08 19:24:56 +03:00
Péter Szilágyi
8c012e103f eth: mark blocks as known when broadcasting hashes too 2015-06-08 18:44:02 +03:00
Péter Szilágyi
6f415b96b3 eth: implement the NewBlockHashes protocol proposal 2015-06-08 18:44:02 +03:00
Péter Szilágyi
4ed3509a02 eth/downloader: test registration rejection on head ban 2015-06-08 15:02:52 +03:00
Péter Szilágyi
c4f224932f eth/downloader: reject peer registration if head is banned 2015-06-08 14:46:31 +03:00
Péter Szilágyi
63c6cedb14 eth/downloader: cap the hash ban set, add test for it 2015-06-08 14:12:00 +03:00
Péter Szilágyi
4b2dd44711 eth/downloader: fix throttling test to be less timing dependent 2015-06-08 13:23:58 +03:00
Péter Szilágyi
2d627995cf eth/downloader: fix another rebase error 2015-06-08 13:23:58 +03:00
Péter Szilágyi
b40c796ff7 eth/downloader: preallocate the block cache 2015-06-08 13:23:58 +03:00
Péter Szilágyi
1d7bf3d39f eth/downloader: fix merge compile error 2015-06-08 13:23:58 +03:00
Péter Szilágyi
6d497f61c6 eth/downloader: don't block hash deliveries while pulling blocks 2015-06-08 13:23:58 +03:00
Péter Szilágyi
9da0232eef eth/downloader: update test for shitty travis 2015-06-08 13:23:58 +03:00
Péter Szilágyi
0275fcb3d3 eth/downloader: clean up and simplify the code a bit 2015-06-08 13:23:58 +03:00
Péter Szilágyi
abdfcda4dd eth/downloader: short circuit sync if head hash is banned 2015-06-08 13:23:58 +03:00
Péter Szilágyi
84bc93d8cb eth/downloader: accumulating hash bans for reconnecting attackers 2015-06-08 13:23:58 +03:00
Péter Szilágyi
eedb25b22a eth/downloader: clean up tests and unused variables 2015-06-08 13:23:57 +03:00
Jeffrey Wilcke
c6faa18ec9 Merge pull request #1198 from fjl/core-fix-nonce-check
core: fix nonce verification one more time
2015-06-08 01:31:34 -07:00
Felix Lange
6c27e2aaf6 core: add bad block for the 'missing nonce check' fork 2015-06-08 02:54:10 +02:00
Felix Lange
0b493910d3 core: fix the nonce check one more time
The block nonce verification was effectively disabled by a typo.
This time, there is an actual test for it.
2015-06-08 02:19:39 +02:00
Taylor Gerring
4ab0cedf42 Export should start with block 0 2015-06-06 10:59:56 -04:00
Taylor Gerring
2729e6294a Improved error checking 2015-06-06 10:04:13 -04:00
Taylor Gerring
ed621aae33 Cleanup 2015-06-06 09:50:23 -04:00
Jeffrey Wilcke
e822f440b0 added ARM builds 2015-06-06 14:33:08 +02:00
Taylor Gerring
d65b64c884 Allow export command to take first and last args 2015-06-06 00:02:32 -04:00
Taylor Gerring
89c9320d80 Allow exporting subset of chain 2015-06-05 23:01:54 -04:00
obscuren
43ceb0f5c7 cmd/geth: version bump 0.9.27 2015-06-05 17:36:42 +02:00
obscuren
7ab87f9f6e wip 2015-06-05 17:33:30 +02:00
Jeffrey Wilcke
b94a76d17e Merge pull request #1189 from karalabe/downloader-polishes
eth/downloader: handle timeouts more gracefully
2015-06-05 08:31:57 -07:00
Jeffrey Wilcke
8c28126984 Merge pull request #1100 from karalabe/drop-sync-peer-on-empty-hash
eth, eth/downloader: fix #1098, elevate empty hash errors to peer drops
2015-06-05 08:28:08 -07:00
Péter Szilágyi
94e525ae12 eth, eth/downloader: fix #1098, elevate empty hash errors to peer drops 2015-06-05 12:52:48 +03:00
Péter Szilágyi
328ef60b85 eth/downloader: differentiate stale and nonexistent deliveries 2015-06-05 12:37:48 +03:00
Péter Szilágyi
94e4aa6ea9 eth/downloader: log hard timeouts and reset capacity 2015-06-05 11:53:46 +03:00
Jeffrey Wilcke
067e66b348 Merge pull request #1185 from fjl/p2p-nat-timeouts
p2p/nat: request timeouts for UPnP discovery
2015-06-04 15:55:39 -07:00
Felix Lange
fc6a5ae3ec p2p/nat: add timeout for UPnP SOAP requests 2015-06-04 22:25:43 +02:00
Felix Lange
6a831ca015 Godeps: update github.com/huin/goupnp to 5cff77a69fb22f5
This includes a fix adding a timeout to router discovery requests.
2015-06-04 22:25:43 +02:00
Jeffrey Wilcke
8b4605c336 Merge pull request #1186 from obscuren/log_fixes
tests: log coalescing fixes
2015-06-04 10:49:00 -07:00
obscuren
246db4250b tests: use state logs instead own kept logs 2015-06-04 19:48:23 +02:00
Jeffrey Wilcke
45152dead5 Merge pull request #1181 from obscuren/txpool_fixes
cmd: transaction pool fixes and improvements
2015-06-04 10:47:23 -07:00
Jeffrey Wilcke
10fc733767 Merge pull request #1184 from karalabe/nonstop-block-fetches
eth/downloader: fix #1178, don't request blocks beyond the cache bounds
2015-06-04 10:42:34 -07:00
obscuren
912cf7ba04 core: added fork test & double nonce test 2015-06-04 19:28:39 +02:00
obscuren
0f51ee6c88 crypto: return common.Address rather than raw bytes 2015-06-04 19:28:39 +02:00
obscuren
dcdb4554d7 core: documented changes in tx pool 2015-06-04 16:19:22 +02:00
obscuren
cf5ad266f6 core: only change the nonce if the account nonce is lower 2015-06-04 15:44:42 +02:00
Péter Szilágyi
d754c25cc8 eth/downloader: drop log entry from peer, it's covered already 2015-06-04 16:22:55 +03:00
Péter Szilágyi
24cca2f18d eth/downloader: log after state updates, easier to debug 2015-06-04 15:10:43 +03:00
Péter Szilágyi
28c32d1b1b eth/downloader: fix #1178, don't request blocks beyond the cache bounds 2015-06-04 14:51:14 +03:00
obscuren
2bb0e48a7b skipped failing natspec tests 2015-06-04 13:17:47 +02:00
obscuren
9dd12a64a7 core: renamed txs to pending 2015-06-04 13:16:31 +02:00
obscuren
9b27fb91c0 cmd/geth, common/natspec: updating tests (still failing?) 2015-06-04 11:41:20 +02:00
obscuren
36c0db2ac9 xeth: use the correct nonce for creating transactions 2015-06-04 11:35:37 +02:00
obscuren
140d883901 core: test updates 2015-06-03 22:53:33 +02:00
obscuren
d09a6e5421 core, eth, miner: moved nonce management to tx pool.
Removed the managed tx state from the chain manager to the transaction
pool where it's much easier to keep track of nonces (and manage them).
The transaction pool now also uses the queue and pending txs differently
where queued txs are now moved over to the pending queue (i.e. txs ready
for processing and propagation).
2015-06-03 22:43:23 +02:00
Felix Lange
5197aed7db cmd/utils, eth: core.NewBlockProcessor no longer needs TxPool 2015-06-03 22:43:23 +02:00
Felix Lange
ec7a2c3442 core: don't remove transactions after block processing
The transaction pool drops processed transactions on its own
during pool maintenance.
2015-06-03 22:43:23 +02:00
Felix Lange
5721c43585 core: update documentation comments for TxPool 2015-06-03 22:43:23 +02:00
Felix Lange
ca31d71107 core: remove unused code from TxPool 2015-06-03 22:43:23 +02:00
Felix Lange
08befff8f1 core: compute less transaction hashes in TxPool 2015-06-03 22:43:23 +02:00
obscuren
770a0e7839 wip 2015-06-03 22:39:17 +02:00
obscuren
b26f5e0bb7 types: block json unmarshal method added 2015-06-03 22:39:17 +02:00
obscuren
fa4aefee44 core/vm: cleanup and renames 2015-06-03 22:39:17 +02:00
Jeffrey Wilcke
8610314918 Merge pull request #1167 from Gustav-Simonsson/check_ec_recover_err
Add missing err checks on From()
2015-06-03 10:29:47 -07:00
Jeffrey Wilcke
71d9367edc Merge pull request #1151 from fjl/parallel-nonce-2
core: re-add parallel nonce checks
2015-06-03 09:12:06 -07:00
Jeffrey Wilcke
122d2db095 Merge pull request #1150 from fjl/fix-jumpdest
core/vm: improve JUMPDEST analysis
2015-06-03 09:11:56 -07:00
Jeffrey Wilcke
0cd72369f7 Merge pull request #1176 from karalabe/congestion-control
eth/downloader: add a basic block download congestion control
2015-06-03 08:24:52 -07:00
Jeffrey Wilcke
02f785af70 Merge pull request #1166 from Gustav-Simonsson/add_ec_sig_validations
Add EC signature validations before call to libsecp256k1
2015-06-03 08:11:24 -07:00
Felix Lange
c9ed9d253a tests/files: update tests to d309b4679a58d2 2015-06-03 16:25:06 +02:00
Felix Lange
48fb0c3213 core/vm: check for 'no code' before doing any work 2015-06-03 16:25:06 +02:00
Felix Lange
ea2718c946 core/vm: improve JUMPDEST analysis
* JUMPDEST analysis is faster because less type conversions are performed.
* The map of JUMPDEST locations is now created lazily at the first JUMP.
* The result of the analysis is kept around for recursive invocations
  through CALL/CALLCODE.

Fixes #1147
2015-06-03 16:25:05 +02:00
Gustav Simonsson
edbd902a1b Initialise curve N value in package init 2015-06-03 14:44:29 +02:00
Péter Szilágyi
3ec159ab6b eth/downloader: demote peers if they exceed the soft limits at 1 blocks already 2015-06-03 15:43:12 +03:00
Péter Szilágyi
c9a546c310 eth/downloader: add a basic block download congestion control 2015-06-03 14:40:11 +03:00
Jeffrey Wilcke
827bccb64b Merge pull request #1175 from karalabe/keccak-update
crypto/sha3: pull in latest keccak from go crypto (45% speed increase)
2015-06-03 04:13:31 -07:00
Péter Szilágyi
14e7192d9c crypto/sha3: pull in latest keccak from go crypto (45% speed increase) 2015-06-03 12:00:39 +03:00
Jeffrey Wilcke
9085b10508 Merge pull request #1169 from Gustav-Simonsson/unsupport_bruncles
Unsupport bruncles
2015-06-03 01:20:59 -07:00
Gustav Simonsson
0fa9d2431f Add new 0th gen uncle test 2015-06-02 14:47:23 +02:00
Gustav Simonsson
8a76b45253 Use older version of stSpecialTest until JUMPDEST fix is merged 2015-06-02 12:25:43 +02:00
Gustav Simonsson
8962af2e42 Update Ethereum JSON test files 2015-06-02 12:15:25 +02:00
Gustav Simonsson
55bf5051ad Unsupport bruncles 2015-06-01 22:43:05 +02:00
Gustav Simonsson
5a692ba4f6 Update Ethereum JSON test files 2015-06-01 22:34:44 +02:00
Gustav Simonsson
147a699c65 Add missing err checks on From() (skip RPC for now) 2015-06-01 22:12:03 +02:00
Gustav Simonsson
32e1b104f8 Add EC signature validations before call to libsecp256k1 2015-06-01 21:06:52 +02:00
Felix Lange
55b60e699b core: insert less length zero chains
This reduces the amount of queueEvents that are sent internally.
2015-06-01 12:48:12 +02:00
Felix Lange
e7e2cbfc01 core: re-add parallel nonce checks
In this incancation, the processor waits until the nonce
has been verified before handling the block.
2015-06-01 12:47:13 +02:00
Felix Lange
5b14fdb94b Merge pull request #1161 from tgerring/bootnode
Updated SA boot node
2015-06-01 09:51:24 +02:00
Taylor Gerring
057d36b049 Update bootnode 2015-05-31 13:48:27 -05:00
Felix Lange
a906a84950 Merge pull request #1155 from karalabe/fix-chainmanager-datarace
core: fix #1154, sort out data race accessing the future blocks
2015-05-30 01:21:09 +02:00
Péter Szilágyi
b7fc85d68e core: fix #1154, sort out data race accessing the future blocks 2015-05-29 23:46:10 +03:00
Gustav Simonsson
b4818a003a Update Ethereum JSON test files 2015-05-29 13:12:54 +02:00
obscuren
0e703d92ac Merge branch 'release/0.9.26' 2015-05-28 18:21:14 +02:00
obscuren
12b90600eb core: moved guards 2015-05-28 18:18:23 +02:00
obscuren
2587b0ea62 Merge branch 'release/0.9.26' into develop 2015-05-28 18:01:54 +02:00
obscuren
f082c1b895 Merge branch 'release/0.9.26' 2015-05-28 18:01:40 +02:00
obscuren
d51d74eb55 cmd/geth: bump version v0.9.26 2015-05-28 17:43:05 +02:00
obscuren
35806ccc1c build server fix 2015-05-28 17:18:13 +02:00
Jeffrey Wilcke
b25e8b7079 Merge pull request #1142 from obscuren/100-pct-block-prop
eth: 100% block propogation
2015-05-28 08:07:11 -07:00
obscuren
e5d7627427 eth: 100% block propogation 2015-05-28 17:01:44 +02:00
Jeffrey Wilcke
a225ef9c13 Merge pull request #1140 from Gustav-Simonsson/fix_account_unlock_logging
Validate account length and avoid slicing in logging
2015-05-28 07:39:13 -07:00
Jeffrey Wilcke
b6e137b2b4 Merge pull request #1141 from obscuren/parallelisation-issue
Parallelisation issue
2015-05-28 07:37:37 -07:00
Jeffrey Wilcke
03178a77b6 Merge pull request #1132 from obscuren/log_optimisations
core: log optimisations
2015-05-28 07:35:07 -07:00
obscuren
16038b4e67 core: added bad block 2015-05-28 16:26:19 +02:00
obscuren
109f995684 core: log block hash during nonce error 2015-05-28 15:46:36 +02:00
obscuren
75f5ae80fd core: partially removed nonce parallelisation and added merge error chk
Invalid forks are now detected

Current setup of parellelisation actually inserts bad blocks. This fix
is tmp until a better one is found
2015-05-28 15:35:50 +02:00
Gustav Simonsson
9138955ba5 Validate account length and avoid slicing in logging 2015-05-28 15:20:05 +02:00
Jeffrey Wilcke
4baa5ca963 Merge pull request #1137 from obscuren/web3_update
cmd/geth: updated web3
2015-05-28 04:40:14 -07:00
obscuren
598e454d46 cmd/geth: updated web3 2015-05-28 13:24:09 +02:00
Jeffrey Wilcke
9f467c387a Merge pull request #1123 from fjl/lean-blockchain-commands
cmd/geth: leaner blockchain commands
2015-05-28 04:17:47 -07:00
Jeffrey Wilcke
8add3bb009 Merge pull request #1135 from karalabe/tempban-invalid-hashes
core, eth/downloader: expose the bad hashes, check in downloader
2015-05-28 04:13:08 -07:00
Péter Szilágyi
29b0480cfb core, eth/downloader: expose the bad hashes, check in downloader 2015-05-28 14:03:10 +03:00
Felix Lange
e84bbcce3c cmd/geth: don't flush databases after import 2015-05-28 01:20:58 +02:00
Felix Lange
e1fe75e3b6 cmd/utils: use constant for import batch size 2015-05-28 01:20:58 +02:00
Felix Lange
a8bc2181c9 cmd/utils: skip batches with known blocks during import
This makes block importing restartable.
2015-05-28 01:20:58 +02:00
Felix Lange
67effb94b6 cmd/geth, cmd/utils: make chain importing interruptible
Interrupting import with Ctrl-C could cause database corruption
because the signal wasn't handled. utils.ImportChain now checks
for a queued interrupt on every batch.
2015-05-28 01:09:26 +02:00
Felix Lange
705beb4c25 cmd/utils: print errors only once if stdout and stderr are the same file 2015-05-28 01:09:26 +02:00
Felix Lange
74706a0f02 cmd/geth, cmd/utils: rename utils.Get* -> utils.Make*
The renaming should make it clearer that these functions create a new
instance for every call. @obscuren suggested this renaming a while ago.
2015-05-28 01:09:26 +02:00
Felix Lange
8e4512a5e7 p2p/nat: bump timeout in TestAutoDiscRace 2015-05-28 01:09:26 +02:00
Felix Lange
651030c98d cmd/geth: move blockchain commands to chaincmd.go 2015-05-28 01:09:26 +02:00
Felix Lange
62671c93c4 cmd/mist: use utils.SetupLogger 2015-05-28 01:09:26 +02:00
Felix Lange
3b9808f23c cmd/geth, cmd/utils: don't use Ethereum for import, export and upgradedb
The blockchain commands don't need the full stack. With this change,
p2p, miner, downloader, etc are no longer started for blockchain
operations.
2015-05-28 01:09:26 +02:00
obscuren
e3253b5d5e core: fixed an issue with storing receipts 2015-05-28 01:00:23 +02:00
Jeffrey Wilcke
27e0d2a973 Merge pull request #1128 from karalabe/hard-disconnect-trial
eth: hard disconnect if a peer is flaky
2015-05-27 15:28:39 -07:00
Jeffrey Wilcke
5479be9f64 Merge pull request #1129 from obscuren/database_cache_removal
ethdb, common: cache removal
2015-05-27 10:00:08 -07:00
Jeffrey Wilcke
903b95fffa Merge pull request #1124 from karalabe/detaied-download-progress
cmd/geth: expand admin.progress() to something meaningful
2015-05-27 09:05:46 -07:00
obscuren
020006a8ed common, ethdb: removed caching and LastTD 2015-05-27 18:03:16 +02:00
Péter Szilágyi
5235e01b8d eth: hard disconnect if a peer is flaky 2015-05-27 18:58:51 +03:00
obscuren
7595716816 core: adjust gas calculation 2015-05-27 17:01:28 +02:00
Péter Szilágyi
3f91ee4ff8 cmd/geth: expand admin.progress() to something meaningful 2015-05-27 16:46:46 +03:00
Jeffrey Wilcke
8951a03db3 Merge pull request #1121 from obscuren/miner_time_fix
Miner time fix
2015-05-27 04:51:42 -07:00
Jeffrey Wilcke
e13f413ef5 Merge pull request #1112 from fjl/fix-console-exit
cmd/geth: exit the console cleanly when interrupted
2015-05-27 04:40:29 -07:00
Jeffrey Wilcke
69f7a1da5a Merge pull request #1122 from Gustav-Simonsson/improve_validate_header_comments
Update ValidateHeader comments
2015-05-27 04:34:34 -07:00
obscuren
912ae80350 miner: Added 5 blocks wait in prep for #1067 2015-05-27 13:33:52 +02:00
obscuren
12650e16d3 core, miner: fixed miner time issue and removed future blocks
* Miner should no longer generate blocks with a time stamp less or equal
than it's parent.
* Future blocks are no longer processed and queued directly.
  Closes #1118
2015-05-27 13:30:52 +02:00
Jeffrey Wilcke
34729c365b Merge pull request #1067 from carver/deep-mining-log
miner: log locally mined blocks after they are 5-deep in the chain
2015-05-27 04:30:31 -07:00
Gustav Simonsson
bf5f0b1d0c Update ValidateHeader comments 2015-05-27 13:30:24 +02:00
Jeffrey Wilcke
4b29e5ba85 Merge pull request #1120 from Gustav-Simonsson/revert_gas_limit_change
Revert "core: block.gasLimit - parent.gasLimit <= parent.gasLimit / G…
2015-05-27 04:23:55 -07:00
Gustav Simonsson
14955bd454 Revert "core: block.gasLimit - parent.gasLimit <= parent.gasLimit / GasLimitBoundDivisor"
This reverts commit be2b0501b5.
2015-05-27 13:01:06 +02:00
Jason Carver
de12183d38 deep-mining-log: need ring buffer to be one bigger for all-blocks-mined case 2015-05-26 18:55:52 -07:00
Jason Carver
6019f1bb0a deep-mining-log: only track non-stale blocks
if you track stale blocks, then you quickly overflow your ring buffer in the local network case where you're mining every block and generating a lot of stales.
2015-05-26 18:54:56 -07:00
obscuren
f5ce848cfe Merge branch 'release/0.9.25' into develop 2015-05-27 02:07:13 +02:00
obscuren
70867904a0 Merge branch 'release/0.9.25' 2015-05-27 02:07:03 +02:00
obscuren
2c532a7255 cmd/geth: bump version 0.9.25 2015-05-27 02:06:52 +02:00
Jeffrey Wilcke
aada35af9b Merge pull request #1114 from obscuren/develop
core: block.gasLimit - parent.gasLimit <= parent.gasLimit / GasLimitB…
2015-05-26 17:04:42 -07:00
obscuren
be2b0501b5 core: block.gasLimit - parent.gasLimit <= parent.gasLimit / GasLimitBoundDivisor 2015-05-27 01:52:03 +02:00
Jeffrey Wilcke
3590591e67 Merge pull request #1113 from obscuren/develop
core: block database version update
2015-05-26 16:47:10 -07:00
obscuren
222249e622 cmd/geth: Flush instead of close. This solves a nil ptr error 2015-05-27 01:38:41 +02:00
obscuren
b2f2806055 cmd/geth, core: Updated DB version & seedhash debug method 2015-05-27 01:38:41 +02:00
Felix Lange
9253fc337e cmd/geth: exit the console cleanly when interrupted
This fix applies mostly to unsupported terminals that do not trigger the
special interrupt handling in liner. Supported terminals were covered
because liner.Prompt returns an error if Ctrl-C is pressed.
2015-05-27 00:54:48 +02:00
Péter Szilágyi
612f01400f p2p/discover: bond with seed nodes too (runs only if findnode failed) 2015-05-26 23:30:41 +02:00
Péter Szilágyi
3630432dfb p2p/discovery: fix a cornercase loop if no seeds or bootnodes are known 2015-05-26 23:30:40 +02:00
Péter Szilágyi
f539ed1e66 p2p/discover: force refresh if the table is empty 2015-05-26 23:30:40 +02:00
Péter Szilágyi
5076170f34 p2p/discover: permit temporary bond failures for previously known nodes 2015-05-26 23:30:40 +02:00
Péter Szilágyi
6078aa08eb p2p/discover: watch find failures, evacuate on too many, rebond if failed 2015-05-26 23:30:40 +02:00
Péter Szilágyi
64174f196f p2p/discover: add support for counting findnode failures 2015-05-26 23:30:40 +02:00
Felix Lange
6a674ffea5 Merge pull request #1108 from karalabe/fine-seeding
Fine tune seeder and p2p peer handling
2015-05-26 22:03:11 +02:00
Jeffrey Wilcke
b1f7b5d1f6 Merge pull request #1111 from obscuren/neg_tx_check
core: check negative value transactions. Closes #1109
2015-05-26 11:45:23 -07:00
obscuren
c37389f19c core: check negative value transactions. Closes #1109 2015-05-26 20:38:26 +02:00
Jeffrey Wilcke
a55f408c10 Merge pull request #1090 from fjl/jsre-fixes
jsre: fixes for concurrent use, improved timer handling
2015-05-26 11:06:54 -07:00
Jeffrey Wilcke
39b1fe8e44 Merge pull request #1086 from debris/solidity_std
common/compiler: compile solidity contracts with std library
2015-05-26 10:58:09 -07:00
Jeffrey Wilcke
365eea9fba Merge pull request #1106 from karalabe/silence-useless-downloader-log
eth/downloader: silence "Added N blocks from..." if N == 0
2015-05-26 09:45:44 -07:00
Péter Szilágyi
4de8213887 cmd/geth: fix js console test for p2p server update 2015-05-26 19:35:31 +03:00
Péter Szilágyi
68898a4d6b p2p: fix Self() panic if listening is disabled 2015-05-26 19:16:05 +03:00
Péter Szilágyi
e1a0ee8fc5 cmd/geth, cmd/utils, eth, p2p: pass and honor a no discovery flag 2015-05-26 19:07:24 +03:00
Péter Szilágyi
278183c7e7 eth, p2p: start the p2p server even if maxpeers == 0 2015-05-26 17:49:37 +03:00
obscuren
ceea1a7051 Merge branch 'develop' 2015-05-26 15:35:57 +02:00
obscuren
eae0927597 core: prevent crash when last block fails 2015-05-26 15:35:51 +02:00
Péter Szilágyi
3083ec5e32 eth/downloader: silence "Added N blocks from..." if N == 0 2015-05-26 16:10:28 +03:00
obscuren
2f2dd80e48 Merge branch 'develop' 2015-05-26 14:51:41 +02:00
obscuren
d74ee40c86 cmd/geth: bumped version to 0.9.24 2015-05-26 14:51:28 +02:00
obscuren
e6b143b00d Merge branch 'develop' 2015-05-26 14:50:37 +02:00
obscuren
3386ecb59a Merge branch 'release/0.9.24' into develop 2015-05-26 14:49:06 +02:00
obscuren
52b4e51366 Merge branch 'release/0.9.24' 2015-05-26 14:48:39 +02:00
obscuren
0a85260bcd cmd/geth: bumped version to 0.9.24 2015-05-26 14:08:51 +02:00
Jeffrey Wilcke
245f30c59b Merge pull request #1014 from fjl/p2p-dialer-3000
p2p: new dialer, peer management without locks
2015-05-26 05:06:00 -07:00
Jeffrey Wilcke
fd38ea4149 Merge pull request #1099 from obscuren/fork_fix
Fork fix
2015-05-26 04:50:04 -07:00
obscuren
6c2f6f5b03 tests: removed missing block test 2015-05-26 13:48:10 +02:00
obscuren
a6b46420d0 core: ban hash 38f5bb...a714bc
Hash 38f5bbbffd74804820ffa4bab0cd540e9de229725afb98c1a7e57936f4a714bc
ignored.
2015-05-26 13:48:10 +02:00
obscuren
f6f81169fe core/vm: Fork fix. Removal of appending 0 bytes in memset 2015-05-26 13:48:10 +02:00
obscuren
03faccfb08 tests: updated 2015-05-26 13:48:10 +02:00
Jeffrey Wilcke
0de13b0bba Merge pull request #1102 from karalabe/maintain-block-origins
eth, eth/downloader: surface downloaded block origin, drop on error
2015-05-26 04:31:29 -07:00
Péter Szilágyi
eafdc1f8e3 eth, eth/downloader: surface downloaded block origin, drop on error 2015-05-26 14:00:21 +03:00
Jeffrey Wilcke
5044eb4b26 Merge pull request #1101 from obscuren/issue-1096
core/vm: Cleanups & SUB output fix. Closes #1096
2015-05-26 03:50:27 -07:00
obscuren
b419e2631a core/vm: Cleanups & SUB output fix. Closes #1096 2015-05-26 12:42:33 +02:00
Felix Lange
cc318ff8db Merge pull request #1078 from carver/patch-1
eth: expand acronym in log message from TD
2015-05-25 02:49:53 +02:00
Felix Lange
e221a449e0 cmd/geth, jsre, rpc: run all JS code on the event loop
Some JSRE methods (PrettyPrint, ToVal) bypassed the event loop. All
calls to the JS VM are now wrapped. In order to make this somewhat more
foolproof, the otto VM is now a local variable inside the event loop.
2015-05-25 02:27:37 +02:00
Felix Lange
9e1fd70b50 p2p: decrease frameReadTimeout to 30s
This detects hanging connections sooner. We send a ping every 15s and
other implementation have similar limits.
2015-05-25 01:17:14 +02:00
Felix Lange
1440f9a37a p2p: new dialer, peer management without locks
The most visible change is event-based dialing, which should be an
improvement over the timer-based system that we have at the moment.
The dialer gets a chance to compute new tasks whenever peers change or
dials complete. This is better than checking peers on a timer because
dials happen faster. The dialer can now make more precise decisions
about whom to dial based on the peer set and we can test those
decisions without actually opening any sockets.

Peer management is easier to test because the tests can inject
connections at checkpoints (after enc handshake, after protocol
handshake).

Most of the handshake stuff is now part of the RLPx code. It could be
exported or move to its own package because it is no longer entangled
with Server logic.
2015-05-25 01:17:14 +02:00
Felix Lange
9f38ef5d97 p2p/discover: add ReadRandomNodes 2015-05-25 01:17:14 +02:00
Felix Lange
64564da20b p2p: decrease maximum message size for devp2p to 1kB
The previous limit was 10MB which is unacceptable for all kinds
of reasons, the most important one being that we don't want to
allow the remote side to make us allocate 10MB at handshake time.
2015-05-25 01:17:14 +02:00
Felix Lange
7b93341836 Godeps: add github.com/davecgh/go-spew 2015-05-25 01:17:14 +02:00
Felix Lange
dbdc5fd4b3 p2p: delete Server.Broadcast 2015-05-25 01:17:14 +02:00
Felix Lange
2f249fea44 eth: stop p2p.Server on shutdown 2015-05-25 01:17:14 +02:00
Felix Lange
394826f520 Merge pull request #1066 from karalabe/peer-db-polishes
p2p/discover: evacuate self from node database during iterations
2015-05-25 01:16:23 +02:00
Marek Kotewicz
c31f8e2bd7 compile solidity contracts with std library 2015-05-24 19:12:18 +02:00
Jason Carver
f1ce5877ba do not export ring buffer struct 2015-05-23 12:09:59 -07:00
Jason Carver
8a7fb5fd34 do not export constant for when to log a deep block you mined 2015-05-23 12:09:52 -07:00
Jason Carver
97433f5ef1 expand acronym in log message from TD
to total difficulty
2015-05-22 19:12:59 -07:00
Jason Carver
ba295ec6fe Log locally mined blocks, after they are 5-deep in the chain
This helps determine which blocks are unlikely to end up as uncles

 * Store the 5 most recent locally mined block numbers
 * On every imported block, check if the 5-deep block num is in that store
 * Also confirm that the block is signed with miner's coinbase

Why not just check the coinbase? This log is useful if you're running
multiple miners and want to know if *this* miner is performing well.
2015-05-22 12:53:32 -07:00
Jeffrey Wilcke
b2b9b3b567 Merge pull request #1077 from obscuren/disasm
core/vm, rpc: added disasm to `ext_` RPC
2015-05-22 06:51:38 -07:00
obscuren
7381be8edb core/vm, rpc: added disasm to ext_ RPC 2015-05-22 15:38:46 +02:00
Jeffrey Wilcke
f7415c0bbc Merge pull request #1076 from obscuren/rpc_sign
core: added RPC sign back in
2015-05-22 04:08:51 -07:00
obscuren
6539ccae7c core: added RPC sign back in 2015-05-22 13:00:04 +02:00
Jeffrey Wilcke
01ddaf5670 Merge pull request #1072 from Gustav-Simonsson/add_random_tests
Add StateTests/RandomTests and VMTests/RandomTests
2015-05-22 02:34:48 -07:00
Jeffrey Wilcke
f5e112ae5a Merge pull request #1074 from bas-vk/issue1068
make registrar available in console
2015-05-22 02:22:49 -07:00
Bas van Kervel
821b578f7e make registrar available in console 2015-05-22 09:13:45 +02:00
Gustav Simonsson
6ad817e17b Add StateTests/RandomTests and VMTests/RandomTests 2015-05-21 23:04:46 +02:00
obscuren
13e662f6de Merge branch 'develop' 2015-05-21 19:53:35 +02:00
obscuren
054abe20b8 miner: moved break INSIDE the switch ... 2015-05-21 19:53:27 +02:00
obscuren
8c25a83708 Merge branch 'release/0.9.23' into develop 2015-05-21 18:59:26 +02:00
obscuren
2c1c78a6d9 Merge branch 'release/0.9.23' 2015-05-21 18:58:57 +02:00
Péter Szilágyi
cbd3ae6906 p2p/discover: fix #838, evacuate self entries from the node db 2015-05-21 19:41:46 +03:00
Péter Szilágyi
af24c271c7 p2p/discover: fix database presistency test folder 2015-05-21 19:28:10 +03:00
obscuren
3ea9868b65 miner: on downloader.Done/Fail stop immediately. Ignore pending evs 2015-05-21 18:14:32 +02:00
obscuren
4600ecb5c7 cmd/geth: bump version 0.9.23 2015-05-21 18:02:15 +02:00
Jeffrey Wilcke
f1cc3619f5 Merge pull request #1055 from ethersphere/autodag
automatic DAG pregeneration for smooth epoch transitions
2015-05-21 09:01:57 -07:00
Jeffrey Wilcke
af28736bd0 Merge pull request #1064 from karalabe/downloader-attacks
Fix two additional download vulnerabilities
2015-05-21 09:00:12 -07:00
Péter Szilágyi
06a041589f eth, eth/downloader: remove duplicate consts, bump hash fetch to 2K 2015-05-21 18:16:04 +03:00
zelig
bed80133e0 automatic DAG pregeneration for smooth epoch transitions
- backend: AutoDAG bool flag passed from cli/eth.Config to ethereum, autoDAG loop started if true
- backend: autoDAG loop start/stop, remove previous DAG
- cli: AutoDAG bool flag, off by default, but automatically ON if mining
- admin jsre: add startAutoDAG stopAutoDAG and makeDAG in miner section
- switch on/off DAG autogeneration when miner started/stopped on console
2015-05-21 15:53:42 +01:00
Jeffrey Wilcke
1da145675d Merge pull request #1063 from bas-vk/issue1053
prefix dapp key/value entries in extradb
2015-05-21 06:43:17 -07:00
Bas van Kervel
a61e6788db prefix dapp key/value entries in extradb 2015-05-21 15:20:38 +02:00
Jeffrey Wilcke
90b672f1af Merge pull request #1062 from Gustav-Simonsson/tests_updates
Tests updates
2015-05-21 04:49:23 -07:00
Jeffrey Wilcke
bf7dcfce36 Merge pull request #1059 from obscuren/cleanup
Cleanup
2015-05-21 04:11:36 -07:00
obscuren
907848997b miner: one-shot update loop 2015-05-21 11:57:00 +02:00
obscuren
207bd55751 eth: reduced max open files for LevelDB 2015-05-21 11:45:35 +02:00
obscuren
84cd618585 ethdb: documentation and corruption recovery 2015-05-21 11:43:05 +02:00
obscuren
ef8744d9fc core: switched back to set.Set for uncle verification 2015-05-21 11:36:39 +02:00
obscuren
ff1630834c xeth: removed Value 2015-05-21 11:36:05 +02:00
Péter Szilágyi
52db6d8be5 eth/downloader: circumvent a forged block chain with known parent attack 2015-05-21 08:37:27 +03:00
Péter Szilágyi
e8b22b9253 eth/downloader: prevent a peer from dripping bad hashes 2015-05-21 08:07:58 +03:00
Jeffrey Wilcke
9bde7fd72e Merge pull request #1043 from obscuren/test_fixes
core/vm: optimisation on RETURN and updated tests
2015-05-20 03:06:04 -07:00
Jeffrey Wilcke
8fe8ec84f6 Merge pull request #1049 from zsfelfoldi/receipts
Storing tx receipts in extraDb
2015-05-20 03:00:36 -07:00
Jeffrey Wilcke
0300eef94d Merge pull request #1048 from ethersphere/cli-fixes
CLI, JSRE admin and  Solc improvements
2015-05-20 02:31:52 -07:00
Jeffrey Wilcke
6b83a0a589 Merge pull request #1050 from karalabe/handle-slow-download-tester
eth/downloader: fix test to it doesn't time out on a slow machine
2015-05-20 02:29:23 -07:00
Jeffrey Wilcke
adaa49d2cc Merge pull request #1051 from karalabe/fix-odd-naming
eth: fix odd method names in peer set
2015-05-20 02:29:07 -07:00
Péter Szilágyi
3c8227b935 eth: fix odd method names in peer set 2015-05-20 10:34:45 +03:00
Péter Szilágyi
6f54eb6d9a eth/downloader: fix test to it doesn't time out on a slow machine 2015-05-20 10:15:42 +03:00
zsfelfoldi
00ec4132f8 Storing tx receipts in extraDb 2015-05-20 06:41:50 +02:00
zelig
e1d1417729 rpc: NewNotAvailableError instead of NewNotImplementedError if no solc 2015-05-20 05:29:28 +01:00
zelig
00f59f5014 fix eth.sign. now implemented in admin jsre until web3.js has it . 2015-05-20 04:38:20 +01:00
zelig
b0ae84aa0d multiple contract source for solidity compiler: returns contract array if multiple contracts. fixes #1023 2015-05-20 04:11:48 +01:00
zelig
ea893aca8f update web3.js to 0.4.2 2015-05-20 02:58:49 +01:00
zelig
d92172f3d4 add usage doc to wallet import 2015-05-20 02:47:13 +01:00
zelig
4201a18117 remove solc flair 2015-05-20 02:47:13 +01:00
zelig
22b694ee1e solc now in ethereum, fixes solc path setting; setSolc() didnt work 2015-05-20 02:47:13 +01:00
zelig
f9abcee0f9 fix solc tests unskip 2015-05-20 02:47:13 +01:00
obscuren
9617aa8e19 tests: added conditional skip on long running VM tests
Set the TEST_VM_COMPLEX env var to test complex vm tests which require a
lot of ram and quite some time.
2015-05-20 00:21:24 +02:00
obscuren
f5af1fdca8 core/vm: RETURN op code returns pointer to memory rather than copy 2015-05-20 00:21:23 +02:00
obscuren
648b352424 tests/vm: updated tests and skipped output for specific tests
Skipped tests due to large return value
2015-05-20 00:21:23 +02:00
Jeffrey Wilcke
79042223dc Merge pull request #1044 from obscuren/thread_safe_block_cache
core: block cache Has method thread safe
2015-05-19 15:11:41 -07:00
Jeffrey Wilcke
b14ee6ce16 Merge pull request #1046 from tgerring/issue1045
Allow unlocking multiple accounts
2015-05-19 15:11:20 -07:00
obscuren
8dac28f2e3 core: block cache Has method thread safe 2015-05-19 21:50:56 +02:00
obscuren
87a05c8f38 core: skipped tests while cache disabled 2015-05-19 21:50:26 +02:00
Taylor Gerring
32b8565022 Support multiple account unlock attempts 2015-05-19 14:46:32 -05:00
Taylor Gerring
af8ada45e7 Allow unlocking multiple accounts #1045
Separate accounts with spaces when using --unlock
2015-05-19 13:40:41 -05:00
Jeffrey Wilcke
46d6470c43 Merge pull request #1035 from karalabe/eth-threadsafe-peers
eth: make the peer-set thread safe
2015-05-19 08:50:38 -07:00
Jeffrey Wilcke
9b825e2728 Merge pull request #1036 from tgerring/issue884
JSON RPC null field updates
2015-05-19 06:44:31 -07:00
Taylor Gerring
748263d2f0 Use bytes.Repeat() instead of 32-byte literal 2015-05-19 08:14:48 -05:00
obscuren
7d9a13e0d5 core: disable cash tmp 2015-05-19 12:59:58 +02:00
Jeffrey Wilcke
6c2ad7b72e Merge pull request #1034 from obscuren/tx_pool_fix
Nonce fix for failing transactions
2015-05-18 12:28:51 -07:00
obscuren
b7baceefda xeth: remove nonce on error. Fixes #1026 2015-05-18 20:52:25 +02:00
Péter Szilágyi
4755caeb2d eth: remote a superfluous peerSet method 2015-05-18 21:35:42 +03:00
Péter Szilágyi
5422fe5125 eth: make the peer set thread safe 2015-05-18 21:33:37 +03:00
Jeffrey Wilcke
bd0c0a633b Merge pull request #1022 from obscuren/parallel_nonce_checks
Parallelise nonce checks
2015-05-18 11:13:53 -07:00
Jeffrey Wilcke
d6adadc5e3 Merge pull request #1033 from tgerring/issue1010
Add "removedb" command to Geth
2015-05-18 11:12:58 -07:00
Taylor Gerring
0864f1fc8e Remove unused confirm() method 2015-05-18 12:25:33 -05:00
Taylor Gerring
f14feea436 Refactor user prompts into utils 2015-05-18 12:24:30 -05:00
Taylor Gerring
36a4ba3248 Add user confirmation for removedb 2015-05-18 12:04:35 -05:00
obscuren
40717465bc core: fixed tests 2015-05-18 18:16:53 +02:00
obscuren
59c0d01418 core: chain manager no longer exports genesis block 2015-05-18 18:16:53 +02:00
obscuren
bc5e60cd63 miner: stale block notification 2015-05-18 18:16:53 +02:00
Taylor Gerring
fe41bd6fe8 Add "removedb" command to Geth
Removes the state and blockchain databases
2015-05-18 10:54:15 -05:00
Jeffrey Wilcke
a3a5f8b593 Merge pull request #1032 from tgerring/issue1025
Multiple CORS domains support
2015-05-18 08:49:35 -07:00
Taylor Gerring
54b5c8273d XEth comment clarification 2015-05-18 10:41:56 -05:00
Taylor Gerring
a2598e649d Permit multiple CORS domains
Separated by spaces
2015-05-18 10:31:03 -05:00
Taylor Gerring
62d76b8e1f Cleanup 2015-05-18 10:11:27 -05:00
Taylor Gerring
a528bd04db Return nil for certain fields on eth_getTransactionByHash when not part of a block 2015-05-18 10:09:00 -05:00
Jeffrey Wilcke
677796b351 Merge pull request #1031 from bas-vk/issue1012
fixed race condition in miner
2015-05-18 07:33:06 -07:00
Gustav Simonsson
6a72cd45e2 Add wrapper for BlockTests/bcWalletTest.json 2015-05-18 16:28:54 +02:00
Gustav Simonsson
1d51cada3c Handle call depth exception for CREATE 2015-05-18 16:23:20 +02:00
Taylor Gerring
d381d9a74c Return nil for certain fields on eth_getBlockByNumber pending 2015-05-18 09:16:10 -05:00
Bas van Kervel
60561cdca2 fixed issue when miner is not stopping af stop command 2015-05-18 16:09:01 +02:00
Bas van Kervel
7778740315 fixed race condition in miner 2015-05-18 15:13:58 +02:00
obscuren
c67424ecc8 core: parallelise nonce checking when processing blocks
ChainManager now uses a parallel approach to block processing where all
nonces are checked seperatly from the block processing process. This
speeds up the process by about 3 times on my i7
2015-05-18 13:59:22 +02:00
Gustav Simonsson
36419defd1 Update Ethereum JSON test files 2015-05-18 12:45:24 +02:00
obscuren
67d44519ce core: bugfix test 2. set => hash map 2015-05-18 10:49:09 +02:00
obscuren
54f0f82dd1 ret 2015-05-18 10:14:48 +02:00
obscuren
e323f0e831 core: tmp diagnostic logs 2015-05-18 10:13:50 +02:00
obscuren
280b7f23af Merge branch 'hotfix/0.9.22' into develop 2015-05-17 21:35:29 +02:00
obscuren
915fc0e581 Merge branch 'hotfix/0.9.22' 2015-05-17 21:35:15 +02:00
obscuren
3a51d5e80c cmd/geth: fixed ver num 2015-05-17 21:34:28 +02:00
Jeffrey Wilcke
443d024843 Merge pull request #1021 from obscuren/global_chain_lock
core: global chain insert lock
2015-05-17 08:54:16 -07:00
obscuren
27782bbade core: global chain insert lock 2015-05-17 00:55:02 +02:00
Jeffrey Wilcke
426c70ac0b Merge pull request #1011 from obscuren/upgradedb_fix
cmd/geth: delete state db on upgradedb command
2015-05-16 08:48:49 -07:00
obscuren
28ba374f27 cmd/geth: delete state db on upgradedb command 2015-05-16 17:43:19 +02:00
obscuren
ad99089567 Merge branch 'hotfix/0.9.21.1' into develop 2015-05-16 13:04:43 +02:00
obscuren
69f8a1b01a Merge branch 'hotfix/0.9.21-1' 2015-05-16 13:03:30 +02:00
obscuren
ad7b0efbd3 cmd/geth: hotfix bump 2015-05-16 13:02:30 +02:00
obscuren
d98a6f85fc core: further improved uncle error messages 2015-05-16 13:02:30 +02:00
obscuren
c2ef8682fe eth/downloader: moved start event
Start event has moved because it could possibly could stall the miner
2015-05-16 13:02:30 +02:00
Vitalik Buterin
fe64a13cea Adjust miner coinbase and not just miner worker coinbase 2015-05-16 12:56:06 +02:00
obscuren
741fa8ca9c miner: mutex locks on cpu agent. Closes #1007 2015-05-16 12:55:56 +02:00
Vitalik Buterin
61e8296bd8 Adjust miner coinbase and not just miner worker coinbase 2015-05-15 21:23:09 -04:00
obscuren
4b2ee6c30c Merge branch 'release/0.9.21' into develop 2015-05-16 00:27:35 +02:00
obscuren
1564f1a020 Merge branch 'release/0.9.21' 2015-05-16 00:27:13 +02:00
obscuren
7ea76fcf99 core, cmd/geth, cmd/mist: cleanup. bump version 0.9.21 2015-05-16 00:26:36 +02:00
obscuren
79fa05867f xeth: set balance max balance to from in call. Closes #951 2015-05-16 00:03:08 +02:00
Jeffrey Wilcke
d116b9595c Merge pull request #989 from obscuren/develop
core, miner: fork resolving and restart miner after sync op
2015-05-15 15:02:22 -07:00
obscuren
55d85d60fd eth, cmd/geth: start mining from console respects CLI flag 2015-05-15 20:26:15 +02:00
obscuren
d3e84cc8b4 miner: properly check for mining operation on Register 2015-05-15 20:26:15 +02:00
obscuren
5cec1aad15 core, miner: fork resolving and restart miner after sync op
Fork resolving fixes #940
2015-05-15 20:26:15 +02:00
Jeffrey Wilcke
82c0780f81 Merge pull request #996 from karalabe/fix-potential-crosscheck-race
eth/downloader: circumvent download race between crosscheck and hashes
2015-05-15 11:23:44 -07:00
Jeffrey Wilcke
cea1723c68 Merge pull request #997 from karalabe/fix-shitty-test-server-issue
eth/downloader: fix #992, where tests may time out on a slow machine
2015-05-15 11:22:51 -07:00
Péter Szilágyi
412cf98bbc eth/downloader: fix #992, where tests may time out on a slow machine 2015-05-15 21:16:42 +03:00
Péter Szilágyi
f3ae8f50a5 eth/downloader: circumvent download race between crosscheck and hashes 2015-05-15 20:54:10 +03:00
Jeffrey Wilcke
98998534cb Merge pull request #995 from Gustav-Simonsson/update_state_tests_and_vm_create_return
Update state tests and vm create return
2015-05-15 10:31:41 -07:00
Gustav Simonsson
619e8a4f03 Add StateTests/RandomTests but skip for now 2015-05-15 19:17:40 +02:00
Jeffrey Wilcke
164ba56a60 Merge pull request #994 from karalabe/fix-cancel-double-close
eth/downloader: fix cancel channel double close
2015-05-15 10:15:35 -07:00
Gustav Simonsson
32276e8b01 Update StateTests and nil create return on failed code deposit 2015-05-15 18:49:31 +02:00
Péter Szilágyi
4f0d88cb02 eth/downloader: fix cancel channel double close 2015-05-15 19:43:42 +03:00
Gustav Simonsson
830bdb1cfd Update Ethereum JSON tests 2015-05-15 16:08:00 +02:00
Gustav Simonsson
dadf01de60 unskip StateTests/stTransactionTest and use test tx nonce 2015-05-15 16:05:11 +02:00
Jeffrey Wilcke
7d71a75d77 Merge pull request #988 from karalabe/fix-downloader-vulnerabilities
Fix downloader vulnerabilities
2015-05-15 06:38:12 -07:00
Péter Szilágyi
5c1a7b965c eth/downloader: circumvent a fake blockchain attack 2015-05-15 15:04:15 +03:00
Péter Szilágyi
b517967f86 eth/downloader: don't penalize for stale cross checks 2015-05-15 15:03:08 +03:00
Péter Szilágyi
83226762c2 eth, eth/downloader: detect and handle madeup hash attacks 2015-05-15 15:01:58 +03:00
Péter Szilágyi
9ad515d2dc eth: drop a sync peer if it sends an invalid hash chain 2015-05-15 15:01:58 +03:00
Péter Szilágyi
72411eb24c eth/downloader: circumvent hash reordering attacks 2015-05-15 15:01:58 +03:00
Péter Szilágyi
bcc2980179 eth/downloader: check sync after failed attacks 2015-05-15 15:01:58 +03:00
Péter Szilágyi
366e9627e8 eth/downloader: add a test for detecting missing blocks 2015-05-15 15:01:58 +03:00
Péter Szilágyi
cd2fb09051 eth, eth/downloader: prevent hash repeater attack 2015-05-15 15:01:58 +03:00
Jeffrey Wilcke
c1f0d40e34 Merge pull request #987 from obscuren/develop
Miner updates and downloader events
2015-05-15 04:12:46 -07:00
Jeffrey Wilcke
158efbaa45 Merge pull request #984 from tgerring/issue924
Omit replies for RPC notification requests
2015-05-15 04:12:40 -07:00
obscuren
cfb2b51b74 eth/downloader: fixed test 2015-05-15 12:47:32 +02:00
obscuren
f6669db001 core: fixed mining strategy 2015-05-15 12:24:29 +02:00
obscuren
b71091e337 eth, eth/downloader, miner: use download events to check miner start 2015-05-15 00:43:10 +02:00
obscuren
0f76a1c6df core: changed how head events are checked 2015-05-15 00:42:06 +02:00
obscuren
580bae0a86 core: improved uncle messages 2015-05-15 00:40:07 +02:00
Taylor Gerring
44a7f997c3 Unreverse ordering 2015-05-14 15:50:39 -05:00
Taylor Gerring
5c6540452a Omit replies for notification requests
When Id is missing, the client does not want a response
2015-05-14 12:39:57 -05:00
Jeffrey Wilcke
3ac34ee3c4 Merge pull request #975 from obscuren/develop
core: changed log message for forks. closes #952
2015-05-14 10:38:10 -07:00
Jeffrey Wilcke
69c78ddbb4 Merge pull request #983 from tgerring/issue958
Format contract code as hexdata
2015-05-14 10:38:01 -07:00
Jeffrey Wilcke
007bced276 Merge pull request #982 from tgerring/issue962
Check for error on DB fetch of tx
2015-05-14 10:37:30 -07:00
Jeffrey Wilcke
6bc8dec7ac Merge pull request #980 from fjl/geth-test-no-scrypt
cmd/geth: use plain keystore for JS tests
2015-05-14 10:36:56 -07:00
Taylor Gerring
4ad8f1035b Format contract code as hexdata 2015-05-14 12:17:19 -05:00
Taylor Gerring
12f82ab2ff Check for error on DB fetch of tx 2015-05-14 11:57:29 -05:00
Felix Lange
559cc02313 cmd/geth: use plain keystore for JS tests
This reduces the time it takes to run the tests back to 3 seconds.
2015-05-14 17:51:05 +02:00
obscuren
b19bf3ec78 core: changed log message for forks. closes #952 2015-05-14 17:16:46 +02:00
Jeffrey Wilcke
060a07cf69 Merge pull request #974 from karalabe/downloader-fix-unknown-parent-attack
eth, eth/downloader: handle a potential unknown parent attack
2015-05-14 08:16:30 -07:00
Jeffrey Wilcke
90b94e64fc Merge pull request #971 from fjl/p2p-limit-tweaks
p2p: tweak connection limits
2015-05-14 08:15:51 -07:00
Felix Lange
d2f119cf9b p2p/discover: limit open files for node database 2015-05-14 15:01:13 +02:00
Felix Lange
206fe25971 p2p: remove testlog 2015-05-14 14:56:34 +02:00
Felix Lange
7fa2607bd1 p2p/discover: bump maxBondingPingPongs to 16
This should increase the speed a bit because all findnode
results (up to 16) can be verified at the same time.
2015-05-14 14:53:29 +02:00
Felix Lange
691cb90284 p2p: log remote reason when disconnect is requested
The returned reason is currently not used except for the log
message. This change makes the log messages a bit more useful.
The handshake code also returns the remote reason.
2015-05-14 14:53:29 +02:00
Jeffrey Wilcke
ff87c241a7 Merge pull request #973 from bas-vk/issue972
Introduced default unlock duration when an account is unlocked from t…
2015-05-14 05:48:31 -07:00
Péter Szilágyi
fe87feccb1 eth/downloader: add a small additional check to the test 2015-05-14 15:44:54 +03:00
Péter Szilágyi
ebf1eb9359 eth/downloader: remove a previous leftover 2015-05-14 15:40:28 +03:00
Péter Szilágyi
3eda70c64c eth, eth/downloader: remove parent verification from the downlaoder 2015-05-14 15:38:49 +03:00
Bas van Kervel
1fa48bc5e7 Introduced default unlock duration when an account is unlocked from the console 2015-05-14 14:25:48 +02:00
Péter Szilágyi
a4246c2da6 eth, eth/downloader: handle a potential unknown parent attack 2015-05-14 15:24:18 +03:00
Jeffrey Wilcke
7fa740996c Merge pull request #960 from fjl/nat-fixes
p2p/nat: fix UPnP auto discovery
2015-05-14 04:06:13 -07:00
Jeffrey Wilcke
c7a13c9be8 Merge pull request #969 from Gustav-Simonsson/ethash_improve_hashrate_update2
Make read of ethash hashrate atomic and update ethash godep
2015-05-14 04:05:27 -07:00
Jeffrey Wilcke
2b06fe3eff Merge pull request #950 from karalabe/downloader-cancel-sync
eth/downloader: fix deliveries to check for sync cancels
2015-05-14 04:05:13 -07:00
Jeffrey Wilcke
cdeae22356 Merge pull request #949 from bas-vk/issue944
removed invalid filename characters
2015-05-14 04:04:43 -07:00
Felix Lange
5f706cd7f5 cmd/utils: print messages from package log through glog
Some of the dependencies use package log. This change ensures that the
log output looks uniform and respects glog flags.
2015-05-14 12:56:37 +02:00
Felix Lange
c14de2e973 p2p/nat: tweak port mapping log messages and levels
People stil get confused about the messages. This commit changes
the levels so that the only thing printed at the default level (info)
is a successful mapping.
2015-05-14 12:54:59 +02:00
Jeffrey Wilcke
e4aa011d23 Merge pull request #970 from ethereum/vitalik_quick_test
Created separate family and ancestors environment objects
2015-05-14 03:53:04 -07:00
Felix Lange
e7c7b54b82 Godeps: bump github.com/huin/goupnp to c57ae84 2015-05-14 12:29:41 +02:00
Felix Lange
663d4e0aff p2p/nat: add test for UPnP auto discovery via SSDP
The test listens for multicast UDP packets on the default interface
because I couldn't get it to work reliably on loopback without massive
changes to goupnp. This means that the test might fail when there is a
UPnP-enabled router attached on that interface. I checked that locally
by looping the test and it passes reliably because the local SSDP server
always responds faster.
2015-05-14 12:13:19 +02:00
Vitalik Buterin
bdec8c3e41 Combined two loops 2015-05-14 05:02:15 -04:00
Gustav Simonsson
b24f16fa53 Make read of ethash hashrate atomic and update ethash godep 2015-05-14 04:05:49 +02:00
Felix Lange
983f5a717a p2p/nat: fix concurrent access to autodisc Interface
Concurrent calls to Interface methods on autodisc could return a "not
discovered" error if the discovery did not finish before the call.
autodisc.wait expected the done channel to carry the found Interface
but it was closed instead.

The fix is to use sync.Once for now, which is easier to get right.
And there is a test. Finally.

This will have to change again when we introduce re-discovery.
2015-05-14 03:53:11 +02:00
Felix Lange
7efeb4bd96 p2p: bump maxAcceptConns and defaultDialTimout
On the test network, we've seen that it becomes harder to connect
if the queues are so short.
2015-05-14 03:48:28 +02:00
Vitalik Buterin
fca3333f7f Created separate family and ancestors environment objects 2015-05-13 20:46:23 -04:00
Vitalik Buterin
bc83761996 Fixed max uncle count error message 2015-05-13 20:29:57 -04:00
Felix Lange
f7fdb4dfbe Merge pull request #966 from fjl/fixup-discover-chunked-neighbors
p2p/discover: fix out-of-bounds slicing for chunked neighbors packets
2015-05-13 21:52:58 +02:00
Felix Lange
251846d65a p2p/discover: fix out-of-bounds slicing for chunked neighbors packets
The code assumed that Table.closest always returns at least 13 nodes.
This is not true for small tables (e.g. during bootstrap).
2015-05-13 21:49:04 +02:00
Jeffrey Wilcke
fad21fb4a5 Merge pull request #963 from Gustav-Simonsson/fix_keystore_crypto_comments
Update keystore code comments
2015-05-13 11:51:02 -07:00
Felix Lange
b2119d8931 Merge pull request #965 from subtly/patch-1
Better UDP & interop. Limit all received datagrams to 1280bytes.
2015-05-13 20:34:10 +02:00
subtly
8eef2b765a fix test. 2015-05-13 20:15:01 +02:00
subtly
a32693770c Manual send of multiple neighbours packets. Test receiving multiple neighbours packets. 2015-05-13 20:03:17 +02:00
subtly
7473c93668 UDP Interop. Limit datagrams to 1280bytes.
We don't have a UDP which specifies any messages that will be 4KB. Aside from being implemented for months and a necessity for encryption and piggy-backing packets, 1280bytes is ideal, and, means this TODO can be completed!

Why 1280 bytes?
* It's less than the default MTU for most WAN/LAN networks. That means fewer fragmented datagrams (esp on well-connected networks).
* Fragmented datagrams and dropped packets suck and add latency while OS waits for a dropped fragment to never arrive (blocking readLoop())
* Most of our packets are < 1280 bytes.
* 1280 bytes is minimum datagram size and MTU for IPv6 -- on IPv6, a datagram < 1280bytes will *never* be fragmented.

UDP datagrams are dropped. A lot! And fragmented datagrams are worse. If a datagram has a 30% chance of being dropped, then a fragmented datagram has a 60% chance of being dropped. More importantly, we have signed packets and can't do anything with a packet unless we receive the entire datagram because the signature can't be verified. The same is true when we have encrypted packets.

So the solution here to picking an ideal buffer size for receiving datagrams is a number under 1400bytes. And the lower-bound value for IPv6 of 1280 bytes make's it a non-decision. On IPv4 most ISPs and 3g/4g/let networks have an MTU just over 1400 -- and *never* over 1500. Never -- that means packets over 1500 (in reality: ~1450) bytes are fragmented. And probably dropped a lot.

Just to prove the point, here are pings sending non-fragmented packets over wifi/ISP, and a second set of pings via cell-phone tethering. It's important to note that, if *any* router between my system and the EC2 node has a lower MTU, the message would not go through:

On wifi w/normal ISP:
localhost:Debug $ ping -D -s 1450 52.6.250.242
PING 52.6.250.242 (52.6.250.242): 1450 data bytes
1458 bytes from 52.6.250.242: icmp_seq=0 ttl=42 time=104.831 ms
1458 bytes from 52.6.250.242: icmp_seq=1 ttl=42 time=119.004 ms
^C
--- 52.6.250.242 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 104.831/111.918/119.004/7.087 ms
localhost:Debug $ ping -D -s 1480 52.6.250.242
PING 52.6.250.242 (52.6.250.242): 1480 data bytes
ping: sendto: Message too long
ping: sendto: Message too long
Request timeout for icmp_seq 0
ping: sendto: Message too long
Request timeout for icmp_seq 1


Tethering to O2:
localhost:Debug $ ping -D -s 1480 52.6.250.242
PING 52.6.250.242 (52.6.250.242): 1480 data bytes
ping: sendto: Message too long
ping: sendto: Message too long
Request timeout for icmp_seq 0
^C
--- 52.6.250.242 ping statistics ---
2 packets transmitted, 0 packets received, 100.0% packet loss
localhost:Debug $ ping -D -s 1450 52.6.250.242
PING 52.6.250.242 (52.6.250.242): 1450 data bytes
1458 bytes from 52.6.250.242: icmp_seq=0 ttl=42 time=107.844 ms
1458 bytes from 52.6.250.242: icmp_seq=1 ttl=42 time=105.127 ms
1458 bytes from 52.6.250.242: icmp_seq=2 ttl=42 time=120.483 ms
1458 bytes from 52.6.250.242: icmp_seq=3 ttl=42 time=102.136 ms
2015-05-13 19:03:00 +02:00
Gustav Simonsson
56a5592ea0 Update keystore code comments 2015-05-13 18:33:31 +02:00
Péter Szilágyi
3edc4698fe Merge pull request #954 from karalabe/fix-downloader-nil-panic
eth/downloader: fix nil panic caused by wrong variable use
2015-05-13 18:15:18 +02:00
Péter Szilágyi
910a6d4e46 eth/downloader: fix nil panic caused by wrong variable use 2015-05-13 17:25:01 +03:00
Péter Szilágyi
de3a71cafd eth/downloader: remove a redundant sync progress check 2015-05-13 16:56:01 +03:00
Péter Szilágyi
48ee0777a5 eth/downloader: add a user sync notificaton 2015-05-13 16:03:05 +03:00
Péter Szilágyi
ec57aa64cd eth/downloader: sync the cancel channel during cancel too 2015-05-13 14:01:08 +03:00
Péter Szilágyi
ee0c892303 eth/downloader: fix deliveries to check for sync cancels 2015-05-13 13:47:21 +03:00
Jeffrey Wilcke
7cb0e24245 Merge pull request #948 from karalabe/fix-downlaoder-activepeer-shadow
eth/downloader: fix active peer shadowing, polish func names
2015-05-13 03:46:29 -07:00
Bas van Kervel
e30e9fe979 removed invalid filename characters 2015-05-13 12:38:12 +02:00
Péter Szilágyi
d2d5dbc6fb eth/downloader: fix active peer shadowing, polish func names 2015-05-13 13:13:43 +03:00
Jeffrey Wilcke
6dec90464d Merge pull request #946 from Gustav-Simonsson/fix_geth_unlock_account
Fix hex conversion in --unlock and log when successful
2015-05-13 01:58:32 -07:00
Gustav Simonsson
b5b53d8b32 Fix hex conversion in --unlock and log when successful 2015-05-13 01:11:17 +02:00
obscuren
28d6b30c0f Merge branch 'release/0.9.20' into develop 2015-05-12 19:05:51 +02:00
obscuren
8e24378cc1 Merge branch 'release/0.9.20' 2015-05-12 19:05:33 +02:00
obscuren
8fe01b4bfa eth: 100% tx propagation 2015-05-12 19:01:01 +02:00
obscuren
36ce54e5dc cmd/geth: bump version to 0.9.20 2015-05-12 19:01:01 +02:00
Jeffrey Wilcke
d6357aa616 Merge pull request #631 from Gustav-Simonsson/improve_key_store_crypto
Improve key store crypto
2015-05-12 10:00:35 -07:00
Gustav Simonsson
e389585f1f Change default keystore dir 2015-05-12 18:33:04 +02:00
Gustav Simonsson
231fe04f03 Fix address type in js test 2015-05-12 17:48:21 +02:00
Jeffrey Wilcke
58d6ec689f Merge pull request #933 from bas-vk/issue928
replaced path with platform aware filepath module
2015-05-12 08:23:46 -07:00
Gustav Simonsson
037772fc07 fix hex conversion bug in RPC for byte slices 2015-05-12 17:22:17 +02:00
Gustav Simonsson
8001e48115 Fix natspec test (again x2) types 2015-05-12 17:22:17 +02:00
Gustav Simonsson
2c1b0ff17e Update key store to new spec but keep address field for now
* Also fix address types post-rebase
2015-05-12 17:22:17 +02:00
Gustav Simonsson
fe9e95a3fd Fix natspec e2e test accounts type (again) 2015-05-12 17:22:17 +02:00
Gustav Simonsson
940952f757 Fix HEX hack in xeth accounts() 2015-05-12 17:22:17 +02:00
Gustav Simonsson
f98e002d98 Address pull request comments; key header and hex encoding
* Remove key header from unencrypted key file format and replace
  it with a version field
* Change encoding of bytes in key files from base64 to hex
2015-05-12 17:22:17 +02:00
Gustav Simonsson
313eec33ad Revert "Add key header to unencrypted key file"
This reverts commit a94d4ba0b53c4558ab838aaed635a2ff66ddfa53.
2015-05-12 17:19:39 +02:00
Gustav Simonsson
8754f2b768 Fix common.Address / []byte type conversions 2015-05-12 17:19:39 +02:00
Gustav Simonsson
cd88295f5a Add key header to unencrypted key file 2015-05-12 17:19:39 +02:00
Gustav Simonsson
29a5a92d13 Add key header to encrypted keys
* Add key header containing key version, kdf and kdf params
* Store key header as JSON in the key file
* Read in KDF params from key header
* Include key header in MAC calculation and MAC verification
2015-05-12 17:19:39 +02:00
Gustav Simonsson
ac3371bcb6 Correct accounts hex in XETH API 2015-05-12 17:19:39 +02:00
Gustav Simonsson
da9fe951da Use common.Address type for accounts.Address 2015-05-12 17:19:39 +02:00
Gustav Simonsson
6b23094cff Improve key store passphrase crypto
* Change MAC-then-Encrypt to Encrypt-then-MAC
* Change AES256 to AES128
* Use first 16 bytes of KDF derived key for AES and
  remaining 16 for MAC
2015-05-12 17:18:30 +02:00
Gustav Simonsson
9918b6c84e Remove the awesome, ever misunderstood entropy mixing 2015-05-12 17:18:30 +02:00
Jeffrey Wilcke
f87094b660 Merge pull request #932 from obscuren/develop
xeth, rpc: implement eth_estimateGas. Closes #930
2015-05-12 07:26:38 -07:00
obscuren
dca290d525 sol: skipped source checking step 2015-05-12 16:19:14 +02:00
obscuren
ff99752ddd xeth: use same semantics as block processer for transient calls 2015-05-12 15:53:00 +02:00
Bas van Kervel
899df30c24 fixed identing 2015-05-12 15:23:19 +02:00
Bas van Kervel
95773b9673 removed redundant newlines in import block 2015-05-12 15:20:53 +02:00
obscuren
260536a729 rpc: hexData => hexNum 2015-05-12 15:02:44 +02:00
Bas van Kervel
b79dd188d9 replaced several path.* with filepath.* which is platform independent 2015-05-12 14:24:11 +02:00
obscuren
66de3f0aa8 xeth, rpc: implement eth_estimateGas. Closes #930 2015-05-12 14:21:43 +02:00
obscuren
96d4a7d087 eth, ethdb: lower the amount of open files & improve err messages for db
Closes #880
2015-05-12 14:14:56 +02:00
Jeffrey Wilcke
d82caa5ce3 Merge pull request #899 from ethersphere/solc-test-fix
compiler, cli/js: fix solidity compiler tests
2015-05-12 04:16:49 -07:00
zelig
03bf902b92 compiler, cli/js: fix solidity compiler tests failing when a different version of solc installed 2015-05-12 12:36:54 +02:00
Jeffrey Wilcke
e8d701a3b2 Merge pull request #929 from obscuren/develop
eth, ethdb: lower the amount of open files & improve err messages for db
2015-05-12 03:29:07 -07:00
obscuren
13f8f65a58 eth, ethdb: lower the amount of open files & improve err messages for db
Closes #880
2015-05-12 11:28:55 +02:00
Jeffrey Wilcke
76215ca9f3 Merge pull request #925 from obscuren/worker_owned_accounts
miner, cmd/geth: miner will not ignored owned account transactions
2015-05-11 14:23:51 -07:00
obscuren
97dd4551ef miner, cmd/geth: miner will not ignored owned account transactions
Miner does not ignore low gas txs from accounts that are owned.
2015-05-11 21:47:34 +02:00
Jeffrey Wilcke
0bedf1c376 Merge pull request #918 from obscuren/cpu_miner_fixes
cmd/geth, miner, backend, xeth: Fixed miner threads to be settable
2015-05-11 12:11:27 -07:00
obscuren
48bd48876c eth, eth/downloader: moved pending queue error message to debug 2015-05-11 17:27:34 +02:00
obscuren
21e52efdfe cmd/geth, miner, backend, xeth: Fixed miner threads to be settable
Miner threads are now settable through the admin interface (closes #897)
and specify 0 CPU worker threads when eth_getWork is called (closes #916)
2015-05-11 17:21:22 +02:00
Péter Szilágyi
064cf16099 eth/downloader: use count instead of peers, clearer 2015-05-11 17:21:22 +02:00
Péter Szilágyi
d37a2559b9 eth/downloader: revert to demotion, use harsher penalty 2015-05-11 17:21:22 +02:00
Péter Szilágyi
70c65835f4 eth/downloader: fix #910, thread safe peers & polishes 2015-05-11 17:21:22 +02:00
Jeffrey Wilcke
59bc541232 Merge pull request #915 from karalabe/downloader-threading-fixes
eth/downloader: fix #910, thread safe peers & polishes
2015-05-11 08:16:37 -07:00
Jeffrey Wilcke
fe7e284709 Merge pull request #920 from tgerring/issue917
Return 32-byte hashes from GetWork
2015-05-11 07:43:56 -07:00
Jeffrey Wilcke
0329e05823 Merge pull request #914 from ethersphere/develop
Signature on arbitrary data using the private keys of an account
2015-05-11 07:43:43 -07:00
Taylor Gerring
8e77f81586 Return 32-byte hashes from GetWork
Ensures that the Get Work results are a consistent length. Closes #917
2015-05-11 10:11:33 -04:00
Péter Szilágyi
fa53c5e074 eth/downloader: use count instead of peers, clearer 2015-05-11 17:10:00 +03:00
Daniel A. Nagy
51d4566cbf Only allow doSign to sign hashes, enforced by using the type common.Hash 2015-05-11 15:54:19 +02:00
Péter Szilágyi
ebbd8b0743 eth/downloader: revert to demotion, use harsher penalty 2015-05-11 16:47:58 +03:00
Daniel A. Nagy
49559e6d5e Interactive signature creation refactored into separate doSign function. 2015-05-11 15:46:18 +02:00
Péter Szilágyi
685862d2ce eth/downloader: fix #910, thread safe peers & polishes 2015-05-11 14:26:20 +03:00
Daniel A. Nagy
a9e1d38612 Merge branch 'develop' of github.com:ethereum/go-ethereum into develop
Conflicts:
	rpc/jeth.go
2015-05-11 12:47:14 +02:00
Jeffrey Wilcke
5176fbc6fa Merge pull request #908 from obscuren/develop
core, eth, miner: improved tx removal & fatal error on db sync err
2015-05-11 02:59:35 -07:00
obscuren
6ecba12650 miner: added log message for mining operation. #912 2015-05-11 11:39:33 +02:00
obscuren
3c6c891680 core: optimise pending transaction processing 2015-05-11 11:39:33 +02:00
obscuren
df323cdb4e rpc: display error message to stdout 2015-05-11 11:39:33 +02:00
obscuren
a2919b5e17 core, eth, miner: improved tx removal & fatal error on db sync err
* core: Added GasPriceChange event
* eth: When one of the DB flush methods error a fatal error log message
  is given. Hopefully this will prevent corrupted databases from
  occuring.
* miner: remove transactions with low gas price. Closes #906, #903
2015-05-11 11:39:33 +02:00
Jeffrey Wilcke
6674ea8d67 Merge pull request #911 from karalabe/whisper-graceful-fail
rpc, xeth: fix #881, gracefully handle offline whisper
2015-05-11 02:29:27 -07:00
Péter Szilágyi
0ad5898c0f rpc, xeth: fix #881, gracefully handle offline whisper 2015-05-11 11:53:53 +03:00
obscuren
00280e62e3 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-05-10 03:39:47 +02:00
obscuren
7d69679935 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum 2015-05-10 03:39:23 +02:00
obscuren
7551264fa6 cmd/geth, cmd/mist: version 0.9.19 2015-05-10 03:38:46 +02:00
Jeffrey Wilcke
3874f02f1b Merge pull request #894 from obscuren/develop
ethdb: set open file limit to 128 for all leveldbs
2015-05-09 18:36:50 -07:00
obscuren
0e211ae203 ethdb: set open file limit to 128 for all leveldbs 2015-05-10 01:55:39 +02:00
Jeffrey Wilcke
bd95871a89 Merge pull request #893 from obscuren/develop
eth: added a cancel method for the downloader
2015-05-09 16:54:06 -07:00
obscuren
05715f27cf eth: added a cancel method for the downloader
Added a cancel method to the downloader which gracefully shuts down any
active syncing process (hash fetching or block downloading) and resets
the queue and remove any pending blocks.

Issue with the downloader which would stall because of an active ongoing
process when an invalid block was found.
2015-05-10 00:34:07 +02:00
obscuren
45dc690947 cmd/mist: version bump 2015-05-09 13:37:22 +02:00
Jeffrey Wilcke
e289b0a1c1 Merge pull request #888 from obscuren/develop
miner, flags: Configurable gas price & log flag change
2015-05-09 04:13:16 -07:00
obscuren
658ac3c257 cmd/geth: bump version 0.9.18 2015-05-09 12:54:27 +02:00
obscuren
7eed47fad5 miner, tests: fixed block test 2015-05-09 12:51:40 +02:00
obscuren
e3a08875f6 miner: start/stop mutex locked. Closes #887 2015-05-09 12:32:36 +02:00
obscuren
a7705fc203 miner: moved gasprice to non-method 2015-05-09 12:13:46 +02:00
obscuren
13ddf20bd2 miner, cmd/geth: settable gas price from flags and console
* --gasprice "<num>" flag
* admin.miner.setGasPrice( <num> )
2015-05-09 12:04:00 +02:00
obscuren
cb1fa523e4 cmd/geth, cmd/mist, eth, flags: renamed loglevel to verbosity 2015-05-09 12:00:51 +02:00
Daniel A. Nagy
1fe70a66ba Signature test. 2015-05-08 19:37:35 +02:00
Daniel A. Nagy
62dd9833ec Merge branch 'develop' of github.com:ethereum/go-ethereum into develop 2015-05-08 17:55:53 +02:00
Daniel A. Nagy
3a01e3e39b Signing (almost) works. 2015-05-08 17:52:44 +02:00
obscuren
c8fc4cebe6 version 0.9.17 2015-05-08 17:24:41 +02:00
Jeffrey Wilcke
0214cbe0fb Merge pull request #863 from karalabe/ordered-block-download
eth/downloader: prioritize block fetch based on chain position, cap memo...
2015-05-08 08:19:53 -07:00
Jeffrey Wilcke
7c678554b5 Merge pull request #885 from fjl/p2p-fixes
p2p: more last-minute fixes
2015-05-08 07:47:56 -07:00
Péter Szilágyi
edad47bf0e eth/downloader: fix leftover state between syncs 2015-05-08 17:39:03 +03:00
Daniel A. Nagy
a487396b76 eth_sign added to API for signing arbitrary data. 2015-05-08 16:36:13 +02:00
Daniel A. Nagy
e94aa421c6 New API call for signatures. 2015-05-08 16:17:19 +02:00
Felix Lange
d4f0a67323 p2p: drop connections with no matching protocols 2015-05-08 16:09:55 +02:00
Felix Lange
e45d9bb29d cmd/utils: bump default maxpeers to 25
This should improve ethereum block propagation times since
we're not not broadcasting blocks to 100% of peers.
2015-05-08 16:09:55 +02:00
Felix Lange
9c0f36c46d p2p: use maxDialingConns instead of maxAcceptConns as dial limit 2015-05-08 16:09:55 +02:00
Felix Lange
914e57e49b p2p: fix disconnect at capacity
With the introduction of static/trusted nodes, the peer count
can go above MaxPeers. Update the capacity check to handle this.
While here, decouple the trusted nodes check from the handshake
by passing a function instead.
2015-05-08 16:09:54 +02:00
Jeffrey Wilcke
23454dcfcb Merge pull request #840 from karalabe/throttled-dialing
p2p: throttled handshakes
2015-05-08 06:53:40 -07:00
Péter Szilágyi
bd5720f480 eth, eth/downloader: handle sync errors a bit more gracefully 2015-05-08 15:22:48 +03:00
Jeffrey Wilcke
f819ac7158 Merge pull request #882 from zsfelfoldi/develop
Otto.ToValue concurrency error fixed
2015-05-08 04:54:22 -07:00
Jeffrey Wilcke
15bfae52d2 Merge pull request #876 from obscuren/jsre_fixes
jsre, cmd/geth: updated web3.js and altered settimeout
2015-05-08 04:39:33 -07:00
zsfelfoldi
d7dabce732 ToVal serialization fix 2015-05-08 13:29:48 +02:00
obscuren
f6e71b5749 updated ethereum.js 2015-05-08 13:05:20 +02:00
obscuren
351d6b0d44 jsre, cmd/geth: updated web3.js and altered settimeout 2015-05-08 13:05:20 +02:00
Jeffrey Wilcke
03473d48c1 Merge pull request #875 from Gustav-Simonsson/test_updates
Test updates
2015-05-08 03:50:14 -07:00
Jeffrey Wilcke
45c070fc8b Merge pull request #833 from ethersphere/frontier/solidity
solidity compiler and contract metadocs integration
2015-05-08 03:43:31 -07:00
zsfelfoldi
1de1359e3b Otto.ToValue concurrency error fixed 2015-05-08 12:27:35 +02:00
Jeffrey Wilcke
637b2415d9 Merge pull request #864 from obscuren/filter_changes
xeth, core, event/filter, rpc: new block and transaction filters
2015-05-08 02:56:55 -07:00
Jeffrey Wilcke
69aac4d531 Merge pull request #877 from Gustav-Simonsson/update_ethash_godep
Update ethash deps (more build fixes, tests)
2015-05-08 02:19:50 -07:00
Péter Szilágyi
9d188f73b5 eth, eth/downloader: make synchronize thread safe 2015-05-07 21:07:20 +03:00
Gustav Simonsson
3593662b0c Update ethash deps (more build fixes, tests) 2015-05-07 19:39:55 +02:00
obscuren
60b5a94428 xeth: getTransactionByHash, try pool if db fails 2015-05-07 18:23:24 +02:00
obscuren
dcfecebe1f core: get transaction by hash from transaction pool 2015-05-07 18:22:57 +02:00
obscuren
258a7b9a93 xeth: check proper queue for pending transaction filter 2015-05-07 17:20:57 +02:00
obscuren
b3c9b66f29 rpc: eth_transactionFilter => eth_newPendingTransactionFilter 2015-05-07 14:44:32 +02:00
obscuren
7e160a677d xeth, core, event/filter, rpc: new block and transaction filters 2015-05-07 14:44:32 +02:00
Péter Szilágyi
8735e5addd p2p: increase the handshake timeout in the tests 2015-05-07 15:30:56 +03:00
Péter Szilágyi
4d5a719f25 cmd, eth, p2p: introduce pending peer cli arg, add tests 2015-05-07 15:30:56 +03:00
Péter Szilágyi
af93217775 p2p: reduce the concurrent handshakes to 10/10 in/out 2015-05-07 15:22:09 +03:00
Péter Szilágyi
2060bc8bac p2p: fix dial throttling race condition 2015-05-07 15:22:08 +03:00
Péter Szilágyi
29fef349ef p2p: fix a dialing race in the throttler 2015-05-07 15:22:08 +03:00
Péter Szilágyi
3953bf0031 p2p: limit the outbound dialing too 2015-05-07 15:22:08 +03:00
Péter Szilágyi
43901c9282 eth/downloader: fix priority queue reset, add throttling test 2015-05-07 14:40:50 +03:00
Gustav Simonsson
79eb40fc9f Add bcTotalDifficultyTest and unskip now working tx tests 2015-05-07 13:03:22 +02:00
zelig
009b221692 solidity compiler and contract metadocs integration
* common/compiler: solidity compiler + tests
* rpc: eth_compilers, eth_compileSolidity + tests
* fix natspec test using keystore API, notice exp dynamically changes addr, cleanup
* resolver implements registrars and needs to create reg contract (temp)
* xeth: solidity compiler. expose getter Solc() and paths setter SetSolc(solcPath)
* ethereumApi: implement compiler related RPC calls using XEth - json struct tests
* admin: make use of XEth.SetSolc to allow runtime setting of compiler paths
* cli: command line flags solc to set custom solc bin path
* js admin api with new features debug and contractInfo modules
* wiki is the doc https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions
2015-05-07 12:58:21 +02:00
Gustav Simonsson
2b716aec54 Update JSON test files 2015-05-07 12:44:29 +02:00
Péter Szilágyi
45f8304f3c eth/downloader: fix expiration not running while fetching 2015-05-07 12:59:19 +03:00
Péter Szilágyi
4800c94392 eth/downloader: prioritize block fetch based on chain position, cap memory use 2015-05-07 10:57:34 +03:00
obscuren
97c37356fd updated ignore 2015-05-07 00:03:11 +02:00
Jeffrey Wilcke
82ac4712f1 Merge pull request #867 from Gustav-Simonsson/fix_block_tests_genesis_block_total_difficulty
Fix block tests genesis block total difficulty
2015-05-06 14:52:55 -07:00
Jeffrey Wilcke
a0cb1945ae Merge pull request #866 from fjl/p2p-last-minute
Last minute p2p fixes
2015-05-06 14:49:52 -07:00
Felix Lange
3e2a928caa p2p: stop dialing at half the maximum peer count 2015-05-06 23:44:51 +02:00
Gustav Simonsson
7bc1f487b8 Unskip now working tests, remove debug print 2015-05-06 23:25:44 +02:00
Gustav Simonsson
2808409fbd Add genesis block total difficulty in tests 2015-05-06 23:22:49 +02:00
Felix Lange
6a2fec5309 p2p, whisper: use glog for peer-level logging 2015-05-06 23:19:14 +02:00
obscuren
b719801db0 cmd/geth: gofmt screwup fix 2015-05-06 23:10:46 +02:00
obscuren
458d891c63 cmd/geth: version bump 2015-05-06 23:04:49 +02:00
Felix Lange
bcfd788661 p2p/discover: bump packet timeouts to 500ms 2015-05-06 22:59:00 +02:00
Felix Lange
fd4b75cfa8 p2p/nat: less confusing error logging 2015-05-06 22:58:03 +02:00
obscuren
090f593bc0 Merge branch 'karalabe-cherry-trusted-peers' into develop 2015-05-06 22:54:33 +02:00
obscuren
062fa049d0 fixed merge issue 2015-05-06 22:54:21 +02:00
Jeffrey Wilcke
24d44f35f2 Merge pull request #791 from fjl/discover-sha3-distance
p2p/discover: sha3-based node distance
2015-05-06 13:48:57 -07:00
Jeffrey Wilcke
323216ed85 Merge pull request #861 from obscuren/transaction_pool_fixes
core: transaction pool fixes & resending transactions
2015-05-06 11:23:58 -07:00
Jeffrey Wilcke
1f26a1b863 Merge pull request #859 from Gustav-Simonsson/ethash_reloaded
Ethash reloaded
2015-05-06 11:20:54 -07:00
obscuren
05ac1209c7 cmd/geth: limit pendingTransactions to owned accounts. 2015-05-06 18:30:56 +02:00
obscuren
eb4029257a cmd/mist: updated xeth transact 2015-05-06 18:30:56 +02:00
obscuren
5ebc22807c cmd/geth: admin, switched price with limit in arguments 2015-05-06 18:30:56 +02:00
obscuren
7fed424435 cmd/geth: implemented resending transaction with different gas settings 2015-05-06 18:30:55 +02:00
obscuren
92f998c7ef core: use removeTx instead of delete 2015-05-06 18:30:55 +02:00
obscuren
03bb88dec0 xeth, rpc: added nonce setting through RPC and xeth transact 2015-05-06 18:30:55 +02:00
Gustav Simonsson
054947def7 Add ethash linux & windows build fixes 2015-05-06 17:38:28 +02:00
Jeffrey Wilcke
aa884c052d Merge pull request #771 from zsfelfoldi/develop
jsre: support for setTimeout, sendAsync
2015-05-06 07:27:24 -07:00
Felix Lange
2adcc31bb4 p2p/discover: new distance metric based on sha3(id)
The previous metric was pubkey1^pubkey2, as specified in the Kademlia
paper. We missed that EC public keys are not uniformly distributed.
Using the hash of the public keys addresses that. It also makes it
a bit harder to generate node IDs that are close to a particular node.
2015-05-06 16:10:41 +02:00
zsfelfoldi
c54d123b31 setTimeout and sendAsync implemented
added and eval queue for serializing JSRE vm execution
2015-05-06 15:58:27 +02:00
Jeffrey Wilcke
2e9ed6f7aa Merge pull request #856 from karalabe/windows-console-color-fix
cmd/geth: colorize console output in windows
2015-05-05 04:50:48 -07:00
Péter Szilágyi
c750ef09e1 cmd/geth: fix #853 colorize console output in windows 2015-05-05 14:44:39 +03:00
Gustav Simonsson
f4341c7b7f Unskip working blocktests following ethash cache reusage 2015-05-05 08:34:29 +02:00
Gustav Simonsson
b1cc9cdc74 Integrate new ethash API and change geth makedag cmd 2015-05-05 08:24:15 +02:00
Gustav Simonsson
50659f4b48 Update ethash Godeps files 2015-05-05 07:50:04 +02:00
Péter Szilágyi
4accc187d5 eth, p2p: add trusted node list beside static list 2015-05-04 13:59:51 +03:00
Péter Szilágyi
2382da4179 cmd/mist: fix a stale error message 2015-05-04 13:11:43 +03:00
Péter Szilágyi
54db54931e p2p: add static node dialing test 2015-05-04 13:08:42 +03:00
Jeffrey Wilcke
ac85fdc75e Merge pull request #835 from obscuren/handler_errors
eth, eth/downloader: error handlers and td checks
2015-05-04 02:00:54 -07:00
obscuren
37770ed0d3 core: added unix timestamp to debug output for block proc 2015-05-03 21:49:19 +02:00
obscuren
1470b22e90 downloader: hash downloading recovery
If a peer fails to respond (disconnect, etc) during hash downloading
switch to a different peer which has it's current_hash in the queue's
peer set.
2015-05-03 16:27:03 +02:00
obscuren
ba2236fa51 cmd/geth, eth: bump version & tmp fix for incorrect TD peers 2015-05-03 14:11:47 +02:00
obscuren
f2a2b2ac70 eth/downloader: put back hashes on block overflow error 2015-05-03 14:11:00 +02:00
obscuren
493181ea09 eth/downloader: changed has to blockHashes for chain linking 2015-05-03 14:10:31 +02:00
obscuren
c5b8acbaf0 core: print ignored blocks 2015-05-03 14:09:50 +02:00
obscuren
25bc88113f eth/downloader: added additional tests 2015-05-03 14:09:33 +02:00
obscuren
c6ad3aec05 eth,core: changed NewTicker to Tick 2015-05-03 13:27:37 +02:00
obscuren
b298928c49 core: added 'ignored' status 2015-05-01 16:00:30 +02:00
obscuren
016f152b36 eth, eth/downloader: Moved block processing & graceful shutdown
The downloader is no longer responsible for processing blocks. The
eth-protocol handler now takes care of this instead.

Added graceful shutdown during block processing. Closes #846
2015-05-01 15:58:44 +02:00
Péter Szilágyi
e82ddd9198 p2p: correct a leftover trusted -> static 2015-04-30 19:34:33 +03:00
Péter Szilágyi
413ace37d3 eth, p2p: rename trusted nodes to static, drop inbound extra slots 2015-04-30 19:32:48 +03:00
obscuren
8595198c1b eth/downloader: delete blocks from queue 2015-04-30 17:51:47 +02:00
obscuren
15873fafc0 core: added a wait group to chain manager for graceful shutdown 2015-04-30 17:50:47 +02:00
Péter Szilágyi
701591b403 cmd, eth, p2p: fix review issues enumerated by Felix 2015-04-30 16:15:29 +03:00
Péter Szilágyi
1528dbc171 p2p: add trust check to handshake, test privileged connectivity
Conflicts:
	p2p/server_test.go
2015-04-30 16:06:47 +03:00
Péter Szilágyi
14f32a0c3a p2p: reduce the severity of a debug log 2015-04-30 16:04:09 +03:00
Péter Szilágyi
679c90b873 cmd/geth, cmd/utils, eth: internalize trusted node config file 2015-04-30 16:03:47 +03:00
Péter Szilágyi
de0549fabb cmd/geth, cmd/mist, cmd/utils, eth, p2p: support trusted peers 2015-04-30 16:03:10 +03:00
Felix Lange
d457a1187d common: add Hash.Generate 2015-04-30 15:02:23 +02:00
Felix Lange
72ab6d3255 p2p/discover: track sha3(ID) in Node 2015-04-30 15:02:23 +02:00
Felix Lange
b34a8ef624 p2p, p2p/discover: protocol version 4 2015-04-30 14:57:34 +02:00
Felix Lange
fc747ef4a6 p2p/discover: new endpoint format
This commit changes the discovery protocol to use the new "v4" endpoint
format, which allows for separate UDP and TCP ports and makes it
possible to discover the UDP address after NAT.
2015-04-30 14:57:33 +02:00
obscuren
e4dba36892 core: check for parent in calc TD. TD = (N != 0 == parent.TD) || (== D) 2015-04-30 14:55:21 +02:00
obscuren
28b39267d9 core, eth: verify td of received blocks 2015-04-30 13:50:59 +02:00
obscuren
9b6e8f6195 eth, eth/downloader: remove bad peers from peer set
Peers in the eth protocol handler are now being ignored for catch up.
2015-04-30 12:38:16 +02:00
Jeffrey Wilcke
3fef601903 Merge pull request #830 from obscuren/downloader-missing-parent
eth/downloader: missing parent improvement
2015-04-29 15:52:25 -07:00
obscuren
30b921ef46 cmd/geth: bump version to 0.9.14 2015-04-30 00:40:14 +02:00
obscuren
88292f35db core: remove txs from queue in addition to removal of pending 2015-04-30 00:20:59 +02:00
obscuren
2590a7dabb core: added some additional chain tests for shortest chain 2015-04-30 00:14:41 +02:00
obscuren
04c209980b eth: rely on p2p to determine block propagation 2015-04-29 22:50:58 +02:00
obscuren
01e3d694a6 p2p: added received at to peer message
p2p.Msg.ReceivedAt can be used for determining block propagation from
begining to end.
2015-04-29 22:49:58 +02:00
obscuren
9e63798d03 core/types, eth: meassure and display propagation times 2015-04-29 19:55:30 +02:00
obscuren
f8c27d7159 eth/downloader: drop block 2015-04-29 19:55:04 +02:00
obscuren
c930045834 core: fixed tetst to reflect (int, error) return by insertChain 2015-04-29 15:27:04 +02:00
obscuren
dfbf580354 eth/downloader: ignore orphan blocks in the downloader.
When blocks have been sorted and are being processed, orphan blocks
should be ignored and thrown out. The protocol handler is responsible
for downloading blocks which have missing parents.
2015-04-29 14:49:37 +02:00
obscuren
735b029db9 core: return the index of the block that failed when inserting a chain 2015-04-29 14:00:24 +02:00
Jeffrey Wilcke
764e81bf12 Merge pull request #825 from obscuren/develop
core: chain fork fix
2015-04-29 04:47:26 -07:00
Jeffrey Wilcke
bac4440e17 Merge pull request #822 from fjl/makefile-improvements
Makefile improvements
2015-04-29 04:43:38 -07:00
obscuren
13364a2dcf eth/downloader: reset the chain when parent is missing during processing 2015-04-29 13:40:39 +02:00
obscuren
745c368987 cmd/geth: bump version number 2015-04-29 12:54:41 +02:00
obscuren
4e07967711 core: fixed chain reorg during splits
Chain reorgs weren't properly handled when a chain was further ahead.
Previously we'd end up with mixed chains in our canonical numbering
sequence. Added test for this type of forking.

```
     /-o-o-o   A
o-C-+
     \-o-o-o-o B
```

Ends up with with C A1, A2, A3, B4
2015-04-29 12:51:05 +02:00
obscuren
af73d1d682 core/types: added fake parent hash / hash to String() output 2015-04-29 12:51:05 +02:00
obscuren
4b7bdc3766 eth: check if downloader is busy before showing log message 2015-04-29 12:51:05 +02:00
obscuren
7ac24d551b core: seperated proccing mutex and getting mutex 2015-04-29 12:51:04 +02:00
obscuren
9f32117457 core: bump database version 2015-04-29 12:51:04 +02:00
obscuren
a4b79f1dac core: moved mutex locks in insert blocks to start of function
Insert blocks will no longer allow processing of multiple chains at the
same time. The block lock has been moved to start of the function.
2015-04-29 12:51:04 +02:00
obscuren
04a09b7e2d core: set min gas price at startup 2015-04-29 12:51:04 +02:00
Jeffrey Wilcke
32373e3837 Merge pull request #828 from tgerring/pathfixes
Remove path separator literals
2015-04-29 01:54:47 -07:00
Taylor Gerring
f8cdff9a5d Remove path separator literals 2015-04-29 00:30:25 -05:00
Felix Lange
aa03e53ca8 Use Makefile for Travis tests 2015-04-29 02:13:37 +02:00
Felix Lange
c6b983e449 Makefile: add test target 2015-04-29 02:13:37 +02:00
Felix Lange
72d8878084 cmd/mist: always enable whisper
The default value of the Shh option is true, but cli can't
see it because it is not part of the mist options.
2015-04-29 02:13:36 +02:00
Felix Lange
eb5e43022e cmd/geth, cmd/mist: use gitCommit in node name 2015-04-29 02:13:36 +02:00
Felix Lange
71c28cfb0c Makefile: set main.gitCommit when building 2015-04-29 02:13:36 +02:00
Felix Lange
f4e5675303 cmd/mist: add blockchain version flag
This is necessary because cli doesn't see the default
value unless the flag is included.
2015-04-29 02:13:35 +02:00
Felix Lange
26fbea5cb7 README: simplify build instructions 2015-04-29 02:13:35 +02:00
Felix Lange
8fcd71920a Makefile: clean should also delete Godeps/_workspace/pkg 2015-04-29 01:28:35 +02:00
Felix Lange
12df8565cf build: run build commands from the fake workspace root
This ensures that compiler error messages contain the correct path.
2015-04-29 01:28:35 +02:00
Jeffrey Wilcke
a6a49ccbf7 Merge pull request #821 from karalabe/nodedb-fix
p2p/discover: fix api issues caused by leveldb update
2015-04-28 04:07:14 -07:00
Jeffrey Wilcke
a7d894611e Merge pull request #820 from fjl/rlp-readkind-overflow
rlp: fix list bounds check overflow (found by go-fuzz)
2015-04-28 04:04:32 -07:00
Péter Szilágyi
b569550a39 p2p/discover: fix api issues caused by leveldb update 2015-04-28 13:57:57 +03:00
Jeffrey Wilcke
91cb8cdd2a Merge pull request #793 from karalabe/discovery-node-cache
p2p/discover: persistent node database
2015-04-28 03:40:10 -07:00
Jeffrey Wilcke
e88b410b4d Merge pull request #819 from karalabe/leveldb-update
godeps: refresh leveldb, clean up stale dependencies
2015-04-28 02:40:49 -07:00
Péter Szilágyi
7e3b080f85 godeps: update leveldb and snappy, dump serpent-go 2015-04-28 12:18:01 +03:00
obscuren
99027c79fe Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop
Conflicts:
	rpc/api.go
2015-04-28 11:17:41 +02:00
obscuren
bac455c011 Merge branch 'kobigurk-develop' into develop 2015-04-28 11:16:22 +02:00
obscuren
459d898705 eth, rpc, xeth: ext_hanhrate => eth_hashrate 2015-04-28 11:16:03 +02:00
obscuren
46f63ef04f Merge branch 'develop' of https://github.com/kobigurk/go-ethereum into kobigurk-develop 2015-04-28 11:10:44 +02:00
Jeffrey Wilcke
a05c420371 Merge pull request #738 from karalabe/whisper-cleanup
Whisper cleanup, part 3
2015-04-28 01:54:05 -07:00
Felix Lange
dd49c8e43d rlp: fix list bounds check overflow (found by go-fuzz)
The list size checking overflowed if the size information
for a value was bigger than the list. This is resolved by
always performing the check before reading.
2015-04-28 10:28:15 +02:00
Péter Szilágyi
978ffd3097 rpc, xeth: finish cleaning up xeth 2015-04-28 10:49:05 +03:00
Péter Szilágyi
2b9fd6b40a whisper: add full filter test suite 2015-04-28 10:49:05 +03:00
Péter Szilágyi
406e74e2af whisper: fix a small data race duirng peer connection 2015-04-28 10:49:05 +03:00
Péter Szilágyi
70ded4cbf0 xeth: fix un-decoded whisper RPC topic string bug 2015-04-28 10:49:04 +03:00
Péter Szilágyi
e252dae499 rpc: use nil topic wildcards instead of "" 2015-04-28 10:49:04 +03:00
Péter Szilágyi
db615a85ec ui/qt/qwhisper, whisper, xeth: polish topic filter, fix wildcards 2015-04-28 10:49:04 +03:00
Péter Szilágyi
ae4bfc3cfb rpc, ui/qt/qwhisper, whisper, xeth: introduce complex topic filters 2015-04-28 10:49:04 +03:00
Péter Szilágyi
15586368e5 whisper: fix spurious From identity with untargeted messages 2015-04-28 10:49:04 +03:00
Péter Szilágyi
87447f9f3f whisper: fix payload loss in case of plaintext decrypt 2015-04-28 10:49:04 +03:00
Péter Szilágyi
7f48eb8737 whisper, xeth/whisper: surface TTL and hash to the API 2015-04-28 10:49:04 +03:00
Péter Szilágyi
19bc4624ea eth: pull in a lost merge change
Ref: 21c4c155ee
2015-04-28 10:49:04 +03:00
Péter Szilágyi
7948cc0029 rpc, whisper, xeth: fix RPC message retrieval data race 2015-04-28 10:47:35 +03:00
Péter Szilágyi
5aa523e32b whisper: fix send timestamp omission during envelope opening 2015-04-28 10:47:35 +03:00
Péter Szilágyi
3563c59b12 rpc, whisper, xeth: polish whisper RPC interface 2015-04-28 10:47:35 +03:00
Péter Szilágyi
4992765032 p2p/discover: fix goroutine leak due to blocking on sync.Once 2015-04-28 10:28:04 +03:00
Jeffrey Wilcke
182d484aa7 Merge pull request #817 from tgerring/rpcglog
Remove old logger from RPC pkg
2015-04-27 14:51:00 -07:00
Jeffrey Wilcke
f54c2e75c8 Merge pull request #818 from Gustav-Simonsson/add_privkey_loading_to_block_tests
Add privkey loading to block tests
2015-04-27 14:48:49 -07:00
Taylor Gerring
3ad5243b18 Return Gas Price not Gas
And output as quantity, not data
2015-04-27 13:58:32 -05:00
Gustav Simonsson
34c94d5fcd Add loading of block test privkey if present 2015-04-27 20:30:26 +02:00
Gustav Simonsson
2a61611c4f Update JSON tests 2015-04-27 19:09:20 +02:00
Péter Szilágyi
437cf4b3ac p2p/discover: add node expirer and related tests 2015-04-27 17:38:28 +03:00
Taylor Gerring
9a17dd91a4 Add link to Windows 64-bit geth dev build 2015-04-27 09:24:25 -05:00
Taylor Gerring
b071e7f4db Remove old logger from RPC pkg 2015-04-27 09:18:55 -05:00
Péter Szilágyi
a136e2bb22 p2p/discover: parametrize nodedb version, add persistency tests 2015-04-27 15:28:17 +03:00
Péter Szilágyi
75fd738dea p2p/discover: drop a superfluous warning 2015-04-27 15:06:31 +03:00
Péter Szilágyi
706da56f75 p2p/discover: wrap the pinger to update the node db too 2015-04-27 14:56:42 +03:00
Péter Szilágyi
85b4b44235 p2p/discover: use iterator based seeding, drop old protocol test 2015-04-27 14:45:35 +03:00
Péter Szilágyi
8de8f61d36 p2p/discover: write the basic tests, catch RLP bug 2015-04-27 12:33:06 +03:00
Péter Szilágyi
0201c04b95 p2p/discovery: fix issues raised in the nodeDb PR 2015-04-27 10:19:16 +03:00
Jeffrey Wilcke
aa4c25778f Merge pull request #813 from obscuren/general_fixes
General fixes
2015-04-26 03:12:30 -07:00
obscuren
7fd368c586 geth/main: removed crazy welcome message :-( 2015-04-26 11:30:33 +02:00
obscuren
a237ff65ea web3: updated 2015-04-26 11:21:15 +02:00
obscuren
145e02fc54 core, miner: added value check on tx validation
* Changed CalcGasLimit to no longer need current block
* Added a gas * price + value on tx validation
* Transactions in the pool are now re-validated once every X
2015-04-26 11:19:40 +02:00
Jeffrey Wilcke
8d09f95bc7 Merge pull request #805 from obscuren/download_improvements
eth, eth/downloader: improve downloader and remove asynchronousness
2015-04-24 15:56:17 -07:00
obscuren
ed036a2ce7 cmd/geth: bump version number 0.9.12 2015-04-24 23:57:05 +02:00
Jeffrey Wilcke
7afbd0f20d Merge pull request #796 from Gustav-Simonsson/fix_ignoring_of_unexpected_files_in_key_dir
Fix ignore of unexpected files in key dir
2015-04-24 14:37:42 -07:00
Gustav Simonsson
b0bf12ec87 Remove unneeded allocation 2015-04-24 19:40:28 +02:00
obscuren
7ce3d06402 eth/downloader: removed update loop and synch channel 2015-04-24 18:28:46 +02:00
obscuren
405720b218 xeth, core, cmd/utils: Transaction can not be over block gas limit
Transactions will be invalidated when the tx.gas_limit > block.gas_limit
2015-04-24 17:48:13 +02:00
obscuren
3bb6da9bd3 natspec: disabled natspec test 2015-04-24 17:44:22 +02:00
Gustav Simonsson
4d1887093d Use make instead of new for allocation 2015-04-24 17:41:38 +02:00
Péter Szilágyi
8646365b42 cmd/bootnode, eth, p2p, p2p/discover: use a fancier db design 2015-04-24 18:04:41 +03:00
obscuren
1681ee9883 eth: added a few informative messages regarding downloading 2015-04-24 17:03:09 +02:00
Jeffrey Wilcke
c8e21a4d17 Merge pull request #803 from obscuren/log_filter_fixes
core: fixed wildcard topic filters. Closes #725
2015-04-24 07:43:01 -07:00
Jeffrey Wilcke
168ff36676 Merge pull request #773 from ethersphere/frontier/cli
CLI and JS admin changes
2015-04-24 06:58:31 -07:00
obscuren
a9e4b96573 eth/downloader: fixed tests 2015-04-24 15:56:18 +02:00
obscuren
d84c2202e7 eth, eth/downloader: simplified synchronisation process 2015-04-24 15:38:10 +02:00
obscuren
bd9c76097d eth/downloader: removed peer td management and best peer selection 2015-04-24 15:37:07 +02:00
obscuren
31f82eb334 eth, eth/downloader: don't require td on downloader. Fixed tests 2015-04-24 15:04:58 +02:00
obscuren
b86e7526e1 eth, eth/downloader: moved peer selection to protocol handler 2015-04-24 14:40:32 +02:00
Jeffrey Wilcke
81379cbc7b Merge pull request #804 from alexvandesande/avsa-geth
Simpler "welcome"
2015-04-24 04:57:05 -07:00
Alexandre Van de Sande
f229dc8f42 Merge branch 'avsa-geth' of https://github.com/alexvandesande/go-ethereum into avsa-geth 2015-04-24 13:51:29 +02:00
Alexandre Van de Sande
8716278ca8 Smaller frontier cover art 2015-04-24 13:50:23 +02:00
zelig
c5e9a0a71c cli: correct bootnodes flag usage help line 2015-04-24 12:46:53 +01:00
Alexandre Van de Sande
f1126dbb87 Smaller frontier cover art 2015-04-24 13:46:41 +02:00
obscuren
cd2782f59c core: fixed wildcard topic filters. Closes #725 2015-04-24 13:45:21 +02:00
zelig
6b1b5a4a2a cli/js console: if corsDomain is not given to startRpc, we fall back to value set on command line with -corsDomain 2015-04-24 12:45:11 +01:00
zelig
1b7c017076 cli: fatal error if no etherbase for mining 2015-04-24 12:45:11 +01:00
zelig
be843959cb backend: start miner in its go routine (no wait to generate DAG) 2015-04-24 12:45:11 +01:00
zelig
6512b23b98 cli: fatal error if rpc could not be started 2015-04-24 12:45:11 +01:00
zelig
7b2f25b578 cli: clean up flag descriptions, usage docs, account list uses primary and indexes, add help line to account subcnd usage 2015-04-24 12:45:11 +01:00
zelig
22450c069b js console: add cors domain optional argument to startRpc 2015-04-24 12:45:11 +01:00
zelig
a3fb41981e cmd/admin: rename debug.block to debug.processBlock; move backtrace under debug 2015-04-24 12:45:11 +01:00
Jeffrey Wilcke
9caf880ff9 Update README.md 2015-04-24 13:40:20 +02:00
Jeffrey Wilcke
31811365e0 Merge pull request #800 from obscuren/ethereum_js_update
Ethereum js update
2015-04-24 04:34:51 -07:00
obscuren
dc62fb2ee9 web3: updated 2015-04-24 11:39:43 +02:00
obscuren
92c6327593 cmd/geth, jsre: updated ethereum.js => web3.js 2015-04-24 11:37:58 +02:00
Péter Szilágyi
6def110c37 cmd/bootnode, eth, p2p, p2p/discover: clean up the seeder and mesh into eth. 2015-04-24 11:33:55 +03:00
Péter Szilágyi
971702e7a1 p2p/discovery: fix broken tests due to API update 2015-04-24 11:23:20 +03:00
Péter Szilágyi
af923c965f p2p/discovery: use the seed table for finding nodes, auto drop stale ones 2015-04-24 11:23:20 +03:00
Péter Szilágyi
5f735d6fce cmd, eth, p2p, p2p/discover: init and clean up the seed cache 2015-04-24 11:23:20 +03:00
Felix Lange
936c8e19ff p2p/discover: store nodes in leveldb 2015-04-24 11:23:20 +03:00
obscuren
516f49c812 eth: cleanup 2015-04-23 23:30:25 +02:00
Jeffrey Wilcke
b6ec1c720f Merge pull request #797 from tgerring/bootnodes
Bootnodes update
2015-04-23 11:53:18 -07:00
Jeffrey Wilcke
f5e0388f62 Merge pull request #778 from bas-vk/issue764
Moved database update loop to eth/backend
2015-04-23 11:46:27 -07:00
Jeffrey Wilcke
abe08d7be3 Merge pull request #794 from Gustav-Simonsson/block_tests_more_validations
Add block header validations for block tests
2015-04-23 11:41:57 -07:00
Taylor Gerring
24995f9ab7 Updated bootnodes
Update pub key for EU node and add new SA node
2015-04-23 13:06:07 -05:00
Taylor Gerring
154570ebd3 Cleanup README developer info 2015-04-23 13:05:37 -05:00
Bas van Kervel
c12180d005 Merge branch 'issue764' of https://github.com/bas-vk/go-ethereum into issue764 2015-04-23 18:01:15 +02:00
Bas van Kervel
c273ed7d82 Moved leveldb update loop to eth/backend
change order of block insert and update LastBlock

bugfix, wrong hash stored in blockDb
2015-04-23 17:58:58 +02:00
Bas van Kervel
5cfa0e9187 bugfix, wrong hash stored in blockDb 2015-04-23 17:35:05 +02:00
Jeffrey Wilcke
94f2adb80a Merge pull request #792 from veox/doc-crypto-secp256k1
doc: crypto/secp256k1 GMP dependency package name.
2015-04-23 08:11:11 -07:00
Noel Maersk
958c04e79a doc: crypto/secp256k1 GMP dependency package name.
Linux build documentation is mostly geared towards Ubuntu 14.04 (LTS).
Appropriate package is called `libgmp-dev` there.

Note that on pristine installations building `geth` with godep will
fail because this header is missing. This is not documented in the
top-level README, but is on the wiki:

https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu#building-geth-command-line-client

That page recommends `libgmp3-dev`, which ATM provides same version
as `libgmp-dev`.
2015-04-23 17:33:48 +03:00
Jeffrey Wilcke
2f8809df40 Merge pull request #769 from obscuren/develop
core: transaction queue
2015-04-23 02:59:56 -07:00
obscuren
7f14fbd579 core: pending txs now re-validated once every second 2015-04-23 11:50:12 +02:00
obscuren
48135657c4 miner: show error message for gas limit per account 2015-04-23 11:50:12 +02:00
obscuren
d7bab21681 natspec: fixed test to work with new queued transactions 2015-04-23 11:50:12 +02:00
obscuren
fba40e18d9 core: added accessor for queued transactions 2015-04-23 11:50:12 +02:00
obscuren
d3be1a2719 eth: moved mined, tx events to protocol-hnd and improved tx propagation
Transactions are now propagated to peers from which we have not yet
received the transaction. This will significantly reduce the chatter on
the network.

Moved new mined block handler to the protocol handler and moved
transaction handling to protocol handler.
2015-04-23 11:50:12 +02:00
obscuren
888ece0cb2 core: fixed test 2015-04-23 11:50:12 +02:00
obscuren
7edbb0110f core: set the state for the managed tx state
Set the state for the managed tx state instead of creating a new
managed state.
2015-04-23 11:50:12 +02:00
obscuren
1506e00a23 core: improved error message for invalid nonce txs 2015-04-23 11:50:11 +02:00
obscuren
7138404cb0 core: only post event once per tx & fixed test 2015-04-23 11:50:11 +02:00
obscuren
4feb5f6f9c xeth, miner: updated some logging 2015-04-23 11:50:11 +02:00
obscuren
5cb5df003d eth: start tx pool in a goroutine 2015-04-23 11:50:11 +02:00
obscuren
498b24270a core: implemented a queued approach processing transactions
Implemented a new transaction queue. Transactions with a holes in their
nonce sequence are also not propagated over the network.

N: 0,1,2,5,6,7 = propagate 0..2 -- 5..N is kept in the tx pool
2015-04-23 11:50:11 +02:00
Jeffrey Wilcke
2fe54ab233 Merge pull request #779 from Gustav-Simonsson/block_tests_reloaded
Block tests reloaded
2015-04-23 02:49:51 -07:00
Jeffrey Wilcke
0071fbed8c Merge pull request #780 from maran/arm_build
Adding flags to facilitate cross compiling to ARM
2015-04-23 02:22:39 -07:00
Jeffrey Wilcke
67cc80ba66 Merge pull request #786 from tgerring/issue739
Empty Call response should return 0x instead of 0x00. Closes #739
2015-04-23 02:22:35 -07:00
Jeffrey Wilcke
8eefcb8493 Merge pull request #782 from alexvandesande/develop
Changed "Welcome to the Frontier" to something more geeky
2015-04-23 02:11:32 -07:00
Jeffrey Wilcke
359a9773a1 Merge pull request #783 from tgerring/issue777
Issue 777
2015-04-23 02:11:20 -07:00
Jeffrey Wilcke
69788cb973 Merge pull request #784 from tgerring/issue737
Rename eth_Version to eth_protocolVersion. Closes #737
2015-04-23 02:05:20 -07:00
Gustav Simonsson
9d2a156453 Fix ignore of unexpected files in key dir 2015-04-23 05:52:41 +02:00
Gustav Simonsson
7a223721a5 Add block header validations for block tests 2015-04-23 05:32:56 +02:00
Gustav Simonsson
49da462e92 Include ZeroByteAtTheEnd and RandomByteAtTheEnd tests 2015-04-22 23:16:19 +02:00
Gustav Simonsson
4e0a2c8e8c Validate block header UncleHash against calculated hash 2015-04-22 23:16:19 +02:00
Gustav Simonsson
ec6acacc53 Unskip BlockTests/bcInvalidHeaderTest.json wrongUncleHash 2015-04-22 23:16:19 +02:00
Gustav Simonsson
9834f855fa Finally, glorious HEX 2015-04-22 23:16:19 +02:00
Gustav Simonsson
24de35ef09 Add StateTests/stMemoryStressTest.json but skip for now 2015-04-22 23:16:19 +02:00
Gustav Simonsson
5c70333a12 Exclude TransactionWithSvalue0 as it expects invalid s value to be valid 2015-04-22 23:16:18 +02:00
Gustav Simonsson
8ec8bff11c Update github.com/ethereum/tests files 2015-04-22 23:16:18 +02:00
Gustav Simonsson
573bc3e05e Explicitly skip TransactionTests/tt10mbDataField.json 2015-04-22 23:16:17 +02:00
Gustav Simonsson
7254278c09 Add test wrapper for VMTests/vmInputLimits1.json 2015-04-22 23:16:17 +02:00
Felix Lange
c745831118 Merge pull request #787 from ethereum/revert-785-revert-781-develop
Revert "Revert "refactor Dockerfile""
2015-04-22 21:36:01 +02:00
Felix Lange
33083e6f6c Revert "Revert "refactor Dockerfile"" 2015-04-22 21:35:46 +02:00
Taylor Gerring
73b3f2837f Handle bug in parent call response 2015-04-22 14:14:10 -05:00
Felix Lange
95f172d4dc Merge pull request #785 from ethereum/revert-781-develop
Revert "refactor Dockerfile"
2015-04-22 20:52:47 +02:00
Felix Lange
1a0b3d8c84 Revert "refactor Dockerfile" 2015-04-22 20:52:21 +02:00
Taylor Gerring
41e3d01e63 Rename eth_Version to eth_protocolVersion. Closes #737 2015-04-22 13:42:09 -05:00
Taylor Gerring
20bae2b8f6 Tests for magic words 2015-04-22 13:24:29 -05:00
Taylor Gerring
2ea2261156 Accept num or hex as index 2015-04-22 13:24:10 -05:00
Taylor Gerring
35ad9febce Update eth_getBlockByNumber to accept words 2015-04-22 13:14:10 -05:00
caktux
5f6c8832af Merge pull request #781 from caktux/develop
refactor Dockerfile
2015-04-22 13:46:04 -04:00
Alexandre Van de Sande
d2fab43abc Changed "Welcome to the Frontier" to something more geeky 2015-04-22 18:33:33 +02:00
caktux
39047d7d8b refactor Dockerfile 2015-04-22 11:38:54 -04:00
Maran
04e216319e Adding flags to facilitate cross compiling to ARM 2015-04-22 17:04:46 +02:00
Jeffrey Wilcke
35595560f0 Merge pull request #776 from fjl/win32-build-fixes
Win32 build fixes
2015-04-22 06:50:50 -07:00
Bas van Kervel
c9e22976f5 change order of block insert and update LastBlock 2015-04-22 12:50:33 +02:00
Bas van Kervel
07e85d8e14 Moved leveldb update loop to eth/backend 2015-04-22 12:46:41 +02:00
Felix Lange
e1f616fadf cmd/geth: improve the JS tests
These changes ensure that the JS tests run without networking
and fixes the block chain export and its associated test.
2015-04-22 12:31:19 +02:00
Felix Lange
635b66acdc p2p: return zero node from Self if the server is not running
This helps with fixing the tests for cmd/geth to run without networking.
2015-04-22 12:31:19 +02:00
Felix Lange
96e2b6bc07 miner: use 32bit atomic operations
64bit atomic operations are not available on all 32bit platforms.
2015-04-22 12:31:19 +02:00
Felix Lange
9d152d6191 common: delete BinaryLength
The test is failing the 32bit build and the function
is not used anywhere.
2015-04-22 12:31:19 +02:00
Felix Lange
2f4cc72119 Merge pull request #765 from Gustav-Simonsson/more_block_test_improvements
Further fixes to block test wrapper
2015-04-22 11:53:02 +02:00
Jeffrey Wilcke
15550dc8c5 Merge pull request #766 from tgerring/issue762
Treat hexnums as big.Int instead of int64. Closes #762
2015-04-22 02:42:16 -07:00
Taylor Gerring
13dc8627b5 Treat hexnums as big.Int instead of int64 2015-04-21 08:48:57 -05:00
Kobi Gurkan
9e03c48d43 move eth_hashrate to ext 2015-04-21 16:44:08 +03:00
Kobi Gurkan
63c5c7fb2d uses newHexNum for eth_hashrate 2015-04-21 16:44:08 +03:00
Kobi Gurkan
41b83fe1cd adds eth_hashrate RPC method 2015-04-21 16:44:08 +03:00
Jeffrey Wilcke
4ddbf81e74 Updated README to include windows builds 2015-04-21 12:38:01 +02:00
Jeffrey Wilcke
4ad8b28794 Merge pull request #760 from obscuren/develop
core: transaction fixes
2015-04-21 03:14:38 -07:00
obscuren
6c2b703c58 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-21 12:14:07 +02:00
Jeffrey Wilcke
1dc91975ad Merge pull request #756 from Gustav-Simonsson/block_test_improvements
Block test improvements
2015-04-21 03:09:35 -07:00
obscuren
f4cd66dc00 blockpool: deleted 2015-04-21 12:03:02 +02:00
obscuren
ed0817c55d core/rpc: fix for null entries in log filters. Closes #725
You can now specify `null` as a way of saying "not interested in this
topic, match all". core.Filter assumes the zero'd address to be the
wildcard. JSON rpc assumes empty strings to be wildcards.
2015-04-21 12:00:57 +02:00
Jeffrey Wilcke
8fce55b4c2 Merge pull request #763 from aboreum/develop
Remove "minGasPrice" field from JSON responses. Closes. #754
2015-04-21 02:30:40 -07:00
obscuren
093d6d5074 core: removed nonce resetting from the block processor.
All nonce error handling has been moved to the worker
2015-04-21 11:27:12 +02:00
obscuren
1d6d42919e miner: ignore a tx's transactor after a gas limit has been returned
When worker encounters a gas limit error, subsequent txs should be
ignored from that particular account. This will prevent:

1. Nonce errors been thrown all around
2. The "Known tx" error. Closes #719
3. Repeated contract address. Closes #731
2015-04-21 11:26:04 +02:00
Andy
64e8aa6260 syncing to mainline ethereum 2015-04-20 22:19:49 -06:00
Andy
3ef1cd43f6 fix for: Please remove the "minGasPrice" from block returns #754 2015-04-20 22:08:50 -06:00
Gustav Simonsson
b448390889 Further fixes to block test wrapper
* Move go test wrapper for block tests from cmd/geth to tests
* Fix logic for when tests are valid or not, by adding correct
  validations for expected valid/invalid blocks
* Change block insertion helper to work on single blocks
* Add one test case for each file in BlockTests and comment out
  the tests which are currently failing
* Add Skip call in all block tests in lieu of performance fixes
  around ethash cache which are needed before it will be fast enough
  to start / stop the node between each test
2015-04-21 05:23:10 +02:00
Jeffrey Wilcke
4a240608d4 Merge pull request #761 from aboreum/develop
trivial fix for: Broken link for detailed go build instructions #661
2015-04-20 16:04:44 -07:00
Andy
8d85e45c7d syncing to develop 2015-04-20 15:05:13 -06:00
Andy
59a7405a80 Broken link for detailed go build instructions #661 2015-04-20 14:47:12 -06:00
Andy
4494cba489 Merge branch 'develop' of https://github.com/aboreum/go-ethereum into develop
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2015-04-20 14:43:12 -06:00
Andy
859187931b fix for: Broken link for detailed go build instructions #661 2015-04-20 14:31:26 -06:00
obscuren
79bef9eb16 Merge branch 'develop' of github.com-obscure:obscuren/go-ethereum into develop 2015-04-20 21:57:00 +02:00
obscuren
b8160cc6d4 core: shuffled some code 2015-04-20 20:37:40 +02:00
Jeffrey Wilcke
99e825ad96 Merge pull request #734 from bas-vk/issue-729
admin.StopRPC added to console
2015-04-20 10:34:50 -07:00
Jeffrey Wilcke
3d7c1b8194 Merge pull request #755 from karalabe/command-flags-cleanup
cmd/geth, cmd/utils: add cli flags for pprof and whisper
2015-04-20 09:17:04 -07:00
Péter Szilágyi
3b008723db cmd/geth, cmd/utils: invert --pprof once more 2015-04-20 19:14:49 +03:00
obscuren
f28b2bb6ed core: upgraded block chain version 2015-04-20 18:12:05 +02:00
obscuren
3b45fedb81 Merge branch 'ethersphere-frontier/natspec' into develop 2015-04-20 18:09:10 +02:00
obscuren
36ec42e50c Merge branch 'frontier/natspec' of https://github.com/ethersphere/go-ethereum into ethersphere-frontier/natspec 2015-04-20 18:08:14 +02:00
Péter Szilágyi
c8e2b3710c cmd/geth, cmd/utils: use pprof disable flag, start globally 2015-04-20 18:59:41 +03:00
Gustav Simonsson
805345d135 Add block tests wrapper and fixes for tx tests
* Add fixes to parsing and converting of fields in tx tests
* Correct logic in tx tests; validation of fields and correct
  logic for when RLP decoding works/fails and when this is
  expected or not
* Rename files for consistency
* Add block tests wrapper to run block tests with go test
2015-04-20 17:46:35 +02:00
Péter Szilágyi
8830403acf cmd/geth, cmd/utils: add cli flags for pprof and whisper. 2015-04-20 18:45:37 +03:00
obscuren
76025cc424 geth: added a admin.debug.block command which reprocess the block 2015-04-20 16:03:19 +02:00
obscuren
72d065d491 core: force block process & fixed chain manager test 2015-04-20 16:02:50 +02:00
obscuren
97a9753f87 core: added chain reset mechanism on bad blocks 2015-04-20 12:58:17 +02:00
obscuren
45da3e17e2 core: added chain head reset to known block 2015-04-20 12:29:02 +02:00
obscuren
52584596d4 geth: bump version number 2015-04-20 12:01:39 +02:00
obscuren
97b0c4b697 core: moved TD calculation from proc to chain 2015-04-20 12:01:20 +02:00
obscuren
fa729a0c55 miner: go fmt 2015-04-20 00:41:50 +02:00
Vitalik Buterin
5caf1aa1a9 Switched getWork third output from difficulty to target 2015-04-19 17:42:21 -04:00
zelig
093a9106b0 contract addresses include hex prefix
- simplify resolver and tests
- added missing test for KeyToUrl
- fix notice error message and its test with !%x(MISSING)
- natspec test: insertTx modified - does not prepend 0x to contract address
- disable networking in e2e test
2015-04-19 21:09:30 +01:00
obscuren
2cc9211269 miner: fixed remote miner current work 2015-04-19 21:58:58 +02:00
zelig
71c974f3eb fix end to end test import cycle 2015-04-19 20:57:50 +01:00
zsfelfoldi
e9874cbcc1 fixed resolver test 2015-04-19 20:57:50 +01:00
zsfelfoldi
929428d602 URLhint support for URLs longer than 32 bytes 2015-04-19 20:57:49 +01:00
zsfelfoldi
b6fe9e0c83 added missing source file 2015-04-19 20:57:49 +01:00
zsfelfoldi
bb793c829f fixed incomplete merge 2015-04-19 20:57:49 +01:00
zsfelfoldi
d8fb834386 test account is no longer permanently in genesis block, only put there when testing 2015-04-19 20:57:49 +01:00
zsfelfoldi
dba2367157 NatSpec contracts are now not in the genesis block but added by the test 2015-04-19 20:57:49 +01:00
zsfelfoldi
f255336c2c utils linked to natspec notice eval, test notice now using utils.toHex() 2015-04-19 20:57:49 +01:00
zsfelfoldi
c4b7d4d3f7 NatSpec cli option, resolver tests passing 2015-04-19 20:57:49 +01:00
zsfelfoldi
b46e152171 default fallback NatSpec messages 2015-04-19 20:57:49 +01:00
zsfelfoldi
8e6a068d2d natspec test bugfix 2015-04-19 20:57:49 +01:00
zsfelfoldi
b635cad9fe NatSpec passing end to end test 2015-04-19 20:57:49 +01:00
zsfelfoldi
94489b2269 s 2015-04-19 20:57:49 +01:00
zsfelfoldi
e2d333d209 NatSpec contracts in genesis block, end to end test (unfinished) 2015-04-19 20:57:49 +01:00
zelig
ac0e5e8b6d resolver tests
- add resolver tests and fix resolver to pass
- statereg constructor fixed
- comments added to natspec plus docserver integration for natspec userdoc fetching
2015-04-19 20:57:49 +01:00
zelig
3a540425a3 reorg:
- statereg methods move to natspec/resolver/docserver
- fix failing test on invalid js input
2015-04-19 20:57:48 +01:00
zelig
5b0ea1044a add docserver using net/http Transport/Roundtrip 2015-04-19 20:57:48 +01:00
zsfelfoldi
3136bae4a5 NatSpec, URL register storage retrieval
fixed 2/3 tests
2015-04-19 20:57:48 +01:00
zelig
97a602864a add common/resolver skeleton 2015-04-19 20:57:48 +01:00
zelig
45676382b6 natspec integrated to console frontend confirmTransaction 2015-04-19 20:57:48 +01:00
zelig
d0b3536593 new natspec
- constructor takes abidoc, userdoc
- json parsing of userdoc
- method found by abi data
- notice found from method
2015-04-19 20:57:48 +01:00
obscuren
ea11dba00b Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-19 21:46:41 +02:00
obscuren
5dd56bb474 geth: admin download status 2015-04-19 21:46:19 +02:00
obscuren
2c1a6a349b miner: removed default timer & update dag when threads > 0 2015-04-19 21:45:40 +02:00
Jeffrey Wilcke
e6d36fe356 Merge pull request #748 from fjl/build-script-unix
Makefile: for non-gophers
2015-04-19 17:58:42 +02:00
obscuren
ed07ffcde5 downloader: fixed tests with low ttl 2015-04-19 17:37:01 +02:00
obscuren
dcf1a1988a moved 2015-04-19 17:14:15 +02:00
obscuren
8eff550e8b Merge branch 'fjl-rlp-size-validation' into develop 2015-04-19 17:07:59 +02:00
obscuren
8f3a7e41de Merge branch 'rlp-size-validation' of https://github.com/fjl/go-ethereum into fjl-rlp-size-validation
Conflicts:
	eth/protocol.go
2015-04-19 17:07:40 +02:00
obscuren
4683f9c0a7 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-19 13:33:39 +02:00
obscuren
cce4158cfc Removed debug println 2015-04-19 13:33:14 +02:00
obscuren
3d497be9bd eth: drop blocks with low TD 2015-04-19 13:31:37 +02:00
obscuren
6e1aa91aaf geth: added getBlockRlp for dumping block in rlp format 2015-04-19 13:30:55 +02:00
obscuren
c58918c84a downloader: moved chunk ignoring. Fixes issue with catching up 2015-04-19 13:30:34 +02:00
Bas van Kervel
61885aa965 Don't export types/functions 2015-04-19 10:01:50 +02:00
Bas van Kervel
2c229bac00 Replaced channel pointer field with non pointer channel 2015-04-19 09:55:41 +02:00
Jeffrey Wilcke
9ec56637f9 Merge pull request #749 from fjl/fix-nodekey-persistence
Fix p2p node key persistence
2015-04-19 01:56:56 +02:00
obscuren
4340996572 eth: temp 100% block propagation because of the current state of the net 2015-04-19 01:40:01 +02:00
obscuren
5c59d95532 downloader: defer peer reset after download 2015-04-19 01:39:37 +02:00
Felix Lange
4907d28967 crypto: update {Load,Save}ECDSA comments to mention hex encoding 2015-04-19 01:33:00 +02:00
Felix Lange
da4a0e0555 eth: fix node key persistence
crypto.LoadECDSA has been modified to expect hex data.
The key was being saved as raw bytes, causing the file
to be rewritten on every start.
2015-04-19 01:28:41 +02:00
Felix Lange
48f23746f0 Makefile: for non-gophers
Many people need or want to build go-ethereum from the git repository,
mostly to stay up to date with recent changes. We cannot expect that
people without Go experience grok the Go workspace concept.

With the Makefile, building from github requires only
three steps (provided that a Go toolchain is installed):

    - git clone https://github.com/ethereum/go-ethereum
    - ... install C libraries (libgmp, etc.) ...
    - make
2015-04-19 00:42:34 +02:00
obscuren
86ecdcd5ff downloader: reset hashTtl on receive 2015-04-19 00:15:05 +02:00
obscuren
71aa5fe8a3 Merge branch 'downloader-proto' into develop 2015-04-19 00:09:12 +02:00
obscuren
164b878854 cleanup 2015-04-19 00:08:57 +02:00
Felix Lange
c453f1f370 tests: hopefully improve test conversion helpers
(cherry picked from commit 035a30acbefb5eeadc1fc8dbd567775d5688f8a9)
2015-04-19 00:07:09 +02:00
Felix Lange
235ed7ecb9 cmd/geth, tests: enable running multiple tests from a single file
This commit also changes the block test loading so tests containing
invalid RLP blocks can be loaded and return an error only when they are
run.

(cherry picked from commit 898ba87984791249586b97c9ce340dd087b79d67)
2015-04-19 00:06:52 +02:00
obscuren
434dea3caf eth: removed debug messages to stdout 2015-04-19 00:03:26 +02:00
Felix Lange
2ce21cefdc eth: use NewDB hook also for extra DB
(cherry picked from commit d5083033f15bb815a6212eddae16a7125db58738)
2015-04-18 23:59:31 +02:00
obscuren
50e096e627 downloader: don't remove peers. keep them around 2015-04-18 23:56:08 +02:00
obscuren
03b4cf74a2 geth: added identity flag which allows to set a custom node name 2015-04-18 23:53:30 +02:00
obscuren
d34e4dc5ac Merge branch 'develop' into downloader-proto 2015-04-18 21:26:43 +02:00
obscuren
84f1af6413 core: merge using equal block numbers rather than the current block 2015-04-18 21:23:42 +02:00
obscuren
c8cc523d4d miner: reverted back to old event 2015-04-18 20:51:05 +02:00
obscuren
a1d97ea4db typo 2015-04-18 20:35:49 +02:00
obscuren
c6c22301fa miner: changed listener 2015-04-18 20:26:17 +02:00
obscuren
6830ddb659 downloader: free up peers from work when the downloader resets 2015-04-18 20:25:55 +02:00
obscuren
7c5d50f627 downloader: throw an error if there are no peers available for download
If all peers have been tried during the block download process and some
hashes are unfetchable (available peers > 0 and fetching == 0) throw an
error so the process can be aborted.
2015-04-18 19:30:29 +02:00
obscuren
78e37e98e7 downloader: fixed a race condition for download status 2015-04-18 19:14:25 +02:00
obscuren
0d536734fe eth: adapted to new synchronous api of downloader's AddBlock 2015-04-18 18:57:59 +02:00
obscuren
c2c24b3bb4 downloader: improved downloading and synchronisation
* Downloader's peers keeps track of peer's previously requested hashes
  so that we don't have to re-request
* Changed `AddBlock` to be fully synchronous
2015-04-18 18:55:13 +02:00
obscuren
60613b57d1 downloader: make sure that hashes are only accepted from the active peer 2015-04-18 17:35:03 +02:00
obscuren
ff67fbf964 Merge branch 'develop' into downloader-proto 2015-04-18 15:14:56 +02:00
obscuren
525cefa37a updated ethash 2015-04-18 15:14:44 +02:00
obscuren
8244825bbf downloader: reset the queue if a peer response with an empty hash set 2015-04-18 15:14:12 +02:00
obscuren
eef4776b5b eth: ignore NewBlockMsg with lower td 2015-04-18 14:25:22 +02:00
obscuren
1bc2d83b6f core: improved uncle validation error message 2015-04-18 14:24:44 +02:00
obscuren
8f873b762b downloader: all handlers check for isBusy 2015-04-18 03:15:26 +02:00
obscuren
a6c0a75f9a eth: fixed proper BroadcastBlock for mined blocks 2015-04-18 02:38:13 +02:00
obscuren
c39a7b5c0d Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-18 02:33:04 +02:00
obscuren
89fd752659 rpc: set from. Closes #742 2015-04-18 02:32:55 +02:00
obscuren
f1ae3dc4aa geth: bump version number 2015-04-18 02:27:50 +02:00
obscuren
12e8d9c4dd eth: listen for mined blocks and propagate using the protocol manager 2015-04-18 02:27:37 +02:00
obscuren
ecc74d76cc eth: drop blocks that are known 2015-04-18 02:24:24 +02:00
obscuren
cc436c4b28 eth: additional cleanups to the subprotocol, improved block propagation
* Improved block propagation by sending blocks only to peers to which, as
  far as we know, the peer does not know about.
* Made sub protocol its own manager
* SubProtocol now contains the p2p.Protocol which is used instead of
  a function-returning-protocol thing.
2015-04-18 02:21:07 +02:00
obscuren
c2f410214c eth: began split up of peers and protocol manager 2015-04-18 01:11:09 +02:00
obscuren
2339ee9910 Merge branch 'develop' into downloader-proto
Conflicts:
	eth/downloader/downloader.go
2015-04-18 01:10:32 +02:00
Felix Lange
7dc6c33873 Merge pull request #736 from frozeman/develop
add extra space to miner icon
2015-04-17 22:17:50 +02:00
Fabian Vogelsteller
576393550d add extra space to miner icon 2015-04-17 15:00:37 +02:00
Felix Lange
7180699d40 rlp: require declared number of input elements for array types 2015-04-17 14:45:10 +02:00
Felix Lange
9c7281c17e p2p: make DiscReason bigger than byte
We decode into [1]DiscReason in a few places. That doesn't work anymore
because package rlp no longer accepts RLP lists for byte arrays.
2015-04-17 14:45:10 +02:00
Felix Lange
4d5a518a0b rlp: stop accepting lists for byte slices and byte arrays 2015-04-17 14:45:10 +02:00
Felix Lange
574d5d6ae6 core/types: add rlp tag "nil" for Transaction.Recipient 2015-04-17 14:45:10 +02:00
Felix Lange
cad64fb911 rlp: stricter rules for structs and pointers
The rules have changed as follows:

* When decoding into pointers, empty values no longer produce
  a nil pointer. This can be overriden for struct fields using the
  struct tag "nil".
* When decoding into structs, the input list must contain an element
  for each field.
2015-04-17 14:45:09 +02:00
Felix Lange
1e2c93aa2d rlp: reject non-minimal input strings
Input strings of length 1 containing a byte < 56 are non-minimal and
should be encoded as a single byte instead. Reject such strings.
2015-04-17 14:45:09 +02:00
Felix Lange
6e9f8035a1 rlp: stricter validation of canonical integer format
All integers (including size information in type tags) need to be
encoded using the smallest possible encoding. This commit expands the
stricter validation introduced for *big.Int in commit 59597d23a5
to all integer types and size tags.
2015-04-17 14:45:09 +02:00
Felix Lange
6788f955c2 rlp: fix handling of single byte zero when decoding into a pointer
A single zero byte carries information and should not set the pointer
to nil. This is arguably a corner case. While here, fix the comment
to explain pointer reuse.
2015-04-17 14:45:09 +02:00
Felix Lange
509d0a8d78 whisper: fix comment for rlpenv 2015-04-17 14:45:09 +02:00
Felix Lange
eedbb1ee9a p2p/discover: use rlp.DecodeBytes 2015-04-17 14:45:09 +02:00
Felix Lange
2750ec47b7 rlp: fix integer overflow in list element size validation
It is not safe to add anything to s.size.
2015-04-17 14:45:09 +02:00
Felix Lange
56a48101dc cmd/rlpdump, cmd/utils, eth, p2p, whisper: use rlp input limit 2015-04-17 14:45:09 +02:00
Felix Lange
c35f4fd0bd rlp: check top-level value sizes against input limit
This is a preliminary fix for #420 (SEC-18 RLP decoder unsafe
allocation). If a sane input limit is set on the rlp.Stream,
it should no longer be possible to cause huge []byte allocations.
2015-04-17 14:42:41 +02:00
Felix Lange
4020258801 Merge pull request #718 from karalabe/whisper-cleanup
Whisper cleanup, part 2
2015-04-17 14:10:55 +02:00
obscuren
73eb8e8c20 eth: basic implementation of the downloader 2015-04-17 13:54:18 +02:00
Péter Szilágyi
4afc22ba6e whisper: cleanup lefover scoping 2015-04-17 14:11:46 +03:00
Péter Szilágyi
bd14bd6c5b whisper: hide some internal types 2015-04-17 13:25:18 +03:00
Jeffrey Wilcke
d3ed3285e9 Merge pull request #733 from fjl/p2p-dial-timer
p2p: fix the dial timer
2015-04-17 11:32:55 +02:00
Felix Lange
5528abc795 p2p: fix the dial timer
The dial timer was not reset properly when the peer count reached
MaxPeers.
2015-04-17 08:17:01 +02:00
Jeffrey Wilcke
545ff1e3f3 Merge pull request #728 from tgerring/issue727
Fix RPC Call output when empty
2015-04-17 00:17:40 +02:00
obscuren
2c2ddcbf88 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-17 00:11:58 +02:00
obscuren
eac2df02d1 downloader: fixed a typo 2015-04-17 00:11:45 +02:00
Jeffrey Wilcke
b6d1724dd9 Merge pull request #730 from Gustav-Simonsson/update_transaction_tests
Update transaction tests
2015-04-17 00:09:10 +02:00
Bas van Kervel
ead3dd9759 Stop accepted and alive connections (http keep-alive) when the rpc service is stopped 2015-04-16 19:23:57 +02:00
Péter Szilágyi
e5a03eb066 whisper: don't issue signature warning if none present 2015-04-16 18:24:39 +03:00
Bas van Kervel
57f93d25bd admin.stopRPC support added which stops the RPC HTTP listener 2015-04-16 12:56:51 +02:00
Péter Szilágyi
e5e91e9eb3 whisper: track active peers, add peer cache expiry test 2015-04-16 13:05:35 +03:00
Péter Szilágyi
ee6531c5ff whisper: remove dead code, rename a few constants 2015-04-16 11:20:01 +03:00
obscuren
205378016f downloader: added demotion / promotion in prep. for rep. system 2015-04-16 02:16:33 +02:00
obscuren
eda10c7317 downloader: updated downloader and fixed issues with catch up
Properly ignore blocks coming from peers not in our peer list (blocked)
and do never request anything from bad peers. Added some checks to
account for blocks known when requesting hashes (missing parents).
2015-04-16 01:29:32 +02:00
obscuren
3a51c3b584 Merge branch 'develop' into downloader-proto 2015-04-16 01:28:24 +02:00
obscuren
c4678ffd77 downloader: updated downloader and fixed issues with catch up
Properly ignore blocks coming from peers not in our peer list (blocked)
and do never request anything from bad peers. Added some checks to
account for blocks known when requesting hashes (missing parents).
2015-04-16 00:14:31 +02:00
obscuren
dff39553d4 core: changed split detection to also account for number less than 2015-04-16 00:11:40 +02:00
Gustav Simonsson
c617a6ec79 Fixes for TransactionTests
* Include tests which now has consistent HEX encodings
* Comment out two failing tests: "
  "TransactionWithHihghNonce" due to wrong nonce size
  "TransactionWithSvalueHigh" due to wrong ECDSA s range
* Cleanup conversion functions and fix expected encodings for
  tests validation fields
2015-04-15 22:37:16 +02:00
Gustav Simonsson
2d8a2d0c99 Update JSON tests 2015-04-15 22:36:33 +02:00
Taylor Gerring
6388767df0 Fix call output when empty 2015-04-15 12:45:20 -05:00
obscuren
ec6cbb914b miner: start a newly registered agent if the miner is running. Closes #681 2015-04-15 17:04:22 +02:00
obscuren
52c874a609 common: Added debug reporter
NOTE: For known, non-consensus, hard to reproduce bugs consider the
following method `common.Report("extra", stuff, "you need logged")` will
give you a stack trace and a friendly request to submit it as an issue
on our issue tracker.
2015-04-15 16:39:44 +02:00
obscuren
eaf73b55bc miner: moved bad uncle logging to ridiculous log level. Closes #720 2015-04-15 12:12:20 +02:00
Péter Szilágyi
6ceb253f74 whisper: use async handshakes to handle blocking peers 2015-04-15 13:01:22 +03:00
obscuren
5d2138a2b2 core: fixed issue for logs filter. Closes #629
Log filter `Address` field was cast to a Hash which causes it to always
fail.
2015-04-15 11:59:41 +02:00
obscuren
ccb4722a59 core/types: Changed bloom lookup to take anything bytes backed 2015-04-15 11:58:45 +02:00
Péter Szilágyi
46ea193a49 whisper: remove some unneeded testing complexity 2015-04-15 12:50:10 +03:00
Péter Szilágyi
bcf41797ca whisper: global message expiration tests, polishes 2015-04-15 10:50:31 +03:00
obscuren
d82aaf617c rpc: changed logging to use glog 2015-04-15 00:09:13 +02:00
obscuren
f46af4508b geth: fixed failing cli tests 2015-04-14 21:26:28 +02:00
obscuren
8db7b2374c rpc: change eth_protocolVersion to eth_version. Closes #714 2015-04-14 20:47:21 +02:00
Péter Szilágyi
4fb7ab5d09 whisper: mock tests to use simulated peers 2015-04-14 19:00:57 +03:00
Péter Szilágyi
86372b20c0 whisper: add basic tests for the whiper peers 2015-04-14 18:21:56 +03:00
Péter Szilágyi
f6efdd8aad whisper: shorten constants to TTL and PoW 2015-04-14 15:16:02 +03:00
Péter Szilágyi
1a4cfc173e whisper, xeth/whisper, ui/qt/qwhispe: fix API polish breakages 2015-04-14 15:02:31 +03:00
Péter Szilágyi
e2b7498c9d whisper: add known message expiration to peers, cleanup 2015-04-14 14:28:59 +03:00
obscuren
13eb46ea94 geth: added print block to admin 2015-04-14 12:49:30 +02:00
obscuren
9800c84348 eth: limit the amount of peers that will receive Block/Tx messages
All transaction and block messages are now limited using `sqrt(peers)`
2015-04-14 12:49:15 +02:00
obscuren
8310bcda61 state: fixed mutex lockes 2015-04-14 12:47:54 +02:00
obscuren
474aa924ca p2p: added limiter function to limit package broadcasting 2015-04-14 12:47:31 +02:00
Péter Szilágyi
59bff46505 whisper: general cleanups, documentation 2015-04-14 13:24:43 +03:00
Péter Szilágyi
5205b2f19b whisper: fix anonymous broadcast drop, add broadcast tests 2015-04-14 12:12:47 +03:00
Péter Szilágyi
4af7743663 whisper: add utility functions for creating topics 2015-04-14 11:12:09 +03:00
obscuren
b7e1b686aa Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-14 00:38:53 +02:00
Jeffrey Wilcke
2ea98d9b74 Merge pull request #704 from fjl/p2p-concurrency-fixups
p2p: more concurrency fixups
2015-04-14 00:38:47 +02:00
obscuren
07eebc38b2 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-14 00:38:11 +02:00
obscuren
333d4e0f27 core: during split properly insert parent blocks
During a split parent and grand parent were included in the database but
not in the canonical chain (numbered chain). Added a `merge` function
which finds the common ancestor of the chains and reinserts the missing
blocks.
2015-04-14 00:20:29 +02:00
Felix Lange
f6f9a0d515 Merge pull request #709 from ligi/patch-1
Fix links
2015-04-13 23:46:17 +02:00
ligi
3a33428578 Fix links
Where 404s before - now linking to the path that they stay valid a little longer ;-)
2015-04-13 23:09:23 +02:00
obscuren
4f3c169b4e miner: don't break loop when encountering gas limit reach err
Processing transactions should continue when a transaction throws a gas
limit reached error. Other transactions may actually succeed.
2015-04-13 22:58:53 +02:00
obscuren
d423305f07 state: fixed nonce issue in managed state
Rlock => Lock when creating a new nonce
2015-04-13 22:57:03 +02:00
obscuren
d61ec9ca76 rpc: removed hash from LogRes. Closes #701 2015-04-13 21:28:05 +02:00
Felix Lange
0217652d1b p2p/discover: improve timer handling for reply timeouts 2015-04-13 18:08:11 +02:00
Felix Lange
b8aeb04f6f p2p/discover: remove unused field Node.activeStamp 2015-04-13 17:44:14 +02:00
Felix Lange
b9929d289d p2p: fix unsynchronized map access during Server shutdown
removePeer can be called even after listenLoop and dialLoop have returned.
2015-04-13 17:37:32 +02:00
obscuren
333e539ce2 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-13 17:35:46 +02:00
Jeffrey Wilcke
1fa844aaf5 Merge pull request #702 from ethersphere/frontier/blockpool
blockpool stability fixes:
2015-04-13 17:35:25 +02:00
Jeffrey Wilcke
5f9346bc7a Merge pull request #700 from bas-vk/issue_650
Added blockchain DB versioning support, closes #650
2015-04-13 17:34:34 +02:00
Felix Lange
995fab2ebc p2p: fix yet another disconnect hang
Peer.readLoop will only terminate if the connection is closed. Fix the
hang by closing the connection before waiting for readLoop to terminate.

This also removes the british disconnect procedure where we're waiting
for the remote end to close the connection. I have confirmed with
@subtly that cpp-ethereum doesn't adhere to it either.
2015-04-13 17:34:08 +02:00
obscuren
97d2954e22 eth: added downloader for syncing up the chain 2015-04-13 17:22:32 +02:00
Felix Lange
79a6782c1c p2p: fix goroutine leak when handshake read fails
This regression was introduced in b3c058a9e4.
2015-04-13 17:06:19 +02:00
Jeffrey Wilcke
ad4891a09a Merge pull request #689 from Gustav-Simonsson/add_transaction_tests
Add transaction tests
2015-04-13 16:55:21 +02:00
obscuren
a8a2b2a488 downloader: added missing blocks catchup functionality
When a parent is missing in the block list an attempt should be made to
fetch the missing parent and grandparents.
2015-04-13 16:38:32 +02:00
Péter Szilágyi
cb707ba50c whisper: push work in progress for bug report 2015-04-13 16:19:34 +03:00
zelig
3d57e377a4 blockpool stability fixes:
- follow up locks and fix them
- chainManager: call SetQueued for parentErr future blocks, uncomment TD checks, unskip test
- make ErrIncorrectTD non-fatal to be forgiving to genuine mistaken nodes (temp) but demote them to guard against stuck best peers.
- add purging to bounded nodeCache (config nodeCacheSize)
- use nodeCache when creating blockpool entries and let non-best peers add blocks (performance boost)
- minor error in addError
- reduce idleBestPeerTimeout to 1 minute
- correct status counts and unskip status passing status test
- glogified logging
2015-04-13 13:13:55 +01:00
Felix Lange
faa2747809 Merge pull request #690 from karalabe/whisper-cleanup
Whisper cleanup, part 1
2015-04-13 13:39:59 +02:00
Péter Szilágyi
89358d25a4 whisper: start adding integration tests 2015-04-13 13:15:01 +03:00
Péter Szilágyi
9a53390f49 whisper: clean up and integrate topics 2015-04-13 12:16:51 +03:00
Péter Szilágyi
7b501906db whisper: separate out magic number from the code 2015-04-13 11:31:51 +03:00
Bas van Kervel
49a513bdeb Added blockchain DB versioning support, closes #650 2015-04-13 10:13:52 +02:00
obscuren
7dcb9825c3 downloader: return an error for peer.fetch and return chunk to queue
If a peer was somehow already fetching and somehow managed to end up in
the `available` pool it should return it's work.
2015-04-12 13:36:01 +02:00
Péter Szilágyi
5467e7b312 whisper: fix comment entity capitalizations 2015-04-12 14:34:53 +03:00
obscuren
6efa8db888 downloader: renamed chunks to queue 2015-04-12 13:24:38 +02:00
obscuren
acf8452c33 downloader: implemented new downloader 2015-04-12 12:38:25 +02:00
Jeffrey Wilcke
61db7a71dd Merge pull request #695 from ethersphere/frontier/blockpool
bugfixes for headsection deadlocks
2015-04-11 10:46:34 +02:00
zelig
406feee570 bugfixes for headsection deadlocks
- switchC initialised as closed
- move select in setChainInfoFromBlock out of peer lock
2015-04-11 04:58:53 +01:00
obscuren
f047699afb Updated glog 2015-04-10 19:59:07 +02:00
obscuren
3aa5437a10 Set input to nil for create 2015-04-10 19:59:01 +02:00
obscuren
36fe11378c Bump 2015-04-10 18:21:27 +02:00
obscuren
eb75a77151 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-10 18:21:09 +02:00
Jeffrey Wilcke
6107b53de0 Merge pull request #692 from ethersphere/frontier/blockpool
td update from node + bugfix
2015-04-10 18:20:23 +02:00
obscuren
5d4f69f483 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-10 17:59:38 +02:00
Jeffrey Wilcke
92fbb61625 Merge pull request #691 from fjl/discovery-fixes
p2p: a bunch of fixes
2015-04-10 17:59:32 +02:00
obscuren
3d29805322 Added pprof 2015-04-10 17:38:06 +02:00
zelig
da7332a731 td update from node
- reorg and simplify AddBlock
- introduce nodeCache
- TestPeerPromotionByTdOnBlock unskipped and passes
- move switchC/idleC channel creation around: solves deadlock (now respects the contract with section process: either can activate or complete at any one time)
2015-04-10 16:36:40 +01:00
Felix Lange
c5332537f5 p2p: limit number of lingering inbound pre-handshake connections
This is supposed to apply some back pressure so Server is not accepting
more connections than it can actually handle. The current limit is 50.
This doesn't really need to be configurable, but we'll see how it
behaves in our test nodes and adjust accordingly.
2015-04-10 17:24:41 +02:00
Felix Lange
56977c225e p2p: use RLock instead of Lock for pre-dial checks 2015-04-10 17:23:09 +02:00
Felix Lange
b3c058a9e4 p2p: improve disconnect signaling at handshake time
As of this commit, p2p will disconnect nodes directly after the
encryption handshake if too many peer connections are active.
Errors in the protocol handshake packet are now handled more politely
by sending a disconnect packet before closing the connection.
2015-04-10 16:57:56 +02:00
Péter Szilágyi
f8a4cd7ec1 xeth/whisper, ui/qt/qwhisper: fix API update breaks. 2015-04-10 17:03:08 +03:00
Péter Szilágyi
0e4f21fc37 whisper: polish the Envelope a bit, prep for tests. 2015-04-10 16:52:01 +03:00
Péter Szilágyi
7d8ce53eca whisper: polish the messages, fix some bugs, tests
Bugs fixed:
  - Use randomly generated flags as the spec required.
  - During envelope opening check the first bit only for signature.
2015-04-10 15:53:21 +03:00
Felix Lange
99a1db2d40 p2p: don't mess with the socket deadline in Peer.readLoop
netWrapper already sets a read deadline in ReadMsg.
2015-04-10 13:26:28 +02:00
Felix Lange
145330fdf2 p2p: properly decrement peer wait group counter for setup errors 2015-04-10 13:26:27 +02:00
Felix Lange
f1d710af00 p2p: fix Peer shutdown deadlocks
There were multiple synchronization issues in the disconnect handling,
all caused by the odd special-casing of Peer.readLoop errors. Remove the
special handling of read errors and make readLoop part of the Peer
WaitGroup.

Thanks to @Gustav-Simonsson for pointing at arrows in a diagram
and playing rubber-duck.
2015-04-10 13:26:27 +02:00
Felix Lange
22d1f0faf1 p2p: improve peer selection logic
This commit introduces a new (temporary) peer selection
strategy based on random lookups.

While we're here, also implement the TODOs in dialLoop.
2015-04-10 13:26:27 +02:00
Felix Lange
7be05b4b9d p2p/discover: don't log packet content 2015-04-10 13:26:27 +02:00
Felix Lange
9cd8c96157 p2p/discover: make packet processing less concurrent 2015-04-10 13:26:27 +02:00
Péter Szilágyi
7e54a9c07f whisper: rename test file according to Go style 2015-04-10 13:46:08 +03:00
Péter Szilágyi
a4c8e947b0 whisper: make the test app runnable & do something inside 2015-04-10 13:42:49 +03:00
Gustav Simonsson
6d20d634ca Enable more tx tests by expecting most common encoding of values 2015-04-10 12:34:55 +02:00
Gustav Simonsson
6dc2146ed7 Remove unneeded map assignments for working tx RLP tests 2015-04-10 12:03:46 +02:00
Gustav Simonsson
9ac5671c18 Add TransactionTests wrapped as Go tests
* Add initial go wrapping for TransactionTests with some tests
  disabled in lieu of consistent HEX encodings and a few other
  pending bugfixes
* TODO: Consider better way of perhaps modelling each test in
  the JSON files as a single Go test, instead of one Go test per
  JSON file
2015-04-10 11:55:31 +02:00
Gustav Simonsson
1e18f4544b Update JSON test files 2015-04-10 11:52:31 +02:00
obscuren
fc1d1f9afd Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-10 11:03:46 +02:00
obscuren
3755cfccb3 Skipped td test 2015-04-10 11:03:36 +02:00
Jeffrey Wilcke
20fd60902b Merge pull request #687 from karalabe/develop
xeth: fix #640, panic converting nil recipient to hex.
2015-04-10 11:02:25 +02:00
Péter Szilágyi
d1729acd2b cmd/mist: fix another nil recipient address panic. 2015-04-10 11:43:08 +03:00
Péter Szilágyi
b2b1241dd7 cmd/mist: fix #640, panic converting nil recipient to hex.
Fetching the recipient address from a transaction was changed to return nil
instead of a zero-address, but this code path was not updated, so whenever
a contract was created, a nil panic occured.
2015-04-10 11:20:04 +03:00
Jeffrey Wilcke
4de1e1609a Merge pull request #682 from bas-vk/issue_567
bugfix as a result of PR 671
2015-04-09 23:42:17 +02:00
Bas van Kervel
dc2b9fd458 bugfix as a result of PR 671 2015-04-09 20:06:27 +02:00
obscuren
ec9fbf09aa Added some quotes .... 2015-04-09 18:24:22 +02:00
obscuren
9f5d24be31 glog 2015-04-09 18:16:22 +02:00
obscuren
b0f40beea6 Added proper contract for registrar 2015-04-09 17:59:05 +02:00
obscuren
ab015959e1 bump 2015-04-09 17:54:20 +02:00
obscuren
2747df3df1 added contracts 2015-04-09 17:42:43 +02:00
obscuren
01ee012197 Merge branch 'ethersphere-frontier/blockpool' into develop 2015-04-09 17:40:28 +02:00
obscuren
764a802eaa Disabled TD check
@zelig: Temporarily commented out TD check untill the rest of the network has
been fixed.
2015-04-09 17:39:02 +02:00
obscuren
663fd8f849 Moved log to debug 2015-04-09 17:19:05 +02:00
obscuren
46898f1e55 Merge branch 'frontier/blockpool' of https://github.com/ethersphere/go-ethereum into ethersphere-frontier/blockpool 2015-04-09 16:54:32 +02:00
obscuren
0636e17dbe Added default registrar 2015-04-09 16:37:04 +02:00
zelig
be25396340 separate lock for blacklist 2015-04-09 13:58:35 +01:00
zelig
a009132c24 oops peer unlocked before return - fixes deadlock 2015-04-09 13:58:35 +01:00
zelig
0e2bc23148 uncomment future block TD check, add test for skipping TD check on future block 2015-04-09 13:58:35 +01:00
zelig
e55747a074 fix deadlock issue in AddBlock
- add peer switch channel arg to activateChain - no peer locking within
- proper locking in AddBlock - fixes deadlock issue
- comment out TD check and skip incorrect TD test again for hotfix
2015-04-09 13:58:35 +01:00
zelig
262714fc6c future queued block support
- queued       bool // flag for blockpool to skip TD check
- set to true when future block queued
- in checkTD: skip check if queued
- TODO: add test (insertchain sets future block)
2015-04-09 13:58:35 +01:00
zelig
cbd0b42060 put back checkTD and unskip incorrectTD test 2015-04-09 13:58:35 +01:00
zelig
f546b486bf introduce peers registry on nodes
- TestPeerPromotionByTdOnBlock renamed and skipped for now test should pass iff
  if TD is updated based on an agreement
- senders register in AddBlock, flag records if they are coming from newblock
  message (and therefore advertise their TD with the block) or block message
  (TODO: latter are stored on the cache and updated by checkTD call;
  protocol should also call AddBlock on newblock messages by non-best peers)
- remove TD update from optional TD field in addBlock: this is no longer part of
  the eth protocol spec -> TODO: reflect in wiki
- only initialise peer map if at least two
2015-04-09 13:58:35 +01:00
zelig
42fb9652f5 fix blockpool deadlock
- do not break from headsection on error
[remove peer after protocol quit will close switchC, until then head block can arrive and block on channel while keeping peers lock causing a deadlock.]
- more careful locking in AddBlock
2015-04-09 13:58:35 +01:00
zelig
30830652ae fix TestPoolStatus test crashing, skip tests failing (due to @obscuren hotfixes) 2015-04-09 13:58:35 +01:00
obscuren
c6b25a4046 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-09 13:24:08 +02:00
obscuren
8d059e54f1 Updated xeth logger 2015-04-09 11:49:14 +02:00
Jeffrey Wilcke
558683d10c Merge pull request #678 from bas-vk/feature_635
Support for import/export hex encoded keys
2015-04-09 11:31:44 +02:00
Jeffrey Wilcke
79cc3cc98e Merge pull request #671 from bas-vk/issue_567
Add path expansion support for command line arguments, closes 567
2015-04-09 11:31:04 +02:00
Bas van Kervel
ef393da933 removed utility function and implemented hex conversation in crypto functions 2015-04-09 10:59:37 +02:00
Bas van Kervel
6da5b2fc5f reformat code with goimports 2015-04-09 10:26:26 +02:00
obscuren
a9959805e5 Removed from as a requirement and changed
Removed the from as a requiremet from the RPC eth_call. Xeth#Call now
also default values to:

1. Supplied account
2. First account if any
3. No managed account => 000000..00
2015-04-09 00:44:20 +02:00
obscuren
204ac81188 Moved handling of nonces to the managed state 2015-04-08 23:30:07 +02:00
Bas van Kervel
b3a3fdf9a4 Support for import/export hex encoded keys, closes #635 2015-04-08 23:03:47 +02:00
obscuren
6e2f78ebdd Default log to stderr 2015-04-08 22:18:16 +02:00
obscuren
2e2860e4df Make sure mist runs ... :-) 2015-04-08 22:17:49 +02:00
obscuren
6184781b49 Improved transaction pool
The transaction pool will now some easily be able to pre determine the
validity of a transaction by checking the following:

* Account existst
* gas limit higher than the instrinsic gas
* enough funds to pay upfront costs
* nonce check
2015-04-08 20:47:32 +02:00
obscuren
a7750c929b Fixed tests to reflect log changes 2015-04-08 20:45:39 +02:00
obscuren
f08e9cbe42 ignore invalid txs right after being added if they prove incorrect 2015-04-08 18:08:21 +02:00
obscuren
1c872ddf4b Changed how logs are being recorded
Logs are now recorded per transactions instead of tossing them out after
each transaction. This should also fix an issue with
`eth_getFilterLogs` (#629) Also now implemented are the `transactionHash,
blockHash, transactionIndex, logIndex` on logs. Closes #654.
2015-04-08 17:15:45 +02:00
Bas van Kervel
5304f43067 Add path expansion support for command line arguments, closes 567 2015-04-08 15:43:55 +02:00
obscuren
6284604b52 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-08 13:07:30 +02:00
obscuren
a953f3ec97 Sync managed accounts to the network 2015-04-08 13:07:21 +02:00
obscuren
31b086f511 Added additional methods to the managed state
* GetNonce Returns the canonical nonce
* SetNonce Set the managed account's nonce
2015-04-08 13:06:56 +02:00
Jeffrey Wilcke
7c0a18edb5 Merge pull request #658 from Gustav-Simonsson/add_ec_point_on_curve_check
Add IsOnCurve check to EC unmarshalling in ECIES decryption
2015-04-08 00:51:12 +02:00
obscuren
09147a50ed Improved tx pool to ignore invalid transactions
Transaction pool will attempt to ignore invalid transactions it had
previously encountered.
2015-04-08 00:31:23 +02:00
obscuren
d09d2b96fc fixed stop of miner 2015-04-08 00:30:23 +02:00
Gustav Simonsson
aa4ff52d84 Add IsOnCurve check to EC unmarshalling in ECIES decryption 2015-04-07 23:50:04 +02:00
obscuren
7f32a08b60 Queued level db writes and batch writes. Closes #647 2015-04-07 22:19:01 +02:00
Jeffrey Wilcke
758205b187 Merge pull request #648 from Gustav-Simonsson/forward_ecrecover_err_and_remove_dup_checks
Forward and log EC recover err and remove dup pubkey len check
2015-04-07 20:48:56 +02:00
Jeffrey Wilcke
f597863927 Merge pull request #657 from Gustav-Simonsson/disable_libsecp256k1_debug_check
libsecp256k1 #define NDEBUG
2015-04-07 20:39:05 +02:00
Gustav Simonsson
941f051358 libsecp256k1 #define NDEBUG 2015-04-07 18:09:58 +02:00
obscuren
3ddc109778 Merge branch 'Gustav-Simonsson-update_bitcoin_secp256k1_lib2' into develop 2015-04-07 15:20:51 +02:00
obscuren
50bbdfe582 Link GMP 2015-04-07 15:20:24 +02:00
obscuren
ce9a28d7bb Merge branch 'update_bitcoin_secp256k1_lib2' of https://github.com/Gustav-Simonsson/go-ethereum into Gustav-Simonsson-update_bitcoin_secp256k1_lib2 2015-04-07 15:10:31 +02:00
obscuren
0196a97319 Merge branch 'tgerring-rpcfabian' into develop 2015-04-07 15:04:45 +02:00
obscuren
3063aad7db merge conflict 2015-04-07 15:04:29 +02:00
obscuren
50aa1f178c updated logging 2015-04-07 14:57:16 +02:00
obscuren
688d118c7e Updated logging 2015-04-07 14:57:04 +02:00
Taylor Gerring
d0c3f127ee More type fixes 2015-04-07 06:49:31 -05:00
obscuren
01b2c90179 Updated ethash 2015-04-07 13:17:27 +02:00
obscuren
c756633fb7 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-07 13:10:21 +02:00
obscuren
43454053b0 Fixed tests 2015-04-07 13:10:12 +02:00
Taylor Gerring
1aaeae292d Output format and nil fixes 2015-04-07 06:10:00 -05:00
Gustav Simonsson
2591883a18 Use logger.Error instead of 0 with glog 2015-04-07 12:48:19 +02:00
Gustav Simonsson
3f306f63d4 Forward and log EC recover err and remove dup pubkey len check 2015-04-07 12:48:19 +02:00
Gustav Simonsson
d9b37b6da7 Update Go wrapper around libbsecp256k1 2015-04-07 12:40:31 +02:00
Jeffrey Wilcke
7c583f8222 Merge pull request #653 from debris/circular_structure
fixed printing circular structures
2015-04-07 12:36:11 +02:00
obscuren
99907f94dc Updated ethereum.js 2015-04-07 12:33:05 +02:00
obscuren
7b6a8cc9ae Fixed pending states 2015-04-07 12:32:55 +02:00
Gustav Simonsson
f4d4f1ccb2 Update bitcoin secp256k1 lib 2015-04-07 12:14:05 +02:00
Marek Kotewicz
b09d62bac7 fixed printing circular structures 2015-04-07 05:27:47 +02:00
obscuren
9c55576c7b Block header changed & console miner control
* miner control moved to `admin.miner`
* miner option to set extra data
* block extra now bytes
2015-04-05 18:59:18 +02:00
obscuren
3040296beb updated ethash. closes 646 2015-04-05 18:00:22 +02:00
obscuren
736aefe9b5 time lapse 2015-04-05 17:59:38 +02:00
obscuren
69ece747d3 v bump 2015-04-05 15:15:19 +02:00
obscuren
01e1b49831 reflect ethash changes 2015-04-05 15:15:05 +02:00
obscuren
09d3f2cf2a Update ethash 2015-04-05 15:14:55 +02:00
obscuren
5b9a0e7118 Disabled PoW check
@zelig we need to discuss this
2015-04-05 15:14:06 +02:00
obscuren
50edd4243e removed hash rate from info log. Added hashrate js func 2015-04-05 13:05:10 +02:00
obscuren
ac473a8623 Remove debug log 2015-04-04 23:27:23 +02:00
obscuren
053d5552ab Updated logging 2015-04-04 23:04:19 +02:00
obscuren
5dc5e66986 set backtrace during runtime 2015-04-04 22:16:29 +02:00
obscuren
d651ff968a Temp removed unrequested block error
@zelig look in to this please
2015-04-04 22:06:50 +02:00
obscuren
f4af9e95c2 Skipping test
@zelig this will need updating with the TD checking
2015-04-04 21:41:42 +02:00
obscuren
eb1c26746d Changed R S to big int and fixed tests 2015-04-04 21:41:24 +02:00
obscuren
eb8f0b85f7 Changed R & S to *big.Int 2015-04-04 21:32:24 +02:00
obscuren
59597d23a5 Reject integers w/ appended zero's 2015-04-04 21:29:23 +02:00
obscuren
c39484bc4b Added thread safe each 2015-04-04 20:34:10 +02:00
Taylor Gerring
5c988c8ea0 Increased test coverage for args 2015-04-04 11:58:23 -05:00
obscuren
eff6a43419 Removed debugging 2015-04-04 18:29:11 +02:00
obscuren
7a18a39351 prevent deadlock 2015-04-04 18:23:51 +02:00
obscuren
f9488cb763 bumped version number 2015-04-04 16:41:12 +02:00
obscuren
e1ed8c33bd Improved chain manager, improved block processor, fixed tests
* ChainManager allows cached future blocks for later processing
* BlockProcessor allows a 4 second window on future blocks
* Fixed tests
2015-04-04 16:35:23 +02:00
obscuren
29f120206e Added block cache delete method 2015-04-04 16:33:12 +02:00
obscuren
0d1a9ce648 Disabled peer TD check to support suspended blocks (Future blocks)
@zelig When blocks are in the future they'll be cached and processed at
a later time. Because of this the returned TD will be much lower than
the broadcasted TD.
2015-04-04 16:24:44 +02:00
Taylor Gerring
435378e953 Improved test coverage for rpc types 2015-04-04 15:09:30 +02:00
Taylor Gerring
71e62eb620 More test coverage for responses 2015-04-04 14:08:35 +02:00
obscuren
c985ce4d78 Changed log to new logging 2015-04-04 13:41:58 +02:00
obscuren
2683aac9b0 Make sure we're not mining on an invalid TS 2015-04-04 13:27:17 +02:00
Taylor Gerring
2b9b9e7704 Allow "earliest" block height 2015-04-04 13:25:47 +02:00
Taylor Gerring
4729826466 Merge branch 'develop' into rpcfabian 2015-04-04 13:24:21 +02:00
obscuren
c20d04ca67 added verbosity to js admin 2015-04-04 13:24:19 +02:00
obscuren
1889727144 Moved logging to logger.Core 2015-04-04 13:24:01 +02:00
obscuren
218bfeb60e check for nil block (tmp).
@zelig this needs to be addressed in the block pool.
2015-04-04 12:40:48 +02:00
obscuren
a0e44e3281 basic glog 2015-04-04 12:40:11 +02:00
obscuren
60e097a5f4 Merge branch 'develop' into glog 2015-04-04 12:24:59 +02:00
obscuren
bc5528b165 version bump 2015-04-03 17:49:33 +02:00
obscuren
ec8a6e0a2b Merge branch 'develop' into glog 2015-04-03 17:19:22 +02:00
obscuren
f9d94c7462 do not include BlockEqualTS as valid uncles 2015-04-03 17:19:09 +02:00
obscuren
11d90d9b22 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-03 17:09:21 +02:00
obscuren
36452afd4e glog wip 2015-04-03 17:09:11 +02:00
Jeffrey Wilcke
47feff3611 Merge pull request #627 from ethersphere/frontier/blockpool
Frontier/blockpool BUGFIX
2015-04-03 13:56:39 +02:00
obscuren
4558e04c0d Merge commit 'f6bd4b16e38f9cacd57b57befdeeaed789a473c4' into develop 2015-04-03 12:29:13 +02:00
obscuren
f6bd4b16e3 Squashed 'tests/files/' changes from d6fe94a..3ebf646
3ebf646 Merge remote-tracking branch 'origin/develop' into develop
0ecbe27 uncle with same block number as current block

git-subtree-dir: tests/files
git-subtree-split: 3ebf64619911a7cbdec3b70491284c4cd5f4c3a3
2015-04-03 12:29:13 +02:00
obscuren
f49e398ebe bool => int 2015-04-03 12:28:55 +02:00
Jeffrey Wilcke
a6ca3d0261 Merge pull request #626 from tgerring/rpcfabian
RPC Tests updates
2015-04-03 11:58:18 +02:00
obscuren
29a9c6bedd Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-04-03 11:28:32 +02:00
obscuren
c59c826ab4 fixed stack level 2015-04-03 11:27:56 +02:00
obscuren
812cbff1a2 Squashed 'tests/files/' changes from ab81bf2..d6fe94a
d6fe94a Merge branch 'develop' of https://github.com/ethereum/tests into develop
cae0693 more fuzz test failures
2110806 fix mem test
049c4d3 Merge remote-tracking branch 'origin' into develop
6025e7b stack size 1024 fix
97655c7 add JS fails
90fe120 JS fails
e8a6964 JS fail

git-subtree-dir: tests/files
git-subtree-split: d6fe94ad047557531c83b551eb78a7a5838feaa4
2015-04-03 10:50:18 +02:00
obscuren
fd5c5b2969 Merge commit '812cbff1a28d89b44a0c8c5a210ac61c7e19da35' into develop 2015-04-03 10:50:18 +02:00
obscuren
4415a5bc68 updated coin 2015-04-03 10:50:07 +02:00
Jeffrey Wilcke
ea606733eb Merge pull request #636 from debris/prototype_functions
do not print Plain Object prototype fields in geth console
2015-04-03 01:53:55 +02:00
Marek Kotewicz
24c8fdc1d0 do not print Plain Object prototype fields in geth console 2015-04-03 01:47:05 +02:00
Jeffrey Wilcke
97d6b0bab8 Merge pull request #633 from debris/prototype_functions
printing object prototype functions in geth console
2015-04-03 01:29:53 +02:00
Marek Kotewicz
1f122626be printing object prototype functions in geth console 2015-04-03 00:49:18 +02:00
Taylor Gerring
3e042317ad Return nil if block does not exist 2015-04-02 20:37:51 +02:00
Taylor Gerring
1d74086b42 New UncleRes type 2015-04-02 17:55:42 +02:00
zelig
5cb1b41440 proper locking to prevent "parent unknown" INVALID blocks due to race in peer head info update 2015-04-02 16:30:48 +01:00
zelig
dd1791c9fd proper locking to prevent close of closed channel crash when multiple mining peers compete 2015-04-02 15:32:41 +01:00
Taylor Gerring
9bdf0b655d Fix RLP decoding of tx metadata 2015-04-02 16:28:42 +02:00
Taylor Gerring
537e2cfeb6 Return nil when requested uncle index is not valid 2015-04-02 16:12:19 +02:00
Taylor Gerring
e882ba0c29 Return nil when requested index does not exist
Instead of error
2015-04-02 16:11:00 +02:00
Taylor Gerring
aa71e27a3b Detect non-valid strings for blockheight 2015-04-02 15:53:04 +02:00
Taylor Gerring
3908590578 Make "To" field optional in whisper filter 2015-04-02 15:37:35 +02:00
Jeffrey Wilcke
607fc788e3 Merge pull request #619 from tgerring/rpcfabian
RPC Fabian fixes
2015-04-02 15:13:30 +02:00
Taylor Gerring
876ce0fb12 More nil checks 2015-04-02 14:54:28 +02:00
Taylor Gerring
172b34351a HashArgs fix + tests 2015-04-02 14:49:33 +02:00
Taylor Gerring
b9c9d6d798 Use HashArgs for eth_getTransactionByHash 2015-04-02 14:37:11 +02:00
Taylor Gerring
b4eef59b6f No longer require gas & gas price in transactions
Defaults to 0, which is then set to default values in XEth
2015-04-02 14:05:14 +02:00
obscuren
1e28b424e7 Default gas 2015-04-02 14:00:49 +02:00
Taylor Gerring
015453f5b3 Default Value to 0 for NewTxArgs 2015-04-02 13:55:53 +02:00
obscuren
55b1c1546b Moved to function 2015-04-02 13:55:35 +02:00
Taylor Gerring
118ad22ee5 Merge branch 'develop' into rpcfabian 2015-04-02 13:39:46 +02:00
Taylor Gerring
81de8ed091 Format code as hexdata 2015-04-02 13:38:12 +02:00
Taylor Gerring
b86450aaae Guard from nil pointers 2015-04-02 13:27:58 +02:00
Taylor Gerring
e402e1dc2e New args types with stricter checking 2015-04-02 13:17:55 +02:00
obscuren
79828531b1 updated ethereum.js 2015-04-02 13:13:11 +02:00
Taylor Gerring
14c14fd61f Output empty block as nil 2015-04-02 13:05:13 +02:00
Taylor Gerring
2efb89d544 Guard for nil *big.Int 2015-04-02 13:04:58 +02:00
obscuren
60da9a1289 Put the old hammer back in <3 2015-04-02 13:03:33 +02:00
obscuren
3f4c1aaf01 info => debug 2015-04-02 12:58:17 +02:00
obscuren
0f3bf7ef4d Fixes for balance 2015-04-02 12:57:04 +02:00
Taylor Gerring
585aec127c Don't ignore user-specified "include tx" param 2015-04-02 12:56:36 +02:00
Taylor Gerring
edfd2757d9 Better decoding of uint* 2015-04-02 12:52:25 +02:00
Taylor Gerring
b10e33c040 More types supported 2015-04-02 12:31:10 +02:00
Taylor Gerring
cc45b4d8b5 Trim left only, not right 2015-04-02 12:30:42 +02:00
Taylor Gerring
f89baa73e5 transactionRoot -> transactionsRoot 2015-04-02 12:30:22 +02:00
Taylor Gerring
85ebbc9aa5 Default BlockNumber to -1 when missing 2015-04-02 11:57:26 +02:00
Jeffrey Wilcke
7e13ee602e Merge pull request #625 from debris/nonenumerable
print nonenumerable properties of object in geth console && proper printing BigNumbers
2015-04-02 11:35:01 +02:00
Taylor Gerring
c71ca1a089 Better nil handling 2015-04-02 11:32:50 +02:00
Marek Kotewicz
f960fc066e fixed printing BigNumbers 2015-04-02 11:02:39 +02:00
Marek Kotewicz
bb3ae3026e print nonenumerable properties of object in geth console 2015-04-02 01:53:33 +02:00
obscuren
b8124ec791 Removed old (unused) argument 2015-04-01 23:58:26 +02:00
Jeffrey Wilcke
219d94c1dd Merge pull request #623 from Gustav-Simonsson/read_protocol_values_from_common_params
Read most protocol params from common/params.json
2015-04-01 23:37:17 +02:00
Gustav Simonsson
c26c8d3a44 Read most protocol params from common/params.json
* Add params package with exported variables generated from
  github.com/ethereum/common/blob/master/params.json
* Use params package variables in applicable places
* Add check for minimum gas limit in validation of block's gas limit
* Remove common/params.json from go-ethereum to avoid
  outdated version of it
2015-04-02 06:22:32 +02:00
obscuren
ab5c007376 Updated ethereum.js 2015-04-01 23:28:45 +02:00
obscuren
4391c38215 Changed getters on account objects. Closes #610
* GetCode
* GetNonce
* GetStorage
* GetBalance
2015-04-01 23:22:16 +02:00
Taylor Gerring
5d8be9c30d Fixed decoding for uint64 into bytes 2015-04-01 23:08:00 +02:00
obscuren
344b3556eb Fixed uncle rewards in miner
The uncle rewards were changed in the block processor. This change will
reflect those changes in the miner as well.
2015-04-01 21:18:41 +02:00
obscuren
516ec28544 sha3 stack check 2015-04-01 17:51:22 +02:00
obscuren
4e3ffbcf9b Squashed 'tests/files/' changes from 5f8a010..ab81bf2
ab81bf2 go fail

git-subtree-dir: tests/files
git-subtree-split: ab81bf28d6157657b0a1c0d598785f1ed23fdbb1
2015-04-01 17:50:19 +02:00
obscuren
109b27b552 Merge commit '4e3ffbcf9bae7e44e45fd1b6e504b3645040d73c' into develop 2015-04-01 17:50:19 +02:00
Taylor Gerring
eac4d582d7 Patches 2015-04-01 17:49:22 +02:00
Taylor Gerring
1045015a3c Update nonce field 2015-04-01 17:48:53 +02:00
obscuren
96cf776f81 Check stack for BALANCE. Closes #622 2015-04-01 17:45:38 +02:00
obscuren
f801183b8b Squashed 'tests/files/' changes from 29da5ea..5f8a010
5f8a010 go fials
6f7924a add cppjit fail
c21f368 update genesis test
de7266b update js example test

git-subtree-dir: tests/files
git-subtree-split: 5f8a0103c0456f9467b402fde3db4bcde345d53b
2015-04-01 17:41:58 +02:00
obscuren
516423cdac Merge commit 'f801183b8bea24ce9988fbd06c2f17fedfc3587f' into develop 2015-04-01 17:41:58 +02:00
obscuren
216ea425e4 corrected 2015-04-01 17:36:56 +02:00
obscuren
8e961df283 bumped network protocol 2015-04-01 17:10:42 +02:00
Jeffrey Wilcke
fd171eff7f Merge pull request #592 from fjl/disco-ping-pong
Discovery bonding protocol
2015-04-01 17:10:10 +02:00
Felix Lange
76218959ab eth: update cpp bootnode address 2015-04-01 17:00:12 +02:00
Felix Lange
a77c431e37 p2p/discover: fix off by one error causing buckets to contain duplicates 2015-04-01 17:00:12 +02:00
Felix Lange
de7af720d6 p2p/discover: implement node bonding
This a fix for an attack vector where the discovery protocol could be
used to amplify traffic in a DDOS attack. A malicious actor would send a
findnode request with the IP address and UDP port of the target as the
source address. The recipient of the findnode packet would then send a
neighbors packet (which is 16x the size of findnode) to the victim.

Our solution is to require a 'bond' with the sender of findnode. If no
bond exists, the findnode packet is not processed. A bond between nodes
α and β is created when α replies to a ping from β.

This (initial) version of the bonding implementation might still be
vulnerable against replay attacks during the expiration time window.
We will add stricter source address validation later.
2015-04-01 17:00:12 +02:00
Taylor Gerring
b6f0b40037 Respect fullTx option #614 2015-04-01 16:49:07 +02:00
Taylor Gerring
55b9689950 rename messages to types 2015-04-01 15:53:48 +02:00
Felix Lange
92928309b2 p2p/discover: add version number to ping packet
The primary motivation for doing this right now is that old PoC 8
nodes and newer PoC 9 nodes keep discovering each other, causing
handshake failures.
2015-04-01 15:53:04 +02:00
Taylor Gerring
bea3879d6f If nil, type doesn't matter 2015-04-01 15:45:56 +02:00
Taylor Gerring
ac03ff6f05 Fix block size output #613 2015-04-01 15:44:09 +02:00
Taylor Gerring
6e8ff578f1 Block nonce as data 2015-04-01 15:28:06 +02:00
Taylor Gerring
93f832a1a7 Make block context optional nulls 2015-04-01 15:27:37 +02:00
Taylor Gerring
0ce971d9d3 Add new formatting regex 2015-04-01 15:27:14 +02:00
Taylor Gerring
101ea1a1e8 Make inner size before assinging. Closes #615 2015-04-01 14:15:20 +02:00
Jeffrey Wilcke
c8e5d53a39 Merge pull request #618 from tgerring/issue613
Issue #613
2015-04-01 13:57:35 +02:00
Jeffrey Wilcke
4a4da9a24e Merge pull request #588 from ethersphere/frontier/SEC-29
Frontier/sec 29
2015-04-01 13:55:42 +02:00
zelig
f56fc9cd9d change StatusMsgData.TD back to pointer type *big.Int 2015-04-01 12:36:49 +01:00
zelig
6ffea34d8b check TxMsg
- add validation on TxMsg checking for nil
- add test for nil transaction
- add test for zero value transaction (no extra validation needed)
2015-04-01 12:32:42 +01:00
zelig
82da6bf4d2 test for invalid rlp encoding of block in BlocksMsg
- rename Validate -> ValidateFields not to confure consensus block validation
- add nil transaction and nil uncle header validation
- remove bigint field checks: rlp already decodes *big.Int to big.NewInt(0)
- add test for nil header, nil transaction
2015-04-01 12:32:42 +01:00
zelig
d677190f39 add tests for valid blocks msg handling 2015-04-01 12:32:42 +01:00
zelig
e1be34bce1 eth: SEC-29 eth wire protocol decoding invalid message data crashes client
- add validate method to types.Block
- validate after Decode -> error
- add tests for NewBlockMsg
2015-04-01 12:32:42 +01:00
Jeffrey Wilcke
936ddf2ad1 Merge pull request #616 from bas-vk/develop
Frontier/513
2015-04-01 13:25:15 +02:00
Taylor Gerring
dbf17105f6 Build transaction context in BlockRes 2015-04-01 13:18:51 +02:00
Taylor Gerring
88f2a96ca3 Set fullTx option in constructor 2015-04-01 13:18:30 +02:00
Bas van Kervel
1559bd9e1b changed big.Int instantiation 2015-04-01 13:15:21 +02:00
obscuren
dba9b83aa0 Merge branch 'tgerring-hexify' into develop 2015-04-01 12:51:44 +02:00
obscuren
b0e09ec827 merge conflict 2015-04-01 12:51:39 +02:00
obscuren
6afc5e762a Merge branch 'hexify' of https://github.com/tgerring/go-ethereum into tgerring-hexify 2015-04-01 12:49:10 +02:00
Jeffrey Wilcke
720d978e35 Merge pull request #589 from tgerring/corssetting
Configurable CORS domain
2015-04-01 12:38:29 +02:00
Bas van Kervel
6605d00d92 Frontier/513 2015-04-01 12:33:12 +02:00
Taylor Gerring
02fb83782e #612 rename eth_protocol method 2015-04-01 12:28:48 +02:00
Taylor Gerring
86ba7432a9 txMeta storage as struct 2015-04-01 12:14:35 +02:00
obscuren
4e8f8cfab7 ethereum.js update 2015-04-01 11:51:05 +02:00
obscuren
f2c6a937f3 Protocol bump 2015-04-01 11:50:19 +02:00
Taylor Gerring
b860b67693 Remove extra type assetion 2015-04-01 11:45:29 +02:00
obscuren
f468364e4d fixed tests 2015-04-01 11:42:02 +02:00
Taylor Gerring
7b7392826d Improved response tests
Actually verifies output as by regex
2015-04-01 11:38:06 +02:00
obscuren
0a554a1f27 Blocktest fixed, Execution fixed
* Added new CreateAccount method which properly overwrites previous
  accounts (excluding balance)
* Fixed block tests (100% success)
2015-04-01 10:53:32 +02:00
obscuren
d3e86f9208 Added gas generator defaults 2015-04-01 10:51:46 +02:00
Taylor Gerring
25998cfc45 Re-enabled response tests (needs improvement) 2015-04-01 09:11:23 +02:00
Taylor Gerring
bbca6250ff Merge branch 'rpccall' into hexify 2015-03-31 22:40:52 +02:00
Taylor Gerring
40ea466200 Store and retrieve tx context metadata #608
Improving this in the future will allow for cleaning up a bit of legacy
code.
2015-03-31 22:40:12 +02:00
Taylor Gerring
7e3875b527 Remove custom MarshalJSON methods
Now formats based on underlying hexdata or hexnum type. Fields directly
with respective constructors that cover from native types
2015-03-31 19:04:02 +02:00
Taylor Gerring
a2501ecfcd Make new types Stringers 2015-03-31 19:02:46 +02:00
Taylor Gerring
8f0e095f4c Index is zero-based #607 2015-03-31 17:56:06 +02:00
Taylor Gerring
81aeb78976 Update output types to use hexnum or hexdata
Benefits from automatic output formatting differences between
quantities and data
2015-03-31 17:40:35 +02:00
Taylor Gerring
3a948b2dba Add hexdata and hexnum types 2015-03-31 17:39:58 +02:00
obscuren
ec181b308a Squashed 'tests/files/' changes from c6d9629..29da5ea
29da5ea add JS block test example as state test
04108e0 Merge remote-tracking branch 'origin' into develop
6da7f35 JS failures
22b5dfc stQuadraticComplexity Refill with latest develop
c97bf26 Memory / Solidity Test Update

git-subtree-dir: tests/files
git-subtree-split: 29da5ea53ab36d74bd3c0712337168086cabfb8d
2015-03-31 16:25:22 +02:00
obscuren
2ef0bc03ec Merge commit 'ec181b308addc30c04973e9058960d579c84eef5' into develop 2015-03-31 16:25:22 +02:00
obscuren
8b51582b53 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-31 15:31:32 +02:00
obscuren
3453f8c5d2 Added Code field 2015-03-31 15:30:55 +02:00
Felix Lange
653c3deaa5 Merge pull request #606 from tgerring/bootnode
Update Go bootnode address
2015-03-31 14:41:17 +02:00
Taylor Gerring
6daa455243 Update Go bootnode address 2015-03-31 14:14:29 +02:00
Jeffrey Wilcke
485dcf90cd Merge pull request #594 from Gustav-Simonsson/fix_block_header_gas_limit_validation
Correct gas limit validation according to new algorithm
2015-03-31 12:41:05 +02:00
Taylor Gerring
2f3a968136 New CallArgs
Requirements for calls differ from transactions
2015-03-30 16:20:30 +02:00
Gustav Simonsson
9feed3f61e Correct gas limit validation according to new algorithm
* Use absolute value of (block's gas limit) - (parent's gas limit)
  in comparison with diff limit.
* Ensure the diff is strictly smaller than the allowed size.
2015-03-30 16:07:24 +02:00
Taylor Gerring
f23529c5cd General repo cleanup 2015-03-30 09:18:22 +02:00
Taylor Gerring
35d00e00c5 Update Godeps 2015-03-29 22:19:38 +02:00
Taylor Gerring
b6fde73ef1 Add settable domain to CORS handler #331 2015-03-29 21:56:04 +02:00
Taylor Gerring
04a7c4ae1e Abstract http into rpc package
New RpcConfig object to pass growing config
2015-03-29 21:26:47 +02:00
Taylor Gerring
24fc1f073d Add flag to control CORS header #394
* Disabled on CLI
* http://localhost on Mist
2015-03-29 21:21:14 +02:00
obscuren
e1c6c01b4d Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-29 15:03:39 +02:00
obscuren
b7a0bc7031 Merge branch 'ebuchman-fix_ecrecover' into develop 2015-03-29 15:03:30 +02:00
obscuren
61c5edcb57 Cleanup. 2015-03-29 15:02:49 +02:00
obscuren
af153e7884 Merge branch 'fix_ecrecover' of https://github.com/ebuchman/go-ethereum into ebuchman-fix_ecrecover 2015-03-29 13:34:41 +02:00
Taylor Gerring
391d79ef44 Add ExtraData field to RPC output 2015-03-29 12:08:52 +02:00
Taylor Gerring
eb79938060 Docker rename ethereum to geth 2015-03-28 22:17:08 +01:00
Taylor Gerring
2ca6a800ad Remove old go cover location 2015-03-28 22:16:04 +01:00
Taylor Gerring
82eeb5e02a Added Coveralls badges 2015-03-28 22:04:36 +01:00
Taylor Gerring
129fabddb2 Prefer hex prefixed with 0x 2015-03-28 21:47:16 +01:00
Taylor Gerring
d9f8b1e0c1 Report InvalidTypeError as -32602 to JSON RPC 2015-03-28 21:42:44 +01:00
Taylor Gerring
e80ef9ff34 Cleanup 2015-03-28 21:41:34 +01:00
Taylor Gerring
29930da522 eth_getStorageAt output hex should begin with 0x 2015-03-28 21:27:50 +01:00
Taylor Gerring
3b20603eb1 Merge branch 'kobigurk-develop' into develop 2015-03-28 21:06:39 +01:00
Taylor Gerring
779a51c047 Merge branch 'develop' of https://github.com/kobigurk/go-ethereum into kobigurk-develop
Conflicts:
	rpc/api.go
2015-03-28 21:05:32 +01:00
Jeffrey Wilcke
b9ca5eef58 Merge pull request #579 from tgerring/rpcargs
RPC Args
2015-03-28 20:42:45 +01:00
obscuren
696ff43db3 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-28 20:34:12 +01:00
obscuren
368ebe63a9 Cleanup VM.
* CALLDATA use getData
* removed old context get range value
* removed casting big => int for some cases
* pc now big int #457
2015-03-28 20:30:38 +01:00
obscuren
3b7e4173ce Cleanup VM 2015-03-28 20:03:25 +01:00
Jeffrey Wilcke
2455e0bd18 Merge pull request #585 from aperseghin/patch-2
Minor fix
2015-03-28 11:54:20 +01:00
Jeffrey Wilcke
ed6ca5d007 Merge pull request #586 from aperseghin/patch-3
Update README.md
2015-03-28 11:54:10 +01:00
Taylor Gerring
a4cbd1c7be ethereum -> geth 2015-03-28 00:32:23 +01:00
Kobi Gurkan
47af2f02cb eth_getTransactionCount now returns a hex string 2015-03-27 22:22:13 +03:00
obscuren
3ea8c7301e PUSH gas fix 2015-03-27 16:53:05 +01:00
Taylor Gerring
43d521e90e Decouple core from rpc 2015-03-27 16:36:01 +01:00
obscuren
df648cbc60 Removed comments 2015-03-27 16:11:19 +01:00
obscuren
8a22cd5e6c Removed defer/panic. #503 2015-03-27 16:09:57 +01:00
Taylor Gerring
0ac346f707 Merge branch 'develop' into rpcargs 2015-03-27 16:03:49 +01:00
Taylor Gerring
9f84c78eb5 BlockFilterArgs 2015-03-27 15:54:54 +01:00
aperseghin
db1c52918f Update README.md 2015-03-27 09:29:35 -04:00
obscuren
00f8319faf Explicitly check memory's data store. #515 2015-03-27 14:22:38 +01:00
aperseghin
8e7549db0b Minor fix 2015-03-27 08:38:20 -04:00
obscuren
eb102bf4bb Etherbase => etherbase 2015-03-27 12:14:00 +01:00
Jeffrey Wilcke
86c43d97bc Merge pull request #581 from aperseghin/patch-1
Update README.md
2015-03-27 12:12:38 +01:00
Jeffrey Wilcke
0b4b2b81f9 Merge pull request #580 from ethersphere/frontier/cli-key
settable etherbase
2015-03-27 12:12:05 +01:00
Jeffrey Wilcke
54a14d5c9d Merge pull request #584 from tgerring/issue577
Use ExtraDB for RPC storage. Fixes #577
2015-03-27 11:48:03 +01:00
Jeffrey Wilcke
09280c5f11 Merge pull request #565 from tgerring/responsetypes
Update response types + tests
2015-03-27 11:44:13 +01:00
Taylor Gerring
2788fb4ce5 More explicit formatting for protocol version 2015-03-27 11:43:14 +01:00
Taylor Gerring
e29396b691 Use ExtraDB for storage. Fixes #577 2015-03-27 09:36:18 +01:00
Taylor Gerring
c38630af23 Test blockHeightFromJsonInvalid 2015-03-27 00:13:03 +01:00
Taylor Gerring
e0781c2548 NewTxArgs accept numbers or strings for value/gas/gasprice 2015-03-27 00:07:28 +01:00
Taylor Gerring
3fcef54f9b tidy 2015-03-26 22:58:12 +01:00
zelig
b375bbee5f settable etherbase
- etherbase flag for block reward destination
- coinbase => etherbase
- CLI- eth Config -> eth, xeth -> RPC / Miner
- use primary instead of coinbase as the unlock magic wildcard
- accounts: firstAddr/Coinbase -> Primary
2015-03-26 21:52:22 +00:00
aperseghin
5838847a9a Update README.md
Rename ethereum executable to geth
2015-03-26 17:48:24 -04:00
Taylor Gerring
6bd1f6cc49 Merge remote-tracking branch 'origin' into rpcargs
Conflicts:
	rpc/args.go
2015-03-26 22:42:46 +01:00
Taylor Gerring
bb12dbe233 Prefer args as strings not objects 2015-03-26 22:35:42 +01:00
Taylor Gerring
7eed7e1d96 Merge branch 'rpcargs' of github.com:tgerring/go-ethereum into rpcargs 2015-03-26 22:27:06 +01:00
Taylor Gerring
2c5a32ebbc Undo XEth changes 2015-03-26 22:24:48 +01:00
Taylor Gerring
49a912ce33 Undo xeth changes 2015-03-26 22:14:31 +01:00
obscuren
b0b0939879 renamed ethereum => geth 2015-03-26 21:27:52 +01:00
Jeffrey Wilcke
829240c325 Merge pull request #550 from ethersphere/frontier/cli-key
import/export accounts
2015-03-26 21:08:15 +01:00
Taylor Gerring
1f3814141b WhisperMessageArgs 2015-03-26 21:07:50 +01:00
Taylor Gerring
9ca87afd0b WhisperFilterArgs 2015-03-26 20:52:09 +01:00
Taylor Gerring
81f36df910 CompileArgs 2015-03-26 20:31:00 +01:00
Taylor Gerring
ddcc8e1673 SubmitWorkArgs tests 2015-03-26 20:25:30 +01:00
Taylor Gerring
b414a1303f WhisperIdentityArgs 2015-03-26 20:20:43 +01:00
Taylor Gerring
1f1e98f96b FilterIdArgs 2015-03-26 20:10:31 +01:00
Taylor Gerring
62ebf999bf FilterStringArgs tests 2015-03-26 20:04:03 +01:00
zelig
7577d12614 max paranoia mode to UNsupport unencrypted keys entirely
- remove account export functionality from CLI
- remove accountExport method,
- remove unencrypted-keys flag from everywhere
- improve documentation
2015-03-26 19:00:18 +00:00
zelig
abbdf41560 output error message if unlock address is invalid (fixes the wierd "read /path: is a directory") msg 2015-03-26 19:00:18 +00:00
zelig
11d2ebc06f unlocking coinbase without knowing address
- accounts: remove Manager.getKey
- cli: for -unlock coinbase, use account manager Coinbase()
2015-03-26 19:00:18 +00:00
zelig
4ec38e3932 common: remove WriteFile and ReadAllFile (use ioutil instead) 2015-03-26 19:00:18 +00:00
zelig
23e41a57ad Applying: fix adming js test regression (maybe otto update?) 2015-03-26 19:00:18 +00:00
zelig
fee224f075 cli test: fix test newJSRE interactive argument 2015-03-26 19:00:18 +00:00
zelig
d1b52efdb5 cli: implement ethereum presale wallet import via cli 2015-03-26 19:00:18 +00:00
zelig
34d5a6c156 cli: help formatting 2015-03-26 19:00:18 +00:00
zelig
1c4c71dcff cli: fix liner not closing (spuriously opened) in noninteractive jsre 2015-03-26 19:00:18 +00:00
zelig
fd8d18ec28 unlocking coinbase
- extract accounts.getKey method - if given empty address it retrieves coinbase (first account)
- cli -unlock coinbase will unlock coinbase
2015-03-26 19:00:18 +00:00
zelig
859f1f08ca blockpool: wrap intermittent status test in a loop 2015-03-26 19:00:18 +00:00
zelig
c4ea921876 import/export accounts
- cli: add passwordfile flag
- cli: change unlock flag only takes account
- cli: with unlock you are prompted for password or use passfile with password flag
- cli: unlockAccount used in normal client start (run) and accountExport
- cli: getPassword used in accountCreate and accountImport
- accounts: Manager.Import, Manager.Export
- crypto: SaveECDSA (to complement LoadECDSA) to save to file
- crypto: NewKeyFromECDSA added (used in accountImport and New = generated constructor)
2015-03-26 19:00:18 +00:00
Taylor Gerring
e21ce9a9b4 DbHexArgs tests 2015-03-26 19:39:40 +01:00
Taylor Gerring
f68ca2b6e6 DbArgs tests 2015-03-26 19:34:32 +01:00
Taylor Gerring
3ab9f26943 Accept number or string for BlockFilterArgs limit/offset 2015-03-26 19:17:25 +01:00
obscuren
658204bafc bump 2015-03-26 17:55:30 +01:00
obscuren
c32bca45ad Stack limit 2015-03-26 17:45:09 +01:00
obscuren
d36501a6e5 Fixed miner
* Miners could stall because the worker wasn't aware the miner was done
2015-03-26 17:45:03 +01:00
Taylor Gerring
6661bc35ef Accept number or string for BlockFilterArgs to/fromBlock 2015-03-26 17:27:29 +01:00
Taylor Gerring
745dd5b7a5 Sha3Args 2015-03-26 16:19:33 +01:00
Taylor Gerring
f695d01354 Convert error checks to Expect functions 2015-03-26 16:16:17 +01:00
Taylor Gerring
3472823be9 HashIndexArgs 2015-03-26 14:17:32 +01:00
Taylor Gerring
cb103c089a BlockNumIndexArgs 2015-03-26 13:57:41 +01:00
Taylor Gerring
cd6b3fd28a GetDataArgs 2015-03-26 13:50:22 +01:00
Taylor Gerring
a49c81547c DecodeParamError -> InvalidTypeError for unexpected input type 2015-03-26 13:45:06 +01:00
Taylor Gerring
ca03e97697 Add InvalidTypeError 2015-03-26 13:33:44 +01:00
obscuren
a718515b3d Squashed 'tests/files/' changes from a7081bc..c6d9629
c6d9629 added another test

git-subtree-dir: tests/files
git-subtree-split: c6d96293710a37489fa3b074a9fc228e0393f152
2015-03-26 13:14:24 +01:00
obscuren
d0fa0a234d Merge commit 'a718515b3d43f00497231f981b5ea757b71d55ff' into develop 2015-03-26 13:14:24 +01:00
Taylor Gerring
c139af5826 GetBalanceArgs 2015-03-26 13:10:31 +01:00
Taylor Gerring
4523a00b91 GetTxCountArgs 2015-03-26 12:47:00 +01:00
obscuren
c33dc3e328 moved helper 2015-03-26 12:40:09 +01:00
obscuren
83b0cad766 fixed block filter args 2015-03-26 12:34:59 +01:00
obscuren
b8a667deed debug log 2015-03-26 12:15:25 +01:00
obscuren
4ba850639e updated web3.js light for console 2015-03-26 12:15:12 +01:00
Taylor Gerring
9c4504dc41 GetStorageAtArgs 2015-03-26 12:11:28 +01:00
obscuren
ace5b5a1bf updated web3.js 2015-03-26 12:06:45 +01:00
obscuren
507830eb81 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-26 12:06:23 +01:00
obscuren
eb433731aa Fixed filter and refactored code 2015-03-26 12:06:14 +01:00
Taylor Gerring
300d36b864 improved NewTxArgs tests 2015-03-26 11:59:35 +01:00
Taylor Gerring
ad2089b0a3 Add blockHeightFromJson convenience function 2015-03-26 11:59:16 +01:00
Taylor Gerring
493e0d7be8 improved GetBlockByNumber tests 2015-03-26 11:07:14 +01:00
Taylor Gerring
93af30a6f6 improved GetBlockByHashArgs tests 2015-03-26 11:06:45 +01:00
Taylor Gerring
bd1a54f076 GetStorageArgs 2015-03-26 10:52:32 +01:00
Taylor Gerring
966cfa4bdd NewTxArgs 2015-03-26 10:34:21 +01:00
Taylor Gerring
c7dc379da5 GetBlockByHashArgs 2015-03-26 10:14:52 +01:00
Taylor Gerring
7e1e264375 Don't return empty block for "pending" #568 2015-03-26 09:24:07 +01:00
obscuren
98f970ba59 Updated example for new ethereum.js 2015-03-26 01:03:14 +01:00
obscuren
88b9bc40d7 Godep issue? 2015-03-26 01:03:03 +01:00
obscuren
e5a0a0ef48 Moved output to debug 2015-03-26 01:02:51 +01:00
obscuren
7e4c488717 Fixed storage. Closes #516 2015-03-26 00:42:35 +01:00
obscuren
505f1fbcbb added tx tests and fixed block tests 2015-03-25 17:05:29 +01:00
Jeffrey Wilcke
65ea55bccd Merge pull request #564 from fjl/rlp-nil-array
rlp: encode nil array pointers as empty list or string
2015-03-25 17:00:25 +01:00
Taylor Gerring
e22bcb78a5 Update response types + tests
To coincide with recent type conversion
2015-03-25 16:50:30 +01:00
Felix Lange
181a21c67c rlp: encode nil array pointers as empty list or string 2015-03-25 16:46:29 +01:00
obscuren
ff5578fc71 updated ethash 2015-03-25 14:58:12 +01:00
obscuren
a2e3bf6f30 removed big num from pp 2015-03-25 14:51:10 +01:00
Jeffrey Wilcke
aa1eae67ec Merge pull request #560 from tgerring/xethcleanup
XEth cleanup
2015-03-25 13:55:46 +01:00
Felix Lange
7f0c2545a9 Merge pull request #561 from ethersphere/frontier/blockpool
bugfix with idle too long triggered after peer switch
2015-03-25 13:55:05 +01:00
obscuren
221f30c3aa updated ethereum.js 2015-03-25 13:52:45 +01:00
obscuren
8b32f79445 Removed full path 2015-03-25 13:52:23 +01:00
obscuren
950b4a68c8 Improved miner recovery
* In case of uncle mining (e.g. same TS) the miner would stop if all
  threads happened to mine a potential uncle
2015-03-25 13:51:12 +01:00
zelig
18d1569ce5 header check for test 2015-03-25 12:11:29 +00:00
zelig
9d592c0445 bugfix with idle too long triggered after peer switch
- reset bestIdleTimer when launching head section process
- log chain head events
- common.Hash key in activateChain map
2015-03-25 12:11:29 +00:00
obscuren
a1cae93d78 Improved pretty printer for console 2015-03-25 12:44:41 +01:00
Taylor Gerring
2b93843d86 Improve protocol version reporting 2015-03-25 12:09:55 +01:00
Taylor Gerring
c956bcb13c Move version to const and expose via Version() 2015-03-25 12:08:48 +01:00
obscuren
6431d088ad bump 2015-03-25 11:54:11 +01:00
obscuren
ff44347ea1 fixed test 2015-03-25 10:31:58 +01:00
obscuren
dda1d60556 Store protocol version in the block db **NOT** extra db 2015-03-25 09:58:46 +01:00
obscuren
3301f6ecef back to debug log 2015-03-24 23:55:48 +01:00
obscuren
97bf9f1521 Temp fix for console output 2015-03-24 23:50:27 +01:00
obscuren
3d5f48a160 updated deps 2015-03-24 21:25:11 +01:00
obscuren
a6e659f74b Merge branch 'master' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-24 19:22:32 +01:00
Jeffrey Wilcke
a33a325ac1 Merge pull request #559 from Gustav-Simonsson/blocktests_update_ethash
Update ethash lib
2015-03-24 19:14:20 +01:00
Taylor Gerring
d41341f77d WithState -> withState 2015-03-24 17:58:16 +01:00
Taylor Gerring
82b5a8af49 DRY up height logic 2015-03-24 17:49:37 +01:00
obscuren
c38a3b4cc7 Better error reporting in the console. Updated ethereum.js 2015-03-24 17:49:28 +01:00
Taylor Gerring
865f31018b Shuffle 2015-03-24 17:45:31 +01:00
Taylor Gerring
2106a63d60 Move Frontend interface to separate file 2015-03-24 16:42:33 +01:00
Taylor Gerring
65d553d367 Update internal calls to use CurrentBlock() 2015-03-24 16:34:28 +01:00
Taylor Gerring
59b6b619a2 Don't expose backend directly 2015-03-24 16:33:37 +01:00
Taylor Gerring
b9b7442b74 Remove redundant fields 2015-03-24 16:08:18 +01:00
Taylor Gerring
ad420d099a rename eth to backend 2015-03-24 16:01:44 +01:00
Gustav Simonsson
b0c4dc8df8 Update ethash lib 2015-03-24 15:51:51 +01:00
Taylor Gerring
6d41402dce Backend no longer needed to resolve import cycle 2015-03-24 15:36:39 +01:00
obscuren
9de1ad6546 fixed tests 2015-03-24 15:27:05 +01:00
obscuren
ff9d66e096 Cleaned up changes 2015-03-24 15:23:16 +01:00
obscuren
23bccbbc58 Modified according to poc 9 changes
* Refund of value
2015-03-24 15:15:17 +01:00
obscuren
bbe795455a Secure trie shakey / key matching 2015-03-24 15:14:03 +01:00
obscuren
24066dca46 Squashed 'tests/files/' changes from 8f3fbe6..a7081bc
a7081bc update tests
d2678cb update random tests
ca0401b update tests

git-subtree-dir: tests/files
git-subtree-split: a7081bc54e9d72cc480218cb4b218dbb04c7cde7
2015-03-24 13:39:49 +01:00
obscuren
d6da533345 Merge commit '24066dca4646c8a376aa5dfbceec0a4b3f872c11' into develop 2015-03-24 13:39:49 +01:00
obscuren
0ec171ccdf Copy fix 2015-03-24 13:38:16 +01:00
obscuren
eab8f7355d Event fixes for miner 2015-03-24 13:37:38 +01:00
obscuren
576df064e5 Updated for PV59
* Value XFER are refunded back to the sender if the execution fails
2015-03-24 11:49:30 +01:00
obscuren
58c6cc8fd7 Squashed 'tests/files/' changes from 559268b..8f3fbe6
8f3fbe6 Pv59 changes
2633cce JS fails
748f803 Merge remote-tracking branch 'origin' into develop
2e60a20 JS failure
2673f14 Incorrect Test deletion
345261d More Transaction Tests
300998f add blockchain tests - uncle gen 0 - in-chain-uncle
7e8585a gas counter overflow
5af1002 check overflow of v value in tx tests
53ee775 memory stress tests 28
46045b7 add 1024 stack size tests
4678ee8 add 1024 stack size limit tests
3b870f6 rm test
7c51854 fix test
74f1e91 cpp fail
ce9535a add cppjit fail
2e17a2e SDIV tests
cd38e05 first JS failures
d5e80d5 Delete st201503181858GO.json

git-subtree-dir: tests/files
git-subtree-split: 8f3fbe63f92c413fda1fc68cf27a9dbb69681168
2015-03-24 11:22:58 +01:00
obscuren
4877e52c15 Merge commit '58c6cc8fd7ff8a27004ed62d912e0a61ae1b73bb' into develop 2015-03-24 11:22:58 +01:00
obscuren
118b79eca7 Added gitter integration for travis 2015-03-24 10:41:04 +01:00
obscuren
a59ea7ce29 Changed miner
* Instead of delivering `Work` to the `Worker`, push a complete Block to
  the `Worker` so that each agent can work on their own block.
2015-03-24 10:34:06 +01:00
obscuren
d8e21b39b3 Added copy function 2015-03-24 10:33:00 +01:00
obscuren
0ee0094cc0 better block propagation 2015-03-23 22:59:19 +01:00
obscuren
7b8a47f484 removed legacy code 2015-03-23 22:05:12 +01:00
obscuren
0eaa023ffa Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-23 21:48:50 +01:00
obscuren
bfb9ed881d Gas validation and clean up of legacy code 2015-03-23 21:48:45 +01:00
obscuren
ebf4408d73 Decrement depth 2015-03-23 21:48:31 +01:00
Taylor Gerring
e88a29ad02 Merge pull request #553 from ethersphere/jsonlog
natspec: minor fix in test
2015-03-23 18:57:57 +01:00
zelig
53af810851 natspec: minor fix in test 2015-03-23 17:36:04 +00:00
obscuren
f2f65c1a65 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-23 18:30:11 +01:00
Taylor Gerring
90c710fd26 Merge pull request #552 from ethersphere/jsonlog
Jsonlog
2015-03-23 18:27:06 +01:00
obscuren
c8e9ca0483 fixed bad uncles 2015-03-23 18:27:05 +01:00
zelig
a983a215dc fix ethtest logging 2015-03-23 17:08:49 +00:00
Taylor Gerring
e954c24af0 Implement RPC net_version 2015-03-23 18:06:05 +01:00
Taylor Gerring
60020add74 Merge pull request #551 from ethersphere/frontier/eth-version-exports
eth: fix protocol version/network id copied from config to Ethereum field
2015-03-23 18:00:54 +01:00
Taylor Gerring
1cf6ca8f10 Add Close() method to EthereumApi
To close the handler for LDB
2015-03-23 17:41:50 +01:00
zelig
9880f99ccb fix p2p/testlog_test 2015-03-23 16:41:41 +00:00
Taylor Gerring
1e61b75cbf tests + fixes 2015-03-23 17:33:01 +01:00
zelig
03cc5df9b7 eth: fix protocol version/network id copied from config to Ethereum field 2015-03-23 16:23:06 +00:00
obscuren
0330077d76 moved state and vm to core 2015-03-23 16:59:09 +01:00
obscuren
d7eaa97a29 moved to error 2015-03-23 16:55:40 +01:00
obscuren
211cb03f83 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-23 16:47:05 +01:00
Jeffrey Wilcke
9562a9840f Merge pull request #537 from Gustav-Simonsson/blocktests2
Add post state validation to block tests and disable network, add RPC
2015-03-23 16:39:26 +01:00
Taylor Gerring
5707912e2f "pending" convention should be -2 instead of 0 2015-03-23 16:36:12 +01:00
obscuren
253ecdc8bb Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-23 16:35:49 +01:00
obscuren
9be7853e34 Fixed issues with stalled remote miner 2015-03-23 16:35:44 +01:00
Taylor Gerring
2f8601ef38 Rename blockAge to blockHeight 2015-03-23 16:34:50 +01:00
Gustav Simonsson
becc503230 Correct difficulty calculation to use new difficulty minimum 2015-03-23 16:32:20 +01:00
Gustav Simonsson
5d31a475e9 Fix new types for blocktests and comment out non-working log level setter 2015-03-23 16:32:20 +01:00
Gustav Simonsson
60de4d6dd1 gofmt 2015-03-23 16:32:20 +01:00
Gustav Simonsson
08bb472c91 Add validation of post state accounts to block tests 2015-03-23 16:32:20 +01:00
Gustav Simonsson
33c5186fd0 In blocktest cmd, disable network and add RPC flag 2015-03-23 16:32:20 +01:00
obscuren
dc3a9379f5 logging for possible uncles 2015-03-23 16:14:33 +01:00
Taylor Gerring
3f6e1b2fd3 db_putHex/db_getHex + tests 2015-03-23 16:04:21 +01:00
obscuren
524f8199bf added some nil checks for cache (testing specific) 2015-03-23 12:22:58 +01:00
obscuren
6657d544db Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-23 12:12:53 +01:00
obscuren
0be6d34048 finally merged *the missing* 2015-03-23 12:12:49 +01:00
Jeffrey Wilcke
dbb2af6016 Merge pull request #548 from tgerring/typescleanup
Fix Mist types build errors
2015-03-23 12:12:29 +01:00
Taylor Gerring
91a2275ad3 Move RemoteAgent to miner pkg 2015-03-23 11:21:41 +01:00
Taylor Gerring
439481d177 Rename Agent to RemoteAgent 2015-03-23 11:14:42 +01:00
Taylor Gerring
01c0ba22ae Add DAG seed hash and difficulty to GetWork 2015-03-23 11:09:48 +01:00
Taylor Gerring
0846e15667 go away! 2015-03-23 09:36:28 +01:00
Taylor Gerring
ab6311c1bd Move remote mining agent to XEth 2015-03-23 09:35:42 +01:00
Taylor Gerring
d76e8cb1f1 Consistent var names 2015-03-23 09:24:52 +01:00
Taylor Gerring
16a58f8f2a Always return 3 strings 2015-03-23 08:55:06 +01:00
Taylor Gerring
31879eca8c Stub corrected getWork response 2015-03-23 08:45:09 +01:00
Taylor Gerring
3772f02569 Rename for filename typo 2015-03-23 08:29:41 +01:00
Taylor Gerring
372e1cad5b Cleanup get/submitWork
getWork needs to return additional values
2015-03-23 08:28:54 +01:00
Ethan Buchman
d2fa6e7753 vm: explicit error checks in ecrecover. closes #505 2015-03-22 14:54:40 -07:00
Jeffrey Wilcke
8affdf96e2 Merge pull request #547 from tgerring/commoncleanup
common/common.go cleanup
2015-03-22 21:46:46 +01:00
Jeffrey Wilcke
3133372a6a Merge pull request #536 from zsfelfoldi/develop
using robertkrimen/otto, godeps updated
2015-03-22 21:45:56 +01:00
obscuren
59eab49cb8 Merge branch 'ethersphere-jsonlog' into develop 2015-03-22 21:43:58 +01:00
obscuren
8b1b9fc99d Merge branch 'jsonlog' of https://github.com/ethersphere/go-ethereum into ethersphere-jsonlog
Conflicts:
	eth/backend.go
2015-03-22 21:43:36 +01:00
obscuren
8ed4f226d1 check for nil ptrs 2015-03-22 15:44:00 +01:00
obscuren
82956df523 Get work / submit work partially implemented.
* WIP missing arguments for submitting new work
* GetWork **done**
2015-03-22 15:38:01 +01:00
Taylor Gerring
d186bf0dfe Fix Mist types build errors 2015-03-22 14:25:33 +01:00
Taylor Gerring
bf73f02fe0 Remove common.go 2015-03-22 13:48:07 +01:00
Taylor Gerring
360c66c65d Move Big* vars to big.go 2015-03-22 13:46:38 +01:00
Taylor Gerring
2477d10aa0 Move MakeName to path 2015-03-22 13:46:21 +01:00
Taylor Gerring
c0741edc34 Move OS-specific funcs to path.go 2015-03-22 13:44:17 +01:00
Taylor Gerring
82a41a198e Move CurrencyToString to size 2015-03-22 13:35:13 +01:00
Taylor Gerring
08b21acff1 Move ToHex/FromHex into bytes 2015-03-22 13:32:52 +01:00
Jeffrey Wilcke
9682a3ef3e Merge pull request #526 from ethersphere/frontier/blockpool
Frontier/blockpool
2015-03-22 13:11:16 +01:00
obscuren
e349fb9350 bump 2015-03-22 12:20:27 +01:00
obscuren
13781b922a converted to proper types 2015-03-22 12:12:29 +01:00
zelig
0edb33566f fix blockpool test logger 2015-03-22 02:18:07 +00:00
zelig
78cff9e3a4 independent flag for json structured logging
- logjson flag remove logformat flag
- passed to eth Config
- logsystem not a field of Ethereum
- LogSystem does not need to expose GetLogLevel/SetLogLevel
- message struct just implements more generic LogMsg interface
- LogMsg is a fmt.Stringer with Level()
- jsonMsg ([]byte) implements LogMsg
- remove "raw" systems
- move level logic inside StdLogSystem
- logsystems only print their kind of msg: jsonLogSystem prints jsonMsg, StdLogSystem prints stdMsg
2015-03-22 02:16:54 +00:00
zelig
95038fc62d Idle too long error incorrectly triggered even when peer sending new blocks
- fix status chain map uses common.Hash as key
- add badPeers increment to IncorrectTD errors (forgotten)
- signal head info update to head section process even if parent hash is not in pool (inserted), so that idle timer can be set to nil
- suicideC -> peer.headInfoTimer
- quit -> peer.bestIdleTimer
- and they are properly set from within getBlockHashes and handleSection
2015-03-22 02:02:24 +00:00
obscuren
7f85608f30 Merge branch 'conversion' into develop 2015-03-21 18:18:19 +01:00
Jeffrey Wilcke
09766d1729 Merge pull request #535 from maran/fixReadmeLink
Fix link to build instructions in the readme
2015-03-21 18:16:55 +01:00
obscuren
fcacfabe19 Added new ethereum.js 2015-03-21 15:09:03 +01:00
obscuren
83728e4b64 Merge branch 'develop' into conversion
Conflicts:
	rpc/responses.go
2015-03-21 14:54:25 +01:00
obscuren
004f5008ff Merge branch 'rpcfrontier' into develop 2015-03-21 14:53:12 +01:00
obscuren
a7ad9c309b Merge branch 'develop' into conversion 2015-03-21 14:52:42 +01:00
obscuren
38c7c589e4 Merge branch 'rpcfrontier' into develop 2015-03-21 14:52:31 +01:00
obscuren
ce862ee758 Removed some comments 2015-03-21 14:51:45 +01:00
obscuren
4300f2a0fa Fixed state tests 2015-03-21 14:47:50 +01:00
obscuren
c28116cb3b Fixed incorrect recipient derived 2015-03-21 14:46:50 +01:00
obscuren
06697775d1 Merge branch 'conversion' of github.com-obscure:ethereum/go-ethereum into conversion 2015-03-21 14:36:20 +01:00
Taylor Gerring
9edb9a21bc Add json LogSystem #538 2015-03-21 07:26:44 +01:00
Taylor Gerring
670021da15 Rename topic to topics #544 2015-03-21 07:08:33 +01:00
Felix Lange
069c87b960 whisper: use common.Hash 2015-03-21 00:57:18 +01:00
Felix Lange
7c4ff3abb4 eth: enable whisper again 2015-03-21 00:50:20 +01:00
Felix Lange
483d43a15a whisper: use package rlp 2015-03-21 00:49:58 +01:00
Felix Lange
a829a56587 rlp: add Stream.Raw 2015-03-21 00:49:31 +01:00
Felix Lange
81800ca39e Merge remote-tracking branch 'ethereum/conversion' into conversion 2015-03-20 22:47:27 +01:00
Felix Lange
b95ff54632 cmd/blocktest: delete package
Blocktests are now integrated in cmd/ethereum.
2015-03-20 22:46:41 +01:00
Felix Lange
b41185a68f rlp: fix nil pointer decoding
The generic pointer decoder did not advance the input position
for empty values. This can lead to strange issues and even
infinite loops.
2015-03-20 22:33:40 +01:00
obscuren
abce6804a0 Right pad bytes to prevent future programmers making bugs 2015-03-20 20:37:56 +01:00
obscuren
f4e9638867 Merge branch 'ethersphere-frontier/blockpool' into conversion 2015-03-20 18:01:05 +01:00
obscuren
ecd10d2cf7 iterator returned wrong value 2015-03-20 18:00:54 +01:00
obscuren
1821d1af48 Merge branch 'frontier/blockpool' of https://github.com/ethersphere/go-ethereum into ethersphere-frontier/blockpool 2015-03-20 17:42:25 +01:00
obscuren
54dac59285 wip 2015-03-20 17:42:09 +01:00
obscuren
a59bb053f4 merge 2015-03-20 16:02:01 +01:00
obscuren
deee9cb170 Added caching for block chain. Currently set to 10k 2015-03-20 15:54:42 +01:00
Taylor Gerring
28e1971272 Merge branch 'rpcxeth' into rpcfrontier
Conflicts:
	rpc/api.go
2015-03-20 15:25:43 +01:00
Taylor Gerring
0cde7a4d46 Add xethAtStateNum convenience method 2015-03-20 14:56:55 +01:00
Taylor Gerring
efcc93e7da Move Account register to xeth 2015-03-20 14:12:07 +01:00
Felix Lange
28ddc16a9b Merge remote-tracking branch 'ethereum/conversion' into conversion 2015-03-20 14:01:35 +01:00
Felix Lange
c161d73d42 common: drop accessors for Value.Val
I don't see why we would need two different accessors for a public field.
2015-03-20 14:00:26 +01:00
Felix Lange
dcb9614dfe common: drop unused kind field from Value
This makes Value 24 bytes smaller on 64bit systems.
2015-03-20 14:00:26 +01:00
Felix Lange
f7d1d601e9 common: make Value encodable with package rlp
Value.{Encode,Decode} are gone. It implements rlp.Encoder and rlp.Decoder
instead, so Value can be decoded into directly.
2015-03-20 14:00:26 +01:00
Felix Lange
c388e7eac0 crypto: remove use of common.Value.Encode
This seems to be the last remaining use of it.
2015-03-20 14:00:26 +01:00
zsfelfoldi
85acdadcfa fixed jsre test 2015-03-20 13:48:23 +01:00
Taylor Gerring
739c36ad4d inline GetStorageAt 2015-03-20 13:45:07 +01:00
Taylor Gerring
28e5fc8352 Make pretty 2015-03-20 13:37:56 +01:00
zsfelfoldi
8324b683b4 using robertkrimen/otto, godeps updated 2015-03-20 13:22:01 +01:00
Maran
7690285cbe Fix link to build instructions in the readme 2015-03-20 13:19:26 +01:00
zelig
66b29899c4 use common.Hash as pool key, no string conversion needed 2015-03-20 11:57:47 +00:00
obscuren
4f5b362bda %#x => %x 2015-03-20 12:52:03 +01:00
obscuren
91f9f355b2 test 2015-03-20 12:17:57 +01:00
obscuren
41c493ace9 Merge branch 'rpcfrontier' of github.com-obscure:ethereum/go-ethereum into rpcfrontier 2015-03-20 12:07:19 +01:00
obscuren
55fdf3e462 Listen to tx pre event and trigger 'pending' 2015-03-20 12:07:06 +01:00
zelig
d7564a9a25 fix common.Hash conversion 2015-03-20 10:41:41 +00:00
zelig
8987750a36 fix import in reorganised test 2015-03-20 10:41:41 +00:00
zelig
0578df9467 remove eth/wallet.go (only commented out content) 2015-03-20 10:41:41 +00:00
zelig
a578db5dae improve documentation and move one test 2015-03-20 10:41:41 +00:00
zelig
8767179d74 reduce logging output 2015-03-20 10:41:41 +00:00
zelig
63cae9b9ac uncomment status test, hack: skip the 2 unreliable fields 2015-03-20 10:41:41 +00:00
zelig
137a9c9365 check and penalise td misreporting
- add ErrIncorrectTD
- checkTD called after insertChain successful
- fix tests, use blockPoolTester.tds to map block index to TD
2015-03-20 10:41:41 +00:00
zelig
a9926a289d fix missing hexification on IdleTooLong error log 2015-03-20 10:41:40 +00:00
zelig
391e89d70a use own total difficulty to limit best peer
- update blockpool td by subscribing to ChainHeadEvent
- if ahead of best peer, demote it
- addPeer now take own td as current td
- removePeer now take own td as current td
- add relevant tests to peers_test
- eth: backend now calls blockpool with eth.eventMux and chainManager.Td
2015-03-20 10:41:40 +00:00
zelig
50661f0e68 peer suspension to disallow reconnect after disconnect on fatal error for set period (PeerSuspensionInterval) 2015-03-20 10:41:40 +00:00
obscuren
01ff0b3176 fixed ethash 2015-03-20 11:40:46 +01:00
obscuren
d8fe8f60e8 updated ethash 2015-03-20 11:19:12 +01:00
Taylor Gerring
b3329bc698 inline Transact 2015-03-20 07:15:34 +01:00
Taylor Gerring
aa3918efa7 Move transact gas check to XEth 2015-03-20 07:13:29 +01:00
Taylor Gerring
e038a42d7a inline Call 2015-03-20 06:58:53 +01:00
Taylor Gerring
1d6451f5c3 inline GetBlockByNumber 2015-03-20 06:57:23 +01:00
Taylor Gerring
bde161382a inline GetBlockByHash 2015-03-20 06:53:24 +01:00
Taylor Gerring
eb45211501 Merge branch 'rpcfrontier' of github.com:ethereum/go-ethereum into rpcfrontier 2015-03-20 06:45:44 +01:00
Taylor Gerring
b56e20be27 Reorg for clarity 2015-03-20 00:24:23 -04:00
Taylor Gerring
754160afea Move gas defaults to XEth 2015-03-20 00:23:48 -04:00
Taylor Gerring
c3a3d38735 Add tests for errors 2015-03-20 00:08:29 -04:00
Taylor Gerring
3cea7d87c1 Rename FilterOptions to BlockFilterArgs 2015-03-19 23:55:17 -04:00
Taylor Gerring
d791fe4975 Remove unnecessary event mux 2015-03-19 23:34:35 -04:00
Taylor Gerring
19360c0079 Move stateAt func to XEth 2015-03-19 23:28:45 -04:00
Taylor Gerring
6669ef5b70 Rename for clarity 2015-03-19 23:20:54 -04:00
Taylor Gerring
7b45f3377f inline MessagesChanged 2015-03-19 23:14:55 -04:00
Taylor Gerring
2ef2b9f2e0 inline UninstallWhisperFilter 2015-03-19 23:13:52 -04:00
Taylor Gerring
1f9b93647b inline NewWhisperFilter 2015-03-19 23:11:52 -04:00
Taylor Gerring
4b5e592656 inline AllLogs 2015-03-19 23:10:23 -04:00
Taylor Gerring
0bda63eb76 inline Logs 2015-03-19 23:08:26 -04:00
Taylor Gerring
d2e7414230 inline FilterChanged 2015-03-19 23:07:25 -04:00
Taylor Gerring
3e9632e256 inline NewFilterString 2015-03-19 23:06:32 -04:00
Taylor Gerring
84b19971fa inline UninstallFilter 2015-03-19 23:05:23 -04:00
Taylor Gerring
4663a55f12 inline NewFilter 2015-03-19 23:03:53 -04:00
Taylor Gerring
7c30716828 Merge branch 'rpcinline' into rpcxeth
Conflicts:
	rpc/api.go
2015-03-19 23:01:10 -04:00
Taylor Gerring
6c04c19eb4 Reorg filter logic to XEth 2015-03-19 22:58:07 -04:00
Taylor Gerring
12d87226a7 Merge branch 'rpcutil' into rpcfrontier 2015-03-19 20:52:36 -04:00
Taylor Gerring
cdfc03dc8e inline WhisperPost 2015-03-19 20:40:50 -04:00
Taylor Gerring
0895190b64 inline GetBlockTransactionCountByHash 2015-03-19 20:31:40 -04:00
Taylor Gerring
ff657edbb6 inline GetBlockTransactionCountByNumber 2015-03-19 20:30:42 -04:00
Taylor Gerring
c57eb286d6 inline GetBlockUncleCountByHash 2015-03-19 20:29:46 -04:00
Taylor Gerring
216175c265 inline GetBlockUncleCountByNumber 2015-03-19 20:28:25 -04:00
Taylor Gerring
7e6c8a411d fixes 2015-03-19 20:26:09 -04:00
Taylor Gerring
22546dcb55 inline UninstallWhisperFilter 2015-03-19 20:14:27 -04:00
Taylor Gerring
b28e6d8306 inline WhisperMessages 2015-03-19 20:12:52 -04:00
Taylor Gerring
cc91ba0add inline GetTransactionByHash 2015-03-19 20:12:12 -04:00
Taylor Gerring
0eb9572d64 inline RemoveWhisperIdentity 2015-03-19 20:10:05 -04:00
Taylor Gerring
85e03217de inline NewWhisperIdentity 2015-03-19 20:09:54 -04:00
Taylor Gerring
57f6a3b5c0 inline DbGet 2015-03-19 20:06:35 -04:00
Taylor Gerring
6fef616870 inline DbPut 2015-03-19 20:05:48 -04:00
Taylor Gerring
d28cd0f040 inline GetCompilers 2015-03-19 20:04:40 -04:00
Taylor Gerring
152b37ee11 inline GetData 2015-03-19 20:04:02 -04:00
Taylor Gerring
e530c960a4 inline GetTxCountAt 2015-03-19 20:03:27 -04:00
Taylor Gerring
3aea645106 inline GetStorage 2015-03-19 20:02:31 -04:00
Taylor Gerring
7562bc1dbc inline GetBalance 2015-03-19 20:00:41 -04:00
Taylor Gerring
b7745c6835 inline HasWhisperIdentity 2015-03-19 20:00:18 -04:00
Taylor Gerring
6cc02aadbf Inline getStateWithNum 2015-03-19 19:58:59 -04:00
obscuren
62236dd95e copy over loop 2015-03-19 23:20:41 +01:00
Taylor Gerring
abc3d8d50a Make send internal 2015-03-19 18:06:26 -04:00
obscuren
df5901fdc5 Removed more casts 2015-03-19 22:45:03 +01:00
obscuren
013427bde2 Merge branch 'develop' into conversion 2015-03-19 21:18:29 +01:00
obscuren
f144a95940 Squashed 'tests/files/' changes from e558aa4..559268b
559268b go failure
473f67f BlockTests More Invalid RLPs updated to latest develop
296c653 Fixed test to 15 header items
d011a67 Merge branch 'develop' of git://github.com/ethereum/tests into develop
44a3664 Updated to 16mb size

git-subtree-dir: tests/files
git-subtree-split: 559268ba4b454152c17b343db33d617877f30a3a
2015-03-19 21:14:51 +01:00
obscuren
b4a51de602 Merge commit 'f144a95940a5df0809bb028eef7b337125423602' into develop 2015-03-19 21:14:51 +01:00
Taylor Gerring
c7b616ac14 Remove util 2015-03-19 14:28:31 -04:00
Taylor Gerring
1f2de6ecd5 Remove extra logger 2015-03-19 14:21:42 -04:00
Taylor Gerring
d670c861d7 Move Log to LogRes 2015-03-19 14:19:52 -04:00
obscuren
29eb220910 :-) 2015-03-19 17:18:55 +01:00
obscuren
e861bbe0c1 Merge branch 'rpcfrontier' into develop 2015-03-19 17:00:01 +01:00
obscuren
463491f8cd moved back to debug 2015-03-19 16:59:54 +01:00
obscuren
b5a71d955c merge 2015-03-19 16:59:13 +01:00
obscuren
e540a75030 re-enabled json logging 2015-03-19 16:30:01 +01:00
obscuren
03b8ddd19c Merge branch 'rpcfrontier' into develop 2015-03-19 16:29:32 +01:00
obscuren
14a2f42f37 fixed chain event. Closes #529 2015-03-19 16:19:54 +01:00
obscuren
93ba3df4ff Removed frontier from version :-( 2015-03-19 15:36:38 +01:00
obscuren
b52807f0c0 Removed frontier in version :-( 2015-03-19 15:36:00 +01:00
Felix Lange
ce063e8d9c Merge remote-tracking branch 'ethereum/conversion' into conversion 2015-03-19 15:21:49 +01:00
Felix Lange
e80dda6051 eth, whisper: adapt for RLP encoder switch in package p2p
I have rewritten the protocol test to use p2p.MsgPipe because
p2p.NewMsg is gone.
2015-03-19 15:18:31 +01:00
Felix Lange
b9e0b11e7d p2p: interrupt MsgPipe payload read/write
This is better because protocols might not actually read the payload for
some errors (msg too big, etc.) which can be a pain to test with the old
behaviour.
2015-03-19 15:16:06 +01:00
Felix Lange
a7bced779a p2p: log disconnect requests
This helps a lot with debugging.
2015-03-19 15:15:07 +01:00
Felix Lange
5ba51594c7 p2p: use package rlp to encode messages
Message encoding functions have been renamed to catch any uses.
The switch to the new encoder can cause subtle incompatibilities.
If there are any users outside of our tree, they will at least be
alerted that there was a change.

NewMsg no longer exists. The replacements for EncodeMsg are called
Send and SendItems.
2015-03-19 15:11:02 +01:00
Felix Lange
4811f460e7 p2p: export ExpectMsg (for eth protocol testing) 2015-03-19 15:08:04 +01:00
obscuren
797bbce15e Merge branch 'develop' into conversion 2015-03-19 15:07:47 +01:00
obscuren
554f20930a Merge branch 'develop' into rpcfrontier 2015-03-19 15:07:33 +01:00
obscuren
a756dbeb7b Removed uint casts 2015-03-19 15:06:56 +01:00
obscuren
ad7e491214 improved test output 2015-03-19 15:04:29 +01:00
obscuren
d4e5747d04 Merge branch 'develop' into conversion 2015-03-19 14:31:41 +01:00
obscuren
cf45b939a0 fixed tests 2015-03-19 14:31:14 +01:00
Felix Lange
e13c673980 Merge remote-tracking branch 'ethereum/conversion' into conversion 2015-03-19 12:17:43 +01:00
Felix Lange
965c9babe3 rlp: fix encoding of one element strings and byte slices
The encoder was missing a special case for one element strings whose
element is below 0x7f. Such strings must be encoded as a single byte
without a string header.
2015-03-19 12:15:43 +01:00
obscuren
d7ab716eea Fixed mkdnode & added some tests 2015-03-19 10:57:02 +01:00
Taylor Gerring
8b20c3cc97 Validate NewTx From field is not blank 2015-03-18 20:30:09 -04:00
obscuren
85fa3790ac Squashed 'tests/files/' changes from 641ebaa..e558aa4
e558aa4 clean up
47096f8 remove corrupted files
47e73ea even more failures
18506ee add tests
a9729da merge
bc09d2e merge
3c89576 new tests
650ac93 Merge remote-tracking branch 'origin/develop' into develop
ee7ea6a update blockChainTests
46484ae fuzz tests
eb8f8fb fuzz testing
1c74972 fuzz testing results
8f06b8f Block Tests +make RLP header larger than rlp +all block fields  +1)Prefixed000  +2)Larger size  +3)Less Size  +4)rlp element list when shouldnt  +5)given as array +random byte at the end +transaction fields +random byte in RLP
fdf6c3e BlokTests Invalid Block Header RLPs (0000prefix, tooLarge, tooShort)
c81751d update gasLimit

git-subtree-dir: tests/files
git-subtree-split: e558aa49d425eb43b8ee2f71f52b6312ab092520
2015-03-18 22:13:08 +01:00
obscuren
e67d32b467 Merge commit '85fa3790ac9f67232f0e31e7f861c66ef0e0047e' into develop 2015-03-18 22:13:08 +01:00
Taylor Gerring
da427e8843 Merge branch 'rpcutil' into rpcfrontier 2015-03-18 15:57:06 -04:00
Taylor Gerring
0685810ec6 Tests 2015-03-18 15:48:40 -04:00
Taylor Gerring
e02eedb43e BlockNumber as int fix 2015-03-18 15:48:34 -04:00
Taylor Gerring
7cbcd81ddc Remove UnmarshalRawMessages 2015-03-18 15:42:57 -04:00
obscuren
5f35e6778f Merge branch 'rpcfrontier' into conversion 2015-03-18 18:42:30 +01:00
obscuren
af9da83ce2 Merge branch 'develop' into rpcfrontier 2015-03-18 18:42:21 +01:00
obscuren
f0bb136099 Merge branch 'develop' into conversion 2015-03-18 18:42:01 +01:00
obscuren
c12046d6bf Merge branch 'ethersphere-frontier/cli-private-network' into develop 2015-03-18 18:39:56 +01:00
obscuren
79f90bf7c1 added frontier to version 2015-03-18 18:39:24 +01:00
obscuren
bc5ae94384 Merge branch 'frontier/cli-private-network' of https://github.com/ethersphere/go-ethereum into ethersphere-frontier/cli-private-network 2015-03-18 18:37:20 +01:00
obscuren
f9a6038f5b merge 2015-03-18 18:23:37 +01:00
Taylor Gerring
baca0c2251 Merge pull request #523 from fjl/docker-fast
Dockerfile: use fast™ build steps
2015-03-18 12:09:20 -04:00
Felix Lange
3e52c9439a Merge pull request #522 from fjl/makedag
cmd/ethereum: add makedag command for testing
2015-03-18 16:40:50 +01:00
Taylor Gerring
60c43d1952 Remove i2hex 2015-03-18 11:10:08 -04:00
Taylor Gerring
7c9bc8517d Remove RpcServer 2015-03-18 11:08:49 -04:00
obscuren
4d0ae8b0cb Merge branch 'conversion' of github.com-obscure:ethereum/go-ethereum into conversion 2015-03-18 14:16:07 +01:00
obscuren
48dd601de0 prep template for fixed size hashes 2015-03-18 14:15:58 +01:00
Felix Lange
064279c0ec cmd/ethereum, cmd/utils: partial fix for chain import 2015-03-18 14:04:44 +01:00
Taylor Gerring
e30c323391 merge develop 2015-03-18 08:46:55 -04:00
Felix Lange
d15f90645d Merge remote-tracking branch 'ethereum/conversion' into conversion 2015-03-18 13:39:01 +01:00
Felix Lange
a59dd393e7 core: fix tests 2015-03-18 13:38:47 +01:00
Felix Lange
b5b83db450 core: use package rlp to encode blocks
This also changes the chain export format so there is no
enclosing list around the blocks, which enables streaming export.
2015-03-18 13:36:48 +01:00
Felix Lange
c298148a7f core/types: use package rlp instead of common.Decode 2015-03-18 13:24:34 +01:00
Felix Lange
b94a6a0193 rlp: add DecodeBytes
Über-convenience.
2015-03-18 13:17:39 +01:00
obscuren
0a1eeca41e conversions. -compilable- 2015-03-18 13:00:01 +01:00
obscuren
942980609f conversions 2015-03-18 11:44:25 +01:00
obscuren
cd52ef315c Added Hex methods 2015-03-18 11:44:17 +01:00
zelig
ca8d184173 fix eth tests 2015-03-18 16:31:49 +07:00
zelig
b6aa88c099 private network support
- protocolversion, networkid global int flags to cli and mist
- fix bug with protocolversion check using wrong db
- log protocolversion & networkid in backend
2015-03-18 14:44:58 +07:00
Taylor Gerring
67c9d9c2fa Remove JsonWrapper 2015-03-17 20:14:19 -04:00
Felix Lange
cb009a5c4d rlp: don't panic for nil *big.Int
All other pointer types can handle nil just fine.
2015-03-17 23:49:49 +01:00
Taylor Gerring
c6f84325b1 Support JSON RPC batch requests 2015-03-17 17:46:22 -04:00
Taylor Gerring
8fd243ee23 Add JSON RPC batch support
http://www.jsonrpc.org/specification#batch
2015-03-17 17:38:05 -04:00
zelig
7dbbe1bedc eth/backend: remove spurious and incorrent PeerInfo() 2015-03-18 04:01:47 +07:00
zelig
1872418316 eth: remove disused peer_util.go 2015-03-18 03:59:21 +07:00
obscuren
142e81258c Merge branch 'develop' into conversion 2015-03-17 21:40:05 +01:00
Jeffrey Wilcke
3ea99f989f Merge pull request #498 from maran/feature/drytoHex
DRY up the use of toHex in the project and move it to common
2015-03-17 21:31:42 +01:00
obscuren
048d4ec5be Merge branch 'rpcfrontier' into develop 2015-03-17 21:30:29 +01:00
obscuren
917050dc30 Merge branch 'develop' into rpcfrontier 2015-03-17 21:27:34 +01:00
obscuren
53104b09fa bump 2015-03-17 21:23:05 +01:00
Felix Lange
786a58d8b0 Merge pull request #485 from ethersphere/frontier/nodeadmin.js
Frontier console node admin interface
2015-03-17 21:15:23 +01:00
obscuren
86661de077 Fixed tests and bloom 2015-03-17 18:00:03 +01:00
obscuren
c21293cd91 bloom 2015-03-17 16:05:17 +01:00
Felix Lange
1513413412 Dockerfile: use fast™ build steps 2015-03-17 14:49:37 +01:00
Felix Lange
b422835a59 cmd/ethereum: add makedag command for testing 2015-03-17 14:12:34 +01:00
Taylor Gerring
fe819f3b9f Comment out whisper remove identity stubs 2015-03-17 09:11:01 -04:00
obscuren
0fa7859b94 Fixed VM & Tests w/ conversion 2015-03-17 13:24:25 +01:00
obscuren
ff55c6f5ba Merge branch 'develop' into conversion
Conflicts:
	common/types.go
2015-03-17 13:09:22 +01:00
obscuren
b0ebccb31e fixed to 2015-03-17 12:56:29 +01:00
Felix Lange
17c5ba2b6b core: actually convert transaction pool 2015-03-17 12:16:21 +01:00
obscuren
9663493ba0 Merge commit 'dffaa678f966f87dcd011671a16b554b29a37549' into develop 2015-03-17 12:02:50 +01:00
obscuren
dffaa678f9 Squashed 'tests/files/' changes from 0749546..641ebaa
641ebaa Merge branch 'develop' of https://github.com/ethereum/tests into develop
8e44fd4 possibility to launch more than one machine
5498fd5 2 more python fails
99268f3 update random test simulation files
170485e Merge remote-tracking branch 'origin/develop' into develop
4fcdf8f new python fails
e67b68a Merge branch 'develop' of https://github.com/ethereum/tests into develop
3f45f18 BlockRLPTests block fields prefixed with 0000
9fa9bbd Merge pull request #78 from wanderer/develop
222c2b4 update block tests
9d844dd python fails
05233a4 update blockchaintests
7dc0aa2 update JS_API_Test blockchain
6daf1cc added JS_API_test blockchain
e878f7e consitant address format
0e246ce python fail
57ea9a0 random failures
95934e0 add test for callcode to 0
13b8cd2 new python failures
9e60453 remove empty tests
ca6dfa9 uncle older than 6 generation test
cf7e950 some random failures
282090e update gas limits + uncle generation test
bb4c1f4 cppjit failure
cda9d4c more random failures
31ac17a add calldataload big offset test
f6b8e28 remove seedhash and update blockchain tests
ad69f9d add addmod test in order toc check that nothing get downcasted inbetween
38b7db2 a failing test
b9149b5 Merge remote-tracking branch 'origin/develop' into develop
5bea708 more failing tests
478a07d fix missing comma
6d82797 Merge remote-tracking branch 'origin/develop' into develop
2f380e2 random fails
3cd0ce7 Merge pull request #75 from romanman/develop
afa0a43 Update crypto.json
1b9b7b8 Introduce ECIES crypto test

git-subtree-dir: tests/files
git-subtree-split: 641ebaa3cf257c08838c707bebb481d61e708f95
2015-03-17 12:02:49 +01:00
Felix Lange
ee7202fa00 Merge remote-tracking branch 'ethereum/conversion' into conversion 2015-03-17 12:01:40 +01:00
Felix Lange
65eee2006d pow/ezp: use common.Hash 2015-03-17 12:01:21 +01:00
Felix Lange
27f7aa0163 core: adapt Message for new Transaction.From signature 2015-03-17 12:00:29 +01:00
Felix Lange
b95387a0dc core: convert transaction pool to common.{Address,Hash} 2015-03-17 11:59:26 +01:00
Felix Lange
e91ab84dbe core/types: don't use Address zero value for invalid addresses 2015-03-17 11:58:31 +01:00
obscuren
515d9432fc converted vm 2015-03-17 11:19:23 +01:00
Felix Lange
d5de6489d7 core/types: fix Transaction.Hash and add support for encoding with package rlp 2015-03-17 01:34:18 +01:00
Felix Lange
ad78db4d62 crypto: fix Sha3Hash and add a test for it 2015-03-17 01:32:35 +01:00
obscuren
8ce6a36478 converted chain manager 2015-03-16 23:48:18 +01:00
obscuren
94505146a2 updated vm env 2015-03-16 23:17:28 +01:00
obscuren
843db4978e updated blockpool 2015-03-16 23:10:26 +01:00
Taylor Gerring
176115e22e More empty param tests 2015-03-16 16:49:51 -04:00
obscuren
4e181c5764 Moved gas 2015-03-16 21:46:47 +01:00
Taylor Gerring
0339a13862 RPC empty args tests 2015-03-16 16:21:51 -04:00
Taylor Gerring
719effa7ec Return error when filter params are not strings 2015-03-16 15:30:31 -04:00
Taylor Gerring
03ac0f18ae Initial support to remove Whisper identities per #491 2015-03-16 14:46:46 -04:00
obscuren
6aa390abfb Merge branch 'conversion' of github.com-obscure:ethereum/go-ethereum into conversion 2015-03-16 18:43:09 +01:00
obscuren
91b0b14845 converted vm 2015-03-16 18:42:18 +01:00
Taylor Gerring
e5e265d024 Merge branch 'develop' into rpcfrontier 2015-03-16 13:02:41 -04:00
Felix Lange
16df850af2 core/types: use common.{Hash,Address} in for transactions 2015-03-16 17:43:42 +01:00
Felix Lange
13ade2ed60 Merge branch 'conversion' of https://github.com/ethereum/go-ethereum 2015-03-16 17:29:08 +01:00
Felix Lange
64490897f3 crypto: add Sha3Hash 2015-03-16 17:27:24 +01:00
obscuren
bfcd2cf132 block conversion 2015-03-16 17:27:23 +01:00
obscuren
e620bde405 conversion state 2015-03-16 17:09:08 +01:00
Maran
7330c97b5b DRY up the use of toHex in the project and move it to common 2015-03-16 16:56:11 +01:00
zelig
17cd7a5817 remove long-running mining test, ethutil -> common 2015-03-16 22:56:05 +07:00
zelig
b3e133dd15 Merge branch 'frontier/js' into frontier/nodeadmin.js 2015-03-16 22:50:29 +07:00
zelig
73af0302be we do not use the name Frontier Console 2015-03-16 22:49:39 +07:00
zelig
b4060da9eb ethutil -> common 2015-03-16 22:48:54 +07:00
zelig
5e7702fd05 Merge remote-tracking branch 'upstream/develop' into frontier/js
Conflicts:
	cmd/ethereum/js.go
	javascript/types.go
2015-03-16 22:46:29 +07:00
obscuren
76f215b0fe Getters shouldn't need to be pointer receiver 2015-03-16 16:44:27 +01:00
obscuren
0dd9ac375b undo 2015-03-16 16:36:58 +01:00
obscuren
22893b7ac9 removed compile 2015-03-16 16:31:16 +01:00
obscuren
d338650089 compilable trie (tests fail) 2015-03-16 16:28:16 +01:00
Taylor Gerring
5757f547a6 Allow latest/pending in filter options 2015-03-16 10:38:57 -04:00
obscuren
20b7162a62 Added functions to Hash & Address
* Set, SetString, SetBytes
* StringTo*, BytesTo*
2015-03-16 13:23:06 +01:00
obscuren
dc864ee3a5 Added ToString methods 2015-03-16 12:20:17 +01:00
obscuren
3cf51d5479 tmp 2015-03-16 12:03:52 +01:00
obscuren
f486c0ae56 new type + additional methods 2015-03-16 11:59:52 +01:00
obscuren
b523441361 Moved ethutil => common 2015-03-16 11:27:38 +01:00
zelig
8139d444f8 Merge remote-tracking branch 'upstream/develop' into frontier/nodeadmin.js 2015-03-16 15:19:09 +07:00
obscuren
0b8f66ed9e updated godep ethash 2015-03-15 21:47:59 +01:00
obscuren
22fa59f131 moved to detail 2015-03-15 21:47:35 +01:00
zelig
ece5c2aade Merge branch 'frontier/js' into frontier/nodeadmin.js 2015-03-15 22:29:50 +07:00
zelig
8393dab470 menubar back to mist main.qml 2015-03-15 22:29:10 +07:00
obscuren
d2e75cc957 cleaning up unused code 2015-03-15 15:25:09 +01:00
zelig
ff86d7d52a Merge branch 'frontier/js' into frontier/nodeadmin.js 2015-03-15 18:43:03 +07:00
zelig
7bc40aa963 jsre: remove assetpath using GOPATH from test 2015-03-15 18:42:17 +07:00
obscuren
c87cc59bdf Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop
Conflicts:
	README.md
2015-03-15 12:20:58 +01:00
obscuren
8f84ddbbec Linux build links 2015-03-15 12:20:07 +01:00
obscuren
0f26a62334 Linux build links 2015-03-15 12:19:26 +01:00
zelig
132e87a707 node admin interface for Frontier Console, see spec https://github.com/ethereum/go-ethereum/wiki/Frontier-Console 2015-03-15 13:43:48 +07:00
zelig
8ad0f1b8a3 eth:
- NodeInfo, PeerInfo types, PeersInfo(), NodeInfo() in eth/backend to support node admin IF
- start net only if MaxPeers > 0, close extraDb in Stop()
- defer s.extraDb.Close()
2015-03-15 13:39:52 +07:00
zelig
e150832734 p2p: server>discover table Self=Node exported 2015-03-15 13:38:41 +07:00
zelig
7279a485c2 CLI:
- js subcommand for vm
- console for Frontier console interactive REPL
- jspath in cli
- integrate jeth apiBindings
2015-03-15 13:31:40 +07:00
zelig
16ecb1e2ea rpc
- camelcase fields dont play nice with otto value magic: JsonRpc -> Jsonrpc, ID -> Id
- jeth: ethereum.js rpc transport provider direct bridge between js and ethereumApi via otto jsre
2015-03-15 13:21:54 +07:00
zelig
31ffca6d8a remove jsre from mist 2015-03-15 13:18:58 +07:00
zelig
da44097800 jsre:
- require became loadScript(), no require is supplied
- bignumber_js.go: heredoc v2.0.3 minified fixed for otto Regexp incompatibility https://github.com/robertkrimen/otto#regular-expression-incompatibility
- bignumber.min.js also updated in mist/assets/ext
- ethereum_js.go: latest master minified
- assetPath in constructor
- Eval/Exec/Handle/ToVal nice API
- jsre tests
2015-03-15 13:13:39 +07:00
obscuren
2a5fbced7f removed seed hash 2015-03-14 23:39:45 +01:00
obscuren
282d8c20fd Merge branch 'fjl-block-tests' into develop 2015-03-14 23:37:37 +01:00
obscuren
d9966d6158 merge 2015-03-14 23:37:21 +01:00
obscuren
12cee1377f Increased filter ticker time to 5 minutes 2015-03-14 18:57:12 +01:00
obscuren
95711bc2dd Updated ethash 2015-03-14 16:42:05 +01:00
obscuren
387f6bba3e POW fixes 2015-03-14 16:37:57 +01:00
obscuren
44636e5b82 typo 2015-03-14 13:21:20 +01:00
obscuren
35bc7b0d8a Merge branch 'rpcfrontier' into develop 2015-03-14 12:44:24 +01:00
obscuren
532a74f50e Improved errors. Closes #475 2015-03-14 12:43:10 +01:00
Jeffrey Wilcke
51df765e38 Merge pull request #481 from maran/feature/fromHexDry
DRY-up the use of fromHex in the project
2015-03-14 11:46:32 +01:00
Maran
9754e7aca7 Support for addresses with or without 0x. Fixes #472 2015-03-14 11:40:13 +01:00
Maran
991993357c DRY up the use of fromHex and put it in ethutil 2015-03-14 11:39:35 +01:00
Taylor Gerring
f49e17eb39 Return null coinbase when accounts not created
Was previously returning nonsensical “0x”
2015-03-13 14:32:11 -04:00
Felix Lange
67f8f83a1b cmd/ethereum: add blocktest command 2015-03-13 18:41:09 +01:00
Felix Lange
e463479b6c eth: add ResetWithGenesisBlock
This depends on a change in ethash which exposes UpdateCache.
2015-03-13 18:41:09 +01:00
Felix Lange
6f8a2d6b84 eth: add hook for database creation 2015-03-13 18:41:09 +01:00
Felix Lange
58d9d98daf cmd/utils: GetEthereum -> MakeEthConfig
This allows changing the config before starting Ethereum
with it.
2015-03-13 18:41:09 +01:00
Felix Lange
a80be98f31 tests: add helper functions for block tests 2015-03-13 18:41:09 +01:00
Felix Lange
9326541820 core/types: make Block.{ParentHash,SeedHash,MixDigest} []byte
There is no reason to keep them as ethutil.Bytes.
2015-03-13 18:41:09 +01:00
obscuren
b927c29469 GetBlockByNumber now properly looks for a number in the database 2015-03-13 18:29:42 +01:00
obscuren
fee9aecfb2 more tests for remote update 2015-03-13 17:53:53 +01:00
obscuren
ccda1aacb4 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-13 17:49:05 +01:00
obscuren
03403399fc Return proper error 2015-03-13 17:47:11 +01:00
obscuren
a0266489b4 Make remote dominant 2015-03-13 17:47:00 +01:00
Jeffrey Wilcke
a76d55c83a Merge pull request #467 from ethersphere/frontier/natspec
NatSpec integration
2015-03-13 16:47:16 +01:00
obscuren
b663e8b29a Merge branch 'rpcfrontier' into develop 2015-03-13 16:36:27 +01:00
obscuren
f1fcda4f2f Implemented managed state
* Reimplemented nonce management for known accounts.
2015-03-13 16:29:04 +01:00
Taylor Gerring
e3b64d70c2 Rename db_put db_get 2015-03-13 10:56:41 -04:00
Taylor Gerring
d3f96dc720 Consolidate error type switch 2015-03-13 10:03:48 -04:00
Taylor Gerring
0932f84383 Fix eth_newBlockFilter 2015-03-13 10:03:19 -04:00
obscuren
cda88ce31a Implemented a manage state for keeping track of nonces 2015-03-13 14:37:54 +01:00
obscuren
aa9f981d5f Bump protocol version 58 2015-03-13 13:52:57 +01:00
obscuren
e69d5b32e8 Increased genesis gas & gas floor limit to 3141592 2015-03-13 13:52:23 +01:00
obscuren
f76cc6699e Changed context and ADDMOD, MULMOD
* Cleaned up VM execution. VM run now takes a context
* ADDMOD/MULMOD - removed incorrect cast
2015-03-13 13:44:15 +01:00
Taylor Gerring
d4ed66c83d Add web3_clientVersion 2015-03-12 19:20:46 -05:00
Taylor Gerring
094f921e50 Convert to proper errors
Allow returning different JSON RPC error codes depending on error type
2015-03-12 19:07:03 -05:00
obscuren
80592f244d more obvious failure for ethtest 2015-03-12 23:26:58 +01:00
obscuren
6051345bc9 Squashed 'tests/files/' changes from d6c987f..0749546
0749546 random fails
a153865 random fails

git-subtree-dir: tests/files
git-subtree-split: 074954630f43e97f0769997d175511a00a47cc9d
2015-03-12 22:32:05 +01:00
obscuren
3a88da578f Merge commit '6051345bc9ab8ccf74a49c43342771e0c2cba588' into develop 2015-03-12 22:32:05 +01:00
obscuren
fa917387e4 Merge branch 'rpcfrontier' into develop 2015-03-12 22:31:13 +01:00
obscuren
310ca62285 Removed some of that gas pre pay magic 2015-03-12 22:29:10 +01:00
obscuren
3ff7a627d1 Squashed 'tests/files/' changes from 9e19ff9..d6c987f
d6c987f go failure

git-subtree-dir: tests/files
git-subtree-split: d6c987feed635976ce26b14b9be88289d0ef50d4
2015-03-12 20:01:46 +01:00
obscuren
2ae90e1eba Merge commit '3ff7a627d1921be0aeacdd8eb2853ba4537487eb' into develop 2015-03-12 20:01:46 +01:00
obscuren
11390a986a run all test 2015-03-12 19:43:20 +01:00
obscuren
347cb272be fixed ethtest 2015-03-12 19:41:56 +01:00
obscuren
412e8b0e37 Squashed 'tests/files/' changes from dbdd0f8..9e19ff9
9e19ff9 random state tests failures
7060dc7 dejavu issues
5a89a4b python fail
2470051 python fails - may be just wrong return value

git-subtree-dir: tests/files
git-subtree-split: 9e19ff93918597bbf53a2f127202a70704646d82
2015-03-12 19:15:12 +01:00
obscuren
d1c872bace Merge commit '412e8b0e377bd89fc8fc858bd09c89deee805c1e' into develop 2015-03-12 19:15:12 +01:00
obscuren
fb71c9f6ee Return 1 on fail 2015-03-12 18:22:56 +01:00
obscuren
83cc08f670 Changed to big.Int.Not 2015-03-12 18:22:35 +01:00
Taylor Gerring
14bdcd2c05 Fix arg names in tests 2015-03-12 11:50:03 -05:00
Taylor Gerring
7235e84c75 #469 2015-03-12 11:09:25 -05:00
Taylor Gerring
d11fabd2ef Update path to web3 library 2015-03-12 10:08:01 -05:00
Taylor Gerring
f7c3c7eda4 Update ethereum.js
Added to git modules
2015-03-12 10:03:35 -05:00
obscuren
b97c17f4ee Merge branch 'rpcfrontier' of github.com-obscure:ethereum/go-ethereum into rpcfrontier 2015-03-12 15:59:16 +01:00
obscuren
2273155e7e Get transaction implemented
* Added a GetTransaction to XEth
* Implemented the `eth_getTransactionByHash` RPC method
2015-03-12 15:59:07 +01:00
Taylor Gerring
b006b67768 Merge branch 'develop' into rpcfrontier 2015-03-12 09:24:34 -05:00
obscuren
26a5636424 Merge branch 'develop' into rpcfrontier 2015-03-12 14:51:05 +01:00
obscuren
3b3843e158 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-12 14:50:48 +01:00
obscuren
ef6706696c Add additional extra database for non-protocol related data
* Add transaction to extra database after a successful block process
2015-03-12 14:50:35 +01:00
Felix Lange
2a0e5888fd Merge pull request #460 from tgerring/ethutil
Move MakeName to ethutil
2015-03-12 14:45:31 +01:00
Taylor Gerring
4418e4ea6a Should on empty params #466 2015-03-12 08:42:31 -05:00
Taylor Gerring
21fca93852 Output filter ID as hex 2015-03-12 08:20:07 -05:00
zelig
4342fe0f22 include new minified natspec with RE fix; fix test for the improved error messages 2015-03-12 19:08:30 +07:00
Taylor Gerring
704914be08 Check for existance of key before delete 2015-03-12 00:01:18 -05:00
obscuren
31a95151c9 updated rnd vm test => state test 2015-03-12 01:12:28 +01:00
obscuren
92c6150199 Squashed 'tests/files/' changes from e390be4..dbdd0f8
dbdd0f8 update test script for python
29dced2 add failing python test
5b7ebb9 OOG or 1024 depth level fail
3f58fd8 run OOG at tx level with to high value for call
39d8595 run OOG and too high value for call/callcode
55fbf95 run OOG and too high value for call/callcode
8856bfb add callCreateCallCode test file
d2da29e check value when doing callcode
129a464 suicide and storage refund tests with and without storage
6aa5e29 suicide and storage refund tests
fff323d python fails
963648b python callcode fail
31ce83a python big memory fail
531bc36 add memory stress test using return
b7021c7 renaming
959ff59 vm input limit tests
1c3741f update blockchain tests with new uncle reward rule

git-subtree-dir: tests/files
git-subtree-split: dbdd0f829dea8aa053159707caf353d83bf5be0f
2015-03-12 00:57:28 +01:00
obscuren
96496888ed Merge commit '92c6150199395eea6c9893b631cc990e3ff72a33' into develop 2015-03-12 00:57:28 +01:00
obscuren
7ee5cb0a81 Merge branch 'develop' into rpcfrontier 2015-03-12 00:26:40 +01:00
obscuren
9fb52c517b Changed V to byte. Closes #456 2015-03-12 00:18:03 +01:00
Jeffrey Wilcke
6af078bd8c Merge pull request #462 from fjl/miner-coinbase
miner: provide coinbase when starting the miner
2015-03-11 23:56:48 +01:00
Felix Lange
d5aaf413e0 cmd/ethereum: remove extra check for 'no accounts' error
This error can no longer be returned from eth.New.
2015-03-11 23:43:27 +01:00
Felix Lange
d7b5a87b3b miner: provide coinbase when starting the miner
This avoids having to query the coinbase when creating the miner, which
in turn eliminates the dreaded startup error when no accounts are set
up. Later, this will also allow us to simply restart the miner when the
user picks a different coinbase.

This causes a lot of changes in other packages. These are included in
this commit because they're impossible to separate.
2015-03-11 23:43:27 +01:00
Taylor Gerring
70f6f2af07 shh_uninstallFilter 2015-03-11 15:49:21 -05:00
Taylor Gerring
c2181fdbf2 block&index args unmarshal plus test 2015-03-11 15:26:28 -05:00
Taylor Gerring
5a9f712144 Comment out broken test (return type does not exist) 2015-03-11 14:43:39 -05:00
Taylor Gerring
485e37e889 Move MakeName to ethutil 2015-03-11 14:29:07 -05:00
obscuren
587f748d92 Merge branch 'fjl-unencrypted-keys' into develop 2015-03-11 17:47:17 +01:00
obscuren
629f4b1d3c merge 2015-03-11 17:46:58 +01:00
obscuren
239e17de12 Merge branch 'rpcfrontier' into develop 2015-03-11 17:37:17 +01:00
obscuren
c01d4c2f4c Lowered default gas price and increased default gas limit 2015-03-11 17:36:35 +01:00
obscuren
2da7af4ba0 Merge branch 'rpcfrontier' of github.com-obscure:ethereum/go-ethereum into rpcfrontier 2015-03-11 17:00:30 +01:00
obscuren
e8d1b622d9 Default block number changes 2015-03-11 17:00:20 +01:00
Taylor Gerring
90f34ed40a Rename Topic to Topics 2015-03-11 10:56:44 -05:00
Taylor Gerring
61bf29be36 Check length of timestring before taking slice 2015-03-11 10:43:52 -05:00
obscuren
08b1154033 Changed logging to use internal logger 2015-03-11 16:36:10 +01:00
obscuren
477815c044 Improved error reporting and removed commented code 2015-03-11 16:33:39 +01:00
obscuren
6b63759ded Reverted global 2015-03-11 16:33:04 +01:00
obscuren
7add66c8bb Use the state to up the balance of the coinbase 2015-03-11 16:32:37 +01:00
Taylor Gerring
9e89c803f1 Get Uncles 2015-03-11 10:27:32 -05:00
Taylor Gerring
53ac85cfd3 BlockHash must be a string 2015-03-11 10:27:24 -05:00
Taylor Gerring
d465e410ef TxIndex -> Index 2015-03-11 10:25:15 -05:00
Felix Lange
99bc44cf52 cmd/ethereum: add a flag to switch to unencrytped keystore
This is mostly for automated tests. The tests can use the following
commands to start the node:

    ethereum --unencrypted-keys account new
    ...
    ethereum --unencrypted-keys
2015-03-11 13:58:01 +01:00
Taylor Gerring
6bca40274f Merge branch 'rpcfrontier' of github.com:ethereum/go-ethereum into rpcfrontier 2015-03-10 22:25:32 -05:00
Taylor Gerring
9ce5229ddf Get transaction via block & index 2015-03-10 22:25:07 -05:00
Taylor Gerring
ece29c5d8d Nil check block 2015-03-10 19:34:07 -05:00
obscuren
074ee19fe5 Merge branch 'develop' into rpcfrontier 2015-03-11 01:11:20 +01:00
obscuren
64933321fb Merge branch 'rpcfrontier' of github.com-obscure:ethereum/go-ethereum into rpcfrontier 2015-03-11 01:10:58 +01:00
obscuren
58909117be Use ECDSA instead of elliptic 2015-03-11 01:10:25 +01:00
Taylor Gerring
499f816e30 Output hex should be prepended with 0x 2015-03-10 19:10:02 -05:00
obscuren
7e0ccc9de5 Merge branch 'develop' into rpcfrontier
Conflicts:
	rpc/api.go
	rpc/args.go
2015-03-11 01:08:42 +01:00
Taylor Gerring
fda4d02f94 Left-pad odd length hex inputs and tests 2015-03-10 18:08:31 -05:00
obscuren
eba4f389a6 don't log whisper start ups 2015-03-10 22:43:07 +01:00
obscuren
7d77a2ffc3 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-03-10 22:42:24 +01:00
Jeffrey Wilcke
73171d18b9 Merge pull request #447 from fjl/accounts-integration
Accounts integration
2015-03-10 22:42:03 +01:00
obscuren
eb1b4c8ffe Merge branch 'fjl-accounts-integration' into develop 2015-03-10 20:37:23 +01:00
obscuren
ce595b9266 fallback 2015-03-10 20:28:20 +01:00
obscuren
35841e5190 id to hex 2015-03-10 20:16:53 +01:00
obscuren
d9f96293be Merge branch 'rpcfrontier' of github.com-obscure:ethereum/go-ethereum into rpcfrontier
Conflicts:
	rpc/args.go
2015-03-10 20:16:08 +01:00
obscuren
f22684439a Updated RPC
* Added a generic RawMessage deserialiser
* Updated ethereum.js
* Updated coin test app
2015-03-10 20:14:38 +01:00
Taylor Gerring
3d6519e45b Update response types 2015-03-10 12:52:45 -05:00
Taylor Gerring
617804c327 Merge branch 'rpcfrontier' of github.com:ethereum/go-ethereum into rpcfrontier 2015-03-10 12:50:13 -05:00
Felix Lange
269cfbb8ac Merge branch origin/develop into accounts-integration
Conflicts:
	cmd/blocktest/main.go
	cmd/mist/debugger.go
	cmd/utils/cmd.go
2015-03-10 17:14:31 +01:00
Felix Lange
972e2c1e31 cmd/utils: improve CLI help templates
Help for a specific command now shows available subcommands.
2015-03-10 16:44:48 +01:00
Felix Lange
221fae4112 cmd/ethereum: show some help before prompting for encryption passphrase 2015-03-10 16:44:22 +01:00
Felix Lange
2407f006ad Godeps: bump github.com/codegangsta/cli 2015-03-10 16:41:33 +01:00
Felix Lange
0bb7377ebe cmd/ethereum: show more helpful message if no accounts exist 2015-03-10 15:44:05 +01:00
Felix Lange
9d4e1e8f8b eth: return account errors directly 2015-03-10 15:42:58 +01:00
Felix Lange
c3f94a4341 cmd/utils: remove extra space in fatal error message 2015-03-10 15:42:25 +01:00
Felix Lange
4ba7871374 accounts: return ErrNoKeys if key directory does not exist 2015-03-10 15:41:08 +01:00
Felix Lange
0f67f1e9de xeth: fix signing transaction after unlock 2015-03-10 14:55:00 +01:00
Felix Lange
0395c174ca cmd/ethereum: fix line editing setup and history 2015-03-10 14:31:54 +01:00
obscuren
bbe8b18660 Added unmarshalState 2015-03-10 13:40:49 +01:00
obscuren
53f8f29744 Merge branch 'develop' into rpcfrontier 2015-03-10 12:39:59 +01:00
Jeffrey Wilcke
0542df941f Merge pull request #449 from Gustav-Simonsson/add_blockchain_tests2
Add empty total difficulty to test blocks and clean up stopping the node
2015-03-10 12:07:34 +01:00
obscuren
56524d13b5 removed debugger 2015-03-10 12:06:16 +01:00
obscuren
b87442a9f7 Fixed error message. Closes #448 2015-03-10 11:29:22 +01:00
obscuren
c0a8e3cd34 Merge branch 'poc-9' into develop 2015-03-10 11:25:32 +01:00
Jeffrey Wilcke
c9b6d268b4 Merge pull request #438 from ethersphere/poc9/cli
Poc9/cli (exportchain)
2015-03-10 11:24:47 +01:00
Jeffrey Wilcke
08d396fdba Merge pull request #437 from ethersphere/poc9/natspec
[WIP] Poc9/natspec
2015-03-10 11:24:30 +01:00
obscuren
05c9351659 Merge branch 'accounts-integration' of https://github.com/fjl/go-ethereum into fjl-accounts-integration 2015-03-10 11:04:11 +01:00
Felix Lange
80985f97da cmd/evm, core, ethdb, state, tests/helper: remove ReadConfig calls 2015-03-10 02:39:53 +01:00
Taylor Gerring
3de51f76ee Allow integers for BlockNumber
If parsing fails, fall back to hex decoding
2015-03-09 20:38:37 -05:00
Felix Lange
e6118f2d79 state: fix tests 2015-03-10 02:35:21 +01:00
Felix Lange
9b3ae1fdb7 eth: fix tests 2015-03-10 02:34:52 +01:00
Felix Lange
ae38871a54 cmd/ethereum: remove "prompter" in identifiers 2015-03-10 02:33:59 +01:00
Felix Lange
62ebce304e crypto: delete old key management stuff 2015-03-10 02:12:55 +01:00
Felix Lange
9f0e3bd286 cmd/ethereum: unlock accounts on JS REPL 2015-03-10 02:00:57 +01:00
Felix Lange
395da0e7c1 xeth: use Frontend interface to unlock accounts
The interface has moved to package xeth because that's where it is
actually used.
2015-03-10 02:00:06 +01:00
obscuren
0db4a0e898 Merge branch 'poc-9' into develop 2015-03-10 01:22:38 +01:00
obscuren
0d64163fea Right pad zeros. Closes #446 2015-03-10 01:13:06 +01:00
obscuren
9007f2bbdc reworked stack 2015-03-10 00:25:27 +01:00
Felix Lange
d1e04f7388 cmd/ethereum: allow multiple js files 2015-03-10 00:24:11 +01:00
Felix Lange
487f68ec48 accounts: add {Timed,}Unlock, remove SignLocked 2015-03-10 00:19:01 +01:00
obscuren
0795fd2701 wip 2015-03-09 23:34:31 +01:00
Felix Lange
9bf513e993 Merge ethereum/poc-9 into accounts-integration
Conflicts:
	cmd/utils/cmd.go
	cmd/utils/flags.go
	core/manager.go
	eth/backend.go
	rpc/http/server.go
	xeth/xeth.go
2015-03-09 23:25:46 +01:00
Felix Lange
cd51860bf0 cmd/utils: delete InitConfig, KeyTasks 2015-03-09 23:08:47 +01:00
Felix Lange
697f6748b8 cmd/mist: use cli library and package accounts 2015-03-09 23:08:47 +01:00
Felix Lange
c2e5dacf55 accounts: add Manager.HasAccount, delete Manager.Default 2015-03-09 23:08:46 +01:00
Felix Lange
63758db379 eth: delete unused RpcServer field 2015-03-09 23:08:46 +01:00
Felix Lange
6a7e02fc9f rpc/http: delete package 2015-03-09 23:08:46 +01:00
Felix Lange
a11f1d6a7e rpc: add dataDir parameter and JSON-RPC handler 2015-03-09 23:08:46 +01:00
Felix Lange
73d1ebe244 cmd/utils: add NewApp 2015-03-09 23:08:46 +01:00
Felix Lange
b4fa94c4b1 xeth: don't sign transactions for tx call
This should make calls faster and removes interaction
with account manager.
2015-03-09 23:08:46 +01:00
Felix Lange
2ee88a220a core: remove Hash method from Message interface
This will simplify the next commmit. Hash was only used for logging.
2015-03-09 23:08:41 +01:00
Felix Lange
2dacb51fb0 cmd/blocktest: simplify to fix build
block tests only need the chain, not all of ethereum.
2015-03-09 23:07:24 +01:00
obscuren
a7538d0020 merge 2015-03-09 18:19:35 +01:00
Gustav Simonsson
27c42ea934 Add empty total difficulty to test blocks and clean up stopping the node 2015-03-09 18:03:35 +01:00
obscuren
8560004f38 wip 2015-03-09 17:55:01 +01:00
obscuren
676a0de58d Max size JSON data. Closes #418 2015-03-09 17:28:12 +01:00
Taylor Gerring
9723191b19 Undo client_version changes 2015-03-09 11:04:38 -05:00
Taylor Gerring
fb23a0cfe0 Remove support for compiling serpent 2015-03-09 10:55:18 -05:00
obscuren
20741a96ac Updated xeth instances to take extra param for ui.Interface
Please be aware that if any of the instances on xeth.frontend are called
the program will crash due to the default, temporarily, frontend
interface.
2015-03-09 13:50:05 +01:00
obscuren
738d6e20f2 Added ui.Interface to xeth 2015-03-09 13:49:14 +01:00
obscuren
3deb470b2d Squashed 'tests/files/' changes from b9e4e74..e390be4
e390be4 remove deprecated tests
e9e8e7b update blockchain tests - correct genesis hash
a70dd35 fix genesis hash
35964c9 update uncle tests
82c108f update blocktests - fix LLL in pre state
66f0003 update transactionTests

git-subtree-dir: tests/files
git-subtree-split: e390be4fb8421fdabea041b7bdaea3b582224f7d
2015-03-09 11:43:46 +01:00
obscuren
21fd722abc Merge commit '3deb470b2d07d28040a381722022cdf8867a829a' into poc-9 2015-03-09 11:43:46 +01:00
obscuren
19efebe91e Updated tests and fixed suicide 2015-03-09 11:28:35 +01:00
obscuren
c1cafb56d5 Squashed 'tests/files/' changes from 05fe945..b9e4e74
b9e4e74 adjust gas prices
6a41300 add dajavi memory tests - OOG because of quadratic memory costs
71d80bd update genesis
72b1b52 add randomTest
4b2a090 Merge branch 'PoC9' into develop
fdf7ce0 updated basic blochain test
25c065a Merge pull request #70 from faizkhan00/patch-1
c7e1dac Rename 201501150842LARGE_DATA_IN_CALLCREATE_GOjson to 201501150842LARGE_DATA_IN_CALLCREATE_GO.json
REVERT: 05fe945 Added another pow test

git-subtree-dir: tests/files
git-subtree-split: b9e4e747f01a7b91863ffaa45fd377c251de45aa
2015-03-09 01:02:12 +01:00
obscuren
93cdffca3a Merge commit 'c1cafb56d5da57a44f1d766c5299f11664b93921' into poc-9 2015-03-09 01:02:12 +01:00
zelig
41a89e18f6 version output
- make version output more verbose
- include NetworkId
- go version and os not displayed like env vars (confusing)
2015-03-08 22:50:27 +07:00
zelig
51eed7964e add export blockchain subcommand, remove BlockDo 2015-03-08 22:44:48 +07:00
obscuren
e2c75b0fa1 Squashed 'tests/files/' changes from 15ce2ab..05fe945
05fe945 Added another pow test
7cf2f6b uncle header with block number = 1
d65c7a3 Merge remote-tracking branch 'origin/PoC9' into PoC9
8e05ce5 uncle tests
7c8f2b4 Merge branch 'PoC9' of github.com:ethereum/tests into PoC9
83d1f4d fixed

git-subtree-dir: tests/files
git-subtree-split: 05fe94507b92dbfbfe8c198df33160eaaf9e87fc
2015-03-08 15:29:27 +01:00
obscuren
30584c7cfb Merge commit 'e2c75b0fa17394553b93fe7ddd62c0f6a6441119' into poc-9 2015-03-08 15:29:27 +01:00
obscuren
5dfc67efbd ignore 2015-03-08 15:29:23 +01:00
zelig
0743d68d4c rename constructor New 2015-03-08 20:17:20 +07:00
zelig
97dc4edb45 natspec for poc-9
- put natspec.js in a heredoc string (to help binary)
- constructor takes no args, just sets up js vm
- API: only exports Notice(transaction, abi, method, expression string) (string, error)
- effort to turn natspec.js error strings to proper go errors
- test errors
2015-03-08 20:09:13 +07:00
Felix Lange
6684ef201a accounts: don't store address in unlocked and add commentary
This was suggested during review.
2015-03-08 02:47:05 +01:00
Felix Lange
fb53a9362e accounts: AccountManager -> Manager 2015-03-08 01:58:35 +01:00
Felix Lange
3750ec7b7d accounts: prevent early drops and zero keys in memory when dropping
Private keys would be locked early if SignLocked was called more than
once because the unlockLater was still running. Terminate it properly.
2015-03-08 01:44:15 +01:00
obscuren
f6df3740a8 ignore 2015-03-08 01:31:19 +01:00
obscuren
07955b3041 merge 2015-03-08 01:09:34 +01:00
obscuren
405c0ca4b0 removed 2015-03-08 01:06:59 +01:00
obscuren
e189758d55 Merge branch 'poc-9' of github.com-obscure:ethereum/go-ethereum into poc-9 2015-03-08 01:02:46 +01:00
obscuren
8ea0444655 updated ethash 2015-03-08 01:02:39 +01:00
obscuren
69920c735a Bump v 2015-03-08 00:59:26 +01:00
obscuren
e26ebc3110 Updated ethereum.js 2015-03-08 00:54:18 +01:00
Felix Lange
d6a7332993 accounts: fix uses of sync.RWMutex
RWMutexes must be write-locked when writing in order
to actually protect the writes.
2015-03-08 00:36:06 +01:00
Felix Lange
afc530ea41 accounts: use time.Duration correctly
There is no point to using time.Duration if the value is interpreted as
milliseconds. Callers should use the standard multiplication idiom to
choose the unit. In fact, the only caller outside of the tests already
does so.
2015-03-08 00:35:23 +01:00
Felix Lange
fda7b4c79d accounts: use pointers consistently
Account is now always a non-pointer. This will be important once
the manager starts remembering accounts.

AccountManager is now always a pointer because it contains locks
and locks cannot be copied.
2015-03-08 00:18:13 +01:00
Taylor Gerring
fca652eeea Fix logger import path 2015-03-07 10:48:38 -06:00
obscuren
70cbfb199d Added deploy scripts from go-build 2015-03-07 13:16:13 +01:00
Felix Lange
a2810c06d7 cmd/ethereum: add account commands 2015-03-07 12:39:52 +01:00
Felix Lange
d66f93cecd accounts, core, eth, xeth: use account manager for everything
The account manager is now responsible for picking the
default account and the coinbase.
2015-03-07 12:38:33 +01:00
Jeffrey Wilcke
c27c2be584 Merge pull request #435 from zsfelfoldi/poc-9
Natspec + test
2015-03-06 20:11:43 +01:00
obscuren
22b493a6ff Fixed tests 2015-03-06 20:10:59 +01:00
Fefe
e157147253 Now using github.com/obscuren/otto, no need for an Ethereum object
(got rid of some messy code in test)
2015-03-06 18:54:26 +01:00
obscuren
cd856cb213 Separated block db from state db. Partial fix for #416 2015-03-06 18:26:16 +01:00
obscuren
ed84b58af5 Debug option for VM & command line flag 2015-03-06 16:58:52 +01:00
Taylor Gerring
dc7022cd61 Increased args test coverage 2015-03-06 09:54:08 -06:00
obscuren
548e104171 Merge branch 'poc-9' of github.com-obscure:ethereum/go-ethereum into poc-9 2015-03-06 16:40:21 +01:00
obscuren
8d9be18b29 Queued approach to delivering chain events 2015-03-06 15:50:44 +01:00
Gustav Simonsson
bc45e5c6de Integrate eth_accounts and eth_transact to use new account manager
* Add from to eth_transact / xeth.Transact and add static pass in lieu
  of integrating with native Mist window for user passphrase entry
* Make eth_accounts return AccountManager.Accounts()
* Add a Generate Key menu item in Mist
2015-03-06 13:10:42 +00:00
Felix Lange
e64f727529 Merge pull request #433 from fjl/newcli
Improved CLI
2015-03-06 14:02:16 +01:00
Felix Lange
a91bf01429 Merge pull request #434 from fjl/poc-9
Godeps: bump github.com/ethereum/ethash
2015-03-06 13:31:41 +01:00
Felix Lange
71e510540e Godeps: bump github.com/ethereum/ethash
This fixes the build.
2015-03-06 12:28:00 +00:00
Felix Lange
de86403f33 cmd/ethereum: fix JS REPL exit and add support for dumb terminals
It is now possible to exit the REPL using Ctrl-C, Ctrl-D or by typing "exit".
2015-03-06 13:08:11 +01:00
obscuren
b72ca57775 Merge branch 'ethersphere-blockpool3' into poc-9 2015-03-06 12:10:23 +01:00
Felix Lange
2393de5d6b Godeps: add github.com/peterh/liner 2015-03-06 10:39:31 +01:00
obscuren
23ad2f02c0 debug comments & pow handling 2015-03-06 10:22:40 +01:00
Taylor Gerring
5da3d911cf Initial args tests 2015-03-06 00:03:22 -06:00
Taylor Gerring
18b076861e Add web3_sha3 test 2015-03-05 22:41:55 -06:00
Taylor Gerring
03dc760ca0 Tidy 2015-03-05 21:48:03 -06:00
Taylor Gerring
ef9d825cfa Refactor & cleanup 2015-03-05 21:37:45 -06:00
Felix Lange
38f6d60e6e cmd/ethereum: new JS repl with cross-platform line editing 2015-03-06 03:57:13 +01:00
Felix Lange
bae7e93a9c cmd/ethereum: improve command line interface
The ethereum command line interface is now structured using subcommands.
These separate the different tasks it can perform.

Almost all flag names are backwards compatible.

The key tasks have not been ported to subcommands since they will be
replaced by the new accounts infrastructure very soon.
2015-03-06 03:57:13 +01:00
Fefe
b67ded9f27 Natspec + test 2015-03-06 03:43:34 +01:00
Felix Lange
f9c6bc63df Godeps: delete golang.org/x/net/websocket
It is no longer imported by any package in our tree.
2015-03-06 02:54:57 +01:00
Felix Lange
bdba044a80 ethutil: remove Config variable
Various functions throughout the codebase used it to grab settings. This
has to stop because I want to use them without reading the config file.

These functions can now be used without reading the config first:

* ethdb.NewLDBDatabase
* ethrepl.NewJSRepl
* vm.New
2015-03-06 02:46:56 +01:00
obscuren
5f4a6069c5 Merge branch 'blockpool3' of https://github.com/ethersphere/go-ethereum into ethersphere-blockpool3 2015-03-05 21:53:42 +01:00
Taylor Gerring
94e543bc39 Merge pull request #431 from tgerring/jsonlogs
Structured logging updates
2015-03-05 14:32:41 -06:00
obscuren
580d09084d Merge branch 'ethersphere-blockpool2' into poc-9 2015-03-05 20:38:36 +01:00
obscuren
e089478a1c Merge branch 'blockpool2' of https://github.com/ethersphere/go-ethereum into ethersphere-blockpool2 2015-03-05 20:38:19 +01:00
obscuren
88ff13c241 Spec changes.
* All errors during state transition result in an invalid tx
2015-03-05 19:51:25 +01:00
zelig
9067b2848a fix wonky head section loop; correct status counts 2015-03-06 01:33:57 +07:00
Taylor Gerring
9f5e9eb38d Resolve storage/storageat 2015-03-05 12:26:21 -06:00
Taylor Gerring
a6599404e4 Revert to hex response 2015-03-05 11:14:47 -06:00
Taylor Gerring
0d8d51084f Final name changes 2015-03-05 11:07:05 -06:00
Taylor Gerring
5948adfa10 Added eth.chain.received.new_block 2015-03-05 10:58:36 -06:00
Taylor Gerring
fbb307cca0 Added eth.chain.new_head 2015-03-05 10:58:13 -06:00
obscuren
4e8a9a1cd4 Squashed 'tests/files/' changes from 9e3fe72..15ce2ab
15ce2ab Merge remote-tracking branch 'origin/PoC9' into PoC9
5970b09 add quadratic complexity and performance test
163fa03 more info
560b844 more info
a885549 more change
5fed708 one more tiny change
213a2b8 changed test format
c20e88b Merge branch 'PoC9' of github.com:ethereum/tests into PoC9
715ed17 Added first ethash test
e26a39f update blockchain tests to latest protocol changes
34baee5 poc9 vm tests
20550d9 update block chain test due to difficulty change
597b2b3 increase gasLimit on stateTests
8f573d3 update blockchain tests - 2048 bit logs bloom
06c90e6 typo
ef935fc extra data is hex now, for real
81ab5ad extra data is hex now
b0aeba8 update blockchain tests
f862faf add tx tests
618d724 update state tests
4a989f0 update blockchainII tests
ed56e82 add more vm tests
0417655 Merge remote-tracking branch 'origin/PoC9' into PoC9
1f1cf5d update block tests
76b5a8b Fix trie formats.
325dd6d Merge branch 'PoC9' of git://github.com/ethereum/tests into PoC9
a261c5b test3
1d3ab36 again

git-subtree-dir: tests/files
git-subtree-split: 15ce2ab8e22275e7aa93742cb5f8bc63e4e50db5
2015-03-05 17:51:26 +01:00
obscuren
ca1093f848 Merge commit '4e8a9a1cd4a10370fc4a888af0fb2def6f1b961b' into poc-9 2015-03-05 17:51:26 +01:00
obscuren
a7181bd304 merge 2015-03-05 17:49:29 +01:00
obscuren
76e4e233ad Merge branch 'poc-9' of github.com-obscure:ethereum/go-ethereum into poc-9 2015-03-05 17:48:46 +01:00
Jeffrey Wilcke
f01d745d70 Merge pull request #429 from chfast/pr/fix_vm_tests
Fix VM tests
2015-03-05 17:46:57 +01:00
obscuren
d44fe4ec62 Merge branch 'develop' into poc-9 2015-03-05 17:46:40 +01:00
obscuren
72bf02bf15 Merge branch 'tendermint-develop_pull_request' into develop 2015-03-05 17:46:11 +01:00
obscuren
357d17ae58 Start at 0 2015-03-05 17:46:00 +01:00
obscuren
1d1ba40965 Merge branch 'develop_pull_request' of https://github.com/tendermint/ethermint into tendermint-develop_pull_request 2015-03-05 17:44:18 +01:00
Jeffrey Wilcke
3b30765378 Merge pull request #426 from Gustav-Simonsson/add_blockchain_tests
Add initial implementation of block tests
2015-03-05 17:43:56 +01:00
obscuren
377c8a13de Merge branch 'develop' into poc-9 2015-03-05 17:37:18 +01:00
obscuren
201b09f99a Merge branch 'alexvandesande-ui' into develop 2015-03-05 17:37:09 +01:00
obscuren
44b83c6ea6 Removed unused variables 2015-03-05 17:37:00 +01:00
obscuren
12ca70537f Merge branch 'fjl-p2p-handshake-2' into poc-9 2015-03-05 17:26:41 +01:00
obscuren
ba0c41436c Merge branch 'p2p-handshake-2' of https://github.com/fjl/go-ethereum into fjl-p2p-handshake-2 2015-03-05 17:21:32 +01:00
obscuren
fabaf4f1f0 wip math 2015-03-05 17:21:16 +01:00
Taylor Gerring
90ceb5218c Update RPC methods
Re-order to match spec and explicitly list unimplemented methods
2015-03-05 08:58:46 -06:00
zelig
9329e175d8 fix wonky head section loop; correct status counts 2015-03-05 20:38:23 +07:00
Paweł Bylica
0af08eca1f Fix VM tests not checked 2015-03-05 14:35:27 +01:00
zelig
45afbe5d9c Merge remote-tracking branch 'upstream/poc-9' into blockpool3 2015-03-05 16:55:11 +07:00
obscuren
c47866d251 Miner fixes and updates (including miner) 2015-03-05 09:14:58 +01:00
zelig
7315962880 use ethash.Verify in blockpool 2015-03-05 11:22:36 +07:00
=
a6fe92194f Fixed iterator bug which skips the 0x000...000 key 2015-03-05 01:47:49 +00:00
Taylor Gerring
1576551741 Output 0x0 instead of 0x 2015-03-04 14:13:31 -06:00
Alexandre Van de Sande
178798ef87 network back to local files 2015-03-04 16:31:48 -03:00
Gustav Simonsson
871dfd399b Add initial implementation of block tests
* Add blocktest cmd and support for block tests files in
  tests/BlockTests , the launched node does not connect to
  network, resets state with a genesis block from the test file
  and starts the RPC API
2015-03-04 20:27:09 +01:00
Alexandre Van de Sande
671e38fb65 Fixed Average Return calculation 2015-03-04 15:13:57 -03:00
Alexandre Van de Sande
e1bae3771e updated network app to latest build 2015-03-04 12:59:17 -03:00
Felix Lange
215c763d53 eth, p2p: delete p2p.Blacklist
It is unused and untested right now. We can
bring it back later if required.
2015-03-04 16:54:36 +01:00
Felix Lange
429828cd92 p2p: reject messages that cannot be written as simple RLPx frames
Until chunked frames are implemented we cannot send messages
with a size overflowing uint24.
2015-03-04 16:42:01 +01:00
Felix Lange
22659a7fea p2p: restore read/write timeouts
They got lost in the transition to rlpxFrameRW.
2015-03-04 16:42:00 +01:00
Taylor Gerring
9b0f00baf3 Output net_peerCount as hex 2015-03-04 08:41:13 -06:00
Taylor Gerring
93141f4b6d Return block number as hex 2015-03-04 08:27:34 -06:00
Taylor Gerring
c3deafabda Update NewTXArgs to accept hex 2015-03-04 08:22:59 -06:00
Taylor Gerring
c92e48ce3f Add client_version RPC message 2015-03-04 07:54:10 -06:00
Alexandre Van de Sande
5f25c117eb Merge branch 'develop' into ui 2015-03-04 10:04:07 -03:00
Alexandre Van de Sande
cf880f78d5 network dashboard is now a local file 2015-03-04 10:02:11 -03:00
Felix Lange
6e7e5d5fd5 eth, whisper: fix msg.Payload reads 2015-03-04 13:25:01 +01:00
Felix Lange
7964f30dcb p2p: msg.Payload contains list data
With RLPx frames, the message code is contained in the
frame and is no longer part of the encoded data.

EncodeMsg, Msg.Decode have been updated to match.
Code that decodes RLP directly from Msg.Payload will need
to change.
2015-03-04 12:27:24 +01:00
Felix Lange
21649100b1 p2p: verify protocol handshake node ID 2015-03-04 12:27:24 +01:00
Felix Lange
7d39fd6678 p2p: make encryption handshake code easier to follow
This mostly changes how information is passed around.
Instead of using many function parameters and return values,
put the entire state in a struct and pass that.

This also adds back derivation of ecdhe-shared-secret. I deleted
it by accident in a previous refactoring.
2015-03-04 12:27:24 +01:00
Felix Lange
2c505efd1e p2p/discover: add NodeID.Pubkey 2015-03-04 12:27:24 +01:00
Felix Lange
d344054e5a p2p: make RLPx frame MAC 16 bytes as defined in the spec 2015-03-04 12:27:24 +01:00
Felix Lange
d084aed5e9 p2p: delete frameRW 2015-03-04 12:27:24 +01:00
Felix Lange
736e632215 p2p: use RLPx frames for messaging 2015-03-04 12:27:23 +01:00
Felix Lange
51e01cceca p2p: encrypted and authenticated RLPx frame I/O 2015-03-04 12:27:23 +01:00
Felix Lange
936dd0f3bc p2p: add basic RLPx frame I/O 2015-03-04 12:27:23 +01:00
obscuren
15f491e500 Clean up REPL 2015-03-04 12:18:26 +01:00
obscuren
5817dab89e Merge branch 'develop' into poc-9 2015-03-04 10:51:44 +01:00
obscuren
a56243075a removed double flag. Closes #421 2015-03-04 10:51:17 +01:00
obscuren
84a4f761f3 uncle validation 2015-03-04 10:49:56 +01:00
obscuren
d4d505c868 Fixed genesis 2015-03-03 21:48:05 +01:00
obscuren
08fd0715f9 updated genesis 2015-03-03 21:09:29 +01:00
obscuren
26de12d9bf Changed nonce to a uint64 2015-03-03 21:04:31 +01:00
Jeffrey Wilcke
2b3c55f20d Merge pull request #413 from chfast/pr/jit_build_fixes
JIT build fixes
2015-03-03 20:39:51 +01:00
obscuren
e9f1e868e2 Merge branch 'develop' into poc-9 2015-03-03 20:38:46 +01:00
obscuren
827ea43478 removed all old filters 2015-03-03 20:38:28 +01:00
obscuren
bb152612e0 Merge branch 'develop' into poc-9
Conflicts:
	cmd/utils/cmd.go
2015-03-03 20:34:48 +01:00
obscuren
cfe3af099c Merge branch 'ethersphere-jsonlogs' into poc-9 2015-03-03 20:31:12 +01:00
obscuren
f0b2ea64fc Merge branch 'jsonlogs' of https://github.com/ethersphere/go-ethereum into ethersphere-jsonlogs
Conflicts:
	eth/block_pool.go
	eth/block_pool_test.go
	eth/protocol_test.go
	miner/worker.go
2015-03-03 20:30:05 +01:00
obscuren
2707891966 Merge branch 'ethersphere-blockpool2' into poc-9 2015-03-03 20:27:15 +01:00
obscuren
d8a68dc0f1 Merge branch 'blockpool2' of https://github.com/ethersphere/go-ethereum into ethersphere-blockpool2 2015-03-03 20:26:59 +01:00
Jeffrey Wilcke
253eb778d1 Merge pull request #411 from ethersphere/readme
[WIP] Update Readme
2015-03-03 20:17:51 +01:00
Jeffrey Wilcke
988391fc37 Merge pull request #409 from tgerring/jsonlogs
Updated JSON log events
2015-03-03 20:16:55 +01:00
Jeffrey Wilcke
b1603f166e Merge pull request #408 from tgerring/removews
Remove Websockets RPC transport
2015-03-03 20:16:16 +01:00
obscuren
8e995b97cc Fixes and debug added 2015-03-03 20:13:11 +01:00
zelig
2c616bd279 partial fix to idle best peer issue
- best peer cannot be idle for more than idleBestPeerTimeout
- introduce ErrIdleTooLong fatal error
- modify default values
2015-03-04 02:06:15 +07:00
Alexandre Van de Sande
8c2940a98b updating to new network health page 2015-03-03 15:00:34 -03:00
obscuren
40ff3cac39 merge 2015-03-03 17:56:36 +01:00
obscuren
53b5a45856 Merge branch 'xcthulhu-publictests' into poc-9 2015-03-03 17:55:29 +01:00
obscuren
313fe3861b fixed pow stuff 2015-03-03 17:55:23 +01:00
obscuren
22b132e28f Merge branch 'publictests' of https://github.com/xcthulhu/go-ethereum into xcthulhu-publictests 2015-03-03 17:20:34 +01:00
obscuren
b0aaa77f02 changed message 2015-03-03 17:20:10 +01:00
obscuren
ee0a1bec6c GasLimit check updated 2015-03-03 17:05:51 +01:00
obscuren
c74c07eed1 Fixed error for invalid transaction 2015-03-03 16:20:38 +01:00
obscuren
6518da7c01 Merge commit 'a6e04ab05150d1b5aa4adb297f3e5146b1559b02' into poc-9 2015-03-03 15:39:34 +01:00
obscuren
a6e04ab051 Squashed 'tests/files/' changes from 13be3e3..9e3fe72
9e3fe72 update state root hash

git-subtree-dir: tests/files
git-subtree-split: 9e3fe720e3d46f046e06a91e45c881e79557f721
2015-03-03 15:39:33 +01:00
obscuren
651b2158ba Merge commit '42a210b571b9358df16da148d9724c2ef9abbca5' into poc-9 2015-03-03 15:16:52 +01:00
obscuren
42a210b571 Squashed 'tests/files/' changes from 402e748..13be3e3
13be3e3 update

git-subtree-dir: tests/files
git-subtree-split: 13be3e33afa8d708786f82b63bf874138f05bb02
2015-03-03 15:16:52 +01:00
obscuren
9f359dfffa Merge commit 'd9d40888ce9498b25925ccbf1447b1f62597aa2f' into poc-9 2015-03-03 13:56:59 +01:00
obscuren
d9d40888ce Squashed 'tests/files/' changes from 2bfb7db..402e748
402e748 Merge branch 'PoC9' of github.com:/ethereum/tests into PoC9
13b6a99 State test refill.

git-subtree-dir: tests/files
git-subtree-split: 402e7482f9283e08869b3412329e24ef6287d8c7
2015-03-03 13:56:59 +01:00
obscuren
2a50931684 Merge commit '0867e4fae96c0b0d234f1710119a129f8b0d96f7' into poc-9 2015-03-03 13:29:59 +01:00
obscuren
0867e4fae9 Squashed 'tests/files/' changes from 6f75ca3..2bfb7db
2bfb7db update memory test
88f32fa Merge remote-tracking branch 'origin/PoC9' into PoC9
a1f73f9 update gas costs
e16b5d3 Move over to key value rather than array of arrays since they're unordered and no duplicates.
ac11bbc Merge branch 'PoC9' of github.com:/ethereum/tests into PoC9
93ae304 Move to non-repeated.
fd9e406 Added test 2

git-subtree-dir: tests/files
git-subtree-split: 2bfb7dbe09c62319b28a2c2873caf7e7e99bf32a
2015-03-03 13:29:59 +01:00
obscuren
fa831206c6 Updated gast costs 2015-03-03 13:29:52 +01:00
Paweł Bylica
e72173dc43 Fix JitVm build 2015-03-03 12:31:26 +01:00
obscuren
4659b51b50 Squashed 'tests/files/' changes from 998e275..6f75ca3
6f75ca3 Merge remote-tracking branch 'origin/PoC9' into PoC9
8d22687 update state root - DEBUG

git-subtree-dir: tests/files
git-subtree-split: 6f75ca354f239fa30f4e07754ede575aed24bbc2
2015-03-03 12:31:09 +01:00
obscuren
ffa6b99ab6 Merge commit '4659b51b50394c596f0548eb53390c80ba96e392' into poc-9 2015-03-03 12:31:09 +01:00
obscuren
524bf9e858 wup 2015-03-03 12:30:57 +01:00
obscuren
b7ec9fbb0e Squashed 'tests/files/' changes from a3d44ca..998e275
998e275 renamed
089e346 Added hex encoded securetrie test
cdefad8 Update VM tests.
ec0a309 update state root
b3d223e update state root hash
171a945 update memory teste

git-subtree-dir: tests/files
git-subtree-split: 998e2756b5491c760f6624c62ebc09e86197c31f
2015-03-03 12:26:24 +01:00
obscuren
e73d7725df Merge commit 'b7ec9fbb0e49e345a8a2566226a76d50b48266a7' into poc-9 2015-03-03 12:26:24 +01:00
obscuren
b909a5ec18 Trie => SecureTrie 2015-03-03 12:25:44 +01:00
obscuren
1650b59cd9 Delet => Delete 2015-03-03 12:21:27 +01:00
obscuren
bf5365b317 Delet => Delete 2015-03-03 12:15:58 +01:00
obscuren
ba0a758d8c Quad mem & log changes 2015-03-03 11:56:43 +01:00
obscuren
49da6a8d80 Fixed test helper 2015-03-03 11:56:28 +01:00
obscuren
34ee5ab9a8 Bloom expanded by 4 2015-03-03 11:56:12 +01:00
obscuren
fa910966ed Redone rlp 2015-03-03 11:18:50 +01:00
obscuren
d0354b8440 Squashed 'tests/files/' changes from c6111e6..a3d44ca
a3d44ca update state tests to PoC9
709d6a7 update stSystemOperationsTest.json
3188f77 fix jumpdest requirements
202b69a remove memory test
41b4e1d add memory tests
2597bdf Merge remote-tracking branch 'origin/PoC9' into PoC9
0de34b2 add stateRoot to state tests
10b4ced Remove unneeded tests.
88eb6bf Fix for tests.
9010f17 Test updates.

git-subtree-dir: tests/files
git-subtree-split: a3d44caae83dd48db7df176dc784c529945e90a1
2015-03-03 11:11:24 +01:00
obscuren
2f647c443a Merge commit 'd0354b844028220b31f55c2cdbe9d4cc546d4b52' into poc-9 2015-03-03 11:11:24 +01:00
obscuren
c1ef19bef9 quad mem 2015-03-03 11:11:11 +01:00
zelig
6c2856df23 add eth.chain.new_head log to core/chain_manager 2015-03-03 15:44:41 +07:00
zelig
fc47f0f27b add eth.chain.received.new_block log to eth protocol 2015-03-03 15:43:05 +07:00
zelig
76af536d0d block number is *big.Int, remoteID is string 2015-03-03 15:37:20 +07:00
zelig
34be795bc1 Merge remote-tracking branch 'tgerring/jsonlogs' into jsonlogs 2015-03-03 13:52:20 +07:00
zelig
7e224b6834 db name database -> blockchain in backend error message 2015-03-03 13:22:19 +07:00
Matthew Wampler-Doty
de9f79133f Introducing ethash 2015-03-02 22:29:34 -05:00
Matthew Wampler-Doty
080823bdee Only one uncle 2015-03-02 18:56:11 -05:00
Alexandre Van de Sande
21c373b55d Network Health Panel with mining 2015-03-02 18:39:07 -03:00
zelig
47278a6e4e log when added peer is behind (hash found in blockchain) 2015-03-03 03:39:21 +07:00
Taylor Gerring
e7b33e9ae7 Move p2p.MakeName to ethutil.MakeVersion 2015-03-02 13:21:57 -06:00
zelig
af6971f823 Merge remote-tracking branch 'upstream/develop' into blockpool2 2015-03-03 02:13:41 +07:00
zelig
2dc1b7282a remove threatening coding standards section from README 2015-03-03 01:51:00 +07:00
zelig
1d8a427753 remove obsolete install script 2015-03-03 01:46:25 +07:00
zelig
deb2e50296 minor cleanup 2015-03-03 01:45:50 +07:00
zelig
c1bae04203 update README
- TLDR for godep install
- update executable section
- cleanup
- add several links to wiki
2015-03-03 01:44:29 +07:00
Paweł Bylica
24003c76d1 Merge remote-tracking branch 'upstream/develop' into evmjit 2015-03-02 18:46:55 +01:00
zelig
a60a18b080 - fix peer disconnect by adding severity function to errs
- improve logging
- suicide -> removeChain
- improved status BlocksInPool calculation
2015-03-03 00:43:12 +07:00
Paweł Bylica
9c6d9dfc5c Add required block number 2015-03-02 18:43:01 +01:00
obscuren
41c9dc973d Squashed 'tests/files/' changes from ce7204f..c6111e6
c6111e6 New tests.

git-subtree-dir: tests/files
git-subtree-split: c6111e6b5d23766743d004707475e84848ff0ddb
2015-03-02 18:00:10 +01:00
obscuren
fe7ab662f0 Merge commit '41c9dc973d2dc8614db6c1e3dbb2ec5564935368' into poc-9 2015-03-02 18:00:10 +01:00
obscuren
200f66537c updated tests 2015-03-02 17:55:45 +01:00
obscuren
0823254c3b Add 'tests/files/' from commit 'ce7204fa17560f6a76c7592bf5f23d29f22042d6'
git-subtree-dir: tests/files
git-subtree-mainline: 4f3f881c9b
git-subtree-split: ce7204fa17
2015-03-02 16:43:12 +01:00
Taylor Gerring
fb2488235a Remove defunct calls 2015-03-02 09:36:48 -06:00
obscuren
4f3f881c9b removed tests 2015-03-02 16:36:34 +01:00
Taylor Gerring
540c79e6ad Rename "net" methods 2015-03-02 09:36:14 -06:00
obscuren
b13735b400 updated tests 2015-03-02 16:34:03 +01:00
obscuren
b383ff0b96 New gas prices model 2015-03-02 16:32:02 +01:00
CJentzsch
ce7204fa17 rm failing tests 2015-03-02 16:20:38 +01:00
CJentzsch
d9ea240122 rm failing random tests 2015-03-02 15:59:39 +01:00
CJentzsch
67f3f4c1d8 vmGasCostchanges 2015-03-02 15:50:12 +01:00
Taylor Gerring
a75af474f7 Fix logger import in tests 2015-03-02 08:27:26 -06:00
Taylor Gerring
e31ec57f88 Add event eth.tx.received 2015-03-02 08:17:09 -06:00
Taylor Gerring
0976c3024f Don't import logger as ethlogger 2015-03-02 08:15:28 -06:00
CJentzsch
cb868a604c add secure trie tests 2015-03-02 14:32:29 +01:00
Taylor Gerring
4cb0bfe939 Merge branch 'develop' of github.com:ethereum/go-ethereum into removews
Conflicts:
	cmd/ethereum/flags.go
	cmd/mist/flags.go
2015-03-02 07:06:08 -06:00
CJentzsch
bc1d97b2a7 refine memory stress test 2015-03-02 11:45:29 +01:00
obscuren
6e50a1e9f5 Filter accepts multiple topics per entry. Fixes #403 2015-03-01 19:08:26 +01:00
obscuren
ac88ae86a3 GetOrNew for accessors. Fixes #404 2015-03-01 19:07:38 +01:00
Taylor Gerring
cfe0370280 Remove Websockets RPC transport 2015-03-01 16:19:06 +01:00
Taylor Gerring
60a2704b04 Implement eth.miner.new_block event 2015-03-01 16:09:59 +01:00
obscuren
65cad14f9b Report debug hash rate 2015-02-28 23:09:49 +01:00
obscuren
fdf939a6f9 Fixed miner threads for ethereum CLI 2015-02-28 23:01:41 +01:00
CJentzsch
2dbdcf3636 move extrem memory test to stMemoryStressTest.json 2015-02-28 22:03:38 +01:00
Christoph Jentzsch
5375dd6756 Merge pull request #69 from winsvega/develop
Fork block tests
2015-02-28 21:19:48 +01:00
Jeffrey Wilcke
cdb77f0ecd Merge pull request #402 from tgerring/rpcupdates
Set RPC listening address via param
2015-02-28 21:07:46 +01:00
Jeffrey Wilcke
43b5777709 Merge pull request #398 from tgerring/assetpath
Check source directory for assets as last resort
2015-02-28 21:06:57 +01:00
CJentzsch
35f53abc78 more memmory hard quadratic complexity tests 2015-02-28 20:57:55 +01:00
obscuren
73c52d1677 Merge branch 'ethersphere-blockpool2' into poc-9 2015-02-28 20:52:57 +01:00
obscuren
ae45a39dc1 Secure trie 2015-02-28 20:52:29 +01:00
obscuren
7ab13e0f17 Unused variable 2015-02-28 20:24:20 +01:00
obscuren
6c0b194382 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-28 20:14:10 +01:00
obscuren
7adf065b10 Simple effective VM optimisation
Added a debug flag to the VM which determines if VM output is shown
regardless of the log level set.
2015-02-28 20:14:01 +01:00
obscuren
6ea7aae29c Removed some methods from the JS REPL 2015-02-28 19:15:57 +01:00
winsvega
11fbc41e4b Fork block tests 2015-02-28 20:54:09 +03:00
Matthew Wampler-Doty
ba1f4bbe91 Exposing stuff for ethash 2015-02-27 20:56:24 -05:00
Taylor Gerring
ea0517b539 Report RPC listening address in logs 2015-02-28 01:04:54 +01:00
Taylor Gerring
f6e821fd33 Add flag to set RPC port 2015-02-28 01:00:42 +01:00
Matthew Wampler-Doty
3820a65299 Merge branch 'publictests' of github.com:ebuchman/go-ethereum into ethash_pow 2015-02-27 16:13:31 -05:00
Ethan Buchman
0efd6a881a public functions for making chains on the fly 2015-02-27 16:05:03 -05:00
Matthew Wampler-Doty
8653db6df0 Introducign MixDigest and SeedHash 2015-02-27 15:59:33 -05:00
CJentzsch
cb8d0fa874 more jump tests 2015-02-27 14:16:25 +01:00
CJentzsch
fc3c7760a5 add more addmod mulmod overflow tests 2015-02-27 13:28:44 +01:00
CJentzsch
b6155375ae add refund tests with CALL 2015-02-27 12:41:58 +01:00
Taylor Gerring
ad3a21f260 Bump to latest versions for Docker 2015-02-27 00:52:01 +01:00
Ethan Buchman
5a827417d9 Merge branch 'develop' of https://github.com/ethereum/go-ethereum into develop 2015-02-26 17:54:57 -05:00
Taylor Gerring
a39c73672e bump last resort check out of ifelse 2015-02-26 21:04:26 +01:00
Taylor Gerring
d90b71bc55 Check source directroy for assets as last resort 2015-02-26 21:01:40 +01:00
obscuren
cc5c8a444d Report proper database directory. Closes #397 2015-02-26 20:36:54 +01:00
obscuren
3a7c8d7ae4 Merge branch 'hotfix/0.8.5-2' into develop 2015-02-26 20:27:16 +01:00
obscuren
0fd6a22a86 Merge branch 'hotfix/0.8.5-2' 2015-02-26 20:26:49 +01:00
obscuren
3ab05ddd25 Bump 2015-02-26 20:26:37 +01:00
obscuren
76f6d75ef8 Merge branch 'master' into hotfix/0.8.5-2 2015-02-26 20:21:41 +01:00
obscuren
fa7deb10f6 Merge branch 'develop' 2015-02-26 20:21:16 +01:00
obscuren
e235b57234 Fixed consensus issue for refunding
* Refund should _always_ go to the origin
2015-02-26 20:08:35 +01:00
obscuren
c18ea4de14 Merge branch 'blockpool2' of https://github.com/ethersphere/go-ethereum into ethersphere-blockpool2 2015-02-26 18:39:38 +01:00
obscuren
37e6870f64 wip 2015-02-26 18:39:05 +01:00
CJentzsch
a622eccecb more mem tests - calldatacopy and return 2015-02-26 17:33:34 +01:00
CJentzsch
a3b3d19d80 adjust test for new mem rule 2015-02-26 14:22:16 +01:00
CJentzsch
d09cbfcf84 update to new quadratic memory cost rule 2015-02-26 13:52:05 +01:00
CJentzsch
88913ec89b Merge remote-tracking branch 'origin' into develop 2015-02-26 12:38:57 +01:00
CJentzsch
8058f2fdf0 low limit for difficulty is 1024 2015-02-26 12:38:32 +01:00
Christoph Jentzsch
48276be277 Merge pull request #68 from winsvega/develop
Transaction WrongRLP tests
2015-02-26 12:26:59 +01:00
winsvega
1e07358ac2 Transaction WrongRLP tests
more rlps with first zeros
2015-02-26 14:25:13 +03:00
obscuren
a1c830cd3c Defautl block 2015-02-26 12:06:10 +01:00
obscuren
49ded3aa77 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop
Conflicts:
	accounts/account_manager.go
2015-02-26 12:06:01 +01:00
obscuren
5ab0eaa06d wip 2015-02-26 11:14:54 +01:00
Jeffrey Wilcke
9884eed0cf Merge pull request #392 from tgerring/rpcdefaultblock
Stub defaultBlock RPC methods
2015-02-26 11:14:33 +01:00
Jeffrey Wilcke
5b202a158a Merge pull request #391 from tgerring/osext
Cleanup DefaultAssetPath
2015-02-26 10:59:07 +01:00
CJentzsch
a0cfe0d123 tests for mem at 32,64 KB +- 1, 31,32,33 for mstore and mstore8 2015-02-26 08:46:13 +01:00
Taylor Gerring
57cea0c623 Update godeps 2015-02-26 02:48:55 +01:00
Taylor Gerring
739b7cc2ac Cleanup imports 2015-02-26 02:36:06 +01:00
Taylor Gerring
d5aed82b11 DRY DefaultAssetPath() 2015-02-26 02:32:27 +01:00
Taylor Gerring
8eeab7ea3f Update osext import path 2015-02-26 02:24:20 +01:00
Jeffrey Wilcke
46ce66a829 Merge pull request #385 from Gustav-Simonsson/account_manager_key_locking
Add automatic locking / unlocking of accounts
2015-02-25 23:58:30 +01:00
Jeffrey Wilcke
b155b9d80b Merge pull request #388 from Gustav-Simonsson/validate_block_header_gas_limit
Validate block header gas limit
2015-02-25 23:58:01 +01:00
Gustav Simonsson
260ab73969 Validate block header gas limit
* Add block header gas limit validation in ValidateBlock function,
  see eq 39 and 45 in yellow paper. Before it was calculated _for_
  the block instead of validated.
* Use the block header gas limit when setting the gas pool instead
  of calculating the value for the block.
2015-02-25 20:00:32 +01:00
Gustav Simonsson
23f2658091 Remove unneeded initialisation of mutex 2015-02-25 19:30:57 +01:00
Gustav Simonsson
d1311c53ee Address pull request comments
* Use RWMutex instead of Mutex
* Use time.Duration instead of int for unlock time
* Use time.After with select instead of time.Sleep
2015-02-25 18:40:59 +01:00
Christoph Jentzsch
a431c4a665 Merge pull request #67 from winsvega/develop
Transaction RLP Tests
2015-02-25 18:26:21 +01:00
Gustav Simonsson
b296b36d2b Add automatic locking / unlocking of accounts
* Change account signing API to two sign functions;
  Sign without passphrase - works if account is unlocked
  Sign with passphrase - always works and unlocks the account
* Account stays unlocked for X ms and is then automatically locked
2015-02-25 17:37:12 +01:00
winsvega
667cafc13e Transaction RLP Tests
wrong transaction RLPs correction
2015-02-25 19:28:22 +03:00
Christoph Jentzsch
9f3cee021e Merge pull request #66 from winsvega/develop
Block Tests
2015-02-25 15:44:19 +01:00
winsvega
6016b942d6 Block Tests
Encoded transaction comment
2015-02-25 17:37:25 +03:00
winsvega
afb72dc795 Block Tests
Block Rlps with invalid transactions
2015-02-25 16:53:57 +03:00
zelig
16ecda951b integrate blockpool into eth
- remove blockpool code
- remove blockpool integration test (kinda embarrassing)
- remove errors.go
2015-02-25 20:38:37 +07:00
zelig
cdc86965cb export Sendln/Sendf in logger 2015-02-25 20:04:51 +07:00
zelig
422490d75c major rewrite, reorg of blockpool + new features
- blockpool moves to its own package
- uses errs pkg for its own coded errors
- publicly settable config of params (time intervals and batchsizes)
- test helpers in subpackage
- optional TD in blocks used now to update peers chain info
- major improvement in algorithm
- fix fragility and sync/parallelisation bugs
- implement status for reporting on sync status (peers/hashes/blocks etc)
- several tests added and further corner cases covered
2015-02-25 19:34:12 +07:00
zelig
d46c7bcaf9 errs pkg for error code based errors 2015-02-25 19:21:59 +07:00
CJentzsch
cfb120d179 more Pawel tests 2015-02-25 13:08:47 +01:00
Taylor Gerring
fe73023940 Merge pull request #382 from ethereum/travis
Update Go and Qt versions in Travis
2015-02-25 13:00:35 +01:00
CJentzsch
86b14058fd add memory tests 2015-02-25 12:50:24 +01:00
Taylor Gerring
ce2b2422d6 Update Go and Qt versions 2015-02-25 11:40:52 +01:00
Taylor Gerring
9e0ab22dd0 Stub defaultBlock methods 2015-02-25 09:57:49 +01:00
CJentzsch
978a29ab72 use 50000 bytes for CALLDATACOPY 2015-02-24 23:05:39 +01:00
CJentzsch
36e862c989 add Pawels tests 2015-02-24 22:48:19 +01:00
CJentzsch
33c8c2bd7e add quadratic complexity tests 2015-02-24 22:46:56 +01:00
Jeffrey Wilcke
52ccaa605e Merge pull request #379 from tgerring/rpcupdates
RPC cleanup
2015-02-24 22:00:39 +01:00
Jeffrey Wilcke
ed90efb05b Merge pull request #378 from Gustav-Simonsson/fix_account_manager_tests
Fix key store address hex decoding and accounts test
2015-02-24 21:58:42 +01:00
Taylor Gerring
2e3a6e2559 Consolidate related items 2015-02-24 19:54:18 +01:00
Taylor Gerring
c8e9abff53 Remove errParseRequest 2015-02-24 19:22:08 +01:00
Taylor Gerring
43acad81b3 Rename files 2015-02-24 19:11:01 +01:00
Taylor Gerring
21becb0feb Cleanup RPC packcage 2015-02-24 19:05:03 +01:00
Gustav Simonsson
923950ccaa Fix key store address hex decoding and accounts test
Thanks to https://github.com/jaekwon for original fix!
2015-02-24 18:05:10 +01:00
Taylor Gerring
5a43173e55 Merge pull request #373 from tgerring/issue370
Convert gas values to integers
2015-02-24 17:49:14 +01:00
Taylor Gerring
1e919a5e97 Move amounts to global vars 2015-02-24 17:32:11 +01:00
Jeffrey Wilcke
91a8c08f03 Merge pull request #368 from maran/feature/changeDataDir
Implement OS sensitive dataDirs
2015-02-24 17:30:44 +01:00
Jeffrey Wilcke
0b757ad12f Merge pull request #369 from tgerring/issue367
Allow zero and negative block numbers
2015-02-24 17:29:08 +01:00
Jeffrey Wilcke
0adff214c3 Merge pull request #376 from frozeman/topicsFix
topics fix
2015-02-24 17:27:14 +01:00
Taylor Gerring
2a7ca69a82 Fix duplicate leading 0x 2015-02-24 16:46:43 +01:00
Fabian Vogelsteller
3fcdafebc2 topics fix 2015-02-24 16:18:27 +01:00
Paweł Bylica
85f765a533 Merge remote-tracking branch 'upstream/develop' into evmjit 2015-02-24 11:27:22 +01:00
CJentzsch
e8c84bdf56 Merge remote-tracking branch 'origin/develop' into develop 2015-02-24 10:15:10 +01:00
CJentzsch
e48576ada3 remove impossible tests, add create hash collision test 2015-02-24 10:14:36 +01:00
Taylor Gerring
4142708d9d Convert gas values to integers
Fixes #370
2015-02-24 08:51:58 +01:00
wanderer
6e2d856d85 spelling error 2015-02-24 01:52:33 -05:00
wanderer
9315ad3d2c spelling error 2015-02-24 01:46:06 -05:00
wanderer
13b4ab10ae added genesis info 2015-02-24 01:36:54 -05:00
martin becze
c72e2588f3 Update crypto.json 2015-02-23 18:40:06 -05:00
obscuren
7c510109cd skipping test 2015-02-23 20:27:00 +01:00
obscuren
359677b673 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-23 19:25:59 +01:00
obscuren
747647e02a Merge branch 'master' into develop 2015-02-23 19:25:50 +01:00
obscuren
0b57bad2de removed log 2015-02-23 19:25:41 +01:00
Paweł Bylica
114c3b4efe Merge remote-tracking branch 'upstream/develop' into evmjit 2015-02-23 18:39:05 +01:00
Christoph Jentzsch
e4f44139a1 Merge pull request #65 from romanman/develop
Introduce cryptography testing
2015-02-23 16:25:06 +01:00
romanman
f23aeb44e2 Introduce cryptography testing
+ First test case will check the interoperability
   for all clients to decrypt the cipher with AES in
   CTR mode.
2015-02-23 17:14:00 +02:00
obscuren
b2a225a52e Properly uninstall filters. Mining issue fixed #closes #365
* Added an additional tx state which is used to get the current nonce
* Refresh transient state each time a new canonical block is found
* Properly uninstall filters. Fixes a possible crash in RPC
2015-02-23 15:43:41 +01:00
Alexandre Van de Sande
dea6584018 Merge branch 'develop' into ui 2015-02-23 09:05:15 -03:00
Alexandre Van de Sande
bb3338df63 changes to sidebar sizes 2015-02-23 08:52:50 -03:00
Taylor Gerring
6fd894aae0 Allow zero and negative block numbers
0 is genesis block. Xeth recognises -1 as current
2015-02-23 11:54:23 +01:00
CJentzsch
cb52754e6c Merge remote-tracking branch 'origin/develop' into develop 2015-02-23 11:31:29 +01:00
Maran
40adb7feb6 Implement OS sensitive dataDirs 2015-02-23 11:28:20 +01:00
CJentzsch
48606e05c1 fix transaction tests 2015-02-23 11:28:06 +01:00
Christoph Jentzsch
8b79ae6695 Update trieanyorder.json
In correct anyorder trie tests, where all permuations should have the same root, one can not have 2 keys with the same value.
2015-02-23 09:51:44 +01:00
martin becze
94f1ca2e09 Format clean up 2015-02-22 14:10:28 -05:00
Jeffrey Wilcke
dd086791ac Merge pull request #360 from Gustav-Simonsson/add_stack_size_checks
Correct stack size validation for MUL, CALLDATACOPY, EXTCODESIZE, BLOCKH...
2015-02-22 13:28:50 +01:00
obscuren
20aa6dde06 Merge branch 'develop' 2015-02-22 13:28:24 +01:00
obscuren
eec4345a7c Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-22 13:27:57 +01:00
Jeffrey Wilcke
59a86d3171 Merge pull request #359 from fjl/p2p-identity
Persistent Node Key
2015-02-22 13:27:53 +01:00
obscuren
98202e626c Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-22 13:27:13 +01:00
obscuren
1be7e5048c Merge branch 'release/0.8.5' into develop 2015-02-22 13:27:03 +01:00
obscuren
8cc6647ebf Merge branch 'release/0.8.5' 2015-02-22 13:26:18 +01:00
obscuren
321dce1f47 Bump 2015-02-22 13:26:10 +01:00
obscuren
bba85a2074 Added Number to logs 2015-02-22 13:24:26 +01:00
obscuren
483d96a89d Added eth_logs & fixed issue with manual log filtering
* Implemented `eth_logs`
* Fixed issue with `filter.Find()` where logs were appended to an
  incorrect, non-returned slice resulting in no logs found
2015-02-22 13:12:01 +01:00
martin becze
168ab2b065 consistent values please 2015-02-21 17:33:44 -05:00
wanderer
b131b37451 added unpaded R value test 2015-02-21 14:43:06 -05:00
Taylor Gerring
8620dc05de Merge pull request #364 from ethereum/travis
Don't print per-function testing results
2015-02-21 13:59:34 +01:00
Taylor Gerring
d8f7cb2f55 Don't print per-function testing results 2015-02-21 13:48:09 +01:00
Gustav Simonsson
fd3793b8cf Correct stack size validation for MUL, CALLDATACOPY, EXTCODESIZE, BLOCKHASH 2015-02-21 05:34:02 +01:00
obscuren
bba7ccb07f Merge branch 'hotfix/0.8.4-1' into develop 2015-02-21 00:53:47 +01:00
obscuren
5912f0a849 Merge branch 'hotfix/0.8.4-1' 2015-02-21 00:53:39 +01:00
obscuren
cb7cd03919 unlock mutex 2015-02-21 00:53:27 +01:00
obscuren
bc541b918c Merge branch 'release/0.8.4' into develop 2015-02-21 00:43:31 +01:00
obscuren
3c14902649 Merge branch 'release/0.8.4' 2015-02-21 00:43:04 +01:00
obscuren
92337baa5a reverted back to proper version number 2015-02-21 00:42:57 +01:00
Taylor Gerring
f9663b8f4f Fix test for Finney 2015-02-20 20:57:45 +01:00
Taylor Gerring
113cf4208b Update build status links to https 2015-02-20 20:52:03 +01:00
CJentzsch
18216a6e33 undo gasMemCostChange, add some state tests 2015-02-20 20:50:32 +01:00
obscuren
703dc8299c Merge branch 'release/0.9.0' into develop 2015-02-20 18:14:53 +01:00
obscuren
bd7ebbcd5b Merge branch 'release/0.9.0' 2015-02-20 18:13:46 +01:00
obscuren
d586a633ff Updated readme 2015-02-20 18:13:39 +01:00
obscuren
9feb657763 Turbo off 2015-02-20 18:06:45 +01:00
obscuren
cc43ab9a81 Minor updates for release 2015-02-20 18:05:46 +01:00
obscuren
66d5559866 Fixed chain event issue 2015-02-20 16:59:08 +01:00
Felix Lange
e968928613 eth: persist node key between sessions (#304) 2015-02-20 15:26:50 +01:00
Felix Lange
e282ad25a8 eth: add poc-8.ethdev.com as second default bootstrap node 2015-02-20 15:24:43 +01:00
obscuren
82cae27737 Merge branch 'tgerring-rpcupdates' into develop 2015-02-20 15:18:32 +01:00
obscuren
75625801f5 fixed merge 2015-02-20 15:18:07 +01:00
CJentzsch
b392afac3c memGasCost checks 2015-02-20 15:05:11 +01:00
Gav Wood
672f6c44b8 Remove initial allocs - it tests nothing additional and is difficult to maintain, especially with genesis contracts. See https://github.com/ethereum/tests/blob/develop/BasicTests/genesishashestest.json for that information. 2015-02-20 14:46:35 +01:00
obscuren
ea9a549bbd Removed exported fields from state object and added proper set/getters 2015-02-20 14:19:34 +01:00
obscuren
5c975dd4ed Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-20 14:01:34 +01:00
obscuren
d8ac267f41 dirty tracking for state objects fixed 2015-02-20 14:01:30 +01:00
Jeffrey Wilcke
63031f571a Merge pull request #355 from fjl/test-fixes
Fix failing tests and speed up Travis builds
2015-02-20 13:00:10 +01:00
obscuren
982f73fa6d Added timeout for filter & removed clipboard. Closes #350 2015-02-20 12:59:54 +01:00
Felix Lange
3b12a9293c .travis.yml: don't run gofmt, goimports, golint
This should yield another 30-second speed up. Nobody looks
at the output of those anyway. We might want bring back gofmt later
and actually fail the build if source is not formatted.
2015-02-20 12:21:05 +01:00
Felix Lange
654f7f707c .travis.yml: speed up tests on Travis
This should decrease test runtime to about 30 seconds.
2015-02-20 12:18:29 +01:00
Felix Lange
66abe2e3d4 gocoverage.sh: skip .
This is an attempt to get Travis working again.
2015-02-20 11:55:26 +01:00
Felix Lange
b3b6210886 tests/vm: add non-test Go file
This removes the annoying warning printed by "go install ./...".
2015-02-20 11:40:58 +01:00
Felix Lange
01ce066d43 state: improve TestDump 2015-02-20 11:40:58 +01:00
Felix Lange
4ab7a290cd accounts: use crypto/randentropy in test 2015-02-20 11:40:58 +01:00
Felix Lange
81dea2d8e7 update-license.go: add blank line after build tag
This silences "go install ./...". For some reason it started
complaining with go 1.4.2.
2015-02-20 11:40:20 +01:00
obscuren
0006585391 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-19 22:46:15 +01:00
Jeffrey Wilcke
639ac5c3da Merge pull request #352 from fjl/no-enc-handshake
p2p: disable encryption handshake, enable log events
2015-02-19 22:46:07 +01:00
Jeffrey Wilcke
765740b829 Merge pull request #345 from maran/feature/minerthreads
Implement command line argument to set the amount miner threads
2015-02-19 22:37:13 +01:00
Jeffrey Wilcke
07c34751da Merge pull request #335 from alexvandesande/ui
Cut, Copy, Undo and Redo working in webview
2015-02-19 22:36:35 +01:00
obscuren
fa4cbad315 Optimisations and fixed a couple of DDOS issues in the miner 2015-02-19 22:33:22 +01:00
Taylor Gerring
a59cd94625 Add setMining RPC method 2015-02-19 18:58:15 +01:00
Taylor Gerring
605dd3a982 Add serpent compilation to RPC 2015-02-19 18:41:50 +01:00
Felix Lange
3719db352a p2p: emit JSON connect/disconnect events 2015-02-19 17:09:33 +01:00
Felix Lange
fa15854a54 logger: add P2P disconnected event 2015-02-19 17:09:13 +01:00
Felix Lange
dd871e791c p2p: initialize Server.ourHandshake before accepting connections 2015-02-19 17:08:18 +01:00
Felix Lange
3dbd32093c p2p: enable devp2p ping
This should prevent connection drops.
2015-02-19 16:54:54 +01:00
Felix Lange
1ec6190e86 cmd/mist: show peer names in peers window 2015-02-19 16:54:53 +01:00
Felix Lange
73f94f3755 p2p: disable encryption handshake
The diff is a bit bigger than expected because the protocol handshake
logic has moved out of Peer. This is necessary because the protocol
handshake will have custom framing in the final protocol.
2015-02-19 16:54:53 +01:00
obscuren
c14071df9d Reset storage cache after sync 2015-02-19 13:34:27 +01:00
Taylor Gerring
dba4f3122e Added uninstall filter methods 2015-02-19 13:21:37 +01:00
Taylor Gerring
4322632c59 Merge pull request #339 from tgerring/jsonlog
JSON log updates
2015-02-19 12:25:45 +01:00
obscuren
0057bb4ef6 WIP QT Clipboard 2015-02-19 11:51:38 +01:00
obscuren
03b8c6841b Topics => Topic. Closes #343 2015-02-19 11:49:58 +01:00
obscuren
fdecc11128 Temp fix for #342 2015-02-19 11:09:46 +01:00
Maran
5aff8bfb59 Implement command line argument to set the amount of agents created by the miner
Defaults to the amount of cores available on the CPU
2015-02-19 10:38:36 +01:00
obscuren
487c5cc294 Added WIP number package 2015-02-18 17:18:07 +01:00
obscuren
ee9df32dba Added errors 2015-02-18 16:08:51 +01:00
obscuren
655e942597 Added GetBlock GetUncle with OOB guard 2015-02-18 13:14:21 +01:00
obscuren
be90ad89a8 Disable turbo 2015-02-18 12:01:20 +01:00
obscuren
05b1ec008b Disabled ability to disable whisper. Closes #334 2015-02-18 11:42:01 +01:00
Taylor Gerring
07bdba687f Re-add LogFormat to Config 2015-02-18 10:52:36 +01:00
Taylor Gerring
f499f343ba Update JSON Log types 2015-02-18 10:52:23 +01:00
Alexandre Van de Sande
acd93c2971 Removed console logs from mist.js
also fixed an issue where it would force reloads unnecessarily
2015-02-18 10:25:40 +01:00
Ethan Buchman
9446489cf3 core: chain manager forking tests 2015-02-17 22:02:15 -05:00
Ethan Buchman
2ba65f4fba Merge branch 'develop' of https://github.com/ethereum/go-ethereum into develop 2015-02-17 19:25:18 -05:00
obscuren
60318c96d0 removed old wallet 2015-02-17 23:22:42 +01:00
Jeffrey Wilcke
c1d0693cb1 Merge pull request #325 from fjl/deps-cleanup
Cleanup imports
2015-02-17 23:19:45 +01:00
obscuren
5ec8c5f71b added bootnode back in 2015-02-17 23:14:10 +01:00
obscuren
c1474e1877 Removed mined transactions from pending view. Closes #321 2015-02-17 23:10:37 +01:00
obscuren
26d58e0446 Forgot to add the case for logs. Closes #336 2015-02-17 22:46:30 +01:00
obscuren
7fc9b5b3f9 Changed to ChainEvent and fixed a nil pointer in transact 2015-02-17 22:20:47 +01:00
Alexandre Van de Sande
0e2f6691bf Cut, Copy, Undo and Redo working in webview 2015-02-17 17:37:26 +01:00
obscuren
11e12680eb Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-17 16:55:20 +01:00
obscuren
13c00afc68 Implement register and watchTx 2015-02-17 16:54:52 +01:00
Jeffrey Wilcke
5022b618aa Merge pull request #327 from fjl/udp-out-of-range
p2p/discover: fix pending replies iteration
2015-02-17 16:22:41 +01:00
obscuren
5238b9439e Merge branch 'alexvandesande-ui' into develop 2015-02-17 16:18:40 +01:00
obscuren
9a2be227a6 commented peer count out 2015-02-17 16:18:29 +01:00
obscuren
fe94622ea3 Merge branch 'ui' of https://github.com/alexvandesande/go-ethereum into develop 2015-02-17 16:13:06 +01:00
obscuren
567428fb34 Filter and mutex locks added 2015-02-17 16:12:55 +01:00
obscuren
815ead7107 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-17 16:09:25 +01:00
Felix Lange
7ea131d4ff p2p/discover: fix pending replies iteration
Range expressions capture the length of the slice once before the first
iteration. A range expression cannot be used here since the loop
modifies the slice variable (including length changes).
2015-02-17 15:21:39 +01:00
obscuren
547788b1b0 Added optional address slice. Closes #326 2015-02-17 14:19:05 +01:00
Taylor Gerring
417f018498 Updated P2PConnected log fields 2015-02-17 13:30:25 +01:00
obscuren
2c454863f2 Use new rlp (TODO requires some refactoring) 2015-02-17 13:26:21 +01:00
Felix Lange
f965f41b6e p2p/nat: switch to github.com/huin/goupnp
My temporary fix was merged upstream.
2015-02-17 13:10:11 +01:00
Felix Lange
119bea22aa crypto: switch to golang.org/x/crypto
code.google.com/p/go.crypto is deprecated and will cause
problems in future versions of Go.
2015-02-17 13:05:58 +01:00
Felix Lange
bb346a3ae1 rpc/ws: switch to golang.org/x/net
code.google.com/p/go.net is deprecated and will cause
problems in future versions of Go.
2015-02-17 12:37:09 +01:00
Alexandre Van de Sande
abb9b7f46f Merge branch 'develop' into ui 2015-02-17 12:29:10 +01:00
obscuren
c934222a80 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-17 12:25:25 +01:00
obscuren
8135752a32 "centralised" mining to backend. Closes #323 2015-02-17 12:24:58 +01:00
Felix Lange
34d0e1b2c3 p2p: fix ecies dependency in tests
We forgot to update this reference when moving ecies into the
go-ethereum repo.
2015-02-17 12:04:20 +01:00
Alexandre Van de Sande
fbd5e4d5af Updated icons 2015-02-17 11:52:22 +01:00
Alexandre Van de Sande
0de1d1dd58 removed status bar code 2015-02-17 11:23:28 +01:00
Alexandre Van de Sande
a22711a7b5 badge support 2015-02-17 11:22:52 +01:00
Alexandre Van de Sande
c4b8c11529 side icons 2015-02-17 00:52:40 +01:00
Alexandre Van de Sande
666ef48239 SideIcons work. Copy paste still doesn't. 2015-02-16 20:55:14 +01:00
CJentzsch
7ec1b7e90a Merge remote-tracking branch 'origin/develop' into develop 2015-02-16 20:20:50 +01:00
CJentzsch
a8c4de17da python fail 2015-02-16 20:20:15 +01:00
Taylor Gerring
643eda5c2d Update obscuren/qml revision 2015-02-16 19:43:27 +01:00
winsvega
4b81a98e4a Merge pull request #60 from winsvega/develop
ttWrongRLPTransaction
2015-02-16 20:11:33 +03:00
winsvega
beff83ecd2 Merge branch 'develop' of https://github.com/ethereum/tests into develop 2015-02-16 20:09:49 +03:00
winsvega
5797752572 new transaction wrong rlp test 2015-02-16 20:08:44 +03:00
Taylor Gerring
cb34502728 Add godep usage information 2015-02-16 17:59:54 +01:00
Taylor Gerring
9796feccb7 Add Docker Hub link to automated builds 2015-02-16 17:51:33 +01:00
Taylor Gerring
c0ce323092 Use explicit branch and godep 2015-02-16 17:00:57 +01:00
Paweł Bylica
b9894c1d09 Update JIT interface to ABI 0.2: code hash added to input data, gas counter passed as int64 2015-02-16 16:27:11 +01:00
CJentzsch
5718f96934 cppjit fails 2015-02-16 15:56:10 +01:00
CJentzsch
ea509a6d72 more performance tests 2015-02-16 15:47:52 +01:00
Alexandre Van de Sande
3068e2688d merge conflicts 2015-02-16 14:43:30 +01:00
Taylor Gerring
68f6ddc5aa Update Travis to use godep 2015-02-16 14:34:50 +01:00
Alexandre Van de Sande
1878630b59 Solved Issue #318 and added states to back button 2015-02-16 14:34:47 +01:00
Taylor Gerring
702218008e Add versioned dependencies from godep 2015-02-16 14:28:33 +01:00
Taylor Gerring
202362d925 Merge branch 'develop' of github.com:ethereum/go-ethereum into develop 2015-02-16 14:20:54 +01:00
Taylor Gerring
393267489c Use Go binary instead of building from source 2015-02-16 13:40:51 +01:00
Taylor Gerring
a92bcbb795 Use latest Trusty version 2015-02-16 13:37:29 +01:00
obscuren
164de5e22b Changed default denominators 2015-02-16 13:20:16 +01:00
obscuren
8f69b5c7a2 Added invalid sec key test 2015-02-16 13:19:57 +01:00
CJentzsch
dda2eb84f7 add creation txs in block tests 2015-02-16 13:02:57 +01:00
CJentzsch
957f334012 more transaction tests 2015-02-16 13:00:21 +01:00
CJentzsch
94af56789a first block tests 2015-02-16 12:59:44 +01:00
Taylor Gerring
d68e607aa5 Group Qt dependencies together 2015-02-16 12:12:14 +01:00
obscuren
d2a4bc4d73 Removed reference to lastBlockNumber & LastBlockNumber 2015-02-16 12:03:27 +01:00
Taylor Gerring
f63c4a9bcb Ignore locally built binaries 2015-02-16 11:42:33 +01:00
Alexandre Van de Sande
05f2808849 Add http when not present on browser 2015-02-16 11:17:31 +01:00
obscuren
2c3a014f03 Resolved some bugs in the miner
* TODO nonce error sometimes persists
* Fixed mining on wrong blocks
* Fixed state error & receipt fail
2015-02-15 16:16:27 +01:00
obscuren
c924a841c7 Merge branch 'develop' into bounty 2015-02-15 02:29:52 +01:00
obscuren
7299eb72e0 HTTP RPC only listen on localhost 2015-02-15 02:26:30 +01:00
obscuren
238f39a42e Validate seckey when generating pub key 2015-02-15 02:20:31 +01:00
obscuren
09e53367a2 Use a mutex write-lock for a write operation 2015-02-15 02:13:24 +01:00
obscuren
b143dad596 Reference pointer to block instead of pointer to function 2015-02-15 02:09:57 +01:00
obscuren
16ae675107 Unmarshal in to pointer to string 2015-02-15 02:08:08 +01:00
obscuren
12fc590b34 removed some old menu items 2015-02-15 01:58:15 +01:00
obscuren
c29b01ce75 Reset URL bar 2015-02-14 17:18:28 +01:00
obscuren
befb4bc1c1 Fixed a few errors in the browser special meta tags objects 2015-02-14 17:13:21 +01:00
obscuren
32c7ebc51d Fixed mining & limited hash power 2015-02-14 16:52:14 +01:00
obscuren
65159d65c8 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-14 00:27:46 +01:00
Jeffrey Wilcke
3ff6c9bb79 Merge pull request #309 from fjl/peer-window
Fix Mist Peers Window
2015-02-14 00:27:40 +01:00
obscuren
84f7c966f7 Moved ECIES to repo & added secondary title for webview
* ECIES moved from obscuren to ethereum
* Added html META[name=badge] to reflect menuItem.secondaryTitle
2015-02-14 00:25:47 +01:00
Felix Lange
8464e43eaf cmd/mist: fix peer window 2015-02-14 00:12:37 +01:00
Felix Lange
4bef3ce284 p2p: print Cap as name/version 2015-02-13 23:54:34 +01:00
obscuren
396f1a0a33 Add 'crypto/ecies/' from commit '7c0f4a9b18d992166452d8cd32caaefd92b26386'
git-subtree-dir: crypto/ecies
git-subtree-mainline: 49a739c8d6
git-subtree-split: 7c0f4a9b18
2015-02-13 23:45:38 +01:00
Jeffrey Wilcke
7c0f4a9b18 Merge pull request #3 from Gustav-Simonsson/fix_ecies_params_init_bug
Fix ECIES params nil bug
2015-02-13 23:42:33 +01:00
obscuren
49a739c8d6 Merge branch 'Gustav-Simonsson-align_key_and_ecdsa_nonce_entropy' into develop 2015-02-13 23:35:21 +01:00
obscuren
12b2d57629 Merge branch 'align_key_and_ecdsa_nonce_entropy' of https://github.com/Gustav-Simonsson/go-ethereum into Gustav-Simonsson-align_key_and_ecdsa_nonce_entropy 2015-02-13 23:31:20 +01:00
obscuren
95cfaa1b37 disabled test 2015-02-13 23:26:41 +01:00
Jeffrey Wilcke
acc7c0f706 Merge pull request #308 from fjl/default-bootnodes
eth: add default bootnode
2015-02-13 21:51:51 +01:00
Felix Lange
1c1a3033be eth: add default bootnode 2015-02-13 21:41:13 +01:00
obscuren
384305f4aa Fixed QML errors 2015-02-13 18:33:08 +01:00
Alexandre Van de Sande
7aef0fed29 changed url bar behaviour. Failed attempt at icon 2015-02-13 18:32:15 +01:00
obscuren
4d49d7b5a6 Reset hash rate to 0 when mining is stopped 2015-02-13 18:30:06 +01:00
Gustav Simonsson
f35d62b759 Remove secp256_rand.go and update tests 2015-02-13 18:25:25 +01:00
obscuren
6a7b0ef904 Updated coin.js abi 2015-02-13 18:17:17 +01:00
obscuren
ce239333d5 Update balance label when mining 2015-02-13 18:15:23 +01:00
obscuren
0f3c25b265 Propagate blocks 2015-02-13 18:03:16 +01:00
obscuren
790de35e7f Fixed issue in peer window
* Fixed issues where new peer window could cause a crash when entering
  an empty string
2015-02-13 17:57:46 +01:00
obscuren
218f437b0c Updated window 2015-02-13 17:30:37 +01:00
obscuren
7336dfad02 Merge branch 'develop' into poc8 2015-02-13 17:23:48 +01:00
obscuren
00fca40939 Merge branch 'miner' into develop 2015-02-13 17:23:18 +01:00
obscuren
8a0f23915e Fixed a few issues in the miner and updated hash rate title
* Sometimes old nonces were set by "old" agents
* Added the hash rate to the miner
2015-02-13 17:23:09 +01:00
obscuren
8305d409d2 Merge branch 'develop' into miner 2015-02-13 17:00:15 +01:00
obscuren
5c251b6928 Merge branch 'fjl-poc8-net-integration' into develop 2015-02-13 16:08:30 +01:00
obscuren
bde3ff16ad merge 2015-02-13 16:02:37 +01:00
Gustav Simonsson
39434e383b Unexport randEntropy type and use exported Reader instead 2015-02-13 15:38:26 +01:00
obscuren
76fa75b394 wip 2015-02-13 15:35:54 +01:00
Felix Lange
32a9c0ca80 p2p: bump devp2p protcol version to 3
For compatibility with cpp-ethereum
2015-02-13 15:08:40 +01:00
Felix Lange
fd3e1061e0 p2p: handle disconnect before protocol handshake 2015-02-13 15:06:47 +01:00
Felix Lange
cf754b9483 p2p/discover: fix race in ListenUDP
udp.Table was assigned after the readLoop started, so
packets could arrive and be processed before the Table was there.
2015-02-13 15:06:47 +01:00
Felix Lange
5cc1256fd6 p2p: ensure we don't dial ourself
addPeer doesn't allow self connects, but we can avoid opening
connections in the first place.
2015-02-13 15:06:47 +01:00
Felix Lange
7101f44998 p2p: add I/O timeout for encrytion handshake 2015-02-13 15:06:47 +01:00
Felix Lange
22ee366ed6 p2p: fix goroutine leak for invalid peers
The deflect logic called Disconnect on the peer, but the peer never ran
and wouldn't process the disconnect request.
2015-02-13 15:06:46 +01:00
obscuren
75d164037f Merge branch 'logjson' into develop 2015-02-13 15:06:32 +01:00
obscuren
a5ea21cd85 merge 2015-02-13 15:05:56 +01:00
Felix Lange
5110f80bba p2p: improve read deadlines
There are now two deadlines, frameReadTimeout and payloadReadTimeout.

The frame timeout is longer and allows for connections that are idle.
The message timeout is still short and ensures that we don't get stuck
in the middle of a message.
2015-02-13 14:44:00 +01:00
Christoph Jentzsch
4ee0f90b46 Merge pull request #59 from winsvega/develop
new solidity tests, manual altered transaction tests
2015-02-13 12:47:02 +01:00
winsvega
ddc830be5c new tests
solidity test
wrong transaction rlp (manual)
2015-02-13 14:20:47 +03:00
Felix Lange
170eb3ac68 p2p/discover: map listening port using configured mechanism 2015-02-13 11:39:32 +01:00
Felix Lange
82f0bd9009 p2p/discover: code review fixes 2015-02-13 11:39:31 +01:00
Felix Lange
d0a2e655c9 cmd/ethereum, cmd/mist, eth, p2p: use package p2p/nat
This deletes the old NAT implementation.
2015-02-13 11:39:31 +01:00
Felix Lange
1543833ca0 p2p/nat: new package for port mapping stuff
I have verified that UPnP and NAT-PMP work against an older version of
the MiniUPnP daemon running on pfSense. This code is kind of hard to
test automatically.
2015-02-13 11:39:31 +01:00
CJentzsch
4e3377333f Merge remote-tracking branch 'origin/develop' into develop 2015-02-13 09:10:27 +01:00
CJentzsch
a681d1ec02 performance test 2015-02-13 09:09:11 +01:00
obscuren
38faf2c51a removed messages 2015-02-12 17:06:15 +01:00
obscuren
31fdc645ed cmd + t switches to new dapp window 2015-02-12 15:03:53 +01:00
wanderer
1000b02b18 bump 2015-02-12 00:56:22 -05:00
Gustav Simonsson
5136fc9ab7 Fix ECIES params nil bug
* Change ECIES params init function to static var as it does not have
  state; fixes TestMarshalencryption.
2015-02-12 02:35:35 +01:00
Jeffrey Wilcke
04c1a81509 Merge pull request #2 from Gustav-Simonsson/correct_ecies_shared_key_generation
Correct ECIES shared key length check
2015-02-12 00:10:00 +01:00
obscuren
b64ad7a2a6 Merge branch 'develop' into miner 2015-02-11 23:46:54 +01:00
obscuren
3f6baa45a7 Documented methods & removed old manifest 2015-02-11 23:46:45 +01:00
Gustav Simonsson
52a46e61f9 Correct ECIES shared key length check
* Ensure the ECIES shared key is padded with zero bytes if it's
  smaller than the requested key length.
* Split the ECIES shared key error into two;
  one for when the generated key is too big for the params
  and one for when it's nil (point of infinity returned by the
  curve scalar multiplication).
2015-02-11 20:28:42 +01:00
obscuren
558c67d392 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-11 20:22:19 +01:00
Jeffrey Wilcke
d73dff4d5b Merge pull request #303 from fjl/rlp-flat
rlp: add Flat
2015-02-11 20:22:04 +01:00
Felix Lange
b94f85de22 rlp: add Flat 2015-02-11 19:28:56 +01:00
obscuren
1fc3524e40 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-11 19:22:38 +01:00
Jeffrey Wilcke
ebc506dae8 Merge pull request #302 from alexvandesande/UI
Catalog Page Behaviour
2015-02-11 19:22:23 +01:00
Alexandre Van de Sande
6221b282d4 Catalog Page Behaviour 2015-02-11 19:16:35 +01:00
Taylor Gerring
db24fb792c Move standard fields to LogEvent 2015-02-11 18:49:00 +01:00
Taylor Gerring
d311b1b9b7 Merge pull request #301 from ethereum/travis
Updates to Travis config
2015-02-11 14:25:44 +01:00
Taylor Gerring
3c40eb9e5a Temporarily skip broken TestVerifyPoW 2015-02-11 13:47:03 +01:00
obscuren
df49c609a0 updated coin 2015-02-11 13:26:44 +01:00
Taylor Gerring
3d6fd601c5 Move event names within each object 2015-02-11 12:45:41 +01:00
Taylor Gerring
ef6c7bd726 Merge pull request #300 from tgerring/jsonrpc
Allow RPC ID to be string or null
2015-02-11 11:59:51 +01:00
Taylor Gerring
d613bf69bf #295 Allow RPC ID to be string 2015-02-11 11:56:29 +01:00
Taylor Gerring
cfddb7f3cd Merge branch 'develop' into jsonrpc
Conflicts:
	rpc/ws/server.go
2015-02-11 11:40:12 +01:00
Taylor Gerring
c6af5f0a27 No longer switch branches for go-qml dep 2015-02-11 11:30:36 +01:00
Taylor Gerring
e433525f51 Merge branch 'sveneh-origin_develop' into develop 2015-02-11 11:28:39 +01:00
Taylor Gerring
ab66a3d0d3 Merge branch 'origin_develop' of https://github.com/sveneh/go-ethereum into sveneh-origin_develop 2015-02-11 11:03:40 +01:00
CJentzsch
d0a2eca19b add more transaction tests 2015-02-11 09:00:25 +01:00
CJentzsch
ec8404c375 Merge remote-tracking branch 'origin/develop' into develop 2015-02-11 08:40:42 +01:00
CJentzsch
766ee65328 cppjit fails 2015-02-11 08:39:55 +01:00
martin becze
bf2abc3b68 Update ttTransactionTest.json 2015-02-10 21:04:04 -05:00
martin becze
5a89c6f803 Update ttTransactionTest.json
updated signature
2015-02-10 20:53:43 -05:00
martin becze
74e1320a0b Update ttTransactionTest.json
updated RLP
2015-02-10 20:36:27 -05:00
martin becze
eaec21f199 Update ttTransactionTest.json 2015-02-10 20:29:08 -05:00
Gustav Simonsson
8c056aebe1 Set both key generation and ECDSA nonce to use mixed entropy
* Move random entropy functions to new package randentropy
* Add function to get n bytes entropy where up to first 32
  bytes are mixed with OS entropy sources
2015-02-10 22:49:28 +01:00
wanderer
d1a31850ce added transaction tests to index.js 2015-02-10 14:38:48 -05:00
Taylor Gerring
d53e5646ec Use strongly-typed objects 2015-02-10 19:21:13 +01:00
Jeffrey Wilcke
5fe2916ee1 Merge pull request #298 from alexvandesande/UI
UI changes to Mist
2015-02-10 17:21:29 +01:00
Felix Lange
acc667fbef Merge pull request #296 from frewsxcv/patch-1
Fix broken link in README
2015-02-10 16:41:32 +01:00
Alexandre Van de Sande
80890cd9dd removed icomoon 2015-02-10 16:16:17 +01:00
Alexandre Van de Sande
6b5f4ed244 Recreated the changes on a new branch 2015-02-10 16:14:07 +01:00
Felix Lange
4242b05462 cmd/bootnode: new command (replaces cmd/peerserver) 2015-02-10 14:26:54 +01:00
Felix Lange
a21b30c901 eth: remove unused Ethereum sync fields 2015-02-10 13:30:07 +01:00
obscuren
ddccea75e8 Fixed "to" field 2015-02-10 13:20:06 +01:00
obscuren
da2fae0e43 Basic structure miner 2015-02-10 13:04:38 +01:00
Felix Lange
a3cd218719 cmd/mist, cmd/ethereum: add CLI arguments for node key 2015-02-10 12:30:09 +01:00
Felix Lange
0c7df37351 crypto: add key loading functions 2015-02-10 12:29:50 +01:00
CJentzsch
cf002a4611 undo changed due to memory gas cost rule 2015-02-10 11:22:50 +01:00
CJentzsch
be4f40741f cppjit fail 2015-02-10 10:43:36 +01:00
sveneh
70e2df3904 Dockerfile creation speed-up by not running go tests, added a workaround
so that docker's cache is invalidated whenever th git repo is updated.
2015-02-09 16:27:49 +01:00
Felix Lange
f1ebad2508 eth: don't warn if no BootNodes are specified 2015-02-09 16:17:07 +01:00
CJentzsch
348d3af0fc more memory cost tests 2015-02-09 11:20:14 +01:00
Felix Lange
9915d3c3be p2p/discover: deflake UDP tests 2015-02-09 11:02:32 +01:00
CJentzsch
907f229757 update memory rule 2015-02-09 10:29:47 +01:00
obscuren
58ba290a9f moved manager 2015-02-09 00:08:28 +01:00
obscuren
b22f0f2ef5 merged 2015-02-09 00:06:24 +01:00
CJentzsch
bcc5c51630 gas failure cppjit 2015-02-07 18:09:22 +01:00
obscuren
16a04e64f2 Updated coin 2015-02-07 17:04:19 +01:00
obscuren
c8147fb7b9 Compare regardless of length 2015-02-07 17:04:04 +01:00
obscuren
0fa6927171 Moved log message to detail output 2015-02-07 17:03:33 +01:00
obscuren
99ebb869bf Fixed iterator 2015-02-07 17:03:22 +01:00
obscuren
44eafb15e0 Renamed filter 2015-02-07 17:03:12 +01:00
CJentzsch
cb877734f0 cppjit fails 2015-02-07 09:56:24 +01:00
Corey Farwell
792cd0aa10 Fix broken link in README 2015-02-06 22:36:22 -05:00
Felix Lange
028775a086 cmd/ethereum, cmd/mist: add flag for discovery bootstrap nodes 2015-02-07 00:52:49 +01:00
Felix Lange
2cf4fed11b cmd/mist, eth, javascript, p2p: use Node URLs for peer suggestions 2015-02-07 00:46:56 +01:00
Felix Lange
e34d134102 p2p: fixes for actual connections
The unit test hooks were turned on 'in production'.
2015-02-07 00:43:52 +01:00
Felix Lange
8564eb9f7e p2p/discover: add node URL functions, distinguish TCP/UDP ports
The discovery RPC protocol does not yet distinguish TCP and UDP ports.
But it can't hurt to do so in our internal model.
2015-02-07 00:12:23 +01:00
CJentzsch
9f52408e70 sha3 performance test 2015-02-06 17:43:35 +01:00
CJentzsch
a3780032bf failing tests from random simulation as state tests and transaction tests 2015-02-06 15:38:55 +01:00
Taylor Gerring
e4bb419707 Add go check to prefetched test dependencies 2015-02-05 18:11:31 -06:00
Taylor Gerring
5e0b2b260c Updated go list command 2015-02-05 17:49:44 -06:00
Taylor Gerring
b58b6b9bac Use after_success build step 2015-02-05 17:23:22 -06:00
Taylor Gerring
f3ac378ca4 No long use v1 branch of qml repo 2015-02-05 17:13:51 -06:00
Felix Lange
56f777b2fc cmd/ethereum, cmd/mist, core, eth, javascript, xeth: fixes for new p2p API 2015-02-06 00:03:59 +01:00
obscuren
e40c1c62ce API changed to use Pubkey only. Reflected that change in the rest of the api 2015-02-05 15:00:59 -08:00
Felix Lange
8e8ec8f5f8 cmd/peerserver: is gone
Will be back soon. Maybe.
2015-02-06 00:00:36 +01:00
Felix Lange
5bdc115943 p2p: integrate p2p/discover
Overview of changes:

- ClientIdentity has been removed, use discover.NodeID
- Server now requires a private key to be set (instead of public key)
- Server performs the encryption handshake before launching Peer
- Dial logic takes peers from discover table
- Encryption handshake code has been cleaned up a bit
- baseProtocol is gone because we don't exchange peers anymore
- Some parts of baseProtocol have moved into Peer instead
2015-02-06 00:00:36 +01:00
Felix Lange
739066ec56 p2p/discover: add some helper functions 2015-02-06 00:00:36 +01:00
Felix Lange
12224c7f59 p2p/discover: new package implementing the Node Discovery Protocol 2015-02-06 00:00:36 +01:00
Felix Lange
8c3095faf0 rlp: fix encoding of arrays with byte element type 2015-02-06 00:00:36 +01:00
Felix Lange
410b35e913 crypto: make it easier to run Sha3 on multiple inputs
crypto.Sha3(append(foo, bar)) --> crypto.Sha3(foo, bar)
crypto.Sha3([]byte{}) --> crypto.Sha3()
2015-02-06 00:00:36 +01:00
zelig
2e48d39fc7 key generation abstracted out, for testing with deterministic keys 2015-02-06 00:00:36 +01:00
zelig
488a042736 fix clientidentity test after privkey removed 2015-02-06 00:00:36 +01:00
zelig
71765957e4 get rid of Private Key in ClientIdentity 2015-02-06 00:00:36 +01:00
zelig
68205dec9f make crypto handshake calls package level, store privateKey on peer + tests ok 2015-02-06 00:00:36 +01:00
zelig
4499743522 apply handshake related improvements from p2p.crypto branch 2015-02-06 00:00:35 +01:00
zelig
54252ede31 add temporary forced session token generation 2015-02-06 00:00:35 +01:00
zelig
faa069a126 peer-level integration test for crypto handshake
- add const length params for handshake messages
- add length check to fail early
- add debug logs to help interop testing (!ABSOLUTELY SHOULD BE DELETED LATER)
- wrap connection read/writes in error check
- add cryptoReady channel in peer to signal when secure session setup is finished
- wait for cryptoReady or timeout in TestPeersHandshake
2015-02-06 00:00:35 +01:00
zelig
20aade56c3 chop first byte when cryptoid.PubKeyS is set from identity.Pubkey() since this is directly copied in the auth message 2015-02-06 00:00:35 +01:00
zelig
1f2adb05b5 add initial peer level test (failing) 2015-02-06 00:00:35 +01:00
zelig
4afde4e738 add code documentation 2015-02-06 00:00:35 +01:00
zelig
364b783281 changes that fix it all:
- set proper public key serialisation length in pubLen = 64
- reset all sizes and offsets
- rename from DER to S (we are not using DER encoding)
- add remoteInitRandomPubKey as return value to respondToHandshake
- add ImportPublicKey with error return to read both EC golang.elliptic style 65 byte encoding and 64 byte one
- add ExportPublicKey falling back to go-ethereum/crypto.FromECDSAPub() chopping off the first byte
- add Import - Export tests
- all tests pass
2015-02-06 00:00:35 +01:00
zelig
58fc2c679b important fix for peer pubkey. when taken from identity, chop first format byte! 2015-02-06 00:00:35 +01:00
zelig
923504ce3d add equality check for nonce and remote nonce 2015-02-06 00:00:35 +01:00
zelig
2e868566d7 add minor comments to the test 2015-02-06 00:00:35 +01:00
zelig
e252c634cb first stab at integrating crypto in our p2p
- abstract the entire handshake logic in cryptoId.Run() taking session-relevant parameters
- changes in peer to accomodate how the encryption layer would be switched on
- modify arguments of handshake components
- fixed test getting the wrong pubkey but it till crashes on DH in newSession()
2015-02-06 00:00:35 +01:00
zelig
1803c65e40 integrate cryptoId into peer and connection lifecycle 2015-02-06 00:00:35 +01:00
zelig
489d956283 completed the test. FAIL now. it crashes at diffie-hellman. ECIES -> secp256k1-go panics 2015-02-06 00:00:35 +01:00
zelig
076c382a74 handshake test to crypto 2015-02-06 00:00:35 +01:00
zelig
3b6385b146 handshake test to crypto 2015-02-06 00:00:34 +01:00
zelig
714b955d6e fix crash
- add session token check and fallback to shared secret in responder call too
- use explicit length for the types of new messages
- fix typo resp[resLen-1] = tokenFlag
2015-02-06 00:00:34 +01:00
zelig
b855f671a5 rewrite to comply with latest spec
- correct sizes for the blocks : sec signature 65, ecies sklen 16, keylength 32
- added allocation to Xor (should be optimized later)
- no pubkey reader needed, just do with copy
- restructuring now into INITIATE, RESPOND, COMPLETE -> newSession initialises the encryption/authentication layer
- crypto identity can be part of client identity, some initialisation when server created
2015-02-06 00:00:34 +01:00
zelig
4e52adb84a add crypto auth logic to p2p 2015-02-06 00:00:34 +01:00
zelig
d227f6184e fix protocol to accomodate privkey 2015-02-06 00:00:34 +01:00
zelig
88167f39a6 add privkey to clientIdentity + tests 2015-02-06 00:00:34 +01:00
zelig
c8a8aa0d43 initial hook for crypto handshake (void, off by default) 2015-02-06 00:00:34 +01:00
obscuren
6b5f25802e Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-05 14:42:22 -08:00
obscuren
f8c1eb157d Undone fix. Will re-enable once chain resets 2015-02-05 14:42:12 -08:00
Taylor Gerring
59665ade85 Pin Travis go version to 1.4.1 2015-02-05 16:27:54 -06:00
Taylor Gerring
c1f6e259a9 Only submit on coverage report success 2015-02-05 16:04:42 -06:00
Taylor Gerring
03b89ab712 Only download missing deps, not build 2015-02-05 16:03:29 -06:00
Taylor Gerring
ae3e9d4881 Don't reference by $GOROOT 2015-02-05 16:02:15 -06:00
obscuren
cad53fa191 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop
Conflicts:
	README.md
2015-02-05 12:36:30 -08:00
obscuren
0e682d936d Updated readme 2015-02-05 12:35:46 -08:00
obscuren
cec30e23b2 Updated readme 2015-02-05 12:34:47 -08:00
Jeffrey Wilcke
47129428fe Merge pull request #290 from Gustav-Simonsson/correct_block_parent_timestamp_check
Correct block parent timestamp check and typos
2015-02-05 12:23:56 -08:00
obscuren
2f30a27b2b Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-05 12:22:44 -08:00
obscuren
8be1d134aa updated home 2015-02-05 12:22:35 -08:00
obscuren
7e0799ff21 Merge commit '9d84609b3faf797f4a611587abdda3d6b3b07917' into develop 2015-02-05 12:07:36 -08:00
Marek Kotewicz
9d84609b3f Merge branch 'master' of https://github.com/ethereum/ethereum.js 2015-02-05 21:06:50 +01:00
obscuren
c64852dbcc pending / chain event 2015-02-05 11:55:03 -08:00
obscuren
bcacaaa4f4 Merge branch 'tgerring-develop' into develop 2015-02-05 11:44:45 -08:00
obscuren
d00e2731e5 Merge branch 'develop' of https://github.com/tgerring/go-ethereum into tgerring-develop
Conflicts:
	rpc/http/server.go
2015-02-05 11:44:30 -08:00
Jeffrey Wilcke
99a1551b20 Merge pull request #287 from ethereum/system-testing
Seednode CLI param updates
2015-02-05 11:09:13 -08:00
obscuren
ac69538707 Merge branch 'develop' into miner 2015-02-05 10:58:43 -08:00
CJentzsch
16ab949110 cppjit wrong cmake config fail 2015-02-05 18:40:37 +01:00
Marek Kotewicz
82cc5f63ae bring back jsonrpc single method calls in polling 2015-02-05 18:20:43 +01:00
obscuren
9d2166a964 wip 2015-02-05 09:13:02 -08:00
CJentzsch
0c29650bfa debug version for cppjit in dockerfile 2015-02-05 17:01:24 +01:00
sveneh
af21a32cef enabled tests 2015-02-05 12:31:49 +01:00
sveneh
5235124460 enabled python in tests 2015-02-05 12:09:35 +01:00
sveneh
2e2e36cc72 updated python and go to new build requirement. added script to create
dockers locally
2015-02-05 12:07:12 +01:00
obscuren
db7c34a9df Default gas price and default gas for rpc 2015-02-04 18:34:29 -08:00
obscuren
a1b4547a53 set uncles regardless of empty uncle list. Fixes invalid blocks being mined 2015-02-04 18:26:23 -08:00
obscuren
57f95c1dc7 fixed test 2015-02-04 17:35:49 -08:00
obscuren
1d519854e2 Propagate known transactions to new peers on connect 2015-02-04 17:28:54 -08:00
obscuren
292f7ada8e Merge branch 'develop' into miner 2015-02-04 15:05:49 -08:00
obscuren
65158d39b0 Filtering 2015-02-04 15:05:47 -08:00
obscuren
7c278d6ac2 updated tests 2015-02-04 12:52:34 -08:00
Taylor Gerring
429077a5a0 Merge branch 'develop' of github.com:tgerring/go-ethereum into develop 2015-02-04 10:58:18 -06:00
Taylor Gerring
2656a2d038 Use different default RPC port per #186 2015-02-04 10:57:47 -06:00
obscuren
3f03197dae Updated tests 2015-02-04 07:39:02 -08:00
CJentzsch
83258456d3 remove false tests 2015-02-04 16:23:54 +01:00
CJentzsch
936a8c0e3b python fail 2015-02-04 16:21:06 +01:00
obscuren
b1870631a4 WIP miner 2015-02-04 05:53:22 -08:00
Marek Kotewicz
859a1999cb Merge pull request #55 from ethereum/develop
fixed jsonrpc result field 0 not handled properly
2015-02-04 11:26:19 +01:00
Marek Kotewicz
f3e1797153 fixed jsonrpc response 0 not handled properly 2015-02-04 11:23:23 +01:00
CJentzsch
7bfa609f38 Merge remote-tracking branch 'origin' into develop 2015-02-04 09:48:31 +01:00
CJentzsch
822b05106d goFail 2015-02-04 09:48:16 +01:00
Taylor Gerring
55ed0ff07c Update RPC message format 2015-02-03 17:29:29 -06:00
Taylor Gerring
07590196a5 Merge branch 'develop' of github.com:tgerring/go-ethereum into develop 2015-02-03 17:18:20 -06:00
wanderer
c37ea26dc7 updated blockchain require 2015-02-03 17:35:36 -05:00
Gustav Simonsson
697c2b5dc1 Correct block parent timestamp check and typos 2015-02-03 23:09:39 +01:00
Marek Kotewicz
a0cfa3ca21 version upgrade 2015-02-03 23:02:24 +01:00
Marek Kotewicz
e58e2f5ee4 jsonrpc.js tests && jsonrpc response validation is more strict 2015-02-03 23:00:02 +01:00
Marek Kotewicz
45134de740 jsonrpc.js file && batch polling 2015-02-03 22:24:17 +01:00
Marek Kotewicz
f3ce1f07c4 simplified polling && jsonrpc payload creation 2015-02-03 21:43:39 +01:00
Marek Kotewicz
ddc17196da tests && fixes for utils methods 2015-02-03 20:12:56 +01:00
Marek Kotewicz
fdcc1af4e2 clearing tests 2015-02-03 19:48:51 +01:00
wanderer
901ddf7737 moved blockchain tests 2015-02-03 12:45:23 -05:00
Marek Kotewicz
4a54b8c451 version upgrade 0.0.12 2015-02-03 16:58:49 +01:00
obscuren
4dc283c0fb Removed minimum height. Closes #282 2015-02-03 07:54:50 -08:00
Marek Kotewicz
f1a5cf9128 Merge branch 'develop' into cpp
Conflicts:
	dist/ethereum.js.map
	dist/ethereum.min.js
2015-02-03 16:20:26 +01:00
Marek Kotewicz
a5909d82eb parsing events output 2015-02-03 16:16:38 +01:00
obscuren
59b7386abb Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-02-03 07:16:14 -08:00
obscuren
7bd2fbe2b1 Fixed whisper "to" filtering. Closes #283 2015-02-03 07:16:05 -08:00
obscuren
623469cb6c Added missing whisper timestamp. Closes #284 2015-02-03 06:56:19 -08:00
obscuren
663d725026 Added a different default home page 2015-02-03 06:54:41 -08:00
Marek Kotewicz
1860b3dff9 gulp 2015-02-03 15:08:36 +01:00
Marek Kotewicz
03faec9d41 event outputParser && tests 2015-02-03 15:08:19 +01:00
CJentzsch
2b3ea9770b cppjit fail 2015-02-03 13:13:10 +01:00
obscuren
30fa30bd4a Docs & old code removed 2015-02-02 20:02:00 -08:00
obscuren
faa54e59c1 Make sure that CALL addr is always 20 bytes 2015-02-02 20:01:10 -08:00
obscuren
93ae7bb0d2 Raw data for existing blocks 2015-02-02 19:58:58 -08:00
obscuren
3c7181d28f Fixed a copy issue in the trie which could cause a consensus failure 2015-02-02 19:58:34 -08:00
obscuren
6fecb150d6 Updated tests 2015-02-02 19:55:38 -08:00
CJentzsch
56559162d3 RefundOverflowTest 2015-02-03 01:00:32 +01:00
Taylor Gerring
1f4ed49b4c Move hardcoded seed node address to app flag
Replaces functionality `-seed=true` with `-seed="ip:port"`
2015-02-02 13:04:00 -06:00
Taylor Gerring
57c6caf146 Separate Coveralls submission from coverage script 2015-02-02 12:14:04 -06:00
arkpar
4bb5ba78b0 reverted ethereum.js 2015-02-02 18:20:43 +01:00
Marek Kotewicz
9d9c23e315 common cleanup 2015-02-02 17:40:05 +01:00
arkpar
1a6b7de0af removed splitter.qml 2015-02-02 16:47:18 +01:00
Taylor Gerring
b2b42f759c Update signature for rpc websockets 2015-02-02 07:37:44 -06:00
Taylor Gerring
7139c1aff7 Decrease log level for Sending RPC payload 2015-02-02 07:30:22 -06:00
Taylor Gerring
1e60919d47 Merge pull request #3 from ethereum/develop
Update to develop
2015-02-02 07:22:20 -06:00
Marek Kotewicz
011fdd91df event_inc example 2015-02-02 11:52:56 +01:00
Gav Wood
0994efa66f Better HTML template in Mix.
Use happened in JS.
Debugging QML enabled.
2015-02-01 22:51:14 -08:00
obscuren
8ccde784f9 Added (disabled) Jit validation 2015-02-01 15:30:29 +01:00
obscuren
d52878c744 Removed some VMEnv & Added VmType() to vm.Environment 2015-02-01 15:29:57 +01:00
martin becze
ca19e52266 Create badBlockChain.json 2015-01-31 18:40:02 -05:00
wanderer
e76af886bf updated test loader 2015-01-31 18:26:29 -05:00
wanderer
b4b280c4ff removed old folder 2015-01-31 17:51:22 -05:00
wanderer
764ed01688 move folder 2015-01-31 17:48:45 -05:00
martin becze
d1c8fa6bbd Rename basicBlockChain.js to basicBlockChain.json 2015-01-31 17:47:39 -05:00
martin becze
8ce498ee53 Create basicBlockChain.js 2015-01-31 17:46:24 -05:00
Marek Kotewicz
d5166918e9 fixed event signatures 2015-01-31 19:07:59 +01:00
obscuren
0d97c3ce13 Merge branch 'bounty' into develop 2015-01-31 17:50:43 +01:00
obscuren
19cff8ecca Fixed n 2015-01-31 17:50:28 +01:00
obscuren
bb2e847363 Merge branch 'bounty' into develop 2015-01-31 17:44:42 +01:00
obscuren
a008c21cf0 Fixed Sign nonce 2015-01-31 17:44:34 +01:00
obscuren
9016ce8dd8 Merge branch 'bounty' into develop 2015-01-31 17:23:50 +01:00
obscuren
79cd58bdf3 removed old code 2015-01-31 17:23:46 +01:00
obscuren
d1e5d92191 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-01-31 17:23:37 +01:00
obscuren
cb382fa76b Validate transactions sender before adding to pool. Closes #272 2015-01-31 17:22:17 +01:00
Marek Kotewicz
e6c0ec7278 version upgrade 2015-01-31 16:02:51 +01:00
Marek Kotewicz
3cdf108057 Merge branch 'develop' 2015-01-31 16:02:16 +01:00
Marek Kotewicz
688030ecb6 eth.filter next param optional 2015-01-31 16:01:41 +01:00
Marek Kotewicz
589c4fb30f formatInput && formatOutput simplified 2015-01-31 15:48:49 +01:00
Marek Kotewicz
b20e972bec few methods moved to utils 2015-01-31 15:22:05 +01:00
Marek Kotewicz
a8a2e3231c constants separated to const.js file 2015-01-31 14:05:48 +01:00
Marek Kotewicz
4bdf52fc1e toAscii && fromAscii moved to utils 2015-01-31 13:54:39 +01:00
Marek Kotewicz
0b82a05a75 events 2015-01-31 04:09:48 +01:00
Marek Kotewicz
80c97ca21b events 2015-01-31 03:42:13 +01:00
Marek Kotewicz
2491c99b37 abi.js cleanup && new types.js, utils.js 2015-01-31 02:54:17 +01:00
Marek Kotewicz
cf534d4726 gulp 2015-01-31 01:54:46 +01:00
Marek Kotewicz
5689086202 formatters separated 2015-01-31 01:52:36 +01:00
Taylor Gerring
bd64ed1e93 Update coveralls badge to develop branch 2015-01-30 18:47:25 -06:00
Marek Kotewicz
995861de4d event options 2015-01-31 01:30:19 +01:00
Taylor Gerring
56a0131778 Travis fixes for Qt5.4 2015-01-30 17:24:51 -06:00
wanderer
e125e70fa0 bump 2015-01-30 16:07:55 -05:00
martin becze
5f10d982ac Update genesishashestest.json
fixed initial_alloc
2015-01-30 16:09:25 -05:00
Taylor Gerring
0bb3943698 Updated for Qt5.4 2015-01-30 11:49:52 -06:00
obscuren
2d9b3aa537 Removed debug log 2015-01-30 17:00:33 +01:00
obscuren
8e14545282 added new default favicon 2015-01-30 15:54:43 +01:00
Marek Kotewicz
2eedc330bf contract with array example 2015-01-30 15:45:00 +01:00
obscuren
0ed3edc99e "fixed" transaction view 2015-01-30 14:49:45 +01:00
obscuren
0c0708076e added disasm 2015-01-30 14:41:14 +01:00
obscuren
3847e248df Bumped version number 2015-01-30 14:37:07 +01:00
obscuren
af927ffdaf Added whisper messages
* have identity & get messages
2015-01-30 13:47:18 +01:00
obscuren
c03d403437 Added whisper interface for xeth, added examples, updated RPC
* Added RPC methods for whisper
* Added whisper example
2015-01-30 13:25:12 +01:00
obscuren
c48644490f Fixed whisper pub key bug
* Unrecoverable messages would cause segfault when recovering invalid
  pub key
2015-01-30 13:24:20 +01:00
obscuren
54927dc0e0 Fixed issue with Storage()
* Storage() returned encoded values. They are now decode prior to hexing
* Removed old code from state object
* Updated coin
2015-01-29 23:58:43 +01:00
obscuren
705cf6113d debug err removed 2015-01-29 23:18:46 +01:00
obscuren
9022f5034f default values removed 2015-01-29 23:17:43 +01:00
CJentzsch
e8e8d12168 update genesis block 2015-01-29 23:05:42 +01:00
CJentzsch
fad4ddbcaf delete wrong tests 2015-01-29 22:50:38 +01:00
obscuren
bd992e7baf Merge branch 'qt5.4' of github.com-obscure:ethereum/go-ethereum into qt5.4
Conflicts:
	rpc/message.go
2015-01-29 20:41:10 +01:00
obscuren
0031f388ac More dapp samples
* Info DApp, coin DApp
* Additional rpc methods
2015-01-29 20:39:26 +01:00
Taylor Gerring
447bad9dbd Travis fix
Satisfy dependency for obscuren/qml fork
2015-01-29 12:12:19 -06:00
Taylor Gerring
89a48e365c Cleanup 2015-01-29 11:39:59 -06:00
Taylor Gerring
1cfea1113a Merge branch 'qt5.4' of github.com:ethereum/go-ethereum into qt5.4 2015-01-29 11:28:55 -06:00
obscuren
6488a392a3 Reimplemented message filters for rpc calls 2015-01-29 16:52:00 +01:00
Marek Kotewicz
600c9dd27d topics are deprecated 2015-01-29 15:45:04 +01:00
Marek Kotewicz
e380462532 topic for backwards compatibility 2015-01-29 15:36:13 +01:00
Marek Kotewicz
94e0e5ab7d Merge branch 'cpp' into cpp2
Conflicts:
	example/balance.html
2015-01-29 15:22:55 +01:00
Marek Kotewicz
8613382869 moved comment 2015-01-29 15:17:32 +01:00
Marek Kotewicz
df17c33898 event example 2015-01-29 15:05:43 +01:00
obscuren
ddf17d93ac Samples and disams cmd for evm code 2015-01-29 14:46:59 +01:00
Marek Kotewicz
c8ee08c24b contract.js simplified 2015-01-29 13:32:32 +01:00
obscuren
84adf77bf3 Added RPC "Call" for JS calls to contracts 2015-01-29 13:10:34 +01:00
obscuren
f75dcc7f4c Added abi example 2015-01-29 13:10:04 +01:00
Marek Kotewicz
842b8cf323 event.js 2015-01-29 12:35:21 +01:00
obscuren
b5918a1faa removed create 2015-01-29 12:06:47 +01:00
obscuren
d0c6559204 Merge branch 'develop' into qt5.4 2015-01-29 12:02:45 +01:00
obscuren
6d012f628b implement transact 2015-01-29 12:01:51 +01:00
Taylor Gerring
726852e3d3 Remove old websocket implementation 2015-01-28 21:39:49 -06:00
Taylor Gerring
83b385a290 Separate golang source dir from GOPATH dir 2015-01-28 21:28:32 -06:00
obscuren
ec85458612 updated ethereum.js and moved to subfolder
* Previous subtree caused a lot of trouble
* Implemented sha3 in our shiny new http JSON RPC
2015-01-29 00:24:18 +01:00
obscuren
73dcbf7ba2 Add 'cmd/mist/assets/ext/ethereum.js/' from commit '63d9c070ef7637a3d570a5a45ea931c1680ebc02'
git-subtree-dir: cmd/mist/assets/ext/ethereum.js
git-subtree-mainline: f80fe97763
git-subtree-split: 63d9c070ef
2015-01-28 23:33:24 +01:00
obscuren
f80fe97763 removed old js yet again 2015-01-28 23:33:20 +01:00
obscuren
cbf1d07073 default http rpc on 2015-01-28 23:23:33 +01:00
obscuren
8284bef072 Merge branch 'develop' into qt5.4 2015-01-28 22:21:26 +01:00
obscuren
fd5d061d49 Merge branch 'develop' into Gustav-Simonsson-key_store_and_accounts_integration 2015-01-28 21:50:10 +01:00
obscuren
32fbc0d334 Merge branch 'develop' into qt5.4 2015-01-28 21:36:53 +01:00
obscuren
1337a8dfb1 upped pv 2015-01-28 21:34:08 +01:00
obscuren
3440a8a0bf changed lost key 2015-01-28 21:12:26 +01:00
obscuren
5e891ea981 Merge branch 'key_store_and_accounts_integration' of https://github.com/Gustav-Simonsson/go-ethereum into Gustav-Simonsson-key_store_and_accounts_integration 2015-01-28 20:55:55 +01:00
obscuren
adda54ac55 Added webengine initializer 2015-01-28 20:50:20 +01:00
obscuren
cebb149f5c removed key while in the process of moving to the new key storage 2015-01-28 20:50:09 +01:00
Gav Wood
e1c0862658 Fix for API. 2015-01-28 10:19:49 -08:00
Taylor Gerring
21fd31dad8 Merge branch 'jsonrpc' of github.com:ethereum/go-ethereum into jsonrpc 2015-01-28 12:01:15 -06:00
obscuren
957f80c623 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-01-28 18:37:04 +01:00
obscuren
1c51e12c18 Merge branch 'jsonrpc' into qt5.4 2015-01-28 18:36:41 +01:00
obscuren
872b249711 further cleaned up xeth interface 2015-01-28 18:36:23 +01:00
obscuren
1146f25015 clean up of xeth 2015-01-28 18:25:50 +01:00
obscuren
45e15f62f5 merge jsonrpc 2015-01-28 18:22:53 +01:00
obscuren
7f638f0b2d moving to a better xeth 2015-01-28 18:14:28 +01:00
Taylor Gerring
5a52e86546 Update go to latest version
Now using git instead of mercurial
2015-01-28 11:10:16 -06:00
Taylor Gerring
a88f609b8a Use custom Send methods 2015-01-28 10:22:37 -06:00
Marek Kotewicz
61e8ae2f7b events init 2015-01-28 14:55:39 +01:00
obscuren
b46e1ca97e Merge branch 'jsonrpc' of github.com-obscure:ethereum/go-ethereum into jsonrpc 2015-01-28 14:52:09 +01:00
obscuren
fb7c03ff4d switched to obscuren/qml 2015-01-28 14:51:54 +01:00
Marek Kotewicz
2544d2c952 tests for abi.filters 2015-01-28 14:39:10 +01:00
Marek Kotewicz
ea7c2fc673 abi function type 2015-01-28 14:20:36 +01:00
obscuren
9a11a94894 Updated assets & moved messages 2015-01-28 14:02:36 +01:00
obscuren
cbf162ca64 Allow CORS * 2015-01-28 14:02:18 +01:00
obscuren
85d20cd61b Added big numbers 2015-01-28 14:02:03 +01:00
obscuren
94976d63ca Merge branch 'develop' into qt5.4 2015-01-28 10:58:56 +01:00
obscuren
cb47a9e97f new ethereum.js 2015-01-28 10:58:43 +01:00
obscuren
ad5894e486 removed old ethereum.js 2015-01-28 10:54:06 +01:00
Marek Kotewicz
63d9c070ef fixed incoming messages 2015-01-28 10:50:24 +01:00
obscuren
f15d23b496 updated messages 2015-01-28 10:47:17 +01:00
obscuren
4c5968097d Merge branch 'jsonrpc' into qt5.4 2015-01-28 10:29:29 +01:00
obscuren
159c4d56cd Merge branch 'develop' into jsonrpc 2015-01-28 10:23:58 +01:00
obscuren
f3e78c8f3c reworking messages => log 2015-01-28 10:23:18 +01:00
Christoph Jentzsch
a20a5b437d Merge pull request #50 from winsvega/develop
Transaction Tests
2015-01-28 06:28:45 +01:00
Gustav Simonsson
8d9752a557 Address pull request comments
* Use crypto.Sign instead of directly calling secp256k1 lib
* Rename UserAccount to Account and Addr to Address (for consistency)
* Change AccountManager.Sign to take ptr to Account instead of
  address byte array
* Simplify copying of Accounts in Accounts()
* PubkeyToAddress and GetEntropyCSPRNG now exported
2015-01-28 05:12:57 +01:00
Marek Kotewicz
1345a8c67c log error on console, if api returns an error 2015-01-28 00:07:03 +01:00
Marek Kotewicz
83fad0fb59 removed fromFixed, toFixed && offset from tests 2015-01-27 23:03:57 +01:00
Taylor Gerring
e9d017ba08 Rename api var for clarity 2015-01-27 14:34:01 -06:00
Taylor Gerring
d8c6168d11 Return a websocker.Handler of the function 2015-01-27 14:26:42 -06:00
Taylor Gerring
dd3f38fe5b Rename transport to ws
Cleanup object naming for clarity
2015-01-27 14:16:34 -06:00
Taylor Gerring
a38bca3438 Add wsport flag to Mist 2015-01-27 12:40:52 -06:00
Taylor Gerring
5f50fe7a4a Update CLI to use new Websocket RPC
Use “wsport” flag to change default port
2015-01-27 12:29:08 -06:00
Taylor Gerring
b8e7b8e2e1 New simplified Websocket transport
Uses rpc.EthereumApi abstraction
2015-01-27 12:29:08 -06:00
Taylor Gerring
2f0166b945 Indicate port in startup log message 2015-01-27 12:29:08 -06:00
Taylor Gerring
d790229a33 Move HTTP transport to sub package of RPC 2015-01-27 12:29:07 -06:00
obscuren
8c99a87aa8 Merge branch 'chfast-pr/evmjit' into develop 2015-01-27 16:31:29 +01:00
obscuren
fe14b0b82e Merge branch 'pr/evmjit' of https://github.com/chfast/go-ethereum into chfast-pr/evmjit 2015-01-27 16:30:38 +01:00
obscuren
aa5b29e2f2 Implemented contract ABI 2015-01-27 16:19:21 +01:00
obscuren
382726fde4 Merge branch 'key_store_and_accounts_integration' of https://github.com/Gustav-Simonsson/go-ethereum into Gustav-Simonsson-key_store_and_accounts_integration 2015-01-27 16:18:40 +01:00
Marek Kotewicz
c2cb2bef96 removed web3.eth.account, fixed #37 2015-01-27 16:02:42 +01:00
Marek Kotewicz
09f633596d fixed #23 2015-01-27 15:20:22 +01:00
Marek Kotewicz
42a25f2f26 evaluating solidity method input params 2015-01-27 14:31:50 +01:00
Marek Kotewicz
6d59047c5f contract method name 2015-01-27 14:14:02 +01:00
Marek Kotewicz
ad7c05778f getMethodWithName 2015-01-27 14:05:30 +01:00
Marek Kotewicz
f02368141f fixed contract example 2015-01-27 11:53:34 +01:00
Marek Kotewicz
649b9cc195 fixed natspec example 2015-01-27 09:40:31 +01:00
Marek Kotewicz
1f5a6f1341 Merge branch 'develop' into cpp
Conflicts:
	dist/ethereum.js.map
	dist/ethereum.min.js
2015-01-27 09:36:39 +01:00
Marek Kotewicz
da4c2d530d removed promise dependency, updated readme, fixed node.js version of lib 2015-01-27 00:54:21 +01:00
Ethan Buchman
2da367a2be fix unchecked slice index on tx.From() 2015-01-26 10:57:23 -08:00
Paweł Bylica
079c59b929 Update JitVm to new EVM JIT ABI (C interface) 2015-01-26 18:02:09 +01:00
Marek Kotewicz
5b701962dc upgraded version to 0.0.9 2015-01-26 16:47:05 +01:00
Marek Kotewicz
c595632b92 gulp 2015-01-26 16:45:35 +01:00
Marek Kotewicz
c5610398d5 Merge branch 'master' into sync
Conflicts:
	lib/websocket.js
2015-01-26 16:45:12 +01:00
Marek Kotewicz
a7f4448f34 Merge branch 'develop' into sync 2015-01-26 16:43:21 +01:00
Marek Kotewicz
7807a4f738 polling every second 2015-01-26 16:42:43 +01:00
Marek Kotewicz
e5d294df32 return null instead of undefined, if not provider is set 2015-01-26 16:41:00 +01:00
Marek Kotewicz
d0b6f3663b watches are calling callback with a single result object, not a full jsonrpc response 2015-01-26 16:22:40 +01:00
Paweł Bylica
c71aff99db Update EVM JIT runtime data layout 2015-01-26 16:13:55 +01:00
Paweł Bylica
5d33d5a7d9 Merge remote-tracking branch 'upstream/develop' into evmjit 2015-01-26 15:46:10 +01:00
Gustav Simonsson
512ffa2bf4 Add accounts package and refactor key stores
* Add initial UserAccount and AccountManager structs
* Add NewAccount, Sign and Accounts functions
* Refactor key stores to use key address as main identifier
  while keeping the UUID.
* Use key address as file/dir names instead of UUID
2015-01-26 04:30:17 +01:00
sveneh
d0440eef25 fixes 2015-01-25 23:28:47 +01:00
sveneh
5deca66a7d fixes 2015-01-25 23:15:41 +01:00
sveneh
58ec49a34d added EC2 provisioning, optimised docker for EC2, added python and
cppjit client (python not yet working)
2015-01-25 22:52:38 +01:00
Gav Wood
d223ac0379 Additional work on the JS stuff to make it more similar to Solidity. 2015-01-25 13:43:36 -08:00
Gav Wood
113a3809ab Fix string outputs.
Auto collapse for < 2 returns.
2015-01-24 18:23:39 -08:00
Gav Wood
fb34c6c7b9 Auto select call or transact depending on constness. 2015-01-24 18:09:35 -08:00
Gav Wood
7869294a26 Fixes to ethereum.js and standard.js. 2015-01-24 17:42:49 -08:00
Gav Wood
61a0158877 Vanity addresses in AZ.
Fixes to ethereum.js
eth.flush()
2015-01-24 16:46:46 -08:00
wanderer
fa93480d9a added addressbook 2015-01-24 19:45:53 -05:00
wanderer
063f69d51d added local 2015-01-24 19:32:26 -05:00
obscuren
c54a85ee64 Reworking browser 2015-01-25 00:55:33 +01:00
obscuren
48083608b5 Updated readme with badges 2015-01-24 19:09:29 +01:00
obscuren
393a6c5edf Gitter link 2015-01-24 18:48:19 +01:00
obscuren
0d96528d2f Skip for travis 2015-01-24 18:46:35 +01:00
obscuren
2ba54a69be skipping for travis 2015-01-24 18:40:03 +01:00
winsvega
382694f593 Transaction Tests
New State Tests
2015-01-23 20:27:51 +03:00
Paweł Bylica
94106cc41f JitVm code cleanups & refactoring. Some memory copies eliminated (i.e. in SHA3 calculation) 2015-01-23 16:45:22 +01:00
Paweł Bylica
3aa0410f6e Merge remote-tracking branch 'upstream/develop' into pr/evmjit 2015-01-23 15:37:37 +01:00
CJentzsch
52e174b1f7 make money with transaction gas overflow 2015-01-23 15:23:56 +01:00
obscuren
7a894e3738 Merge branch 'develop' into jsonrpc 2015-01-23 14:29:01 +01:00
CJentzsch
fd450b7f9a python fail 2015-01-23 12:04:39 +01:00
CJentzsch
04b611df1c python fails 2015-01-23 09:57:49 +01:00
CJentzsch
64fc464e03 add python fail 2015-01-22 23:14:12 +01:00
obscuren
d792e95c21 Merge branch 'Gustav-Simonsson-import_presale_keys' into develop 2015-01-22 22:42:52 +01:00
obscuren
a125b0fbc3 Merge branch 'import_presale_keys' of https://github.com/Gustav-Simonsson/go-ethereum into Gustav-Simonsson-import_presale_keys
Conflicts:
	crypto/crypto.go
2015-01-22 22:42:39 +01:00
obscuren
a216225827 Merge branch 'pr/evmjit' of https://github.com/chfast/go-ethereum into chfast-pr/evmjit 2015-01-22 21:47:36 +01:00
obscuren
0dfe511370 Use curve params instead of hardcoded 32 bytes 2015-01-22 18:15:11 +01:00
obscuren
d4cc2d3503 Pad private key when signing & length check for hashes in sign 2015-01-22 18:12:05 +01:00
Paweł Bylica
d5f38f5690 JitVM: the EVM JIT bridge 2015-01-22 18:00:15 +01:00
Marek Kotewicz
c01f0ae825 Merge commit 'b1971f46cce7d21be5f6277c9f8c406a0d195f78' into natspec 2015-01-22 17:57:53 +01:00
Marek Kotewicz
81bbe8c93b simplified synchronous polling 2015-01-22 17:57:26 +01:00
CJentzsch
26e84de180 cppjit fail 2015-01-22 17:27:02 +01:00
CJentzsch
b4e7a5b1c6 python fail 2015-01-22 17:14:50 +01:00
CJentzsch
7f1d2b28c1 cppjit failure 2015-01-22 16:36:43 +01:00
Marek Kotewicz
29fa57e9b3 natspec.js updated to use sync api 2015-01-22 15:38:48 +01:00
Marek Kotewicz
13f39afbdd Merge commit '93fa6855afad7a7eb86e49efe384372a6060da35' into natspec 2015-01-22 15:33:47 +01:00
Marek Kotewicz
3073511e30 not parsing transaction output 2015-01-22 15:32:52 +01:00
Marek Kotewicz
6c4432d417 Merge commit 'b32dedc5b54f853cf63bb2663c8bca6aa4272b0b' into natspec 2015-01-22 15:18:59 +01:00
Marek Kotewicz
e45db42e94 fixed contract.js 2015-01-22 15:18:21 +01:00
Marek Kotewicz
375ca542ab Merge commit '8e3ba3a4285cc7e902a018196b3849df56944dd0' into natspec 2015-01-22 14:38:04 +01:00
Marek Kotewicz
0202b05a5d implicit solidity method call 2015-01-22 14:37:34 +01:00
CJentzsch
ab0473ef93 failing python test 2015-01-22 14:12:46 +01:00
Marek Kotewicz
d6a92b18d4 fixed natspec example 2015-01-22 13:39:32 +01:00
Marek Kotewicz
5e623f14f3 Merge commit 'cdd7af2a6e87363d0ff7d2528f9d9b521bf2ef20' into natspec 2015-01-22 13:06:11 +01:00
Marek Kotewicz
22c77c607e qt sync provider 2015-01-22 13:04:28 +01:00
obscuren
b777d6aa3f UI Updates
* Browser now has tabs
* Fixed a callback issue
2015-01-22 12:35:31 +01:00
CJentzsch
4b3e56ec23 failing python test 2015-01-22 12:17:52 +01:00
obscuren
4df2e1ef5c updated tests 2015-01-22 00:37:58 +01:00
obscuren
67f9783e6a Moved obscuren secp256k1-go 2015-01-22 00:35:00 +01:00
obscuren
6eaa404187 Moved sha3 from obscuren 2015-01-22 00:25:00 +01:00
obscuren
0045ce4cde Future blocks not allowed 2015-01-22 00:24:30 +01:00
obscuren
465b0a79d8 Updated browser & pass view to callback function 2015-01-22 00:24:20 +01:00
Marek Kotewicz
ad8e92e9c6 Merge commit 'eb4984c0d036c1420e782ca136810e851e33fb37' into natspec 2015-01-21 21:54:51 +01:00
Marek Kotewicz
edfb874527 changes in filter.js (not yet working) 2015-01-21 21:54:03 +01:00
Marek Kotewicz
c2d9c1a6f1 toDecimal/fromDecimal is using bignumber.js now 2015-01-21 21:35:15 +01:00
Marek Kotewicz
81a5813270 removed unused pieces of code 2015-01-21 21:24:40 +01:00
Marek Kotewicz
08e2696627 removed send queues from providermanager 2015-01-21 21:22:05 +01:00
Marek Kotewicz
c9693b4746 contract.html example is working with sync api 2015-01-21 21:12:07 +01:00
Marek Kotewicz
ceb4357a8d sync api tests running, removed unused pieces of code 2015-01-21 20:43:20 +01:00
Marek Kotewicz
fc986a3fbe removed unused providers 2015-01-21 20:30:32 +01:00
Marek Kotewicz
0d2cccc2ce http sync api 2015-01-21 20:29:02 +01:00
Gustav Simonsson
8af42d42da CamelCase aesCBCDecrypt 2015-01-21 19:08:05 +01:00
Marek Kotewicz
81ff253e68 Merge commit 'c4638ba3edbd14677da5441d61f7845668df2b22' into natspec 2015-01-21 18:58:33 +01:00
Marek Kotewicz
e68f8e79ea natspec changes 2015-01-21 18:58:13 +01:00
Marek Kotewicz
e1fcffcc81 gulp 2015-01-21 18:58:01 +01:00
Marek Kotewicz
f3e78e50ff changes to for natspec 2015-01-21 18:56:30 +01:00
Taylor Gerring
c14900dbb0 Add initial P2P json logs 2015-01-21 11:47:21 -06:00
Taylor Gerring
0aa76d3e5b Rename jsonlogger method 2015-01-21 11:45:30 -06:00
Taylor Gerring
622bfd4f08 Check LogSystem type 2015-01-21 10:58:09 -06:00
Taylor Gerring
1077109e11 Add JsonLogger type 2015-01-21 10:57:29 -06:00
Taylor Gerring
ed7d7b405e Split file cleanup 2015-01-21 10:26:54 -06:00
Taylor Gerring
41d80ba17b Add JsonLevel log level 2015-01-21 10:18:46 -06:00
Taylor Gerring
bdf99e0981 Add LogFormat flag 2015-01-21 10:17:07 -06:00
Taylor Gerring
acdc19d1b7 Add rawLogSystem 2015-01-21 10:16:15 -06:00
Taylor Gerring
7f9c335487 Split into multiple files 2015-01-21 10:04:11 -06:00
Gustav Simonsson
1f8290ca44 Add ImportPreSaleKey
* ImportPreSaleKey takes a KeyStore, a presale key JSON (e.g. file content)
  and a password string. It stores the key in the given key store.
* Refactored common AES decryption and moved some functions to crypto.go
2015-01-21 16:35:43 +01:00
Taylor Gerring
215780ab56 Move GetRequestReply to EthereumApi
Off of jsonWrapper
2015-01-20 13:58:51 -06:00
Taylor Gerring
a6d4ce2630 Move argument types to separate file 2015-01-20 13:57:51 -06:00
Taylor Gerring
0c77a96249 Move websockets out of cmd/util 2015-01-20 13:40:24 -06:00
Taylor Gerring
d92fde6980 Merge branch 'develop' into jsonrpc 2015-01-20 13:22:38 -06:00
obscuren
87f50659db fixed url bug in browser 2015-01-20 18:42:29 +01:00
Marek Kotewicz
689630d261 Merge commit '53b4fda16d0b191be8ab986379a328aa38aaf916' into natspec 2015-01-20 17:48:08 +01:00
Marek Kotewicz
848c54dc47 _currentAbi object 2015-01-20 17:46:37 +01:00
obscuren
9845029a75 StdVm by default 2015-01-20 15:49:12 +01:00
obscuren
375cc67ba6 Hide browser bar when coming from a DApp url 2015-01-20 15:48:38 +01:00
Marek Kotewicz
380c1522ac solidity methods "overloading" 2015-01-20 15:06:05 +01:00
obscuren
4dd7be7ed0 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-01-20 15:04:30 +01:00
Jeffrey Wilcke
12fad65991 Merge pull request #259 from Gustav-Simonsson/develop
KeyStore (Low level key functionality)
2015-01-20 15:04:21 +01:00
CJentzsch
be58138100 more SHA3 tests, and random failing tests for python 2015-01-20 10:33:26 +01:00
Marek Kotewicz
5c79ee4446 fixed natspec_contract.html example 2015-01-20 09:22:32 +01:00
Gustav Simonsson
d48140cab3 Address pull request comments
* Further simplify "constructor" function's allocation of structs
* Fix formatting
2015-01-19 22:12:22 +01:00
Gustav Simonsson
3cf038f300 Address pull request comments
* Allocate with composite literal instead of new
* Remove check of number of bytes read from rand
2015-01-19 20:24:30 +01:00
CJentzsch
dabbb6df65 Merge branch 'develop' of https://github.com/ethereum/tests into develop 2015-01-19 15:17:20 +01:00
CJentzsch
8871fb4e0e add python fail 2015-01-19 15:15:41 +01:00
sveneh
eecee75336 fixed sudo access 2015-01-19 15:10:08 +01:00
Marek Kotewicz
83505e61f3 Merge commit '2b4d38b9bf059014596e1ab00c99dc2ad4ab3761' into ethereumjs 2015-01-19 13:53:44 +01:00
Marek Kotewicz
6a58db66f7 parsing real, ureal values on output 2015-01-19 13:22:58 +01:00
Marek Kotewicz
af54832d24 encoding real on input 2015-01-19 12:59:29 +01:00
Marek Kotewicz
86b417e83f fixes for autoprovider 2015-01-19 11:36:41 +01:00
obscuren
f34838688e Minor browser improvements 2015-01-19 11:23:17 +01:00
obscuren
bcb1166e52 Added 0 key proof error
Private key \x00\x00...\x00 returns the _exact_ same public key as \x11
\x11...\x11. Currently investigating.
2015-01-19 11:22:56 +01:00
obscuren
8d1637f567 Moved connection errors to DebugDetail level 2015-01-19 11:21:46 +01:00
obscuren
b03614527b VmDebug => StdVm 2015-01-19 11:20:55 +01:00
obscuren
9b509f6478 Print error instead of returning for seed node err
Returning an error would indicate a complete failure initialising the
Ethereum backend. Instead we should print the message and continue.
2015-01-19 11:20:12 +01:00
obscuren
89c69a1d25 VmDebug => StdVm 2015-01-19 11:18:34 +01:00
Jeffrey Wilcke
06bfe19f05 Merge pull request #260 from fjl/rlp-encoder
rlp: allow encoding non-empty interface values
2015-01-19 10:59:35 +01:00
wanderer
6e8085b839 remove old requires 2015-01-18 22:14:53 -05:00
wanderer
f5ec2470db use require-all 2015-01-18 21:54:29 -05:00
obscuren
7394ee7c72 Fixed difficulty
Difficulty was broken when refactored.
2015-01-18 15:45:54 +01:00
Marek Kotewicz
b2d23b91e7 Merge pull request #32 from kumavis/patch-1
WebsocketProvider - fixed incorrect variable name
2015-01-18 00:30:08 +01:00
Marek Kotewicz
2ce109eb53 Merge commit '6a383d6ed3fb37cf6739f6ac441652adfdb70463' into ethereumjs 2015-01-17 15:45:11 +01:00
Marek Kotewicz
823fb2995b tests for parsing output array 2015-01-17 13:50:07 +01:00
Marek Kotewicz
1e2c1ae98a output parser string support 2015-01-17 13:39:19 +01:00
Marek Kotewicz
b457e88cd0 support for int array types[] 2015-01-17 02:14:40 +01:00
aaron
e97478cc1e WebsocketProvider - fixed incorrect variable name 2015-01-16 16:03:13 -08:00
Marek Kotewicz
2d8383d3c8 removed unused functions 2015-01-16 23:55:32 +01:00
Marek Kotewicz
1c4d8f36e4 Merge commit '29333fc213b62b27ef826616cf77430947fb6eab' into ethereumjs 2015-01-16 16:49:50 +01:00
Marek Kotewicz
e94da808cb default padding set to 32, separated to one variable 2015-01-16 16:46:14 +01:00
Marek Kotewicz
a1c0bb68dd fixed checking first bit for parsing int output 2015-01-16 16:40:26 +01:00
Marek Kotewicz
774e9d24a1 abi.js rounds down floating point input 2015-01-16 16:26:58 +01:00
Marek Kotewicz
9a264a4284 updated bower.json && package.json version, added bignumber.js to bower dependencies 2015-01-16 16:04:41 +01:00
Marek Kotewicz
0172939490 fixed #28 and other small node.js issues 2015-01-16 15:49:36 +01:00
obscuren
24613a60dc Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-01-16 14:51:47 +01:00
obscuren
acc8f7fadc Add defer rescued back in 2015-01-16 14:51:38 +01:00
Christoph Jentzsch
df335682e4 Merge pull request #48 from sveneh/develop
Testrunner deployment
2015-01-16 14:07:37 +01:00
Marek Kotewicz
de4ea8e6f4 Merge commit 'd876522bc0614fea3180a54be57bcb61784b352e' into ethereumjs 2015-01-16 12:07:48 +01:00
Marek Kotewicz
2c36d5ff45 big integers on abi.js output, tests 2015-01-16 11:58:26 +01:00
Marek Kotewicz
f1295b506d tests for bigintegers on input 2015-01-16 11:28:46 +01:00
Marek Kotewicz
fbcc6d0d25 BigNumber support 2015-01-16 10:47:43 +01:00
Felix Lange
fc92abec2c rlp: allow encoding non-empty interface values
This needs to be supported because []someInterface does occur sometimes.

Funny enough, the fix involves changes to the decoder. makeDecoder
cannot return an error for non-empty interfaces anymore because the type
cache builds both decoder and writer. Do the check at 'runtime' instead.
2015-01-15 23:35:26 +01:00
Jeffrey Wilcke
52bb149541 Merge pull request #257 from fjl/rlp-encoder
rlp: add functions for encoding
2015-01-15 22:28:48 +01:00
Gustav Simonsson
9caf32befe Update code comments 2015-01-15 19:58:38 +01:00
Gustav Simonsson
47d3b3dd58 Address pull request comments
* Remove flags field from key struct
* Change JSON struct fields from string to []byte
* Change GenerateNewKey API to take io.Reader for random source
* Remove mixing entropy source function
* Use testing Fatal in tests
2015-01-15 19:40:10 +01:00
Gustav Simonsson
a1c2749380 Address pull request comments
* Simplify scrypt constants with const block
* Add key store constructors and make their types private
* Simplify key store and file namings to be less Java Enterprise™
* Change test error logging to use t.Error(err)
* Reduce number of naked returns (just like my ex-gf)
* Simplify file reading path code
2015-01-15 19:40:10 +01:00
Gustav Simonsson
945798f913 Add new key_store interface and two new key stores
* Add new generic key_store interface
* Add new plaintext key store storing unprotected keys on disk
* Add new encrypted key store storing encrypted keys on disk
* Add new entropy mixing function using OS and go runtime sources
2015-01-15 19:40:10 +01:00
Marek Kotewicz
6d02c0d392 Merge commit '1a6dbeff6e86d65cae6d7db366cbaa4182eaff7f' into ethereumjs
Conflicts:
	libjsqrc/ethereumjs/dist/ethereum.js
	libjsqrc/ethereumjs/dist/ethereum.js.map
	libjsqrc/ethereumjs/dist/ethereum.min.js
	libjsqrc/ethereumjs/lib/abi.js
2015-01-15 17:27:07 +01:00
Marek Kotewicz
ec74fc05d4 gulp 2015-01-15 16:01:58 +01:00
Marek Kotewicz
46b932ccc0 negative integers support 2015-01-15 15:51:25 +01:00
Marek Kotewicz
f85f77f6cc fixed typos 2015-01-15 14:37:18 +01:00
Marek Kotewicz
6a4b4f3449 fixed readme 2015-01-15 14:30:34 +01:00
Marek Kotewicz
d0473d6d83 gulp 2015-01-15 11:40:04 +01:00
Marek Kotewicz
70bf1a5711 fixed typos 2015-01-15 11:39:02 +01:00
Marek Kotewicz
bacc5aa6d3 methodExists and propertyExists are now separated tests 2015-01-15 11:38:21 +01:00
CJentzsch
44a12cd070 python fail callcode (insufficient balance) 2015-01-15 11:13:20 +01:00
Felix Lange
29c46cdf34 rlp: fix Decode benchmarks 2015-01-15 11:12:39 +01:00
Felix Lange
552f5b2693 rlp: add functions for encoding
I'm reasonably confident that the encoding matches the output of
ethutil.Encode for values that it supports. Some of the tests have been
adpated from the Ethereum testing repository.

There are still TODOs in the code.
2015-01-15 11:00:19 +01:00
obscuren
d5d9746ca3 updated tests 2015-01-15 10:46:42 +01:00
CJentzsch
1287fc3266 add test with large data in callcreate 2015-01-15 09:47:55 +01:00
Lefteris Karapetsas
508f116738 Merge pull request #798 from LefterisJP/natspec_OnContractCreation
Natspec Popup Authentication on transaction
2015-01-15 01:37:52 +01:00
CJentzsch
a5946a969f update vmSystemOperationsTest 2015-01-14 22:38:33 +01:00
Marek Kotewicz
472ad43211 more comments 2015-01-14 20:36:26 +01:00
Marek Kotewicz
603c790213 next part of abi.js parsers tests and fixes 2015-01-14 20:29:20 +01:00
obscuren
62e0e18030 Changed public whisper api not to reveal temporary private keys 2015-01-14 18:12:18 +01:00
sveneh
6bb10ccc3b fixed testrunner 2015-01-14 18:06:28 +01:00
CJentzsch
d30ca5aa8c added a inputLimits tests (46725 test cases) 2015-01-14 17:55:49 +01:00
CJentzsch
489994054a re-add vmSystemOperationsTest 2015-01-14 17:53:26 +01:00
sveneh
fffd981058 uses docker in tesrunner 2015-01-14 17:53:13 +01:00
sveneh
9326d0a6dd Dockers for go, cpp 2015-01-14 17:03:37 +01:00
sveneh
74faa30af6 first version of automatic testrunner deployment. Uses ansible, vagrant
and virtualbox
2015-01-14 16:10:33 +01:00
Marek Kotewicz
b0a9bbf33a next part of abi.js docs 2015-01-14 14:19:54 +01:00
Marek Kotewicz
6b2ec23132 formatting bool tests and fixes 2015-01-14 14:06:29 +01:00
Marek Kotewicz
ed1cb9edca simplifid abi.js methods 2015-01-14 13:53:40 +01:00
Marek Kotewicz
17f2f12ce6 gulp 2015-01-14 12:01:24 +01:00
Marek Kotewicz
12bdb5f550 providers documentation 2015-01-14 12:01:11 +01:00
Marek Kotewicz
8d1f96cc0a few comments 2015-01-14 10:50:34 +01:00
Lefteris Karapetsas
a4049fb85c Cleaned up some unused functions 2015-01-14 09:28:52 +01:00
CJentzsch
762a93fec8 python fail 2015-01-14 09:21:49 +01:00
CJentzsch
f9e891909d cppjit failing on byte? 2015-01-14 09:15:47 +01:00
CJentzsch
a6e9bab298 python fail 2015-01-13 23:07:09 +01:00
CJentzsch
3f5a075280 python fail 2015-01-13 22:45:12 +01:00
obscuren
bb55307a9d Updated tests 2015-01-13 20:31:31 +01:00
Marek Kotewicz
422dc05bb0 ProviderManager separated to providermanager.js file 2015-01-13 18:40:01 +01:00
CJentzsch
ebf4686858 go create return different address 2015-01-13 18:30:26 +01:00
Marek Kotewicz
9a8f45ee30 Filter separated to filter.js file 2015-01-13 18:28:49 +01:00
CJentzsch
aca3181b7e more cpp-jit fails 2015-01-13 18:28:18 +01:00
CJentzsch
fd0230e5be cppjit fail 2015-01-13 18:20:08 +01:00
CJentzsch
0d25bb85d9 cpp-jit fail 2015-01-13 18:13:52 +01:00
Lefteris Karapetsas
dac93ed616 Natspechandler: Get function hash from transaction data 2015-01-13 17:54:09 +01:00
Marek Kotewicz
8b7d4b0c9e beginning of comments in web3 2015-01-13 17:05:05 +01:00
Taylor Gerring
499bc404e8 Stub missing UnmarshalJSON methods 2015-01-13 09:37:30 -06:00
Taylor Gerring
a81d835e4d cleanup 2015-01-13 09:37:08 -06:00
CJentzsch
54eaf239ac more failing tests 2015-01-13 16:29:04 +01:00
Taylor Gerring
961e4da7d8 Add support for CodeAt 2015-01-13 09:27:36 -06:00
Taylor Gerring
b178414a47 Added license headers 2015-01-13 09:13:43 -06:00
Lefteris Karapetsas
f54c90a0ba A first version of Natspec warning popup
- Runtime Contract code hash can now be retrieved from the Compiler

- Using the hash the Natspec handler stores and later retrieves Natspec
  JSON for a given contract.
2015-01-13 15:59:42 +01:00
Marek Kotewicz
ee167e53d1 test for parsing multiple methods description 2015-01-13 15:42:56 +01:00
obscuren
8f733461b3 Default datadir for mist is now shared with CLI (.ethereum) 2015-01-13 14:58:12 +01:00
obscuren
82beaabf6a Fixed consensus issue 2015-01-13 14:57:51 +01:00
CJentzsch
8d7ddf5299 new cppjit failures 2015-01-13 14:54:39 +01:00
CJentzsch
6fd011a3b6 cppjit fail 2015-01-13 14:16:47 +01:00
Marek Kotewicz
4056c046a7 tests... 2015-01-13 13:47:31 +01:00
obscuren
e3cad04dec Fixed whisper messages
* Whisper protocol wasn't properly suppling envelope slices
* Message history wasn't properly propagated
* Added 'Messages' method, filtering any current envelope with the
  supplied filter.
2015-01-13 13:36:44 +01:00
CJentzsch
a9930bfd87 first failing cppjit tests 2015-01-13 13:32:26 +01:00
Marek Kotewicz
1428dcee21 web3.contract -> web3.eth.contract 2015-01-13 13:03:40 +01:00
Marek Kotewicz
f3b71a73e3 removed unused line 2015-01-13 12:51:23 +01:00
Marek Kotewicz
380d9862c3 tests in progress, fixed utf characters conversion in toAscii 2015-01-13 12:49:10 +01:00
Gav Wood
b6c0e53d69 Auto-generated commits, too. 2015-01-13 11:06:43 +00:00
Gav Wood
e95bb34ea0 Fix for JS API formatting. 2015-01-13 11:04:31 +00:00
Marek Kotewicz
9e0de57a82 mocha test reporter 2015-01-13 11:29:19 +01:00
Marek Kotewicz
f6ff1f18b8 mocha reporter name starts with lower case letter 2015-01-13 11:21:58 +01:00
Marek Kotewicz
7595a5dfcb removed padding calculation from ethereum.js, padding is always 32 2015-01-13 11:15:44 +01:00
obscuren
1e5353824a updated tests 2015-01-13 10:32:02 +01:00
obscuren
4704a0a288 remove pre compiled for tests 2015-01-13 10:30:52 +01:00
CJentzsch
6a2e82a23d python failures, blockhash, invalid jump, invalid opcode 2015-01-13 09:17:56 +01:00
CJentzsch
1818dffaec call to precompiled contract and balance 2015-01-13 08:44:44 +01:00
Taylor Gerring
b2112729fa cleanup 2015-01-12 23:44:56 -06:00
Taylor Gerring
32bed50ba1 begin conversion to rpc over http
Per specification at
https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC
2015-01-12 23:25:29 -06:00
Jeffrey Wilcke
5b561f434d Merge pull request #254 from chfast/pr/jitvm_stub
JitVm struct stub. Forwards calls to DebugVm.
2015-01-13 00:29:41 +01:00
obscuren
750d70c202 updated tests 2015-01-13 00:25:45 +01:00
obscuren
34689cb3f3 Added manual triggering of filters 2015-01-12 20:36:45 +01:00
Paweł Bylica
ba225017c4 JitVm struct stub. Forwards calls to DebugVm. 2015-01-12 19:40:14 +01:00
Jeffrey Wilcke
507241f73c shh getMessage => getMessages 2015-01-12 18:34:37 +01:00
CJentzsch
55c689722a addmod mulmod div by zero tests 2015-01-12 16:25:37 +01:00
obscuren
8a1b51c716 updated tests 2015-01-12 16:13:30 +01:00
CJentzsch
dfe77eac84 remove wrong mulmod/addmod tests 2015-01-12 16:09:51 +01:00
obscuren
75cd9cd2de updated tests 2015-01-12 14:40:40 +01:00
CJentzsch
1aebe33a34 ADDMOD and MULMOD divison by zero 2015-01-12 14:27:08 +01:00
CJentzsch
d70a30c056 MULMOD with modul 0 gives division by zero error 2015-01-12 13:55:00 +01:00
obscuren
00348756bc updated tests 2015-01-12 13:49:47 +01:00
CJentzsch
2577b803f6 create should return 0 2015-01-12 13:22:18 +01:00
CJentzsch
928dde590c create with high value should fail and return 0 2015-01-12 13:08:43 +01:00
CJentzsch
5fbb24353a include invalid opcode 0x0c 2015-01-12 12:00:02 +01:00
obscuren
35fe4313d5 pre-pow 2015-01-12 10:19:27 +01:00
CJentzsch
9f0c292144 jump outside code 2015-01-12 09:36:56 +01:00
CJentzsch
d812c685c9 CODECOPY with size larger than codesize 2015-01-12 09:10:11 +01:00
Gav Wood
9a9987aeed Merge commit 'a1023a5dffee7c06e8b75a21f5c9b8826e820942' into develop
Conflicts:
	libjsqrc/ethereumjs/dist/ethereum.js.map
2015-01-11 18:18:05 +01:00
Gav Wood
5582901ca5 Various fixes to ethereum.js and client web API stuff. 2015-01-11 18:15:35 +01:00
Gav Wood
ded221fba2 Merge commit 'ab745d3b0eb89d67db1ed953020c665be3d072ed' into develop
Conflicts:
	libjsqrc/ethereumjs/.travis.yml
	libjsqrc/ethereumjs/README.md
	libjsqrc/ethereumjs/dist/ethereum.js
	libjsqrc/ethereumjs/dist/ethereum.js.map
	libjsqrc/ethereumjs/lib/abi.js
	libjsqrc/ethereumjs/package.json
2015-01-11 17:54:36 +01:00
Marek Kotewicz
ab745d3b0e updated readme 2015-01-11 17:23:03 +01:00
Marek Kotewicz
b915c7a870 updated readme 2015-01-11 17:13:32 +01:00
Marek Kotewicz
6c26255979 Merge branch 'tests' into develop 2015-01-11 17:12:37 +01:00
Marek Kotewicz
e2c4525da7 Merge branch 'master' into develop 2015-01-11 17:12:29 +01:00
Marek Kotewicz
e778e127d6 spec reporter instead of nyan 2015-01-11 17:04:30 +01:00
Marek Kotewicz
a4e6f0b3c6 fixed travis.yml && added nmp test script 2015-01-11 16:40:09 +01:00
Marek Kotewicz
048e7771fb Merge branch 'master' into tests 2015-01-11 16:36:38 +01:00
Marek Kotewicz
15c229300c updated package json 2015-01-11 16:36:07 +01:00
Marek Kotewicz
24814a4f0f Merge branch 'master' of https://github.com/ethereum/ethereum.js 2015-01-11 16:33:08 +01:00
Marek Kotewicz
6188e64473 Update README.md 2015-01-11 16:25:41 +01:00
Marek Kotewicz
c34b0c67a1 Update README.md 2015-01-11 16:23:06 +01:00
CJentzsch
a0008c3508 correct CREATE with zero sized init code 2015-01-10 23:51:54 +01:00
obscuren
7e6b72cb5c removed accidental qt dep 2015-01-10 18:09:57 +01:00
obscuren
e3da85faed Implemented filter for ws + fixes
* proper 0xhex
* filters fixed
* start of filter manager
* accounts for ws. Closes #246
2015-01-10 00:51:56 +01:00
obscuren
491c23a728 Moved the TD method from block processor. 2015-01-09 22:42:36 +01:00
obscuren
351516c57c Cast to string for hashable type 2015-01-09 22:23:33 +01:00
CJentzsch
e8a131e05c remove wrong tests 2015-01-09 21:38:57 +01:00
obscuren
8c7b764d47 updated tests 2015-01-09 21:18:34 +01:00
CJentzsch
bf798c8dec wrong memmory needed calculation for CREATE in cpp 2015-01-09 20:39:00 +01:00
CJentzsch
53dbdf3dd2 return input offset 2015-01-09 19:16:52 +01:00
obscuren
905b8cc82f mem fixes for vm. Changed uncle inclusion tests 2015-01-09 17:38:35 +01:00
CJentzsch
c674306973 big offset zero size for create 2015-01-09 17:33:41 +01:00
Marek Kotewicz
47687cf085 default padding changed to 0 2015-01-09 17:27:56 +01:00
CJentzsch
314220a00d big offset zero size for sha3 and return 2015-01-09 17:06:53 +01:00
Marek Kotewicz
29c60c000a Merge branch 'develop' into tests 2015-01-09 16:48:44 +01:00
obscuren
35f4bb96f3 Limit hashes. Closes #249 2015-01-09 16:44:09 +01:00
Marek Kotewicz
92f171ec99 rerun gulp 2015-01-09 16:40:55 +01:00
Marek Kotewicz
0933a79ab8 missing fromAscii 2015-01-09 16:38:26 +01:00
obscuren
b136b387a7 Merge branch 'ethersphere-develop' into develop 2015-01-09 16:34:49 +01:00
CJentzsch
dd866afc2e LOG0 no mem expansion despite large offset 2015-01-09 15:46:00 +01:00
obscuren
6eb455032c recover 2015-01-09 15:32:14 +01:00
obscuren
5c8c0ae04e Fixed size 0 bug 2015-01-09 15:30:46 +01:00
obscuren
a35be3a12a Merge branch 'develop' of https://github.com/ethersphere/go-ethereum into ethersphere-develop 2015-01-09 13:37:15 +01:00
obscuren
f9b0d1a8e7 Updated to new ethereum.js api 2015-01-09 13:36:47 +01:00
Marek Kotewicz
543a87c63f method signature length defined 2015-01-09 13:30:14 +01:00
obscuren
c9f566269b merged 2015-01-09 13:28:48 +01:00
obscuren
bfa12d75f8 new switch 2015-01-09 13:26:49 +01:00
Marek Kotewicz
b3eda29f41 Merge branch 'master' into tests 2015-01-09 13:07:34 +01:00
obscuren
18d8bf4b9c updated ethereum.js 2015-01-09 13:01:21 +01:00
obscuren
aee82d3196 removed 2015-01-09 13:00:37 +01:00
Marek Kotewicz
a5907a8239 Merge branch 'master' of https://github.com/ethereum/ethereum.js 2015-01-09 12:57:03 +01:00
Marek Kotewicz
2a6c84984a version upgraded 2015-01-09 12:55:46 +01:00
Marek Kotewicz
0538c11576 sha3 method signature 2015-01-09 12:55:04 +01:00
obscuren
012a1c2533 Updated ethereum.js 2015-01-09 12:45:09 +01:00
Jeffrey Wilcke
c9015e2e04 module var fix 2015-01-09 12:44:11 +01:00
Jeffrey Wilcke
07fba274b1 module var fix 2015-01-09 12:43:45 +01:00
obscuren
585f259b63 Support input from args 2015-01-09 12:04:54 +01:00
CJentzsch
b227000f19 add blockhash vm tests 2015-01-09 10:56:40 +01:00
zelig
b3161f5803 Merge remote-tracking branch 'upstream/develop' into develop 2015-01-09 06:21:47 +00:00
zelig
5a9952c7b4 major blockpool change
- the spec says response to getBlockHashes(from, max) should return all hashes starting from PARENT of from. This required major changes and results in much hackier code.
- Introduced a first round block request after peer introduces with current head, so that hashes can be linked to the head
- peerInfo records currentBlockHash, currentBlock, parentHash and headSection
- AddBlockHashes checks header section and creates the top node from the peerInfo of the best peer
- AddBlock checks peerInfo and updates the block there rather than in a node
- request further hashes once a section is created but then no more until the root block is found (so that we know when to stop asking)
- in processSection, when root node is checked and receives a block, we need to check if the section has a parent known to blockchain or blockPool
- when peers are switched, new peer launches a new requestHeadSection loop or activates its actual head section, i.e., the section for it currentBlockHash
- all tests pass
2015-01-09 06:03:45 +00:00
zelig
8ecc9509b3 add ErrInsufficientChainInfo error 2015-01-09 06:03:32 +00:00
zelig
f72cb28b0f adapt unit tests to spec
- AddBlockHashes ignores the first hash (just used to match getBlockHashes query) sends the rest as blocksMsg
- new test TestPeerWithKnownParentBlock
- new test TestChainConnectingWithParentHash
- adapt all other tests to the new scheme
2015-01-09 05:57:09 +00:00
zelig
43ed0ed1ae no need to call AddBlockHashes when receiving new block 2015-01-09 05:06:04 +00:00
zelig
69dfca2feb minor changes in integration tests 2015-01-09 05:04:32 +00:00
zelig
3bdf28c1fe GetBlockHashesFromHash(hash, max) gives back max hashes starting from PARENT of hash 2015-01-09 05:03:26 +00:00
obscuren
c8a4c04b36 err 2015-01-08 23:15:46 +01:00
CJentzsch
ac2ce00e28 add random test which fail on go 2015-01-08 22:41:40 +01:00
obscuren
26f066f0c7 just enable by default 2015-01-08 22:18:23 +01:00
CJentzsch
f73731d5a4 failing python tests 2015-01-08 22:10:55 +01:00
obscuren
4a0ade4788 Fixed some whisper issues 2015-01-08 21:41:32 +01:00
Marek Kotewicz
c397e350f4 mocha opts file && init of parser tests 2015-01-08 20:24:30 +01:00
Marek Kotewicz
b6058a837f methods existance tests in progress 2015-01-08 19:59:03 +01:00
Marek Kotewicz
5518022a5d mocha test init 2015-01-08 19:35:32 +01:00
obscuren
5f958a582d fixed other tests to use hashes as well 2015-01-08 16:48:39 +01:00
obscuren
e27237a03a Changed to use hash for comparison
DeepReflect would fail on TD since TD isn't included in the original
block and thus the test would fail.
2015-01-08 16:45:51 +01:00
CJentzsch
9b9f7cffde long jumpdest list 2015-01-08 16:39:57 +01:00
obscuren
ee84b20247 Reworking GUI interaction. Fixed javascript inject. Closes #132 2015-01-08 16:38:24 +01:00
obscuren
b25126a277 Minor fixed and additions for block proc
* Path check length
* Genesis include TD
* Output TD on last block
2015-01-08 16:37:06 +01:00
Marek Kotewicz
807ec60e63 missing jshint ignore 2015-01-08 15:43:22 +01:00
Marek Kotewicz
f9cc090473 fixed example 2015-01-08 15:31:46 +01:00
CJentzsch
eb3451142e sdiv int256.min -1 2015-01-08 15:29:07 +01:00
CJentzsch
73ba8a48ab sdiv with negative fractional result 2015-01-08 15:14:20 +01:00
Marek Kotewicz
2f3384947b version upgrade 2015-01-08 15:13:43 +01:00
Marek Kotewicz
a8dde17146 fixes for node.js 2015-01-08 15:11:20 +01:00
CJentzsch
1ad28d0494 add valid jumpdest with jumpdest at beginning 2015-01-08 13:04:29 +01:00
obscuren
db4aaedcbd Moved ptrie => trie. Removed old trie 2015-01-08 11:47:04 +01:00
CJentzsch
08a72727cd more dynamic jump tests 2015-01-08 11:23:39 +01:00
CJentzsch
0aa66f02ef jump into push data is forbidden 2015-01-07 22:33:25 +01:00
CJentzsch
b94c610e49 jumpdests tests, OOG at max call depth, ... 2015-01-07 15:54:14 +01:00
Marek Kotewicz
5208bb32f1 gulpfile modifications, default build set to dev 2015-01-07 14:13:29 +01:00
obscuren
982c812e81 Read directly from stdin 2015-01-07 13:38:28 +01:00
obscuren
c1908c7d91 Merge branch 'develop' of github.com-obscure:ethereum/go-ethereum into develop 2015-01-07 13:22:29 +01:00
Jeffrey Wilcke
59c5a2f519 Merge pull request #244 from fjl/license-tool
Generated License Headers
2015-01-07 13:22:22 +01:00
Felix Lange
1d05027ba2 a few fixes for the license tool 2015-01-07 13:17:50 +01:00
obscuren
fed3e6a808 Refactored ethutil.Config.Db out 2015-01-07 13:17:48 +01:00
Felix Lange
ec7cb9981c add license tool and initial mailmap 2015-01-07 12:56:46 +01:00
CJentzsch
99e6e00c34 check address input greater then 2**160 2015-01-07 11:17:09 +01:00
Marek Kotewicz
df4d7846e5 Merge pull request #22 from debris/strings
strings, real, ureal paddings and implicit paddings for uint, int and hash
2015-01-07 11:16:46 +01:00
Marek Kotewicz
6c160adab3 Merge pull request #21 from debris/master
fixed gulp build
2015-01-07 11:16:27 +01:00
CJentzsch
55f6fe4f7b check address input greater then 2**160 2015-01-07 11:16:09 +01:00
obscuren
032ab66529 Added version flag 2015-01-07 01:21:55 +01:00
obscuren
60d9611c23 Fixed tests where txs weren't properly removed 2015-01-07 01:21:45 +01:00
Marek Kotewicz
210682b734 real, ureal paddings and implicit paddings for uint, int and hash 2015-01-06 21:50:09 +01:00
obscuren
f0ec751237 Updated tests 2015-01-06 20:22:31 +01:00
CJentzsch
6ce9799370 added BlockHash tests 2015-01-06 20:21:11 +01:00
Marek Kotewicz
1d139f7a0b solidity string support 2015-01-06 18:29:38 +01:00
CJentzsch
93bf0d6f4e zeroMemExpansionTests 2015-01-06 16:33:47 +01:00
CJentzsch
dc087ffa97 more jumpdest test 2015-01-06 14:48:57 +01:00
obscuren
25e6c4eff8 Adjusted difficulty and skip get tx messages 2015-01-06 14:02:47 +01:00
obscuren
a76b7dadae Don't auto push jeff ... 2015-01-06 13:39:01 +01:00
Marek Kotewicz
b6232cfdd1 fixed tabs 2015-01-06 13:37:02 +01:00
Marek Kotewicz
a2a77172a6 bring back todos 2015-01-06 13:32:04 +01:00
obscuren
1b903767e0 Fixed port num 2015-01-06 13:31:52 +01:00
obscuren
4e7f53adf0 Changed to poc-8 & removed GetTxs 2015-01-06 13:31:08 +01:00
Marek Kotewicz
8c1b26889a renamed example/index.html -> example/balance.html 2015-01-06 13:27:43 +01:00
Marek Kotewicz
af9242f4cc fixed gulp build 2015-01-06 13:26:51 +01:00
obscuren
564f02aa2b Fixed tests 2015-01-06 13:18:09 +01:00
Jeffrey Wilcke
3b8725e0f5 Merge pull request #239 from fjl/grab-bag
Grab bag of fixes
2015-01-06 13:13:16 +01:00
Felix Lange
3caa4ad1ba p2p: improve test for peers message
The test now checks that the number of of addresses is correct
and terminates cleanly.
2015-01-06 12:23:38 +01:00
Felix Lange
b0ff946b55 p2p: move peerList back into baseProtocol
It had been moved to Peer, probably for debugging.
2015-01-06 12:23:38 +01:00
Felix Lange
eb0e7b1b81 eth, p2p: remove EncodeMsg from p2p.MsgWriter
...and make it a top-level function instead.

The original idea behind having EncodeMsg in the interface was that
implementations might be able to encode RLP data to their underlying
writer directly instead of buffering the encoded data. The encoder
will buffer anyway, so that doesn't matter anymore.

Given the recent problems with EncodeMsg (copy-pasted implementation
bug) I'd rather implement once, correctly.
2015-01-06 12:23:38 +01:00
Felix Lange
36e1e5f151 cmd/peerserver: add some command line switches 2015-01-06 12:23:37 +01:00
Felix Lange
4c8c115a76 cmd/peerserver: use NoDial, don't use seed peers 2015-01-06 12:23:37 +01:00
Felix Lange
545e14691b cmd/peerserver: fix for new client identity type 2015-01-06 12:23:37 +01:00
Felix Lange
be97785856 cmd/evm: add dummy implementation for GetHash
Fixes the build. AFAIK evm does not bother keeping a chain and
cannot provide a real implementation.
2015-01-06 12:23:37 +01:00
Felix Lange
fde0ddb324 cmd/rlpdump: remove stray return 2015-01-06 12:23:36 +01:00
obscuren
117f66e823 Added license headers 2015-01-06 12:13:57 +01:00
CJentzsch
63d61cb380 added blockhash tests which return 0 2015-01-06 11:50:57 +01:00
obscuren
a26aecdfdb Updated WS API. Fixes #219. Closes #220 2015-01-06 11:44:22 +01:00
obscuren
47e6b2cef8 Allow extra to be set for mined blocks 2015-01-06 00:19:07 +01:00
obscuren
cc7f8f58e8 Limit block extra to 1024 2015-01-06 00:17:05 +01:00
obscuren
c9985bf563 Fixed peer window. Minor tweaks and fixes 2015-01-05 19:53:53 +01:00
Jeffrey Wilcke
22c0c5465a Merge pull request #235 from fjl/rlpdump
fixes for rlpdump
2015-01-05 17:48:04 +01:00
Jeffrey Wilcke
2cfbf76db8 Merge pull request #233 from fjl/rlpdump
cmd/rlpdump: new helper command
2015-01-05 17:42:52 +01:00
Felix Lange
ec4dee0fcd cmd/rlpdump: remove extra buffer 2015-01-05 17:42:20 +01:00
obscuren
952287db29 Updated tests 2015-01-05 17:40:23 +01:00
obscuren
b99b2c446c Precompiled contract & Depth change
* Added pre-compiled contract 0x04 (mem cpy)
* Changed depth error to return the gas instead of consuming
2015-01-05 17:39:42 +01:00
Felix Lange
04c0f7e15c cmd/rlpdump: add license header and synopsis 2015-01-05 17:38:39 +01:00
CJentzsch
128d417f47 protocol update about call depth 2015-01-05 17:26:11 +01:00
obscuren
d001479a47 unclean shutdown for now 2015-01-05 17:15:25 +01:00
obscuren
f16810c48e added shh back in 2015-01-05 17:12:52 +01:00
obscuren
66b05433b6 Merge branch 'ethersphere-eth.blockpool' into poc8 2015-01-05 17:12:19 +01:00
obscuren
6abf8ef78f Merge 2015-01-05 17:10:42 +01:00
Felix Lange
b907a5d765 cmd/rlpdump: new helper command 2015-01-05 13:45:38 +01:00
CJentzsch
0ace267c4f clear random tests due to protocol changes 2015-01-05 13:37:01 +01:00
obscuren
b0854fbff5 BlockManager => BlockProcessor 2015-01-05 11:22:02 +01:00
obscuren
c1dee15144 BlockManager => BlockProcessor 2015-01-05 00:18:44 +01:00
obscuren
987119cd4a Merge branch 'poc8' into docbranch 2015-01-04 14:39:15 +01:00
obscuren
08b03afa4b Version bump 2015-01-04 14:34:04 +01:00
obscuren
09841b1c9b Cleaned up some of that util 2015-01-04 14:20:16 +01:00
obscuren
bd0c267cbe Cleanup old code 2015-01-03 17:29:08 +01:00
obscuren
ca1b2a1a91 Changed prev_hash to block_hash, state transition now uses vm env
* PREVHASH => BLOCKHASH( N )
* State transition object uses VMEnv as it's query interface
* Updated vm.Enviroment has GetHash( n ) for BLOCKHASH instruction
* Added GetHash to xeth, core, utils & test environments
2015-01-03 17:18:43 +01:00
obscuren
1b90567546 Merge branch 'docbranch' of github.com-obscure:ethereum/go-ethereum into docbranch 2015-01-03 12:41:19 +01:00
obscuren
16f417f5af Fixed bug where logging could crash client during tx adding 2015-01-02 22:19:58 +01:00
obscuren
5c82fdc243 Make sure that the object exists 2015-01-02 22:18:23 +01:00
obscuren
55e55826ee Changed JUMP(I) behaviour.
* All jumps must land on a JUMPDEST instruction byte.
* The byte may not be part of a PUSH*
2015-01-02 17:35:55 +01:00
obscuren
530953050a Updated protocol version 2015-01-02 17:35:00 +01:00
obscuren
24f89f8bd9 Squashed commit of the following:
commit 2e75a216c7
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Fri Jan 2 17:05:20 2015 +0100

    new jumpdest interpretation

commit 7aab71f656
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Fri Jan 2 16:55:59 2015 +0100

    added complete exp tests

commit 3340f4dbfc
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Fri Jan 2 14:26:55 2015 +0100

    retuning gas prices of recursive bombs to test limits

commit 456b5791bb
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Fri Jan 2 14:08:55 2015 +0100

    more init code, systemoperations and transaction tests

commit 1f5552feb4
Author: wanderer <mjbecze@gmail.com>
Date:   Mon Dec 29 20:11:41 2014 -0500

    added balance tests

commit 4d37c1cea2
Author: wanderer <mjbecze@gmail.com>
Date:   Sat Dec 27 20:30:42 2014 -0500

    added trie tests for branches on
    detel

commit 2fdc7bfbd1
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Sat Dec 27 22:46:21 2014 +0100

    more random tests

commit 98fe404e6a
Merge: aafb5f7 8c34e93
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Tue Dec 23 16:36:13 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit aafb5f768b
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Tue Dec 23 16:35:35 2014 +0100

    first failing random tests

commit 8c34e93b51
Author: wanderer <mjbecze@gmail.com>
Date:   Tue Dec 23 10:01:20 2014 -0500

    added stackOverFlow test to initCode

commit 8a285d258a
Merge: a4ccc6e 6567f9d
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Sat Dec 20 13:08:18 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit a4ccc6e72e
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Sat Dec 20 13:07:54 2014 +0100

    CALLCODE <-> RETURN

commit 6567f9d0b2
Author: wanderer <mjbecze@gmail.com>
Date:   Thu Dec 18 23:39:30 2014 -0500

    add refund tests

commit 07cfec33f8
Author: wanderer <mjbecze@gmail.com>
Date:   Thu Dec 18 18:30:46 2014 -0500

    added trieTest anyorder

commit 86c3b8cfad
Merge: b227b10 71b5d6e
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 18 21:43:06 2014 +0100

    Merge branch 'develop' of https://github.com/ethereum/tests into develop

commit b227b10f5d
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 18 21:42:41 2014 +0100

    more refund tests

commit 71b5d6e0a3
Author: wanderer <mjbecze@gmail.com>
Date:   Thu Dec 18 12:13:55 2014 -0500

    updated index.js

commit aefcb9716e
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 18 09:31:43 2014 +0100

    transaction tests and refund tests

commit ccbf120c36
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Sat Dec 13 23:03:21 2014 +0100

    added stInitCodeTest.json

commit cbf5afdef8
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Fri Dec 12 22:03:54 2014 +0100

    update recursive create

commit a70c4b51a4
Author: Gav Wood <i@gavwood.com>
Date:   Fri Dec 12 17:22:41 2014 +0100

    Fix return tests.

commit f146467607
Author: Gav Wood <i@gavwood.com>
Date:   Fri Dec 12 16:33:51 2014 +0100

    Add test file.

commit c2bd8d1d7a
Author: Gav Wood <i@gavwood.com>
Date:   Fri Dec 12 14:27:38 2014 +0100

    Alter "" to null.

commit ce6344b770
Author: Gav Wood <i@gavwood.com>
Date:   Fri Dec 12 14:22:19 2014 +0100

    Trie testing.

commit 779f25d36c
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 11 22:59:56 2014 +0100

    first random test

commit 68175386c0
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 11 21:34:50 2014 +0100

    update gas prices

commit ad322fbb58
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Mon Dec 8 06:01:17 2014 +0100

    Log as array

commit f989f42618
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Fri Dec 5 15:12:12 2014 +0100

    state log tests

commit 4bc65d1129
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 4 18:18:49 2014 +0100

    add calldataload, codecopy, extcodecopy tests

commit 12cfae18e3
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Thu Dec 4 15:57:56 2014 +0100

    add calldataload test

commit 086caf3701
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Wed Dec 3 08:31:03 2014 +0100

    protocol update (CALLCODE <-> RETURN), topics in log are arrays not sets

commit e6c92673b9
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Mon Dec 1 21:14:08 2014 +0100

    update state tests with logs

commit 4089b809fb
Author: CJentzsch <jentzsch.software@gmail.com>
Date:   Mon Dec 1 18:19:40 2014 +0100

    update gas costs

commit cfdca62277
Merge: 2e5175e f59f89d
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Dec 1 18:04:51 2014 +0100

    Merge pull request #42 from negedzuregal/fix

    vmTest fix

commit f59f89d876
Author: alon muroch <alonmuroch@gmail.com>
Date:   Mon Dec 1 16:18:12 2014 +0100

    vmEnvironmentalInfoTest CALLDATACOPY, CODECOPY, EXTCODECOPY fix

commit 68da13fe3e
Author: alon muroch <alonmuroch@gmail.com>
Date:   Mon Dec 1 11:10:57 2014 +0100

    vmArithmeticTest exp fix

commit 2e5175e818
Author: ethers <ethereum@outlook.com>
Date:   Sun Nov 30 19:55:51 2014 +0100

    add vmLogTest

commit b5b9408e64
Author: Heiko Heiko <heiko@heiko.org>
Date:   Sun Nov 30 16:27:27 2014 +0100

    updated genesis to new header w/o min_gas_price

commit 8e69fbfa98
Author: ethers <ethereum@outlook.com>
Date:   Fri Nov 21 17:42:05 2014 -0800

    add special tests

commit 90f4f942e6
Author: ethers <ethereum@outlook.com>
Date:   Thu Nov 20 19:01:09 2014 -0800

    typo

commit c5e5228e0d
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 20 17:04:06 2014 +0100

    Removed log,post,out,gas,callcreates if exception occured

commit 9c0232a2b9
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 19 18:19:05 2014 +0100

    MakeMoney test

commit 3ba0007e86
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 19 16:23:04 2014 +0100

    Added log sections in all vmtests + log tests

commit d84be4fe07
Merge: c8497ab 76d2542
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 19 10:00:24 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit c8497ab257
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 19 10:00:02 2014 +0100

    new push32 test and renaming

commit 76d25420e1
Author: ethers <ethereum@outlook.com>
Date:   Mon Nov 17 18:59:30 2014 -0800

    adding test

commit 0be275e757
Merge: 1d42d1d d90868c
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 17 22:47:34 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit 1d42d1d7c6
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 17 22:46:51 2014 +0100

    fix ecrecover2

commit d90868c307
Merge: 1f38c8c 6dbcf6b
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 17 20:26:59 2014 +0100

    Merge pull request #39 from wanderer/develop

    added test for max call depth on creation

commit 6dbcf6b0d6
Author: wanderer <mjbecze@gmail.com>
Date:   Mon Nov 17 14:06:43 2014 -0500

    spelling fix

commit 6fc07a7f81
Author: wanderer <mjbecze@gmail.com>
Date:   Sat Nov 15 21:39:16 2014 -0500

    added test for max call depth on creation

commit 1f38c8c0a2
Merge: 279b284 cd85ca1
Author: martin becze <wanderer@users.noreply.github.com>
Date:   Fri Nov 14 20:10:21 2014 -0500

    Merge pull request #38 from wanderer/develop

    updated test  'jeff' in trietest.json

commit cd85ca17ed
Author: martin becze <wanderer@users.noreply.github.com>
Date:   Fri Nov 14 19:59:34 2014 -0500

    Update trietest.json

commit 279b284c0d
Merge: 89675a7 6cae937
Author: martin becze <wanderer@users.noreply.github.com>
Date:   Fri Nov 14 17:43:49 2014 -0500

    Merge pull request #37 from wanderer/develop

    Update trietest.json

commit 6cae937e5e
Author: martin becze <wanderer@users.noreply.github.com>
Date:   Fri Nov 14 17:20:03 2014 -0500

    Update trietest.json

    'emptyValues' should have the same root as 'puppy'

commit 89675a7153
Merge: f1de1cc 32f0c47
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 13 23:17:49 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit f1de1cc97a
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 13 23:17:13 2014 +0100

    Fix CallRecursiveBomb2

commit 32f0c47c68
Merge: ab50e76 3da90d0
Author: martin becze <wanderer@users.noreply.github.com>
Date:   Thu Nov 13 15:26:49 2014 -0500

    Merge pull request #36 from wanderer/develop

    converted back to arrary format

commit ab50e76652
Merge: d06b792 78f1e4a
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 13 07:52:35 2014 +0100

    Merge pull request #35 from ethers/delOld

    rename tests since they are valid opcodes that exist

commit 3da90d01f6
Author: wanderer <mjbecze@gmail.com>
Date:   Wed Nov 12 22:22:47 2014 -0500

    converted back to arrary format

commit 78f1e4a945
Author: ethers <ethereum@outlook.com>
Date:   Wed Nov 12 19:11:06 2014 -0800

    rename tests since they are valid opcodes that exist

commit d06b792cd0
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 12 07:00:17 2014 +0100

    minor change in CallSha256_1_nonzeroValue test

commit d434ecdcc3
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 12 06:56:31 2014 +0100

    Added CallSha256_1_nonzeroValue test

commit 2c06f34cc0
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 11 18:10:26 2014 +0100

    Store return value of call to precompiled contracts

commit 4b0c3b29ae
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 11 17:51:14 2014 +0100

    Fix gas cost for OOG calls

commit 63bcca7604
Author: Heiko Heiko <heiko@heiko.org>
Date:   Tue Nov 11 08:59:19 2014 +0100

    fix: genesis test

commit 6e0310c1ea
Merge: 30c266c 2927763
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 11 08:34:36 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit 30c266caff
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 11 08:33:59 2014 +0100

    jump to position outside code stops execution

commit 2927763d68
Author: ethers <ethereum@outlook.com>
Date:   Mon Nov 10 14:10:22 2014 -0800

    RandomTests were removed

commit a0fa91b2b8
Merge: 6092484 fcba866
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 10 22:22:05 2014 +0100

    Merge branch 'develop' of https://github.com/ethereum/tests into develop

commit 60924843f0
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 10 22:21:37 2014 +0100

    Unintended Exceptions work like OOG

commit fcba866721
Author: ethers <TODO>
Date:   Thu Nov 6 14:19:59 2014 -0800

    add StateTests

commit a441074ba4
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 6 17:54:36 2014 +0100

    Updated precompiled contracts test

commit 0afa72c82b
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 6 15:27:45 2014 +0100

    Added precompiledContracts tests

commit 6be83dd5a1
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 6 13:31:34 2014 +0100

    Update gas cost for PoC7

commit c18b8ab2d3
Merge: 66c2e1f 9a93258
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 6 09:19:53 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit 66c2e1f642
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Nov 6 09:19:22 2014 +0100

    Updated SIGNEXTEND tests

commit 9a9325822e
Author: ethers <TODO>
Date:   Wed Nov 5 16:20:26 2014 -0800

    part of 9b4e768 - Delete vmNamecoin.json

commit e229374f46
Merge: 189527e 9b4e768
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 5 20:59:49 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit 189527e563
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 5 20:59:20 2014 +0100

    added dynamic jump out of code

commit 9b4e768995
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 5 20:41:54 2014 +0100

    Delete vmNamecoin.json

commit 4669b5694b
Merge: a567fed aaba185
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 5 15:00:12 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit a567fedaa7
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Nov 5 14:59:08 2014 +0100

    added state systemOperationsTest

commit aaba185ceb
Merge: 79d7cbf fa782ae
Author: ethers <ethereum@outlook.com>
Date:   Tue Nov 4 12:15:40 2014 -0800

    Merge pull request #32 from ethers/indexjs

    updates needed per restructure

commit fa782aed93
Author: ethers <TODO>
Date:   Tue Nov 4 11:28:56 2014 -0800

    updates needed per restructure

commit 79d7cbfc4a
Merge: 9120274 1c1ba8d
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 4 13:32:11 2014 +0100

    Merge remote-tracking branch 'origin/develop' into develop

commit 9120274a46
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 4 13:31:27 2014 +0100

    Update tests to latest protocol changes (PoC7)

commit 1c1ba8d161
Merge: 014d370 3aebe53
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Nov 4 13:30:52 2014 +0100

    Merge pull request #31 from CJentzsch/develop

    Restructered tests in folders in accordance to test suites

commit 3aebe532e5
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 3 13:58:21 2014 +0100

    Updated vmNamecoin.json to new sstore prices

commit 8a0be21839
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 3 13:53:00 2014 +0100

    Added example state test

commit 83643addbc
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 3 13:36:25 2014 +0100

    removed systemoperationstests

commit 3930ca3a9a
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Nov 3 13:22:15 2014 +0100

    Restructered tests in folders in accordance to test suites

commit 014d370b5d
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 29 21:23:56 2014 +0100

    New SIGNEXTEND tets

commit 155d449be2
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 29 20:59:05 2014 +0100

    New tests for BNOT and SIGNEXTEND

commit c9eae764b8
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 28 12:58:27 2014 +0100

    Update SSTORE gas cost and BNOT instead of NEG

commit ad2a75ac58
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Oct 23 16:05:49 2014 +0200

    Added new recursive bombs

commit 834c52af64
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Thu Oct 23 12:01:05 2014 +0200

    Changing gas cost to zero at stackunderflow

commit c73a8a89d2
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Wed Oct 22 13:04:45 2014 +0200

    Reverted back to original value.

commit b9a8c92422
Author: martin becze <wanderer@users.noreply.github.com>
Date:   Tue Oct 21 17:02:52 2014 -0400

    fix spelling error

commit b48ae74af4
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 21 17:26:26 2014 +0200

    Added failing random tests

commit bee0a4100c
Merge: 5050d20 b315da6
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 21 17:15:05 2014 +0200

    Merge remote-tracking branch 'origin/master' into develop

commit 5050d20b4d
Merge: 7516685 ba35362
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Oct 20 20:18:20 2014 +0200

    Merge pull request #26 from wanderer/develop

    Add a package.json for node.js

commit ba35362876
Author: wanderer <mjbecze@gmail.com>
Date:   Sun Oct 19 23:59:47 2014 -0400

    turned tests into a node module

commit 751668571e
Author: ethers <ethereum@outlook.com>
Date:   Thu Oct 16 17:08:20 2014 -0700

    json was invalid and missing quotes

commit 0e687cee47
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Thu Oct 16 17:13:24 2014 +0200

    Update vmEnvironmentalInfoTest.json

commit 78a78e2e6c
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 15 14:19:11 2014 +0200

    updated genesis_hash

commit b315da618b
Merge: 7a7e198 0a76a3a
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 14 10:33:26 2014 +0200

    Merge pull request #23 from ethers/fix22

    numbers should be strings #22

commit 0a76a3a312
Author: ethers <ethereum@outlook.com>
Date:   Mon Oct 13 14:45:30 2014 -0700

    numbers should be strings #22

commit 1f67385f13
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Sat Oct 11 13:18:00 2014 +0200

    Added some MUL tests

commit 7a7e198395
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Sat Oct 11 13:11:59 2014 +0200

    Added some MUL tests

commit 46eb6283ae
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Sat Oct 11 12:18:13 2014 +0200

    tested new opcodes (JUMPDEST,CALLCODE) and created test for CALL/CREATE depth

commit 8d38d62d10
Author: Nick Savers <nicksavers@gmail.com>
Date:   Fri Oct 10 18:09:41 2014 +0200

    INVALID stops the operation and doesn't cost gas

commit ed6eba7c8e
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 8 19:08:48 2014 +0200

    Update + ABA recursive bomb which needs maximum recursion limit of 1024

commit 2d72050db1
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 8 14:37:18 2014 +0200

    Applied recent protocol changes (PoC7) to existin tests

commit dfe66cab3f
Merge: 4513623 1a67a96
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 8 11:05:51 2014 +0200

    Merge remote-tracking branch 'origin/develop'

    Conflicts:
    	genesishashestest.json

commit 1a67a96cff
Merge: a4f5f45 ffd6bc9
Author: vbuterin <v@buterin.com>
Date:   Tue Oct 7 15:10:23 2014 +0100

    Merge pull request #18 from CJentzsch/develop

    CallToNameRegistratorOutOfGas balance correction

commit ffd6bc97ad
Merge: a4f5f45 9779d67
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 7 15:47:34 2014 +0200

    Merge remote-tracking branch 'origin/develop' into develop

commit 9779d67b8c
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 7 15:45:53 2014 +0200

    CallToNameRegistratorOutOfGas balance correction

    Even if execution fails, the value gets transferred.

commit a4f5f45228
Merge: 49a9f47 b6d7cba
Author: vbuterin <v@buterin.com>
Date:   Tue Oct 7 14:13:12 2014 +0100

    Merge pull request #17 from CJentzsch/develop

    Added A calls B calls A contracts

commit b6d7cba499
Merge: 865cb40 49a9f47
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 7 15:02:51 2014 +0200

    Merge remote-tracking branch 'upstream/develop' into develop

commit 865cb4083d
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 7 15:02:36 2014 +0200

    Added A calls B calls A contracts

commit 49a9f47aec
Merge: 3b0ec43 94a493b
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Tue Oct 7 10:56:17 2014 +0200

    Merge pull request #16 from CJentzsch/develop

    corrected amount of used gas for CallToNameRegistratorOutOfGas

commit 94a493b0d9
Merge: 72853c4 3b0ec43
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 7 10:51:32 2014 +0200

    Merge remote-tracking branch 'upstream/develop' into develop

commit 72853c4382
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Oct 7 10:51:07 2014 +0200

    corrected amount of used gas for CallToNameRegistratorOutOfGas

commit 3b0ec436e4
Merge: aec3252 222068b
Author: vbuterin <v@buterin.com>
Date:   Tue Oct 7 05:52:43 2014 +0100

    Merge pull request #15 from CJentzsch/develop

    corrected tests and different style for storage

commit 222068b9ba
Merge: c169653 aec3252
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Oct 6 21:17:28 2014 +0200

    Merge remote-tracking branch 'upstream/develop' into develop

commit c1696531a6
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Oct 6 21:17:09 2014 +0200

    corrected tests and different style for storage

commit aec3252b8e
Merge: 25f9fd5 e17a909
Author: vbuterin <v@buterin.com>
Date:   Mon Oct 6 09:39:46 2014 +0100

    Merge pull request #14 from CJentzsch/develop

    corrected gas limit in vmSystemOperationsTest

commit e17a909f70
Merge: 33fcab5 25f9fd5
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Oct 6 10:31:51 2014 +0200

    Merge remote-tracking branch 'upstream/develop' into develop

commit 33fcab5727
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Oct 6 10:30:04 2014 +0200

    Bug fix, corrected gasLimit in vmSystemOperationsTest

commit 25f9fd542a
Author: Vitalik Buterin <v@buterin.com>
Date:   Sat Oct 4 15:47:00 2014 -0400

    one more vm test

commit 2d561a5373
Author: Vitalik Buterin <v@buterin.com>
Date:   Sat Oct 4 15:15:37 2014 -0400

    separated out vmtests

commit b0c48fa8d6
Merge: cb8261a 6cae166
Author: vbuterin <v@buterin.com>
Date:   Sat Oct 4 17:18:02 2014 +0100

    Merge pull request #13 from CJentzsch/develop

    Added comprehensive EVM test suite. All commands are tested.

commit 6cae166f6f
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 1 15:34:23 2014 +0200

    Delete tmp.json

commit 4ff906fbc2
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Wed Oct 1 14:06:32 2014 +0200

    corrected CALLSTATELESS tests

commit 5b3fee6806
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Sep 29 13:08:44 2014 +0200

    Completed vm tests. Added ADDMOD, MULMOD, POST, CALLSTATELESS

commit 9cdd218083
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Sat Sep 27 21:48:09 2014 +0200

    Added IOandFlowOperation-, PushDupSwap- and SystemOperations- tests. Removed empty storage from adresses.

commit 28ed968b46
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Sep 23 15:49:22 2014 +0200

    Added blockInfoTest

commit ffbd5a35b5
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Tue Sep 23 15:37:52 2014 +0200

    Added environmentalInfo- and sha3- test

commit 54c14f1ff3
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Mon Sep 22 13:06:57 2014 +0200

    Added bitwise logic operation test

commit d0af113aab
Author: Christoph Jentzsch <jentzsch.software@gmail.com>
Date:   Sat Sep 20 01:42:51 2014 +0200

    Added vm arithmetic test

commit cb8261a78b
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Fri Sep 19 13:15:44 2014 +0200

    Update genesishashestest.json

commit 4513623da1
Author: Maran <maran.hidskes@gmail.com>
Date:   Tue Jul 22 12:24:46 2014 +0200

    Update keyaddrtest to be valid JSON

commit e8cb5c221d
Author: Vitalik Buterin <v@buterin.com>
Date:   Mon Jul 21 23:30:33 2014 -0400

    Added next/prev trie test

commit 98823c04b3
Author: Vitalik Buterin <v@buterin.com>
Date:   Mon Jul 14 02:51:31 2014 -0400

    Replaced with deterministic test

commit 357eb21e4d
Author: Vitalik Buterin <v@buterin.com>
Date:   Sun Jul 13 16:12:56 2014 -0400

    Added my own random and namecoin tests (pyethereum)

commit 00cd0cce8f
Author: Gav Wood <i@gavwood.com>
Date:   Sat Jul 12 21:20:04 2014 +0200

    Output hex strings.

commit ddfa3af45d
Author: Gav Wood <i@gavwood.com>
Date:   Thu Jul 10 11:28:35 2014 +0100

    Everything a string.

commit d659f469a9
Author: Gav Wood <i@gavwood.com>
Date:   Thu Jul 10 10:16:25 2014 +0100

    Code fixes.

commit 5e83ea8228
Author: Gav Wood <i@gavwood.com>
Date:   Sun Jul 6 16:17:12 2014 +0200

    Prettier VM tests.

commit a09aae0efe
Author: Gav Wood <i@gavwood.com>
Date:   Sun Jul 6 15:46:01 2014 +0200

    Fix VM tests.

commit ec9a044a17
Merge: 4bb6461 5e0123f
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Fri Jul 4 15:56:52 2014 +0200

    Merge pull request #10 from romanman/patch-1

    Update vmtests.json

commit 5e0123fbe1
Author: romanman <roman.mandeleil@gmail.com>
Date:   Fri Jul 4 10:23:04 2014 +0100

    Update vmtests.json

commit 2b6da2f5f2
Author: romanman <roman.mandeleil@gmail.com>
Date:   Thu Jul 3 17:45:04 2014 +0100

    Update vmtests.json

    arith testcase updated

commit 4bb646117d
Merge: bba3898 a33b309
Author: Gav Wood <i@gavwood.com>
Date:   Wed Jul 2 19:43:22 2014 +0200

    Merge branch 'develop' of github.com:/ethereum/tests into develop

commit bba38980bd
Author: Gav Wood <i@gavwood.com>
Date:   Wed Jul 2 19:43:06 2014 +0200

    New tests.

commit a33b309d99
Author: Vitalik Buterin <v@buterin.com>
Date:   Wed Jul 2 10:14:05 2014 -0400

    Testing submodules

commit 50318217ca
Author: Vitalik Buterin <v@buterin.com>
Date:   Wed Jul 2 10:10:46 2014 -0400

    Testing submodules

commit 57fa655522
Author: Vitalik Buterin <v@buterin.com>
Date:   Wed Jul 2 10:09:08 2014 -0400

    Testing submodules

commit ea0eb0a8c8
Author: Gav Wood <i@gavwood.com>
Date:   Tue Jul 1 15:19:34 2014 +0200

    Latest genesis block.

commit 25bb76b69c
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Mon Jun 30 13:25:04 2014 +0200

    Reset

commit 74c6d8424e
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Mon Jun 30 12:10:06 2014 +0200

    Updated wrong test

commit 9ea3a60291
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Sat Jun 28 18:48:28 2014 +0200

    Fixed roots

commit 5fc3ac0e92
Author: Gav Wood <i@gavwood.com>
Date:   Sat Jun 28 18:40:06 2014 +0200

    Simple hex test.

commit edd3a00c2a
Author: Gav Wood <i@gavwood.com>
Date:   Sat Jun 28 18:22:18 2014 +0200

    Additional test for jeff. Now use the 0x... notation.

commit 5021e0dd83
Author: Gav Wood <i@gavwood.com>
Date:   Fri Jun 27 21:35:26 2014 +0200

    VM test framework updated.

commit c818d13202
Author: Gav Wood <i@gavwood.com>
Date:   Fri Jun 27 18:18:24 2014 +0200

    Removed arrays from Trie tests JSON as per conformance guide and changed
    vocabulary to match other tests.
    VM test updates.

commit 714770ffb3
Author: Gav Wood <i@gavwood.com>
Date:   Wed Jun 11 11:32:42 2014 +0100

    Added Gav's new address.

commit 9345bc13d4
Merge: a2257f3 78576dd
Author: Gav Wood <i@gavwood.com>
Date:   Fri May 30 17:50:38 2014 +0200

    Merge branch 'master' of github.com:ethereum/tests into develop

commit a2257f3471
Author: Gav Wood <i@gavwood.com>
Date:   Fri May 30 17:50:18 2014 +0200

    VM tests.

commit 78576dd3d3
Author: Heiko Heiko <heiko@heiko.org>
Date:   Fri May 30 17:19:09 2014 +0200

    changes based on new account structure nonce, balance, storage, code

commit 125839e848
Merge: 42e14ec 356a329
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Thu May 22 09:58:45 2014 +0200

    Merge pull request #5 from bkirwi/master

    Fix invalid JSON (removed trailing comma) and add test names

commit 356a3296bc
Author: Ben Kirwin <ben@kirw.in>
Date:   Thu May 22 00:20:48 2014 -0400

    Add some arbitrary test names

    This should now conform to the format specified in the README.

commit 42e14ec54f
Author: Chen Houwu <chenhouwu@gmail.com>
Date:   Wed May 21 23:27:40 2014 +0800

    revert to correct data

commit 4300197a74
Author: Chen Houwu <chenhouwu@gmail.com>
Date:   Wed May 21 22:42:23 2014 +0800

    fix: wrong sha3 hash because of the wrong rlp hex

commit a0d01b1a0b
Author: Chen Houwu <chenhouwu@gmail.com>
Date:   Wed May 21 22:29:53 2014 +0800

    fix: wrong rlp hex

commit 6bc2fc7405
Merge: 66bc366 c31a93c
Author: Jeffrey Wilcke <obscuren@users.noreply.github.com>
Date:   Wed May 21 14:11:37 2014 +0200

    Merge pull request #4 from ethers/master

    fix file name that seems to have been a typo

commit c31a93c27a
Author: ethers <ethereum@outlook.com>
Date:   Tue May 20 15:42:39 2014 -0700

    fix file name that seems to have been a typo

commit 66bc3665c1
Author: Heiko Heiko <heiko@heiko.org>
Date:   Tue May 20 17:36:35 2014 +0200

    fix: represent integers as strings

commit ede5499da6
Author: Heiko Heiko <heiko@heiko.org>
Date:   Tue May 20 17:21:09 2014 +0200

    add: current initial alloc and genesis hashes

commit 5131429abb
Author: Ben Kirwin <ben@kirw.in>
Date:   Mon May 19 11:18:31 2014 -0400

    Delete a comma

    This should now be parseable as JSON.

commit f44a859331
Author: Chen Houwu <chenhouwu@gmail.com>
Date:   Sun May 18 15:04:42 2014 +0800

    add: case when value is long, ensure it's not get rlp encoded as node

commit e1ae4ad449
Author: Gav Wood <i@gavwood.com>
Date:   Mon May 12 14:40:47 2014 +0100

    PoC-5 VM tests.

commit 2b6c136dda
Author: Vitalik Buterin <v@buterin.com>
Date:   Sun May 11 21:42:41 2014 -0400

    Moved txt to json

commit cbccbf977c
Merge: edbb8d4 45a0974
Author: Vitalik Buterin <v@buterin.com>
Date:   Thu May 8 21:54:48 2014 -0400

    New commit

commit edbb8d407e
Author: Vitalik Buterin <v@buterin.com>
Date:   Tue May 6 16:53:43 2014 -0400

    Removed unneeded test, added new tests

commit 45a0974f6f
Merge: 15dd8fd 5fd2a98
Author: Gav Wood <i@gavwood.com>
Date:   Sun Apr 27 12:53:47 2014 +0100

    Merge pull request #3 from autolycus/develop

    Fixed formatting and added test cases

commit 5fd2a98fcb
Author: Carl Allendorph <callendorph@gmail.com>
Date:   Sat Apr 19 13:26:14 2014 -0700

    Added some new test cases for the rlp encoding.

commit 4ba150954e
Author: Carl Allendorph <callendorph@gmail.com>
Date:   Sat Apr 19 12:48:42 2014 -0700

    Converted spaces to tabs to be compliant with the coding standards defined in cpp-ethereum

commit 15dd8fd794
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 28 12:54:47 2014 +0000

    RLP tests and Trie updates.

commit 33f80fef21
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 28 11:39:35 2014 +0000

    Hex encode tests done.

commit e1f5e12abb
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 28 11:22:49 2014 +0000

    Fix RLP tests.

commit f87ce15ad2
Author: Gav Wood <i@gavwood.com>
Date:   Thu Feb 27 13:28:11 2014 +0000

    Fix empty string.

commit c006ed4ffd
Author: Gav Wood <i@gavwood.com>
Date:   Mon Feb 24 10:24:39 2014 +0000

    Tests fix.

commit 510ff56363
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 21 18:54:08 2014 +0000

    Updated the tests.

commit a0ec843832
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 21 18:49:24 2014 +0000

    Moved over to new format, but RLP tests still need updating.

commit 660cd26f31
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 21 18:35:51 2014 +0000

    More docs.

commit 6ad14c1a15
Author: Gav Wood <i@gavwood.com>
Date:   Fri Feb 21 18:33:39 2014 +0000

    Added VM test suite.
    Added TODO.
    Renamed old files.

commit f91ad7b385
Author: Vitalik Buterin <v@buterin.com>
Date:   Wed Jan 8 11:26:58 2014 -0500

    update trie algorithm

commit 6da2954462
Merge: cc42246 131c610
Author: Vitalik Buterin <v@buterin.com>
Date:   Wed Jan 8 08:15:38 2014 -0500

    merge

commit cc4224675f
Author: Vitalik Buterin <v@buterin.com>
Date:   Tue Jan 7 14:35:26 2014 -0500

    Updated trie test

commit 131c610da6
Merge: 121632b 7613302
Author: vbuterin <v@buterin.com>
Date:   Wed Jan 1 06:40:54 2014 -0800

    Merge pull request #1 from obscuren/master

    Update trietest.txt

commit 7613302b49
Author: obscuren <obscuren@users.noreply.github.com>
Date:   Wed Jan 1 15:25:21 2014 +0100

    Update trietest.txt

    New proposed explanatory format

commit 121632bedd
Author: Vitalik Buterin <v@buterin.com>
Date:   Wed Jan 1 08:26:18 2014 -0500

    Added obscure's tests

commit ef6c5506c3
Author: Vitalik Buterin <v@buterin.com>
Date:   Tue Dec 31 19:04:48 2013 -0500

    Fixed tests a bit

commit 345e4bcfef
Merge: 2c81698 e4bbea4
Author: Vitalik Buterin <v@buterin.com>
Date:   Tue Dec 31 15:52:46 2013 -0500

    Merge branch 'master' of github.com:ethereum/tests

commit 2c81698f31
Author: Vitalik Buterin <v@buterin.com>
Date:   Mon Dec 30 21:09:40 2013 -0500

    Added first three tests

commit e4bbea400f
Author: vbuterin <v@buterin.com>
Date:   Mon Dec 30 18:09:03 2013 -0800

    Initial commit
2015-01-02 17:33:14 +01:00
CJentzsch
2e75a216c7 new jumpdest interpretation 2015-01-02 17:05:20 +01:00
CJentzsch
7aab71f656 added complete exp tests 2015-01-02 16:55:59 +01:00
obscuren
4dc7ee9087 Closure => Context 2015-01-02 16:14:12 +01:00
CJentzsch
3340f4dbfc retuning gas prices of recursive bombs to test limits 2015-01-02 14:26:55 +01:00
CJentzsch
456b5791bb more init code, systemoperations and transaction tests 2015-01-02 14:08:55 +01:00
obscuren
e2d1d832ef added nil check 2015-01-02 13:00:25 +01:00
obscuren
d336e24dce Removed the need of having a backend for the tx pool 2015-01-02 12:26:55 +01:00
obscuren
ae2c90cc28 Removed value check from tx validation 2015-01-02 12:24:36 +01:00
obscuren
6cf61039cf Added tests for valid transactions 2015-01-02 12:18:23 +01:00
obscuren
48d2a8b8ee Refactored tx pool and added extra fields to block
* chain manager sets td on block + td output w/ String
* added tx pool tests for removing/adding/validating
* tx pool now uses a set for txs instead of list.List
2015-01-02 12:09:38 +01:00
obscuren
477a6d426c Added a query interface for world state 2015-01-02 12:07:54 +01:00
obscuren
0972bdeda2 Fixed using new trie iterator API 2015-01-02 12:07:26 +01:00
obscuren
1cc86c07a0 Deleted 2015-01-02 11:16:52 +01:00
obscuren
1c7e8e9093 Set TD to block once processed 2015-01-02 11:16:42 +01:00
obscuren
b619b244c7 Fixed tests 2015-01-02 11:16:30 +01:00
obscuren
0fb1bcd321 Merge branch 'poc8' into docbranch 2015-01-02 10:30:27 +01:00
obscuren
a4dc12f12c Additional comments and added name to error output 2014-12-31 11:21:39 +01:00
obscuren
4547a05a68 Minor improvements
* Moved gas and mem size to its own function
2014-12-31 11:12:40 +01:00
obscuren
4b4e082102 JUMPI never 'require' checked. 2014-12-31 10:32:53 +01:00
caktux
1954b87819 bring back toHex 2014-12-30 11:59:33 -05:00
obscuren
77924757a8 Merge branch 'develop' into poc8 2014-12-30 17:16:35 +01:00
obscuren
16460b0048 Fixed gas check for vm test 2014-12-30 17:16:28 +01:00
obscuren
a9068aa8ff Merge branch 'develop' into poc8 2014-12-30 17:10:02 +01:00
obscuren
89244981a8 Additional checking on gas 2014-12-30 17:09:54 +01:00
obscuren
138ab26b8c SIGNEXTEND missing from stack check 2014-12-30 17:09:43 +01:00
obscuren
51a97c031f Merge branch 'develop' into poc8 2014-12-30 16:22:56 +01:00
obscuren
cc5e621fc4 updated tests 2014-12-30 16:18:46 +01:00
obscuren
2ebf33ac1c removed variable 2014-12-30 16:17:56 +01:00
obscuren
788d812a72 Merge branch 'develop' into poc8 2014-12-30 16:16:11 +01:00
obscuren
29c887ef2c Removed incorrect range check for push 2014-12-30 16:16:02 +01:00
obscuren
1085960ed8 fixed trie 2014-12-30 15:58:40 +01:00
obscuren
8df689bd44 Chain tests 2014-12-30 15:42:26 +01:00
obscuren
2f8a45cd8b Fixed chain test & added new chain 2014-12-30 13:32:01 +01:00
obscuren
ce68ac6959 Updated miner to new block api 2014-12-30 13:18:19 +01:00
wanderer
1f5552feb4 added balance tests 2014-12-29 20:12:29 -05:00
wanderer
4d37c1cea2 added trie tests for branches on
detel
2014-12-27 20:30:42 -05:00
CJentzsch
2fdc7bfbd1 more random tests 2014-12-27 22:46:21 +01:00
obscuren
dc7c584a4d export => import 2014-12-24 14:54:06 +01:00
obscuren
58d477f7a6 Fixed a bug where keys where serialised twice 2014-12-24 14:47:50 +01:00
obscuren
804af9658a merge 2014-12-24 11:31:45 +01:00
obscuren
9d429180f9 Merge branch 'hotfix/0.7.11' into develop 2014-12-24 11:31:08 +01:00
obscuren
771bfe9e78 Merge branch 'hotfix/0.7.11' 2014-12-24 11:30:13 +01:00
obscuren
c9f963a77e Bump 2014-12-24 11:30:04 +01:00
obscuren
7ba9fe4d5d Reset peer during download on disc 2014-12-24 11:29:58 +01:00
obscuren
fb1edd05f4 Removed the deferred reset 2014-12-24 11:20:43 +01:00
obscuren
780abaec98 Switched to new trie 2014-12-23 18:35:36 +01:00
CJentzsch
98fe404e6a Merge remote-tracking branch 'origin/develop' into develop 2014-12-23 16:36:13 +01:00
CJentzsch
aafb5f768b first failing random tests 2014-12-23 16:35:35 +01:00
wanderer
8c34e93b51 added stackOverFlow test to initCode 2014-12-23 10:01:20 -05:00
obscuren
f468a9a0e2 Enable websockets for mist. Closes #218 2014-12-23 15:47:08 +01:00
obscuren
1054c155db Moved import to utils 2014-12-23 15:37:03 +01:00
obscuren
7d2353f24d Close the file 2014-12-23 15:31:03 +01:00
obscuren
34f72ddb3d Decode from stream directly 2014-12-23 15:18:48 +01:00
obscuren
1382e8d84b Delete current chain for reset 2014-12-23 14:50:04 +01:00
obscuren
e2e3fa3d11 Updated Mist to use new blocks 2014-12-23 14:44:45 +01:00
obscuren
9e5257b83b Chain importer 2014-12-23 14:33:15 +01:00
obscuren
4cd79d8ddd Refactored block & Transaction
* Includes new rlp decoder
2014-12-23 13:48:44 +01:00
obscuren
4b52cd512d Removal of "debug" url :) 2014-12-22 15:01:52 +01:00
obscuren
e32f7baa0d Concat and pad data 2014-12-22 14:59:52 +01:00
obscuren
60b1f9629c Merge branch 'develop' into poc8 2014-12-22 14:46:32 +01:00
obscuren
4051c0333f Added whisper js api 2014-12-22 13:23:11 +01:00
obscuren
e42517754a updated ethereum.js 2014-12-22 11:57:13 +01:00
obscuren
a153b47c2b moved 2014-12-22 11:56:34 +01:00
Jeffrey Wilcke
e531c6fc6c Merge pull request #217 from ethereum/tests
Updated code coverage support & cleanup
2014-12-22 11:42:28 +01:00
obscuren
ed7e05fb2a Merge branch 'develop' into poc8 2014-12-22 10:58:30 +01:00
obscuren
8130df63ca updated whisper ui 2014-12-22 10:58:28 +01:00
Gav Wood
123098ce79 Lots of fixes. 2014-12-22 01:13:49 +01:00
Taylor Gerring
4fd4facf35 Remove old file 2014-12-21 14:54:51 -06:00
Taylor Gerring
43bf3b4a78 Move goveralls call to script 2014-12-21 14:46:32 -06:00
Taylor Gerring
05da381c15 Add coveralls coverage badge 2014-12-21 14:36:13 -06:00
Taylor Gerring
26bf95731b Use repo default branches 2014-12-21 14:31:19 -06:00
Taylor Gerring
03dc6ec0d4 Update travis go version to tip 2014-12-21 13:46:06 -06:00
Taylor Gerring
f7ec759ef0 inline dependency installation script 2014-12-21 13:34:48 -06:00
Taylor Gerring
7ddebd7a75 Exclude VM tests 2014-12-21 13:21:24 -06:00
Taylor Gerring
bab78bbeb6 Merge branch 'tests' of github.com:ethereum/go-ethereum into tests 2014-12-21 12:06:24 -06:00
Taylor Gerring
7a79428278 Update cover command installation 2014-12-21 12:05:59 -06:00
Taylor Gerring
1360f027d9 Merge pull request #216 from ethereum/develop
Update tests branch from develop
2014-12-21 11:42:32 -06:00
Taylor Gerring
b3629c6f62 remove temp coverage file 2014-12-21 11:19:33 -06:00
Taylor Gerring
176c98eb66 Updated tool import paths 2014-12-21 11:18:43 -06:00
obscuren
25d16f358a Merge branch 'develop' 2014-12-21 15:13:45 +01:00
obscuren
0e5aed63dd Updated QWhisper
* changed api
* general whisper debug interface
2014-12-21 15:06:35 +01:00
CJentzsch
8a285d258a Merge remote-tracking branch 'origin/develop' into develop 2014-12-20 13:08:18 +01:00
CJentzsch
a4ccc6e72e CALLCODE <-> RETURN 2014-12-20 13:07:54 +01:00
obscuren
125bdc3253 Merge branch 'develop' into poc8
Conflicts:
	cmd/ethereum/flags.go
2014-12-20 02:45:05 +01:00
obscuren
3983dd2428 Merge branch 'release/v0.7.10' 2014-12-20 02:34:12 +01:00
wanderer
6567f9d0b2 add refund tests 2014-12-18 23:39:30 -05:00
obscuren
75f0412f9d Merge branch 'ebuchman-badsig' into poc8 2014-12-19 00:33:32 +01:00
obscuren
207b6c50fb Merge branch 'badsig' of https://github.com/ebuchman/go-ethereum into ebuchman-badsig
Conflicts:
	core/transaction_pool.go
2014-12-19 00:33:05 +01:00
wanderer
07cfec33f8 added trieTest anyorder 2014-12-18 18:31:19 -05:00
obscuren
6e24b1587d Merge branch 'develop' into poc8 2014-12-19 00:19:02 +01:00
obscuren
22d29a6d52 merge 2014-12-19 00:02:55 +01:00
CJentzsch
86c3b8cfad Merge branch 'develop' of https://github.com/ethereum/tests into develop 2014-12-18 21:43:06 +01:00
CJentzsch
b227b10f5d more refund tests 2014-12-18 21:42:41 +01:00
wanderer
71b5d6e0a3 updated index.js 2014-12-18 12:13:55 -05:00
obscuren
0dc566124a Merge fixes 2014-12-18 13:22:59 +01:00
obscuren
721e8ae93f Merged develop 2014-12-18 13:19:41 +01:00
CJentzsch
aefcb9716e transaction tests and refund tests 2014-12-18 09:31:43 +01:00
obscuren
e6fdf0c9f7 Merge branch 'develop' into poc8 2014-12-18 00:12:51 +01:00
Jeffrey Wilcke
8da07e91e4 Merge pull request #213 from ethereum/develop
moved err check
2014-12-17 13:00:05 +01:00
obscuren
52b54631a4 Whisper watches fixes 2014-12-16 19:55:57 +01:00
Jeffrey Wilcke
e9db2d1b18 Merge pull request #15 from debris/master
changes from cpp-ethereum
2014-12-16 11:10:28 +01:00
obscuren
93edae280d doc desc 2014-12-15 22:50:38 +01:00
Jeffrey Wilcke
bb17591959 Merge pull request #211 from fjl/fix-server-disc
p2p: fix call to Server.removePeer
2014-12-15 22:50:05 +01:00
Felix Lange
aa3b91b802 p2p: fix call to Server.removePeer (might help with #209) 2014-12-15 22:36:59 +01:00
obscuren
b55fabc7be Removed debug message 2014-12-15 22:18:58 +01:00
obscuren
54605d8c8e During env open check for pub error which indicated unencrypted payload. 2014-12-15 21:55:00 +01:00
obscuren
52ca80bdd2 Fixed deref ptr
The gui already waits and shuts down ethereum. There was no need to wait
for an additional shutdown.
2014-12-15 21:53:50 +01:00
obscuren
0291eff99a Identity test 2014-12-15 21:52:50 +01:00
obscuren
c96e504adb Typo 2014-12-15 17:28:51 +01:00
obscuren
01a6db9324 Added whisper debug interface + whisper fixes 2014-12-15 17:14:02 +01:00
obscuren
993280ec03 Added whisper test 2014-12-15 17:09:27 +01:00
obscuren
6ff9d5770b Added whisper handler 2014-12-15 17:09:14 +01:00
obscuren
455241debb Removed goroutine from "Run" 2014-12-15 17:09:06 +01:00
obscuren
db89c3e1a3 Merge branch 'develop' into poc8 2014-12-15 16:13:08 +01:00
obscuren
56dac74f71 made mist in a compilable, workable state using the new refactored packages 2014-12-15 13:00:29 +01:00
obscuren
c7bc684909 Moved peer helper metheds 2014-12-15 12:35:21 +01:00
obscuren
96272e19a6 removed filter manager from base 2014-12-15 12:34:06 +01:00
obscuren
bd9088792b Merge branch 'develop' into ethersphere-ethp2p 2014-12-15 12:22:03 +01:00
obscuren
cdb2ebbdfa Added old filter. Needs some refactoring 2014-12-15 12:17:33 +01:00
obscuren
4b5ad31b3a WIP 2014-12-15 12:07:46 +01:00
obscuren
6c168c8f22 added protocol handler 2014-12-15 12:02:48 +01:00
obscuren
afc8b887ab added whisper 2014-12-15 12:01:55 +01:00
obscuren
f111fc0608 WIP 2014-12-15 11:38:09 +01:00
zelig
1d959cb0ca WIP 2014-12-15 11:37:01 +01:00
zelig
72290f67fe resolve merge conflict hell 2014-12-14 20:57:29 +00:00
zelig
4c89d5331f adapt blockpool/backend to use pow/ezp with pow.Block for VerifyPoW func 2014-12-14 20:53:20 +00:00
zelig
61940b2275 adapt cmd/cli to new backend
- new flag nat for nat support UPNP|PMP
- new flag pmp for PMP gateway IP
- add NatType to utils/cmd to get p2p.NAT from nat type string
- obsolete usepnp flag
- get rid of IsUpToDate and sleep in miner start
- ethereum constructor takes nat type, port, maxpeer
- add pubkey arg to client identity
2014-12-14 20:52:28 +00:00
zelig
e77b720ead blockmanager start/stop obsolete 2014-12-14 20:45:12 +00:00
zelig
7b39cc83cc adapt chain_manager to eth protocol interface
- add Status() to return td, currentblock hash, genesis hash
- GetChainHashesFromHash -> GetBlockHashesFromHash
2014-12-14 20:45:12 +00:00
zelig
01dc1c1394 blockpool rewritten , tests broken FIXME 2014-12-14 20:42:08 +00:00
zelig
4dfce4624d protocol
- new interface explicit backend components txPool, chainManager, blockPool
- added protoErrorDisconnect for blockpool callback (FIXME: handling peer disconnects)
2014-12-14 20:40:08 +00:00
zelig
5e4d77b2b8 initial commit for eth blockpool + test 2014-12-14 20:39:34 +00:00
zelig
2dd8f41147 eth protocol changes
- changed backend interface
- using callbacks for blockPool
- use rlp stream for lazy decoding
- use peer as logger
- add id (peer pubkey) to ethProtocol fields
- add testPeer to protocol test (temporary)
2014-12-14 20:37:07 +00:00
zelig
0add0c400f initial commit for eth-p2p integration 2014-12-14 20:34:28 +00:00
zelig
e847aaca3e remove wire package 2014-12-14 20:31:43 +00:00
zelig
7d02c4fdb7 remove old ethereum/p2p related top level files 2014-12-14 20:31:43 +00:00
zelig
d9b16c1197 new cli options
- nat UPNP|PMP
- gateway for PMP NAT
- obsolete usepnp
- add pubkey to client identity
2014-12-14 20:30:56 +00:00
zelig
ae7c1e3e55 adapt to new backend
- eth p2p pkgs
- new Ethereum initialiser
- no caps param
- use nat type
- add NatType func to map nat type string to p2p.NAT
- add pubkey to client identity
2014-12-14 20:30:56 +00:00
zelig
50e1dcc43a import eth pkg 2014-12-14 20:30:56 +00:00
zelig
d84810d89d add Status to retrieve TD, currentBlock, genesis for easy interface with eth/protocol 2014-12-14 20:30:56 +00:00
zelig
39d86a28e7 adapt to new eth pkg and p2p 2014-12-14 20:30:56 +00:00
zelig
5022a31889 add NewMinedBlockEvent 2014-12-14 20:27:06 +00:00
zelig
c2af10d256 transaction pool changes
- use eventer events to broadcast transactions
- CurrentTransactions -> GetTransactions
- add AddTransactions
2014-12-14 20:27:06 +00:00
zelig
b89ed8eb7b adapt javascript pkg to new backend, use SuggestPeer 2014-12-14 20:27:06 +00:00
zelig
118862f1ba adapt miner to new backend. use events to broadcast new mined blocks 2014-12-14 20:27:06 +00:00
zelig
148de1c875 adapt xeth pkg to new backend. FIXME JSPeer peer info 2014-12-14 20:27:06 +00:00
zelig
76070b4674 blockpool rewritten , tests broken FIXME 2014-12-14 20:27:06 +00:00
zelig
3308d82b23 add protocol error types specific to blockpool 2014-12-14 20:27:06 +00:00
zelig
c44e025898 protocol
- new interface explicit backend components txPool, chainManager, blockPool
- added protoErrorDisconnect for blockpool callback (FIXME: handling peer disconnects)
2014-12-14 20:27:06 +00:00
zelig
02017ed0e0 initial commit for new backend (eth.Ethereum) 2014-12-14 20:27:06 +00:00
zelig
4366fdfc13 initial commit for eth blockpool + test 2014-12-14 20:27:06 +00:00
zelig
d957dd2c9f eth protocol changes
- changed backend interface
- using callbacks for blockPool
- use rlp stream for lazy decoding
- use peer as logger
- add id (peer pubkey) to ethProtocol fields
- add testPeer to protocol test (temporary)
2014-12-14 20:27:06 +00:00
zelig
eb5cb04aa9 no logging in error (to be refactored into p2p) 2014-12-14 20:27:05 +00:00
zelig
e5aa38cb0f initial commit for eth-p2p integration 2014-12-14 20:27:05 +00:00
CJentzsch
ccbf120c36 added stInitCodeTest.json 2014-12-13 23:03:21 +01:00
CJentzsch
cbf5afdef8 update recursive create 2014-12-12 22:03:54 +01:00
Gav Wood
a70c4b51a4 Fix return tests. 2014-12-12 17:22:41 +01:00
Gav Wood
f146467607 Add test file. 2014-12-12 16:33:51 +01:00
Gav Wood
c2bd8d1d7a Alter "" to null. 2014-12-12 14:27:38 +01:00
Gav Wood
ce6344b770 Trie testing. 2014-12-12 14:22:19 +01:00
Jeffrey Wilcke
d899334bba Merge pull request #1 from Gustav-Simonsson/fix_reference_links
Update reference pdf links
2014-12-11 23:30:45 +01:00
CJentzsch
779f25d36c first random test 2014-12-11 22:59:56 +01:00
CJentzsch
68175386c0 update gas prices 2014-12-11 21:34:50 +01:00
Gustav Simonsson
ce796dcdbf Update reference pdf links 2014-12-11 13:25:01 +01:00
zelig
3e38f8af23 initial commit for eth blockpool + test 2014-12-10 14:51:47 +00:00
zelig
e74f9f27db eth protocol changes
- changed backend interface
- using callbacks for blockPool
- use rlp stream for lazy decoding
- use peer as logger
- add id (peer pubkey) to ethProtocol fields
- add testPeer to protocol test (temporary)
2014-12-10 14:51:47 +00:00
zelig
31a9fdced8 no logging in error (to be refactored into p2p) 2014-12-10 14:51:47 +00:00
zelig
47793b606c initial commit for eth-p2p integration 2014-12-10 14:51:47 +00:00
obscuren
6cf6981ed0 init 2014-12-10 00:00:52 +01:00
CJentzsch
ad322fbb58 Log as array 2014-12-08 06:01:17 +01:00
CJentzsch
f989f42618 state log tests 2014-12-05 15:12:12 +01:00
CJentzsch
4bc65d1129 add calldataload, codecopy, extcodecopy tests 2014-12-04 18:18:49 +01:00
CJentzsch
12cfae18e3 add calldataload test 2014-12-04 15:57:56 +01:00
CJentzsch
086caf3701 protocol update (CALLCODE <-> RETURN), topics in log are arrays not sets 2014-12-03 08:31:03 +01:00
CJentzsch
e6c92673b9 update state tests with logs 2014-12-01 21:14:08 +01:00
CJentzsch
4089b809fb update gas costs 2014-12-01 18:19:40 +01:00
Christoph Jentzsch
cfdca62277 Merge pull request #42 from negedzuregal/fix
vmTest fix
2014-12-01 18:04:51 +01:00
alon muroch
f59f89d876 vmEnvironmentalInfoTest CALLDATACOPY, CODECOPY, EXTCODECOPY fix 2014-12-01 16:18:12 +01:00
alon muroch
68da13fe3e vmArithmeticTest exp fix 2014-12-01 11:10:57 +01:00
ethers
2e5175e818 add vmLogTest 2014-11-30 19:55:51 +01:00
Heiko Heiko
b5b9408e64 updated genesis to new header w/o min_gas_price 2014-11-30 16:27:27 +01:00
Ethan Buchman
7c24cd790d fix panic on bad sender 2014-11-28 19:42:05 -05:00
ethers
8e69fbfa98 add special tests 2014-11-21 17:42:05 -08:00
ethers
90f4f942e6 typo 2014-11-20 19:01:09 -08:00
Christoph Jentzsch
c5e5228e0d Removed log,post,out,gas,callcreates if exception occured 2014-11-20 17:04:06 +01:00
Christoph Jentzsch
9c0232a2b9 MakeMoney test 2014-11-19 18:19:05 +01:00
Christoph Jentzsch
3ba0007e86 Added log sections in all vmtests + log tests 2014-11-19 16:23:04 +01:00
Christoph Jentzsch
d84be4fe07 Merge remote-tracking branch 'origin/develop' into develop 2014-11-19 10:00:24 +01:00
Christoph Jentzsch
c8497ab257 new push32 test and renaming 2014-11-19 10:00:02 +01:00
Marek Kotewicz
b402484e41 common changes 2014-11-18 13:59:17 +01:00
Marek Kotewicz
04845d42c0 Merge pull request #1 from cubedro/master
Fixed autoprovider bug
2014-11-18 09:08:15 +01:00
Marian Oancea
0d526d66b7 Updated version
Changed version from npm in order to publish the update
2014-11-18 09:23:16 +02:00
Marian OANCΞA
8fe16df6c9 Merge pull request #11 from debris/master
Update
2014-11-18 09:21:06 +02:00
Marian Oancea
1a9624af51 Fixed require web3 bug
Fixed error "Cannot find module './web3'" in autoprovider.js
2014-11-18 09:11:16 +02:00
Marian OANCΞA
8b7e59729f Merge pull request #10 from debris/abi
Abi
2014-11-18 09:00:01 +02:00
ethers
76d25420e1 adding test 2014-11-17 18:59:30 -08:00
Christoph Jentzsch
0be275e757 Merge remote-tracking branch 'origin/develop' into develop 2014-11-17 22:47:34 +01:00
Christoph Jentzsch
1d42d1d7c6 fix ecrecover2 2014-11-17 22:46:51 +01:00
Christoph Jentzsch
d90868c307 Merge pull request #39 from wanderer/develop
added test for max call depth on creation
2014-11-17 20:26:59 +01:00
wanderer
6dbcf6b0d6 spelling fix 2014-11-17 14:06:43 -05:00
Marek Kotewicz
27a8799e48 added eth_serpent, contract separated to another file 2014-11-17 15:46:46 +01:00
wanderer
6fc07a7f81 added test for max call depth on creation 2014-11-15 21:39:59 -05:00
martin becze
1f38c8c0a2 Merge pull request #38 from wanderer/develop
updated test  'jeff' in trietest.json
2014-11-14 20:10:21 -05:00
martin becze
cd85ca17ed Update trietest.json 2014-11-14 19:59:34 -05:00
martin becze
279b284c0d Merge pull request #37 from wanderer/develop
Update trietest.json
2014-11-14 17:43:49 -05:00
martin becze
6cae937e5e Update trietest.json
'emptyValues' should have the same root as 'puppy'
2014-11-14 17:20:03 -05:00
Jeffrey Wilcke
f6ee8e52dd Merge pull request #13 from frewsxcv/master
Enable JSHint linting
2014-11-14 20:24:55 +01:00
Corey Farwell
08f2dde45a Enable JSHint linting 2014-11-14 14:00:19 -05:00
Jeffrey Wilcke
42713c6e99 Merge pull request #12 from debris/master
simplifie contract creation && calls, improved added examples
2014-11-14 17:20:05 +01:00
Jeffrey Wilcke
7ffba22f2d Merge pull request #10 from cubedro/master
NPM module with minification for browser integration.
2014-11-14 17:16:28 +01:00
Jeffrey Wilcke
60198a05b9 Merge pull request #11 from ethereum/revert-6-master
Revert "Run JSHint on all code using Travis CI"
2014-11-14 17:08:47 +01:00
Jeffrey Wilcke
6b8b1259e2 Revert "Run JSHint on all code using Travis CI" 2014-11-14 17:08:29 +01:00
Jeffrey Wilcke
c966a5c17e Merge pull request #6 from frewsxcv/master
Run JSHint on all code using Travis CI
2014-11-14 17:07:38 +01:00
Marek Kotewicz
ea8db7a4ae improved contracts interface 2014-11-14 13:11:47 +01:00
Christoph Jentzsch
89675a7153 Merge remote-tracking branch 'origin/develop' into develop 2014-11-13 23:17:49 +01:00
Christoph Jentzsch
f1de1cc97a Fix CallRecursiveBomb2 2014-11-13 23:17:13 +01:00
martin becze
32f0c47c68 Merge pull request #36 from wanderer/develop
converted back to arrary format
2014-11-13 15:26:49 -05:00
Marek Kotewicz
8aaec1d98f improved example 2014-11-13 19:28:58 +01:00
Marek Kotewicz
b1428555d1 added storageAt 2014-11-13 18:29:31 +01:00
Marek Kotewicz
0e67fcd361 contract object 2014-11-13 12:24:34 +01:00
Christoph Jentzsch
ab50e76652 Merge pull request #35 from ethers/delOld
rename tests since they are valid opcodes that exist
2014-11-13 07:52:35 +01:00
wanderer
3da90d01f6 converted back to arrary format 2014-11-12 22:22:47 -05:00
Marek Kotewicz
d99fea2db6 abi output formatting 2014-11-13 04:21:51 +01:00
ethers
78f1e4a945 rename tests since they are valid opcodes that exist 2014-11-12 19:11:06 -08:00
Marek Kotewicz
7ce63d32b2 qt version also requires abi 2014-11-12 20:56:21 +01:00
Marek Kotewicz
3451f26086 changes to make everything work 2014-11-12 20:39:13 +01:00
Marek Kotewicz
05290d5547 abi, the beginning 2014-11-12 18:59:29 +01:00
Christoph Jentzsch
d06b792cd0 minor change in CallSha256_1_nonzeroValue test 2014-11-12 07:00:17 +01:00
Christoph Jentzsch
d434ecdcc3 Added CallSha256_1_nonzeroValue test 2014-11-12 06:56:31 +01:00
Christoph Jentzsch
2c06f34cc0 Store return value of call to precompiled contracts 2014-11-11 18:10:26 +01:00
Christoph Jentzsch
4b0c3b29ae Fix gas cost for OOG calls 2014-11-11 17:51:14 +01:00
Marian OANCΞA
dc100f85b3 Merge pull request #9 from debris/autoprovider
common fixes
2014-11-11 17:31:04 +02:00
Marek Kotewicz
0316490c54 common fixes 2014-11-11 16:29:53 +01:00
Marian OANCΞA
d85cef557b Merge pull request #8 from debris/autoprovider
Autoprovider
2014-11-11 17:20:53 +02:00
Marek Kotewicz
838ca2fd93 autoprovider, buildQt not builds only necessery files, fixed gulpfile 2014-11-11 15:47:58 +01:00
Marek Kotewicz
84b36a7193 retabed files 2014-11-11 11:46:46 +01:00
Marian Oancea
dea68f073e Merge branch 'debris-subprotocol_prefix_merge' 2014-11-11 12:15:36 +02:00
Marian Oancea
7af9cc70d0 fixed merge conflicts 2014-11-11 12:11:06 +02:00
Marek Kotewicz
4b876168f4 gulp qt task 2014-11-11 10:45:38 +01:00
Marek Kotewicz
d92a7527db merged subprotocol prefix 2014-11-11 10:30:21 +01:00
Heiko Heiko
63bcca7604 fix: genesis test 2014-11-11 08:59:19 +01:00
Christoph Jentzsch
6e0310c1ea Merge remote-tracking branch 'origin/develop' into develop 2014-11-11 08:34:36 +01:00
Christoph Jentzsch
30c266caff jump to position outside code stops execution 2014-11-11 08:33:59 +01:00
ethers
2927763d68 RandomTests were removed 2014-11-10 14:10:22 -08:00
Christoph Jentzsch
a0fa91b2b8 Merge branch 'develop' of https://github.com/ethereum/tests into develop 2014-11-10 22:22:05 +01:00
Christoph Jentzsch
60924843f0 Unintended Exceptions work like OOG 2014-11-10 22:21:37 +01:00
Marian Oancea
720365859c Changed npm & bower version
Changed version for next npm publish
2014-11-10 15:26:10 +02:00
Marian Oancea
d95e2b7999 Fixed jshint warnings 2014-11-10 14:53:35 +02:00
Marian Oancea
6fc5d8e81e Prepare for PR
changed repo urls from package.json, bower.json and readme
2014-11-10 14:31:53 +02:00
Marian OANCΞA
67e3eff806 Merge pull request #6 from cubedro/develop
Changes from debris
2014-11-10 14:10:25 +02:00
Marian OANCΞA
f5024b4926 Merge pull request #5 from cubedro/debris-error_handling_fix
Debris error handling fix
2014-11-10 14:09:21 +02:00
Marian Oancea
c1b2595deb fix merge conflicts 2014-11-10 14:07:06 +02:00
Marian Oancea
512d4ca6a4 Merge branch 'debris-error_handling_fix' into develop 2014-11-10 14:00:02 +02:00
Marian Oancea
c91e4afe6c fix merge conflicts 2014-11-10 13:57:49 +02:00
Marian Oancea
a2d8b89289 Added npm version 2014-11-09 21:30:27 +02:00
Marek Kotewicz
8ca991ecd2 corresponding changes from cpp-ethereum 2014-11-07 14:36:07 +01:00
Marek Kotewicz
e3ad9be4c8 missing semicolons 2014-11-07 14:07:01 +01:00
Marek Kotewicz
0d6479e1d6 proper error handling proposal 2014-11-07 14:03:46 +01:00
ethers
fcba866721 add StateTests 2014-11-06 14:19:59 -08:00
Marian Oancea
3270b432bc Refactoring
Removed browser fixes
Updated gulp to bypass native browser objects
Added source map for dist
2014-11-06 22:51:37 +02:00
Christoph Jentzsch
a441074ba4 Updated precompiled contracts test 2014-11-06 17:54:36 +01:00
Christoph Jentzsch
0afa72c82b Added precompiledContracts tests 2014-11-06 15:27:45 +01:00
Christoph Jentzsch
6be83dd5a1 Update gas cost for PoC7 2014-11-06 13:31:34 +01:00
Christoph Jentzsch
c18b8ab2d3 Merge remote-tracking branch 'origin/develop' into develop 2014-11-06 09:19:53 +01:00
Christoph Jentzsch
66c2e1f642 Updated SIGNEXTEND tests 2014-11-06 09:19:22 +01:00
ethers
9a9325822e part of 9b4e768 - Delete vmNamecoin.json 2014-11-05 16:20:26 -08:00
Marian Oancea
bd14b4d23e node < 0.10 fails travis build => remove 0.6 & 0.8
from travis.yml
2014-11-06 01:48:52 +02:00
Marian Oancea
4402a7d817 gulp >= 3.4.0 2014-11-06 00:49:50 +02:00
Marian Oancea
5871d1e359 Updated all dependency versions 2014-11-06 00:44:40 +02:00
Marian Oancea
2f33a8c657 Update dependencies to pass travis build 2014-11-06 00:37:07 +02:00
Marian Oancea
6dc7be6cd1 Update dependencies & travis.yml 2014-11-06 00:24:10 +02:00
Marian Oancea
7d6164b351 updated travis.yml 2014-11-05 23:31:54 +02:00
Marian Oancea
44ab30f628 more json fixes 2014-11-05 23:07:13 +02:00
Marian Oancea
dcae30c1e4 updated bower.json ignore 2014-11-05 22:58:06 +02:00
Marian Oancea
f281a362f0 bower small fix 2014-11-05 22:37:00 +02:00
Marian Oancea
c402dad6fa Updated bower.json & Readme 2014-11-05 22:33:28 +02:00
Christoph Jentzsch
e229374f46 Merge remote-tracking branch 'origin/develop' into develop 2014-11-05 20:59:49 +01:00
Christoph Jentzsch
189527e563 added dynamic jump out of code 2014-11-05 20:59:20 +01:00
Christoph Jentzsch
9b4e768995 Delete vmNamecoin.json 2014-11-05 20:41:54 +01:00
Marian Oancea
45d0d72138 Updated package.json 2014-11-05 20:12:21 +02:00
Marian Oancea
15088d7ebe Fixed indent
Fixed indent so we can compare differences in PR.
2014-11-05 19:52:52 +02:00
Marian Oancea
4be4db5e6c Converted to node module
Converted to npm package
Added brower
Added browserify with minification
Updated Readme
2014-11-05 19:46:01 +02:00
Christoph Jentzsch
4669b5694b Merge remote-tracking branch 'origin/develop' into develop 2014-11-05 15:00:12 +01:00
Christoph Jentzsch
a567fedaa7 added state systemOperationsTest 2014-11-05 14:59:08 +01:00
ethers
aaba185ceb Merge pull request #32 from ethers/indexjs
updates needed per restructure
2014-11-04 12:15:40 -08:00
ethers
fa782aed93 updates needed per restructure 2014-11-04 11:28:56 -08:00
Marian OANCΞA
3e174a0879 Merge pull request #1 from cubedro/example
example
2014-11-04 21:26:14 +02:00
Christoph Jentzsch
79d7cbfc4a Merge remote-tracking branch 'origin/develop' into develop 2014-11-04 13:32:11 +01:00
Christoph Jentzsch
9120274a46 Update tests to latest protocol changes (PoC7) 2014-11-04 13:31:27 +01:00
Christoph Jentzsch
1c1ba8d161 Merge pull request #31 from CJentzsch/develop
Restructered tests in folders in accordance to test suites
2014-11-04 13:30:52 +01:00
Marek Kotewicz
0cdef3376d example 2014-11-03 17:46:56 +01:00
Christoph Jentzsch
3aebe532e5 Updated vmNamecoin.json to new sstore prices 2014-11-03 13:58:21 +01:00
Christoph Jentzsch
8a0be21839 Added example state test 2014-11-03 13:53:00 +01:00
Christoph Jentzsch
83643addbc removed systemoperationstests 2014-11-03 13:36:25 +01:00
Christoph Jentzsch
3930ca3a9a Restructered tests in folders in accordance to test suites 2014-11-03 13:22:15 +01:00
Marek Kotewicz
b0e11826e5 lgpl 2014-11-03 12:40:57 +01:00
Corey Farwell
e3998e30ba Don't run 'npm test' 2014-11-02 22:00:13 -05:00
Corey Farwell
51d79f3e3b Fix JSHint errors 2014-11-02 21:56:45 -05:00
Corey Farwell
b773e57490 Enable Travis CI 2014-11-02 21:49:23 -05:00
Marek Kotewicz
c8307a9e44 license 2014-10-31 14:12:05 +01:00
Jeffrey Wilcke
e84fa8d4e6 transacton => transaction 2014-10-30 23:36:06 +01:00
Jeffrey Wilcke
f11b5f3e40 Added account prop 2014-10-30 22:20:22 +01:00
Jeffrey Wilcke
5538ff7252 Fixed Qt provider
* postData => postMessage
* JSON.parse parsed wrong data on 'onmessage'
2014-10-30 22:17:50 +01:00
Jeffrey Wilcke
aca9a41fcf Merge pull request #1 from debris/master
Http JSON-RPC provider, http polling, little refactor, whisper
2014-10-30 21:35:40 +01:00
Christoph Jentzsch
014d370b5d New SIGNEXTEND tets 2014-10-29 21:23:56 +01:00
Christoph Jentzsch
155d449be2 New tests for BNOT and SIGNEXTEND 2014-10-29 20:59:05 +01:00
Marek Kotewicz
cb607b4911 changes to make whisper working 2014-10-29 17:14:59 +01:00
Marek Kotewicz
31c6159019 filters refactored 2014-10-29 14:45:39 +01:00
Marek Kotewicz
9adb625846 polling whisper in progress 2014-10-29 12:44:50 +01:00
Marek Kotewicz
0b10cbd713 http renamed to httprpc 2014-10-28 16:53:31 +01:00
Marek Kotewicz
3119be908c db and shh 2014-10-28 13:42:55 +01:00
Christoph Jentzsch
c9eae764b8 Update SSTORE gas cost and BNOT instead of NEG 2014-10-28 12:58:27 +01:00
Marek Kotewicz
28d4250866 cleaner promises 2014-10-28 10:43:12 +01:00
Christoph Jentzsch
ad2a75ac58 Added new recursive bombs 2014-10-23 16:05:49 +02:00
Marek Kotewicz
66e439b6f4 http polling 2014-10-23 14:11:57 +02:00
Christoph Jentzsch
834c52af64 Changing gas cost to zero at stackunderflow 2014-10-23 12:01:05 +02:00
Marek Kotewicz
f9ca054314 warning when provider is not set 2014-10-22 16:21:38 +02:00
Marek Kotewicz
f7c9c8928e messageHandler expects object instead of string 2014-10-22 16:12:41 +02:00
Marek Kotewicz
ea3048421f block, transaction, uncle by hash and number separately 2014-10-22 15:58:24 +02:00
Jeffrey Wilcke
c73a8a89d2 Reverted back to original value. 2014-10-22 13:04:45 +02:00
Marek Kotewicz
5cd93a0618 http provider 2014-10-22 11:41:48 +02:00
martin becze
b9a8c92422 fix spelling error 2014-10-21 17:02:52 -04:00
Christoph Jentzsch
b48ae74af4 Added failing random tests 2014-10-21 17:26:26 +02:00
Christoph Jentzsch
bee0a4100c Merge remote-tracking branch 'origin/master' into develop 2014-10-21 17:15:05 +02:00
obscuren
eef4cd1b64 Updated properties 2014-10-21 00:49:33 +02:00
obscuren
ac7994d8c7 Updated readme 2014-10-21 00:41:27 +02:00
obscuren
8a7d1a69b3 Fixed setting providers to the right object 2014-10-21 00:37:58 +02:00
obscuren
76b20be2ea Qt provider 2014-10-21 00:26:34 +02:00
obscuren
74cab14b8d Moved WebSocketProvider 2014-10-21 00:15:10 +02:00
obscuren
c8aa5feb14 Removed Key 2014-10-21 00:14:58 +02:00
obscuren
590c393680 Updated according to the new Generic JSON RPC API 2014-10-21 00:14:41 +02:00
Christoph Jentzsch
5050d20b4d Merge pull request #26 from wanderer/develop
Add a package.json for node.js
2014-10-20 20:18:20 +02:00
wanderer
ba35362876 turned tests into a node module 2014-10-19 23:59:47 -04:00
ethers
751668571e json was invalid and missing quotes 2014-10-16 17:08:20 -07:00
Jeffrey Wilcke
0e687cee47 Update vmEnvironmentalInfoTest.json 2014-10-16 17:13:24 +02:00
Christoph Jentzsch
78a78e2e6c updated genesis_hash 2014-10-15 14:19:11 +02:00
Christoph Jentzsch
b315da618b Merge pull request #23 from ethers/fix22
numbers should be strings #22
2014-10-14 10:33:26 +02:00
ethers
0a76a3a312 numbers should be strings #22 2014-10-13 14:45:30 -07:00
Christoph Jentzsch
1f67385f13 Added some MUL tests 2014-10-11 13:18:00 +02:00
Christoph Jentzsch
7a7e198395 Added some MUL tests 2014-10-11 13:11:59 +02:00
Christoph Jentzsch
46eb6283ae tested new opcodes (JUMPDEST,CALLCODE) and created test for CALL/CREATE depth 2014-10-11 12:18:13 +02:00
Nick Savers
8d38d62d10 INVALID stops the operation and doesn't cost gas 2014-10-10 18:09:41 +02:00
Christoph Jentzsch
ed6eba7c8e Update + ABA recursive bomb which needs maximum recursion limit of 1024 2014-10-08 19:08:48 +02:00
Christoph Jentzsch
2d72050db1 Applied recent protocol changes (PoC7) to existin tests 2014-10-08 14:37:18 +02:00
Christoph Jentzsch
dfe66cab3f Merge remote-tracking branch 'origin/develop'
Conflicts:
	genesishashestest.json
2014-10-08 11:05:51 +02:00
vbuterin
1a67a96cff Merge pull request #18 from CJentzsch/develop
CallToNameRegistratorOutOfGas balance correction
2014-10-07 15:10:23 +01:00
Christoph Jentzsch
ffd6bc97ad Merge remote-tracking branch 'origin/develop' into develop 2014-10-07 15:47:34 +02:00
Christoph Jentzsch
9779d67b8c CallToNameRegistratorOutOfGas balance correction
Even if execution fails, the value gets transferred.
2014-10-07 15:45:53 +02:00
vbuterin
a4f5f45228 Merge pull request #17 from CJentzsch/develop
Added A calls B calls A contracts
2014-10-07 14:13:12 +01:00
Christoph Jentzsch
b6d7cba499 Merge remote-tracking branch 'upstream/develop' into develop 2014-10-07 15:02:51 +02:00
Christoph Jentzsch
865cb4083d Added A calls B calls A contracts 2014-10-07 15:02:36 +02:00
Jeffrey Wilcke
49a9f47aec Merge pull request #16 from CJentzsch/develop
corrected amount of used gas for CallToNameRegistratorOutOfGas
2014-10-07 10:56:17 +02:00
Christoph Jentzsch
94a493b0d9 Merge remote-tracking branch 'upstream/develop' into develop 2014-10-07 10:51:32 +02:00
Christoph Jentzsch
72853c4382 corrected amount of used gas for CallToNameRegistratorOutOfGas 2014-10-07 10:51:07 +02:00
vbuterin
3b0ec436e4 Merge pull request #15 from CJentzsch/develop
corrected tests and different style for storage
2014-10-07 05:52:43 +01:00
Christoph Jentzsch
222068b9ba Merge remote-tracking branch 'upstream/develop' into develop 2014-10-06 21:17:28 +02:00
Christoph Jentzsch
c1696531a6 corrected tests and different style for storage 2014-10-06 21:17:09 +02:00
obscuren
c95dfec5e4 push data instead of assign 2014-10-06 19:26:51 +02:00
vbuterin
aec3252b8e Merge pull request #14 from CJentzsch/develop
corrected gas limit in vmSystemOperationsTest
2014-10-06 09:39:46 +01:00
Christoph Jentzsch
e17a909f70 Merge remote-tracking branch 'upstream/develop' into develop 2014-10-06 10:31:51 +02:00
Christoph Jentzsch
33fcab5727 Bug fix, corrected gasLimit in vmSystemOperationsTest 2014-10-06 10:30:04 +02:00
Vitalik Buterin
25f9fd542a one more vm test 2014-10-04 15:47:00 -04:00
Vitalik Buterin
2d561a5373 separated out vmtests 2014-10-04 15:15:37 -04:00
vbuterin
b0c48fa8d6 Merge pull request #13 from CJentzsch/develop
Added comprehensive EVM test suite. All commands are tested.
2014-10-04 17:18:02 +01:00
obscuren
3bc238b1ce Added eth providers
An ethereum provider provides an interface from which communication can
be done.
2014-10-02 10:56:22 +02:00
Christoph Jentzsch
6cae166f6f Delete tmp.json 2014-10-01 15:34:23 +02:00
Christoph Jentzsch
4ff906fbc2 corrected CALLSTATELESS tests 2014-10-01 14:06:32 +02:00
obscuren
a3c66b2740 How to spawn a websocket node 2014-09-30 22:58:09 +02:00
obscuren
0cae9c3c1b Readme 2014-09-30 22:55:07 +02:00
obscuren
68ccbefc94 init 2014-09-30 22:51:53 +02:00
Christoph Jentzsch
5b3fee6806 Completed vm tests. Added ADDMOD, MULMOD, POST, CALLSTATELESS 2014-09-29 13:08:44 +02:00
Christoph Jentzsch
9cdd218083 Added IOandFlowOperation-, PushDupSwap- and SystemOperations- tests. Removed empty storage from adresses. 2014-09-27 21:48:09 +02:00
Christoph Jentzsch
28ed968b46 Added blockInfoTest 2014-09-23 15:49:22 +02:00
Christoph Jentzsch
ffbd5a35b5 Added environmentalInfo- and sha3- test 2014-09-23 15:37:52 +02:00
Christoph Jentzsch
54c14f1ff3 Added bitwise logic operation test 2014-09-22 13:06:57 +02:00
Christoph Jentzsch
d0af113aab Added vm arithmetic test 2014-09-20 01:42:51 +02:00
Jeffrey Wilcke
cb8261a78b Update genesishashestest.json 2014-09-19 13:15:44 +02:00
Maran
4513623da1 Update keyaddrtest to be valid JSON 2014-07-22 12:24:46 +02:00
Vitalik Buterin
e8cb5c221d Added next/prev trie test 2014-07-21 23:30:33 -04:00
Vitalik Buterin
98823c04b3 Replaced with deterministic test 2014-07-14 02:51:31 -04:00
Vitalik Buterin
357eb21e4d Added my own random and namecoin tests (pyethereum) 2014-07-13 16:12:56 -04:00
Gav Wood
00cd0cce8f Output hex strings. 2014-07-12 21:20:04 +02:00
Gav Wood
ddfa3af45d Everything a string. 2014-07-10 11:28:35 +01:00
Gav Wood
d659f469a9 Code fixes. 2014-07-10 10:16:25 +01:00
Gav Wood
5e83ea8228 Prettier VM tests. 2014-07-06 16:17:12 +02:00
Gav Wood
a09aae0efe Fix VM tests. 2014-07-06 15:46:01 +02:00
Jeffrey Wilcke
ec9a044a17 Merge pull request #10 from romanman/patch-1
Update vmtests.json
2014-07-04 15:56:52 +02:00
romanman
5e0123fbe1 Update vmtests.json 2014-07-04 10:23:04 +01:00
romanman
2b6da2f5f2 Update vmtests.json
arith testcase updated
2014-07-03 17:45:04 +01:00
Gav Wood
4bb646117d Merge branch 'develop' of github.com:/ethereum/tests into develop 2014-07-02 19:43:22 +02:00
Gav Wood
bba38980bd New tests. 2014-07-02 19:43:06 +02:00
Vitalik Buterin
a33b309d99 Testing submodules 2014-07-02 10:14:05 -04:00
Vitalik Buterin
50318217ca Testing submodules 2014-07-02 10:10:46 -04:00
Vitalik Buterin
57fa655522 Testing submodules 2014-07-02 10:09:08 -04:00
Gav Wood
ea0eb0a8c8 Latest genesis block. 2014-07-01 15:19:34 +02:00
Jeffrey Wilcke
25bb76b69c Reset 2014-06-30 13:25:04 +02:00
Jeffrey Wilcke
74c6d8424e Updated wrong test 2014-06-30 12:10:06 +02:00
Jeffrey Wilcke
9ea3a60291 Fixed roots 2014-06-28 18:48:28 +02:00
Gav Wood
5fc3ac0e92 Simple hex test. 2014-06-28 18:40:06 +02:00
Gav Wood
edd3a00c2a Additional test for jeff. Now use the 0x... notation. 2014-06-28 18:22:18 +02:00
Gav Wood
5021e0dd83 VM test framework updated. 2014-06-27 21:35:26 +02:00
Gav Wood
c818d13202 Removed arrays from Trie tests JSON as per conformance guide and changed
vocabulary to match other tests.
VM test updates.
2014-06-27 18:18:24 +02:00
Gav Wood
714770ffb3 Added Gav's new address. 2014-06-11 11:32:42 +01:00
Gav Wood
9345bc13d4 Merge branch 'master' of github.com:ethereum/tests into develop 2014-05-30 17:50:38 +02:00
Gav Wood
a2257f3471 VM tests. 2014-05-30 17:50:18 +02:00
Heiko Heiko
78576dd3d3 changes based on new account structure nonce, balance, storage, code 2014-05-30 17:19:09 +02:00
Jeffrey Wilcke
125839e848 Merge pull request #5 from bkirwi/master
Fix invalid JSON (removed trailing comma) and add test names
2014-05-22 09:58:45 +02:00
Ben Kirwin
356a3296bc Add some arbitrary test names
This should now conform to the format specified in the README.
2014-05-22 00:20:48 -04:00
Chen Houwu
42e14ec54f revert to correct data 2014-05-21 23:27:40 +08:00
Chen Houwu
4300197a74 fix: wrong sha3 hash because of the wrong rlp hex 2014-05-21 22:42:23 +08:00
Chen Houwu
a0d01b1a0b fix: wrong rlp hex 2014-05-21 22:29:53 +08:00
Jeffrey Wilcke
6bc2fc7405 Merge pull request #4 from ethers/master
fix file name that seems to have been a typo
2014-05-21 14:11:37 +02:00
ethers
c31a93c27a fix file name that seems to have been a typo 2014-05-20 15:42:39 -07:00
Heiko Heiko
66bc3665c1 fix: represent integers as strings 2014-05-20 17:36:35 +02:00
Heiko Heiko
ede5499da6 add: current initial alloc and genesis hashes 2014-05-20 17:21:09 +02:00
Ben Kirwin
5131429abb Delete a comma
This should now be parseable as JSON.
2014-05-19 11:18:31 -04:00
Chen Houwu
f44a859331 add: case when value is long, ensure it's not get rlp encoded as node 2014-05-18 15:04:42 +08:00
Gav Wood
e1ae4ad449 PoC-5 VM tests. 2014-05-12 14:40:47 +01:00
Vitalik Buterin
2b6c136dda Moved txt to json 2014-05-11 21:42:41 -04:00
Vitalik Buterin
cbccbf977c New commit 2014-05-08 21:54:48 -04:00
Vitalik Buterin
edbb8d407e Removed unneeded test, added new tests 2014-05-06 16:53:43 -04:00
Gav Wood
45a0974f6f Merge pull request #3 from autolycus/develop
Fixed formatting and added test cases
2014-04-27 12:53:47 +01:00
Carl Allendorph
5fd2a98fcb Added some new test cases for the rlp encoding. 2014-04-19 13:26:14 -07:00
Carl Allendorph
4ba150954e Converted spaces to tabs to be compliant with the coding standards defined in cpp-ethereum 2014-04-19 12:48:42 -07:00
Gav Wood
15dd8fd794 RLP tests and Trie updates. 2014-02-28 12:54:47 +00:00
Gav Wood
33f80fef21 Hex encode tests done. 2014-02-28 11:39:35 +00:00
Gav Wood
e1f5e12abb Fix RLP tests. 2014-02-28 11:22:49 +00:00
Gav Wood
f87ce15ad2 Fix empty string. 2014-02-27 13:28:11 +00:00
Gav Wood
c006ed4ffd Tests fix. 2014-02-24 10:24:39 +00:00
Gav Wood
510ff56363 Updated the tests. 2014-02-21 18:54:08 +00:00
Gav Wood
a0ec843832 Moved over to new format, but RLP tests still need updating. 2014-02-21 18:49:24 +00:00
Gav Wood
660cd26f31 More docs. 2014-02-21 18:35:51 +00:00
Gav Wood
6ad14c1a15 Added VM test suite.
Added TODO.
Renamed old files.
2014-02-21 18:33:39 +00:00
Vitalik Buterin
f91ad7b385 update trie algorithm 2014-01-08 11:26:58 -05:00
Vitalik Buterin
6da2954462 merge 2014-01-08 08:15:38 -05:00
Vitalik Buterin
cc4224675f Updated trie test 2014-01-07 14:35:26 -05:00
vbuterin
131c610da6 Merge pull request #1 from obscuren/master
Update trietest.txt
2014-01-01 06:40:54 -08:00
obscuren
7613302b49 Update trietest.txt
New proposed explanatory format
2014-01-01 15:25:21 +01:00
Vitalik Buterin
121632bedd Added obscure's tests 2014-01-01 08:26:18 -05:00
Vitalik Buterin
ef6c5506c3 Fixed tests a bit 2013-12-31 19:04:48 -05:00
Vitalik Buterin
345e4bcfef Merge branch 'master' of github.com:ethereum/tests 2013-12-31 15:52:46 -05:00
Vitalik Buterin
2c81698f31 Added first three tests 2013-12-30 21:09:40 -05:00
vbuterin
e4bbea400f Initial commit 2013-12-30 18:09:03 -08:00
2331 changed files with 2751065 additions and 54363 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

18
.github/CONTRIBUTING.md vendored Normal file
View File

@@ -0,0 +1,18 @@
## Can I have feature X
Before you do a feature request please check and make sure that it isn't possible
through some other means. The JavaScript enabled console is a powerful feature
in the right hands. Please check our [Bitchin' tricks](https://github.com/ethereum/go-ethereum/wiki/bitchin-tricks) wiki page for more info
and help.
## Contributing
If you'd like to contribute to go-ethereum please fork, fix, commit and
send a pull request. Commits who do not comply with the coding standards
are ignored (use gofmt!). If you send pull requests make absolute sure that you
commit on the `develop` branch and that you do not merge to master.
Commits that are directly based on master are simply ignored.
See [Developers' Guide](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide)
for more details on configuring your environment, testing, and
dependency management.

20
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,20 @@
#### System information
Geth version: `geth version`
OS & Version: Windows/Linux/OSX
Commit hash : (if `develop`)
#### Expected behaviour
#### Actual behaviour
#### Steps to reproduce the behaviour
#### Backtrace
````
[backtrace]
````

27
.gitignore vendored
View File

@@ -6,7 +6,34 @@
/tmp
*/**/*un~
*/**/*.test
*un~
.DS_Store
*/**/.DS_Store
.ethtest
*/**/*tx_database*
*/**/*dapps*
Godeps/_workspace/pkg
Godeps/_workspace/bin
#*
.#*
*#
*~
.project
.settings
deploy/osx/Mist.app
deploy/osx/Mist\ Installer.dmg
cmd/mist/assets/ext/ethereum.js/
# used by the Makefile
/build/_workspace/
/build/bin/
# travis
profile.tmp
profile.cov
# vagrant
.vagrant

6
.gitmodules vendored
View File

@@ -1,3 +1,3 @@
[submodule "ethereal/assets/samplecoin"]
path = ethereal/assets/samplecoin
url = git@github.com:obscuren/SampleCoin.git
[submodule "cmd/mist/assets/ext/ethereum.js"]
path = cmd/mist/assets/ext/ethereum.js
url = https://github.com/ethereum/web3.js

65
.mailmap Normal file
View File

@@ -0,0 +1,65 @@
Jeffrey Wilcke <jeffrey@ethereum.org>
Jeffrey Wilcke <jeffrey@ethereum.org> <geffobscura@gmail.com>
Jeffrey Wilcke <jeffrey@ethereum.org> <obscuren@obscura.com>
Jeffrey Wilcke <jeffrey@ethereum.org> <obscuren@users.noreply.github.com>
Viktor Trón <viktor.tron@gmail.com>
Joseph Goulden <joegoulden@gmail.com>
Nick Savers <nicksavers@gmail.com>
Maran Hidskes <maran.hidskes@gmail.com>
Taylor Gerring <taylor.gerring@gmail.com>
Taylor Gerring <taylor.gerring@gmail.com> <taylor.gerring@ethereum.org>
Bas van Kervel <bas@ethdev.com>
Bas van Kervel <bas@ethdev.com> <basvankervel@ziggo.nl>
Bas van Kervel <bas@ethdev.com> <basvankervel@gmail.com>
Sven Ehlert <sven@ethdev.com>
Vitalik Buterin <v@buterin.com>
Marian Oancea <contact@siteshop.ro>
Christoph Jentzsch <jentzsch.software@gmail.com>
Heiko Hees <heiko@heiko.org>
Alex Leverington <alex@ethdev.com>
Alex Leverington <alex@ethdev.com> <subtly@users.noreply.github.com>
Zsolt Felföldi <zsfelfoldi@gmail.com>
Gavin Wood <i@gavwood.com>
Martin Becze <mjbecze@gmail.com>
Martin Becze <mjbecze@gmail.com> <wanderer@users.noreply.github.com>
Dimitry Khokhlov <winsvega@mail.ru>
Roman Mandeleil <roman.mandeleil@gmail.com>
Alec Perseghin <aperseghin@gmail.com>
Alon Muroch <alonmuroch@gmail.com>
Arkadiy Paronyan <arkadiy@ethdev.com>
Jae Kwon <jkwon.work@gmail.com>
Aaron Kumavis <kumavis@users.noreply.github.com>
Nick Dodson <silentcicero@outlook.com>
Jason Carver <jacarver@linkedin.com>
Jason Carver <jacarver@linkedin.com> <ut96caarrs@snkmail.com>
Joseph Chow <ethereum@outlook.com>
Joseph Chow <ethereum@outlook.com> ethers <TODO>
Enrique Fynn <enriquefynn@gmail.com>
Vincent G <caktux@gmail.com>

View File

@@ -1,25 +1,29 @@
language: go
go:
- 1.3
before_install:
- sudo add-apt-repository ppa:ubuntu-sdk-team/ppa -y
- sudo apt-get update -qq
- sudo apt-get install -yqq libgmp3-dev qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev libreadline6-dev
- 1.4.2
install:
- go get code.google.com/p/go.tools/cmd/goimports
- go get github.com/golang/lint/golint
# - go get code.google.com/p/go.tools/cmd/vet
- go get code.google.com/p/go.tools/cmd/cover
- go get github.com/mattn/goveralls
- ./install_deps.sh
# - go get code.google.com/p/go.tools/cmd/goimports
# - go get github.com/golang/lint/golint
# - go get golang.org/x/tools/cmd/vet
- go get golang.org/x/tools/cmd/cover
before_script:
- gofmt -l -w .
- goimports -l -w .
- golint .
# - gofmt -l -w .
# - goimports -l -w .
# - golint .
# - go vet ./...
# - go test -race ./...
script:
- ./gocoverage.sh && goveralls -coverprofile=profile.cov -service=travis-ci -repotoken $COVERALLS_TOKEN
- make travis-test-with-coverage
after_success:
- bash <(curl -s https://codecov.io/bash)
env:
- secure: "U2U1AmkU4NJBgKR/uUAebQY87cNL0+1JHjnLOmmXwxYYyj5ralWb1aSuSH3qSXiT93qLBmtaUkuv9fberHVqrbAeVlztVdUsKAq7JMQH+M99iFkC9UiRMqHmtjWJ0ok4COD1sRYixxi21wb/JrMe3M1iL4QJVS61iltjHhVdM64="
global:
- secure: "U2U1AmkU4NJBgKR/uUAebQY87cNL0+1JHjnLOmmXwxYYyj5ralWb1aSuSH3qSXiT93qLBmtaUkuv9fberHVqrbAeVlztVdUsKAq7JMQH+M99iFkC9UiRMqHmtjWJ0ok4COD1sRYixxi21wb/JrMe3M1iL4QJVS61iltjHhVdM64="
sudo: false
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/e09ccdce1048c5e03445
on_success: change
on_failure: always
on_start: false

36
AUTHORS Normal file
View File

@@ -0,0 +1,36 @@
# This is the official list of go-ethereum authors for copyright purposes.
Alex Leverington <alex@ethdev.com>
Alexandre Van de Sande <alex.vandesande@ethdev.com>
Bas van Kervel <bas@ethdev.com>
Christoph Jentzsch <jentzsch.software@gmail.com>
Daniel A. Nagy <nagy.da@gmail.com>
Drake Burroughs <wildfyre@hotmail.com>
Enrique Fynn <enriquefynn@gmail.com>
Ethan Buchman <ethan@coinculture.info>
Fabian Vogelsteller <fabian@frozeman.de>
Felix Lange <fjl@twurst.com>
Gustav Simonsson <gustav.simonsson@gmail.com>
Isidoro Ghezzi <isidoro.ghezzi@icloud.com>
Jae Kwon <jkwon.work@gmail.com>
Jason Carver <jacarver@linkedin.com>
Jeff R. Allen <jra@nella.org>
Jeffrey Wilcke <jeffrey@ethereum.org>
Joseph Chow <ethereum@outlook.com>
Kobi Gurkan <kobigurk@gmail.com>
Lefteris Karapetsas <lefteris@refu.co>
Leif Jurvetson <leijurv@gmail.com>
Maran Hidskes <maran.hidskes@gmail.com>
Marek Kotewicz <marek.kotewicz@gmail.com>
Matthew Wampler-Doty <matthew.wampler.doty@gmail.com>
Nick Dodson <silentcicero@outlook.com>
Peter Pratscher <pratscher@gmail.com>
Péter Szilágyi <peterke@gmail.com>
Ramesh Nair <ram@hiddentao.com>
Ricardo Catalinas Jiménez <r@untroubled.be>
Rémy Roy <remyroy@remyroy.com>
Taylor Gerring <taylor.gerring@gmail.com>
Viktor Trón <viktor.tron@gmail.com>
Vincent G <caktux@gmail.com>
Vitalik Buterin <v@buterin.com>
Zsolt Felföldi <zsfelfoldi@gmail.com>

619
COPYING Normal file
View File

@@ -0,0 +1,619 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2014 The go-ethereum Authors.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

165
COPYING.LESSER Normal file
View File

@@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@@ -1,41 +0,0 @@
FROM ubuntu:14.04
## Environment setup
ENV HOME /root
ENV GOPATH /root/go
ENV PATH /go/bin:/root/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
RUN mkdir -p /root/go
ENV DEBIAN_FRONTEND noninteractive
## Install base dependencies
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y git mercurial build-essential software-properties-common pkg-config libgmp3-dev libreadline6-dev libpcre3-dev libpcre++-dev
## Build and install Go
RUN hg clone -u release https://code.google.com/p/go
RUN cd go && hg update go1.4
RUN cd go/src && ./all.bash && go version
## Install GUI dependencies
RUN add-apt-repository ppa:ubuntu-sdk-team/ppa -y
RUN apt-get update -y
RUN apt-get install -y qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev
## Fetch and install serpent-go
RUN go get -v -d github.com/ethereum/serpent-go
WORKDIR $GOPATH/src/github.com/ethereum/serpent-go
RUN git checkout master
RUN git submodule update --init
RUN go install -v
# Fetch and install go-ethereum
RUN go get -v -d github.com/ethereum/go-ethereum/...
WORKDIR $GOPATH/src/github.com/ethereum/go-ethereum
RUN git checkout poc8
RUN ETH_DEPS=$(go list -f '{{.Imports}} {{.TestImports}} {{.XTestImports}}' github.com/ethereum/go-ethereum/... | sed -e 's/\[//g' | sed -e 's/\]//g' | sed -e 's/C //g'); if [ "$ETH_DEPS" ]; then go get $ETH_DEPS; fi
RUN go install -v ./cmd/ethereum
# Run JSON RPC
ENTRYPOINT ["ethereum", "-rpc=true", "-rpcport=8080"]
EXPOSE 8080

324
Godeps/Godeps.json generated Normal file
View File

@@ -0,0 +1,324 @@
{
"ImportPath": "github.com/ethereum/go-ethereum",
"GoVersion": "go1.5.2",
"Packages": [
"./..."
],
"Deps": [
{
"ImportPath": "github.com/Gustav-Simonsson/go-opencl/cl",
"Rev": "593e01cfc4f3353585015321e01951d4a907d3ef"
},
{
"ImportPath": "github.com/cespare/cp",
"Rev": "165db2f241fd235aec29ba6d9b1ccd5f1c14637c"
},
{
"ImportPath": "github.com/codegangsta/cli",
"Comment": "1.2.0-215-g0ab42fd",
"Rev": "0ab42fd482c27cf2c95e7794ad3bb2082c2ab2d7"
},
{
"ImportPath": "github.com/davecgh/go-spew/spew",
"Rev": "5215b55f46b2b919f50a1df0eaa5886afe4e3b3d"
},
{
"ImportPath": "github.com/ethereum/ethash",
"Comment": "v23.1-245-g25b32de",
"Rev": "25b32de0c0271065c28c3719c2bfe86959d72f0c"
},
{
"ImportPath": "github.com/fatih/color",
"Comment": "v0.1-12-g9aae6aa",
"Rev": "9aae6aaa22315390f03959adca2c4d395b02fcef"
},
{
"ImportPath": "github.com/gizak/termui",
"Rev": "08a5d3f67b7d9ec87830ea39c48e570a1f18531f"
},
{
"ImportPath": "github.com/golang/snappy",
"Rev": "799c780093d646c1b79d30894e22512c319fa137"
},
{
"ImportPath": "github.com/hashicorp/golang-lru",
"Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4"
},
{
"ImportPath": "github.com/hashicorp/golang-lru/simplelru",
"Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4"
},
{
"ImportPath": "github.com/huin/goupnp",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/huin/goupnp/dcps/internetgateway1",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/huin/goupnp/dcps/internetgateway2",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/huin/goupnp/httpu",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/huin/goupnp/scpd",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/huin/goupnp/soap",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/huin/goupnp/ssdp",
"Rev": "46bde78b11f3f021f2a511df138be9e2fc7506e8"
},
{
"ImportPath": "github.com/jackpal/gateway",
"Rev": "192609c58b8985e645cbe82ddcb28a4362ca0fdc"
},
{
"ImportPath": "github.com/jackpal/go-nat-pmp",
"Rev": "46523a463303c6ede3ddfe45bde1c7ed52ebaacd"
},
{
"ImportPath": "github.com/mattn/go-colorable",
"Rev": "9fdad7c47650b7d2e1da50644c1f4ba7f172f252"
},
{
"ImportPath": "github.com/mattn/go-isatty",
"Rev": "56b76bdf51f7708750eac80fa38b952bb9f32639"
},
{
"ImportPath": "github.com/mattn/go-runewidth",
"Comment": "travisish-44-ge882a96",
"Rev": "e882a96ec18dd43fa283187b66af74497c9101c0"
},
{
"ImportPath": "github.com/microsoft/go-winio",
"Comment": "v0.2.0",
"Rev": "9e2895e5f6c3f16473b91d37fae6e89990a4520c"
},
{
"ImportPath": "github.com/nsf/termbox-go",
"Rev": "362329b0aa6447eadd52edd8d660ec1dff470295"
},
{
"ImportPath": "github.com/pborman/uuid",
"Comment": "v1.0-6-g0f1a469",
"Rev": "0f1a46960a86dcdf5dd30d3e6568a497a997909f"
},
{
"ImportPath": "github.com/peterh/liner",
"Rev": "ad1edfd30321d8f006ccf05f1e0524adeb943060"
},
{
"ImportPath": "github.com/rcrowley/go-metrics",
"Rev": "51425a2415d21afadfd55cd93432c0bc69e9598d"
},
{
"ImportPath": "github.com/rjeczalik/notify",
"Rev": "5dd6205716539662f8f14ab513552b41eab69d5d"
},
{
"ImportPath": "github.com/robertkrimen/otto",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/robertkrimen/otto/ast",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/robertkrimen/otto/dbg",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/robertkrimen/otto/file",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/robertkrimen/otto/parser",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/robertkrimen/otto/registry",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/robertkrimen/otto/token",
"Rev": "53221230c215611a90762720c9042ac782ef74ee"
},
{
"ImportPath": "github.com/rs/cors",
"Rev": "5950cf11d77f8a61b432a25dd4d444b4ced01379"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/cache",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/comparer",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/errors",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/filter",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/iterator",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/journal",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/memdb",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/opt",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/storage",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/table",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "github.com/syndtr/goleveldb/leveldb/util",
"Rev": "917f41c560270110ceb73c5b38be2a9127387071"
},
{
"ImportPath": "golang.org/x/crypto/pbkdf2",
"Rev": "1f22c0103821b9390939b6776727195525381532"
},
{
"ImportPath": "golang.org/x/crypto/ripemd160",
"Rev": "1f22c0103821b9390939b6776727195525381532"
},
{
"ImportPath": "golang.org/x/crypto/scrypt",
"Rev": "1f22c0103821b9390939b6776727195525381532"
},
{
"ImportPath": "golang.org/x/net/context",
"Rev": "8968c61983e8f51a91b8c0ef25bf739278c89634"
},
{
"ImportPath": "golang.org/x/net/html",
"Rev": "8968c61983e8f51a91b8c0ef25bf739278c89634"
},
{
"ImportPath": "golang.org/x/net/html/atom",
"Rev": "8968c61983e8f51a91b8c0ef25bf739278c89634"
},
{
"ImportPath": "golang.org/x/net/html/charset",
"Rev": "8968c61983e8f51a91b8c0ef25bf739278c89634"
},
{
"ImportPath": "golang.org/x/net/websocket",
"Rev": "8968c61983e8f51a91b8c0ef25bf739278c89634"
},
{
"ImportPath": "golang.org/x/sys/unix",
"Rev": "50c6bc5e4292a1d4e65c6e9be5f53be28bcbe28e"
},
{
"ImportPath": "golang.org/x/text/encoding",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/charmap",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/htmlindex",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/internal",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/internal/identifier",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/japanese",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/korean",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/simplifiedchinese",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/traditionalchinese",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/encoding/unicode",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/internal/tag",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/internal/utf8internal",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/language",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/runes",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/text/transform",
"Rev": "09761194ac5034a97b2bfad4f5b896b0ac350b3e"
},
{
"ImportPath": "golang.org/x/tools/go/ast/astutil",
"Rev": "758728c4b28cfbac299730969ef8f655c4761283"
},
{
"ImportPath": "golang.org/x/tools/imports",
"Rev": "758728c4b28cfbac299730969ef8f655c4761283"
},
{
"ImportPath": "gopkg.in/check.v1",
"Rev": "4f90aeace3a26ad7021961c297b22c42160c7b25"
},
{
"ImportPath": "gopkg.in/fatih/set.v0",
"Comment": "v0.1.0-3-g27c4092",
"Rev": "27c40922c40b43fe04554d8223a402af3ea333f3"
},
{
"ImportPath": "gopkg.in/karalabe/cookiejar.v2/collections/prque",
"Rev": "8dcd6a7f4951f6ff3ee9cbb919a06d8925822e57"
}
]
}

5
Godeps/Readme generated Normal file
View File

@@ -0,0 +1,5 @@
This directory tree is generated automatically by godep.
Please do not edit.
See https://github.com/tools/godep for more information.

2
Godeps/_workspace/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,2 @@
/pkg
/bin

View File

@@ -0,0 +1,26 @@
/*
Package cl provides a binding to the OpenCL api. It's mostly a low-level
wrapper that avoids adding functionality while still making the interface
a little more friendly and easy to use.
Resource life-cycle management:
For any CL object that gets created (buffer, queue, kernel, etc..) you should
call object.Release() when finished with it to free the CL resources. This
explicitely calls the related clXXXRelease method for the type. However,
as a fallback there is a finalizer set for every resource item that takes
care of it (eventually) if Release isn't called. In this way you can have
better control over the life cycle of resources while having a fall back
to avoid leaks. This is similar to how file handles and such are handled
in the Go standard packages.
*/
package cl
// #include "headers/1.2/opencl.h"
// #cgo CFLAGS: -Iheaders/1.2
// #cgo darwin LDFLAGS: -framework OpenCL
// #cgo linux LDFLAGS: -lOpenCL
import "C"
import "errors"
var ErrUnsupported = errors.New("cl: unsupported")

View File

@@ -0,0 +1,161 @@
package cl
// #include <stdlib.h>
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import (
"runtime"
"unsafe"
)
const maxImageFormats = 256
type Context struct {
clContext C.cl_context
devices []*Device
}
type MemObject struct {
clMem C.cl_mem
size int
}
func releaseContext(c *Context) {
if c.clContext != nil {
C.clReleaseContext(c.clContext)
c.clContext = nil
}
}
func releaseMemObject(b *MemObject) {
if b.clMem != nil {
C.clReleaseMemObject(b.clMem)
b.clMem = nil
}
}
func newMemObject(mo C.cl_mem, size int) *MemObject {
memObject := &MemObject{clMem: mo, size: size}
runtime.SetFinalizer(memObject, releaseMemObject)
return memObject
}
func (b *MemObject) Release() {
releaseMemObject(b)
}
// TODO: properties
func CreateContext(devices []*Device) (*Context, error) {
deviceIds := buildDeviceIdList(devices)
var err C.cl_int
clContext := C.clCreateContext(nil, C.cl_uint(len(devices)), &deviceIds[0], nil, nil, &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
if clContext == nil {
return nil, ErrUnknown
}
context := &Context{clContext: clContext, devices: devices}
runtime.SetFinalizer(context, releaseContext)
return context, nil
}
func (ctx *Context) GetSupportedImageFormats(flags MemFlag, imageType MemObjectType) ([]ImageFormat, error) {
var formats [maxImageFormats]C.cl_image_format
var nFormats C.cl_uint
if err := C.clGetSupportedImageFormats(ctx.clContext, C.cl_mem_flags(flags), C.cl_mem_object_type(imageType), maxImageFormats, &formats[0], &nFormats); err != C.CL_SUCCESS {
return nil, toError(err)
}
fmts := make([]ImageFormat, nFormats)
for i, f := range formats[:nFormats] {
fmts[i] = ImageFormat{
ChannelOrder: ChannelOrder(f.image_channel_order),
ChannelDataType: ChannelDataType(f.image_channel_data_type),
}
}
return fmts, nil
}
func (ctx *Context) CreateCommandQueue(device *Device, properties CommandQueueProperty) (*CommandQueue, error) {
var err C.cl_int
clQueue := C.clCreateCommandQueue(ctx.clContext, device.id, C.cl_command_queue_properties(properties), &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
if clQueue == nil {
return nil, ErrUnknown
}
commandQueue := &CommandQueue{clQueue: clQueue, device: device}
runtime.SetFinalizer(commandQueue, releaseCommandQueue)
return commandQueue, nil
}
func (ctx *Context) CreateProgramWithSource(sources []string) (*Program, error) {
cSources := make([]*C.char, len(sources))
for i, s := range sources {
cs := C.CString(s)
cSources[i] = cs
defer C.free(unsafe.Pointer(cs))
}
var err C.cl_int
clProgram := C.clCreateProgramWithSource(ctx.clContext, C.cl_uint(len(sources)), &cSources[0], nil, &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
if clProgram == nil {
return nil, ErrUnknown
}
program := &Program{clProgram: clProgram, devices: ctx.devices}
runtime.SetFinalizer(program, releaseProgram)
return program, nil
}
func (ctx *Context) CreateBufferUnsafe(flags MemFlag, size int, dataPtr unsafe.Pointer) (*MemObject, error) {
var err C.cl_int
clBuffer := C.clCreateBuffer(ctx.clContext, C.cl_mem_flags(flags), C.size_t(size), dataPtr, &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
if clBuffer == nil {
return nil, ErrUnknown
}
return newMemObject(clBuffer, size), nil
}
func (ctx *Context) CreateEmptyBuffer(flags MemFlag, size int) (*MemObject, error) {
return ctx.CreateBufferUnsafe(flags, size, nil)
}
func (ctx *Context) CreateEmptyBufferFloat32(flags MemFlag, size int) (*MemObject, error) {
return ctx.CreateBufferUnsafe(flags, 4*size, nil)
}
func (ctx *Context) CreateBuffer(flags MemFlag, data []byte) (*MemObject, error) {
return ctx.CreateBufferUnsafe(flags, len(data), unsafe.Pointer(&data[0]))
}
//float64
func (ctx *Context) CreateBufferFloat32(flags MemFlag, data []float32) (*MemObject, error) {
return ctx.CreateBufferUnsafe(flags, 4*len(data), unsafe.Pointer(&data[0]))
}
func (ctx *Context) CreateUserEvent() (*Event, error) {
var err C.cl_int
clEvent := C.clCreateUserEvent(ctx.clContext, &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
return newEvent(clEvent), nil
}
func (ctx *Context) Release() {
releaseContext(ctx)
}
// http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubBuffer.html
// func (memObject *MemObject) CreateSubBuffer(flags MemFlag, bufferCreateType BufferCreateType, )

View File

@@ -0,0 +1,510 @@
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #include "cl_ext.h"
// #endif
import "C"
import (
"strings"
"unsafe"
)
const maxDeviceCount = 64
type DeviceType uint
const (
DeviceTypeCPU DeviceType = C.CL_DEVICE_TYPE_CPU
DeviceTypeGPU DeviceType = C.CL_DEVICE_TYPE_GPU
DeviceTypeAccelerator DeviceType = C.CL_DEVICE_TYPE_ACCELERATOR
DeviceTypeDefault DeviceType = C.CL_DEVICE_TYPE_DEFAULT
DeviceTypeAll DeviceType = C.CL_DEVICE_TYPE_ALL
)
type FPConfig int
const (
FPConfigDenorm FPConfig = C.CL_FP_DENORM // denorms are supported
FPConfigInfNaN FPConfig = C.CL_FP_INF_NAN // INF and NaNs are supported
FPConfigRoundToNearest FPConfig = C.CL_FP_ROUND_TO_NEAREST // round to nearest even rounding mode supported
FPConfigRoundToZero FPConfig = C.CL_FP_ROUND_TO_ZERO // round to zero rounding mode supported
FPConfigRoundToInf FPConfig = C.CL_FP_ROUND_TO_INF // round to positive and negative infinity rounding modes supported
FPConfigFMA FPConfig = C.CL_FP_FMA // IEEE754-2008 fused multiply-add is supported
FPConfigSoftFloat FPConfig = C.CL_FP_SOFT_FLOAT // Basic floating-point operations (such as addition, subtraction, multiplication) are implemented in software
)
var fpConfigNameMap = map[FPConfig]string{
FPConfigDenorm: "Denorm",
FPConfigInfNaN: "InfNaN",
FPConfigRoundToNearest: "RoundToNearest",
FPConfigRoundToZero: "RoundToZero",
FPConfigRoundToInf: "RoundToInf",
FPConfigFMA: "FMA",
FPConfigSoftFloat: "SoftFloat",
}
func (c FPConfig) String() string {
var parts []string
for bit, name := range fpConfigNameMap {
if c&bit != 0 {
parts = append(parts, name)
}
}
if parts == nil {
return ""
}
return strings.Join(parts, "|")
}
func (dt DeviceType) String() string {
var parts []string
if dt&DeviceTypeCPU != 0 {
parts = append(parts, "CPU")
}
if dt&DeviceTypeGPU != 0 {
parts = append(parts, "GPU")
}
if dt&DeviceTypeAccelerator != 0 {
parts = append(parts, "Accelerator")
}
if dt&DeviceTypeDefault != 0 {
parts = append(parts, "Default")
}
if parts == nil {
parts = append(parts, "None")
}
return strings.Join(parts, "|")
}
type Device struct {
id C.cl_device_id
}
func buildDeviceIdList(devices []*Device) []C.cl_device_id {
deviceIds := make([]C.cl_device_id, len(devices))
for i, d := range devices {
deviceIds[i] = d.id
}
return deviceIds
}
// Obtain the list of devices available on a platform. 'platform' refers
// to the platform returned by GetPlatforms or can be nil. If platform
// is nil, the behavior is implementation-defined.
func GetDevices(platform *Platform, deviceType DeviceType) ([]*Device, error) {
var deviceIds [maxDeviceCount]C.cl_device_id
var numDevices C.cl_uint
var platformId C.cl_platform_id
if platform != nil {
platformId = platform.id
}
if err := C.clGetDeviceIDs(platformId, C.cl_device_type(deviceType), C.cl_uint(maxDeviceCount), &deviceIds[0], &numDevices); err != C.CL_SUCCESS {
return nil, toError(err)
}
if numDevices > maxDeviceCount {
numDevices = maxDeviceCount
}
devices := make([]*Device, numDevices)
for i := 0; i < int(numDevices); i++ {
devices[i] = &Device{id: deviceIds[i]}
}
return devices, nil
}
func (d *Device) nullableId() C.cl_device_id {
if d == nil {
return nil
}
return d.id
}
func (d *Device) GetInfoString(param C.cl_device_info, panicOnError bool) (string, error) {
var strC [1024]C.char
var strN C.size_t
if err := C.clGetDeviceInfo(d.id, param, 1024, unsafe.Pointer(&strC), &strN); err != C.CL_SUCCESS {
if panicOnError {
panic("Should never fail")
}
return "", toError(err)
}
// OpenCL strings are NUL-terminated, and the terminator is included in strN
// Go strings aren't NUL-terminated, so subtract 1 from the length
return C.GoStringN((*C.char)(unsafe.Pointer(&strC)), C.int(strN-1)), nil
}
func (d *Device) getInfoUint(param C.cl_device_info, panicOnError bool) (uint, error) {
var val C.cl_uint
if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
if panicOnError {
panic("Should never fail")
}
return 0, toError(err)
}
return uint(val), nil
}
func (d *Device) getInfoSize(param C.cl_device_info, panicOnError bool) (int, error) {
var val C.size_t
if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
if panicOnError {
panic("Should never fail")
}
return 0, toError(err)
}
return int(val), nil
}
func (d *Device) getInfoUlong(param C.cl_device_info, panicOnError bool) (int64, error) {
var val C.cl_ulong
if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
if panicOnError {
panic("Should never fail")
}
return 0, toError(err)
}
return int64(val), nil
}
func (d *Device) getInfoBool(param C.cl_device_info, panicOnError bool) (bool, error) {
var val C.cl_bool
if err := C.clGetDeviceInfo(d.id, param, C.size_t(unsafe.Sizeof(val)), unsafe.Pointer(&val), nil); err != C.CL_SUCCESS {
if panicOnError {
panic("Should never fail")
}
return false, toError(err)
}
return val == C.CL_TRUE, nil
}
func (d *Device) Name() string {
str, _ := d.GetInfoString(C.CL_DEVICE_NAME, true)
return str
}
func (d *Device) Vendor() string {
str, _ := d.GetInfoString(C.CL_DEVICE_VENDOR, true)
return str
}
func (d *Device) Extensions() string {
str, _ := d.GetInfoString(C.CL_DEVICE_EXTENSIONS, true)
return str
}
func (d *Device) OpenCLCVersion() string {
str, _ := d.GetInfoString(C.CL_DEVICE_OPENCL_C_VERSION, true)
return str
}
func (d *Device) Profile() string {
str, _ := d.GetInfoString(C.CL_DEVICE_PROFILE, true)
return str
}
func (d *Device) Version() string {
str, _ := d.GetInfoString(C.CL_DEVICE_VERSION, true)
return str
}
func (d *Device) DriverVersion() string {
str, _ := d.GetInfoString(C.CL_DRIVER_VERSION, true)
return str
}
// The default compute device address space size specified as an
// unsigned integer value in bits. Currently supported values are 32 or 64 bits.
func (d *Device) AddressBits() int {
val, _ := d.getInfoUint(C.CL_DEVICE_ADDRESS_BITS, true)
return int(val)
}
// Size of global memory cache line in bytes.
func (d *Device) GlobalMemCachelineSize() int {
val, _ := d.getInfoUint(C.CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, true)
return int(val)
}
// Maximum configured clock frequency of the device in MHz.
func (d *Device) MaxClockFrequency() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_CLOCK_FREQUENCY, true)
return int(val)
}
// The number of parallel compute units on the OpenCL device.
// A work-group executes on a single compute unit. The minimum value is 1.
func (d *Device) MaxComputeUnits() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_COMPUTE_UNITS, true)
return int(val)
}
// Max number of arguments declared with the __constant qualifier in a kernel.
// The minimum value is 8 for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) MaxConstantArgs() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_CONSTANT_ARGS, true)
return int(val)
}
// Max number of simultaneous image objects that can be read by a kernel.
// The minimum value is 128 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) MaxReadImageArgs() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_READ_IMAGE_ARGS, true)
return int(val)
}
// Maximum number of samplers that can be used in a kernel. The minimum
// value is 16 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE. (Also see sampler_t.)
func (d *Device) MaxSamplers() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_SAMPLERS, true)
return int(val)
}
// Maximum dimensions that specify the global and local work-item IDs used
// by the data parallel execution model. (Refer to clEnqueueNDRangeKernel).
// The minimum value is 3 for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) MaxWorkItemDimensions() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, true)
return int(val)
}
// Max number of simultaneous image objects that can be written to by a
// kernel. The minimum value is 8 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) MaxWriteImageArgs() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MAX_WRITE_IMAGE_ARGS, true)
return int(val)
}
// The minimum value is the size (in bits) of the largest OpenCL built-in
// data type supported by the device (long16 in FULL profile, long16 or
// int16 in EMBEDDED profile) for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) MemBaseAddrAlign() int {
val, _ := d.getInfoUint(C.CL_DEVICE_MEM_BASE_ADDR_ALIGN, true)
return int(val)
}
func (d *Device) NativeVectorWidthChar() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, true)
return int(val)
}
func (d *Device) NativeVectorWidthShort() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, true)
return int(val)
}
func (d *Device) NativeVectorWidthInt() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, true)
return int(val)
}
func (d *Device) NativeVectorWidthLong() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, true)
return int(val)
}
func (d *Device) NativeVectorWidthFloat() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, true)
return int(val)
}
func (d *Device) NativeVectorWidthDouble() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, true)
return int(val)
}
func (d *Device) NativeVectorWidthHalf() int {
val, _ := d.getInfoUint(C.CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, true)
return int(val)
}
// Max height of 2D image in pixels. The minimum value is 8192
// if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) Image2DMaxHeight() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE2D_MAX_HEIGHT, true)
return int(val)
}
// Max width of 2D image or 1D image not created from a buffer object in
// pixels. The minimum value is 8192 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) Image2DMaxWidth() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE2D_MAX_WIDTH, true)
return int(val)
}
// Max depth of 3D image in pixels. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) Image3DMaxDepth() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE3D_MAX_DEPTH, true)
return int(val)
}
// Max height of 3D image in pixels. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) Image3DMaxHeight() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE3D_MAX_HEIGHT, true)
return int(val)
}
// Max width of 3D image in pixels. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) Image3DMaxWidth() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE3D_MAX_WIDTH, true)
return int(val)
}
// Max size in bytes of the arguments that can be passed to a kernel. The
// minimum value is 1024 for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
// For this minimum value, only a maximum of 128 arguments can be passed to a kernel.
func (d *Device) MaxParameterSize() int {
val, _ := d.getInfoSize(C.CL_DEVICE_MAX_PARAMETER_SIZE, true)
return int(val)
}
// Maximum number of work-items in a work-group executing a kernel on a
// single compute unit, using the data parallel execution model. (Refer
// to clEnqueueNDRangeKernel). The minimum value is 1.
func (d *Device) MaxWorkGroupSize() int {
val, _ := d.getInfoSize(C.CL_DEVICE_MAX_WORK_GROUP_SIZE, true)
return int(val)
}
// Describes the resolution of device timer. This is measured in nanoseconds.
func (d *Device) ProfilingTimerResolution() int {
val, _ := d.getInfoSize(C.CL_DEVICE_PROFILING_TIMER_RESOLUTION, true)
return int(val)
}
// Size of local memory arena in bytes. The minimum value is 32 KB for
// devices that are not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) LocalMemSize() int64 {
val, _ := d.getInfoUlong(C.CL_DEVICE_LOCAL_MEM_SIZE, true)
return val
}
// Max size in bytes of a constant buffer allocation. The minimum value is
// 64 KB for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) MaxConstantBufferSize() int64 {
val, _ := d.getInfoUlong(C.CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, true)
return val
}
// Max size of memory object allocation in bytes. The minimum value is max
// (1/4th of CL_DEVICE_GLOBAL_MEM_SIZE, 128*1024*1024) for devices that are
// not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) MaxMemAllocSize() int64 {
val, _ := d.getInfoUlong(C.CL_DEVICE_MAX_MEM_ALLOC_SIZE, true)
return val
}
// Size of global device memory in bytes.
func (d *Device) GlobalMemSize() int64 {
val, _ := d.getInfoUlong(C.CL_DEVICE_GLOBAL_MEM_SIZE, true)
return val
}
func (d *Device) Available() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_AVAILABLE, true)
return val
}
func (d *Device) CompilerAvailable() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_COMPILER_AVAILABLE, true)
return val
}
func (d *Device) EndianLittle() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_ENDIAN_LITTLE, true)
return val
}
// Is CL_TRUE if the device implements error correction for all
// accesses to compute device memory (global and constant). Is
// CL_FALSE if the device does not implement such error correction.
func (d *Device) ErrorCorrectionSupport() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_ERROR_CORRECTION_SUPPORT, true)
return val
}
func (d *Device) HostUnifiedMemory() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_HOST_UNIFIED_MEMORY, true)
return val
}
func (d *Device) ImageSupport() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_IMAGE_SUPPORT, true)
return val
}
func (d *Device) Type() DeviceType {
var deviceType C.cl_device_type
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_TYPE, C.size_t(unsafe.Sizeof(deviceType)), unsafe.Pointer(&deviceType), nil); err != C.CL_SUCCESS {
panic("Failed to get device type")
}
return DeviceType(deviceType)
}
// Describes double precision floating-point capability of the OpenCL device
func (d *Device) DoubleFPConfig() FPConfig {
var fpConfig C.cl_device_fp_config
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_DOUBLE_FP_CONFIG, C.size_t(unsafe.Sizeof(fpConfig)), unsafe.Pointer(&fpConfig), nil); err != C.CL_SUCCESS {
panic("Failed to get double FP config")
}
return FPConfig(fpConfig)
}
// Describes the OPTIONAL half precision floating-point capability of the OpenCL device
func (d *Device) HalfFPConfig() FPConfig {
var fpConfig C.cl_device_fp_config
err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_HALF_FP_CONFIG, C.size_t(unsafe.Sizeof(fpConfig)), unsafe.Pointer(&fpConfig), nil)
if err != C.CL_SUCCESS {
return FPConfig(0)
}
return FPConfig(fpConfig)
}
// Type of local memory supported. This can be set to CL_LOCAL implying dedicated
// local memory storage such as SRAM, or CL_GLOBAL. For custom devices, CL_NONE
// can also be returned indicating no local memory support.
func (d *Device) LocalMemType() LocalMemType {
var memType C.cl_device_local_mem_type
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_LOCAL_MEM_TYPE, C.size_t(unsafe.Sizeof(memType)), unsafe.Pointer(&memType), nil); err != C.CL_SUCCESS {
return LocalMemType(C.CL_NONE)
}
return LocalMemType(memType)
}
// Describes the execution capabilities of the device. The mandated minimum capability is CL_EXEC_KERNEL.
func (d *Device) ExecutionCapabilities() ExecCapability {
var execCap C.cl_device_exec_capabilities
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_EXECUTION_CAPABILITIES, C.size_t(unsafe.Sizeof(execCap)), unsafe.Pointer(&execCap), nil); err != C.CL_SUCCESS {
panic("Failed to get execution capabilities")
}
return ExecCapability(execCap)
}
func (d *Device) GlobalMemCacheType() MemCacheType {
var memType C.cl_device_mem_cache_type
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, C.size_t(unsafe.Sizeof(memType)), unsafe.Pointer(&memType), nil); err != C.CL_SUCCESS {
return MemCacheType(C.CL_NONE)
}
return MemCacheType(memType)
}
// Maximum number of work-items that can be specified in each dimension of the work-group to clEnqueueNDRangeKernel.
//
// Returns n size_t entries, where n is the value returned by the query for CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS.
//
// The minimum value is (1, 1, 1) for devices that are not of type CL_DEVICE_TYPE_CUSTOM.
func (d *Device) MaxWorkItemSizes() []int {
dims := d.MaxWorkItemDimensions()
sizes := make([]C.size_t, dims)
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_MAX_WORK_ITEM_SIZES, C.size_t(int(unsafe.Sizeof(sizes[0]))*dims), unsafe.Pointer(&sizes[0]), nil); err != C.CL_SUCCESS {
panic("Failed to get max work item sizes")
}
intSizes := make([]int, dims)
for i, s := range sizes {
intSizes[i] = int(s)
}
return intSizes
}

View File

@@ -0,0 +1,51 @@
// +build cl12
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import "unsafe"
const FPConfigCorrectlyRoundedDivideSqrt FPConfig = C.CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT
func init() {
fpConfigNameMap[FPConfigCorrectlyRoundedDivideSqrt] = "CorrectlyRoundedDivideSqrt"
}
func (d *Device) BuiltInKernels() string {
str, _ := d.getInfoString(C.CL_DEVICE_BUILT_IN_KERNELS, true)
return str
}
// Is CL_FALSE if the implementation does not have a linker available. Is CL_TRUE if the linker is available. This can be CL_FALSE for the embedded platform profile only. This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE
func (d *Device) LinkerAvailable() bool {
val, _ := d.getInfoBool(C.CL_DEVICE_LINKER_AVAILABLE, true)
return val
}
func (d *Device) ParentDevice() *Device {
var deviceId C.cl_device_id
if err := C.clGetDeviceInfo(d.id, C.CL_DEVICE_PARENT_DEVICE, C.size_t(unsafe.Sizeof(deviceId)), unsafe.Pointer(&deviceId), nil); err != C.CL_SUCCESS {
panic("ParentDevice failed")
}
if deviceId == nil {
return nil
}
return &Device{id: deviceId}
}
// Max number of pixels for a 1D image created from a buffer object. The minimum value is 65536 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.
func (d *Device) ImageMaxBufferSize() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE_MAX_BUFFER_SIZE, true)
return int(val)
}
// Max number of images in a 1D or 2D image array. The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE
func (d *Device) ImageMaxArraySize() int {
val, _ := d.getInfoSize(C.CL_DEVICE_IMAGE_MAX_ARRAY_SIZE, true)
return int(val)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,315 @@
/*******************************************************************************
* Copyright (c) 2008-2013 The Khronos Group Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and/or associated documentation files (the
* "Materials"), to deal in the Materials without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Materials, and to
* permit persons to whom the Materials are furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Materials.
*
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
******************************************************************************/
/* $Revision: 11928 $ on $Date: 2010-07-13 09:04:56 -0700 (Tue, 13 Jul 2010) $ */
/* cl_ext.h contains OpenCL extensions which don't have external */
/* (OpenGL, D3D) dependencies. */
#ifndef __CL_EXT_H
#define __CL_EXT_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __APPLE__
#include <AvailabilityMacros.h>
#endif
#include <cl.h>
/* cl_khr_fp16 extension - no extension #define since it has no functions */
#define CL_DEVICE_HALF_FP_CONFIG 0x1033
/* Memory object destruction
*
* Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR
*
* Registers a user callback function that will be called when the memory object is deleted and its resources
* freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback
* stack associated with memobj. The registered user callback functions are called in the reverse order in
* which they were registered. The user callback functions are called and then the memory object is deleted
* and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be
* notified when the memory referenced by host_ptr, specified when the memory object is created and used as
* the storage bits for the memory object, can be reused or freed.
*
* The application may not call CL api's with the cl_mem object passed to the pfn_notify.
*
* Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
* before using.
*/
#define cl_APPLE_SetMemObjectDestructor 1
cl_int CL_API_ENTRY clSetMemObjectDestructorAPPLE( cl_mem /* memobj */,
void (* /*pfn_notify*/)( cl_mem /* memobj */, void* /*user_data*/),
void * /*user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
/* Context Logging Functions
*
* The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext().
* Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
* before using.
*
* clLogMessagesToSystemLog fowards on all log messages to the Apple System Logger
*/
#define cl_APPLE_ContextLoggingFunctions 1
extern void CL_API_ENTRY clLogMessagesToSystemLogAPPLE( const char * /* errstr */,
const void * /* private_info */,
size_t /* cb */,
void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
/* clLogMessagesToStdout sends all log messages to the file descriptor stdout */
extern void CL_API_ENTRY clLogMessagesToStdoutAPPLE( const char * /* errstr */,
const void * /* private_info */,
size_t /* cb */,
void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
/* clLogMessagesToStderr sends all log messages to the file descriptor stderr */
extern void CL_API_ENTRY clLogMessagesToStderrAPPLE( const char * /* errstr */,
const void * /* private_info */,
size_t /* cb */,
void * /* user_data */ ) CL_EXT_SUFFIX__VERSION_1_0;
/************************
* cl_khr_icd extension *
************************/
#define cl_khr_icd 1
/* cl_platform_info */
#define CL_PLATFORM_ICD_SUFFIX_KHR 0x0920
/* Additional Error Codes */
#define CL_PLATFORM_NOT_FOUND_KHR -1001
extern CL_API_ENTRY cl_int CL_API_CALL
clIcdGetPlatformIDsKHR(cl_uint /* num_entries */,
cl_platform_id * /* platforms */,
cl_uint * /* num_platforms */);
typedef CL_API_ENTRY cl_int (CL_API_CALL *clIcdGetPlatformIDsKHR_fn)(
cl_uint /* num_entries */,
cl_platform_id * /* platforms */,
cl_uint * /* num_platforms */);
/* Extension: cl_khr_image2D_buffer
*
* This extension allows a 2D image to be created from a cl_mem buffer without a copy.
* The type associated with a 2D image created from a buffer in an OpenCL program is image2d_t.
* Both the sampler and sampler-less read_image built-in functions are supported for 2D images
* and 2D images created from a buffer. Similarly, the write_image built-ins are also supported
* for 2D images created from a buffer.
*
* When the 2D image from buffer is created, the client must specify the width,
* height, image format (i.e. channel order and channel data type) and optionally the row pitch
*
* The pitch specified must be a multiple of CL_DEVICE_IMAGE_PITCH_ALIGNMENT pixels.
* The base address of the buffer must be aligned to CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT pixels.
*/
/*************************************
* cl_khr_initalize_memory extension *
*************************************/
#define CL_CONTEXT_MEMORY_INITIALIZE_KHR 0x200E
/**************************************
* cl_khr_terminate_context extension *
**************************************/
#define CL_DEVICE_TERMINATE_CAPABILITY_KHR 0x200F
#define CL_CONTEXT_TERMINATE_KHR 0x2010
#define cl_khr_terminate_context 1
extern CL_API_ENTRY cl_int CL_API_CALL clTerminateContextKHR(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2;
typedef CL_API_ENTRY cl_int (CL_API_CALL *clTerminateContextKHR_fn)(cl_context /* context */) CL_EXT_SUFFIX__VERSION_1_2;
/*
* Extension: cl_khr_spir
*
* This extension adds support to create an OpenCL program object from a
* Standard Portable Intermediate Representation (SPIR) instance
*/
#define CL_DEVICE_SPIR_VERSIONS 0x40E0
#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE 0x40E1
/******************************************
* cl_nv_device_attribute_query extension *
******************************************/
/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */
#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV 0x4000
#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV 0x4001
#define CL_DEVICE_REGISTERS_PER_BLOCK_NV 0x4002
#define CL_DEVICE_WARP_SIZE_NV 0x4003
#define CL_DEVICE_GPU_OVERLAP_NV 0x4004
#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005
#define CL_DEVICE_INTEGRATED_MEMORY_NV 0x4006
/*********************************
* cl_amd_device_attribute_query *
*********************************/
#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD 0x4036
/*********************************
* cl_arm_printf extension
*********************************/
#define CL_PRINTF_CALLBACK_ARM 0x40B0
#define CL_PRINTF_BUFFERSIZE_ARM 0x40B1
#ifdef CL_VERSION_1_1
/***********************************
* cl_ext_device_fission extension *
***********************************/
#define cl_ext_device_fission 1
extern CL_API_ENTRY cl_int CL_API_CALL
clReleaseDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
typedef CL_API_ENTRY cl_int
(CL_API_CALL *clReleaseDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
extern CL_API_ENTRY cl_int CL_API_CALL
clRetainDeviceEXT( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
typedef CL_API_ENTRY cl_int
(CL_API_CALL *clRetainDeviceEXT_fn)( cl_device_id /*device*/ ) CL_EXT_SUFFIX__VERSION_1_1;
typedef cl_ulong cl_device_partition_property_ext;
extern CL_API_ENTRY cl_int CL_API_CALL
clCreateSubDevicesEXT( cl_device_id /*in_device*/,
const cl_device_partition_property_ext * /* properties */,
cl_uint /*num_entries*/,
cl_device_id * /*out_devices*/,
cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
typedef CL_API_ENTRY cl_int
( CL_API_CALL * clCreateSubDevicesEXT_fn)( cl_device_id /*in_device*/,
const cl_device_partition_property_ext * /* properties */,
cl_uint /*num_entries*/,
cl_device_id * /*out_devices*/,
cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
/* cl_device_partition_property_ext */
#define CL_DEVICE_PARTITION_EQUALLY_EXT 0x4050
#define CL_DEVICE_PARTITION_BY_COUNTS_EXT 0x4051
#define CL_DEVICE_PARTITION_BY_NAMES_EXT 0x4052
#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT 0x4053
/* clDeviceGetInfo selectors */
#define CL_DEVICE_PARENT_DEVICE_EXT 0x4054
#define CL_DEVICE_PARTITION_TYPES_EXT 0x4055
#define CL_DEVICE_AFFINITY_DOMAINS_EXT 0x4056
#define CL_DEVICE_REFERENCE_COUNT_EXT 0x4057
#define CL_DEVICE_PARTITION_STYLE_EXT 0x4058
/* error codes */
#define CL_DEVICE_PARTITION_FAILED_EXT -1057
#define CL_INVALID_PARTITION_COUNT_EXT -1058
#define CL_INVALID_PARTITION_NAME_EXT -1059
/* CL_AFFINITY_DOMAINs */
#define CL_AFFINITY_DOMAIN_L1_CACHE_EXT 0x1
#define CL_AFFINITY_DOMAIN_L2_CACHE_EXT 0x2
#define CL_AFFINITY_DOMAIN_L3_CACHE_EXT 0x3
#define CL_AFFINITY_DOMAIN_L4_CACHE_EXT 0x4
#define CL_AFFINITY_DOMAIN_NUMA_EXT 0x10
#define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT 0x100
/* cl_device_partition_property_ext list terminators */
#define CL_PROPERTIES_LIST_END_EXT ((cl_device_partition_property_ext) 0)
#define CL_PARTITION_BY_COUNTS_LIST_END_EXT ((cl_device_partition_property_ext) 0)
#define CL_PARTITION_BY_NAMES_LIST_END_EXT ((cl_device_partition_property_ext) 0 - 1)
/*********************************
* cl_qcom_ext_host_ptr extension
*********************************/
#define CL_MEM_EXT_HOST_PTR_QCOM (1 << 29)
#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM 0x40A0
#define CL_DEVICE_PAGE_SIZE_QCOM 0x40A1
#define CL_IMAGE_ROW_ALIGNMENT_QCOM 0x40A2
#define CL_IMAGE_SLICE_ALIGNMENT_QCOM 0x40A3
#define CL_MEM_HOST_UNCACHED_QCOM 0x40A4
#define CL_MEM_HOST_WRITEBACK_QCOM 0x40A5
#define CL_MEM_HOST_WRITETHROUGH_QCOM 0x40A6
#define CL_MEM_HOST_WRITE_COMBINING_QCOM 0x40A7
typedef cl_uint cl_image_pitch_info_qcom;
extern CL_API_ENTRY cl_int CL_API_CALL
clGetDeviceImageInfoQCOM(cl_device_id device,
size_t image_width,
size_t image_height,
const cl_image_format *image_format,
cl_image_pitch_info_qcom param_name,
size_t param_value_size,
void *param_value,
size_t *param_value_size_ret);
typedef struct _cl_mem_ext_host_ptr
{
/* Type of external memory allocation. */
/* Legal values will be defined in layered extensions. */
cl_uint allocation_type;
/* Host cache policy for this external memory allocation. */
cl_uint host_cache_policy;
} cl_mem_ext_host_ptr;
/*********************************
* cl_qcom_ion_host_ptr extension
*********************************/
#define CL_MEM_ION_HOST_PTR_QCOM 0x40A8
typedef struct _cl_mem_ion_host_ptr
{
/* Type of external memory allocation. */
/* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */
cl_mem_ext_host_ptr ext_host_ptr;
/* ION file descriptor */
int ion_filedesc;
/* Host pointer to the ION allocated memory */
void* ion_hostptr;
} cl_mem_ion_host_ptr;
#endif /* CL_VERSION_1_1 */
#ifdef __cplusplus
}
#endif
#endif /* __CL_EXT_H */

View File

@@ -0,0 +1,158 @@
/**********************************************************************************
* Copyright (c) 2008 - 2012 The Khronos Group Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and/or associated documentation files (the
* "Materials"), to deal in the Materials without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Materials, and to
* permit persons to whom the Materials are furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Materials.
*
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
**********************************************************************************/
#ifndef __OPENCL_CL_GL_H
#define __OPENCL_CL_GL_H
#include <cl.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef cl_uint cl_gl_object_type;
typedef cl_uint cl_gl_texture_info;
typedef cl_uint cl_gl_platform_info;
typedef struct __GLsync *cl_GLsync;
/* cl_gl_object_type = 0x2000 - 0x200F enum values are currently taken */
#define CL_GL_OBJECT_BUFFER 0x2000
#define CL_GL_OBJECT_TEXTURE2D 0x2001
#define CL_GL_OBJECT_TEXTURE3D 0x2002
#define CL_GL_OBJECT_RENDERBUFFER 0x2003
#define CL_GL_OBJECT_TEXTURE2D_ARRAY 0x200E
#define CL_GL_OBJECT_TEXTURE1D 0x200F
#define CL_GL_OBJECT_TEXTURE1D_ARRAY 0x2010
#define CL_GL_OBJECT_TEXTURE_BUFFER 0x2011
/* cl_gl_texture_info */
#define CL_GL_TEXTURE_TARGET 0x2004
#define CL_GL_MIPMAP_LEVEL 0x2005
#define CL_GL_NUM_SAMPLES 0x2012
extern CL_API_ENTRY cl_mem CL_API_CALL
clCreateFromGLBuffer(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLuint /* bufobj */,
int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
extern CL_API_ENTRY cl_mem CL_API_CALL
clCreateFromGLTexture(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLenum /* target */,
cl_GLint /* miplevel */,
cl_GLuint /* texture */,
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_2;
extern CL_API_ENTRY cl_mem CL_API_CALL
clCreateFromGLRenderbuffer(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLuint /* renderbuffer */,
cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
extern CL_API_ENTRY cl_int CL_API_CALL
clGetGLObjectInfo(cl_mem /* memobj */,
cl_gl_object_type * /* gl_object_type */,
cl_GLuint * /* gl_object_name */) CL_API_SUFFIX__VERSION_1_0;
extern CL_API_ENTRY cl_int CL_API_CALL
clGetGLTextureInfo(cl_mem /* memobj */,
cl_gl_texture_info /* param_name */,
size_t /* param_value_size */,
void * /* param_value */,
size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
extern CL_API_ENTRY cl_int CL_API_CALL
clEnqueueAcquireGLObjects(cl_command_queue /* command_queue */,
cl_uint /* num_objects */,
const cl_mem * /* mem_objects */,
cl_uint /* num_events_in_wait_list */,
const cl_event * /* event_wait_list */,
cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
extern CL_API_ENTRY cl_int CL_API_CALL
clEnqueueReleaseGLObjects(cl_command_queue /* command_queue */,
cl_uint /* num_objects */,
const cl_mem * /* mem_objects */,
cl_uint /* num_events_in_wait_list */,
const cl_event * /* event_wait_list */,
cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
/* Deprecated OpenCL 1.1 APIs */
extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
clCreateFromGLTexture2D(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLenum /* target */,
cl_GLint /* miplevel */,
cl_GLuint /* texture */,
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
clCreateFromGLTexture3D(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLenum /* target */,
cl_GLint /* miplevel */,
cl_GLuint /* texture */,
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
/* cl_khr_gl_sharing extension */
#define cl_khr_gl_sharing 1
typedef cl_uint cl_gl_context_info;
/* Additional Error Codes */
#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000
/* cl_gl_context_info */
#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR 0x2006
#define CL_DEVICES_FOR_GL_CONTEXT_KHR 0x2007
/* Additional cl_context_properties */
#define CL_GL_CONTEXT_KHR 0x2008
#define CL_EGL_DISPLAY_KHR 0x2009
#define CL_GLX_DISPLAY_KHR 0x200A
#define CL_WGL_HDC_KHR 0x200B
#define CL_CGL_SHAREGROUP_KHR 0x200C
extern CL_API_ENTRY cl_int CL_API_CALL
clGetGLContextInfoKHR(const cl_context_properties * /* properties */,
cl_gl_context_info /* param_name */,
size_t /* param_value_size */,
void * /* param_value */,
size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetGLContextInfoKHR_fn)(
const cl_context_properties * properties,
cl_gl_context_info param_name,
size_t param_value_size,
void * param_value,
size_t * param_value_size_ret);
#ifdef __cplusplus
}
#endif
#endif /* __OPENCL_CL_GL_H */

View File

@@ -0,0 +1,65 @@
/**********************************************************************************
* Copyright (c) 2008-2012 The Khronos Group Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and/or associated documentation files (the
* "Materials"), to deal in the Materials without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Materials, and to
* permit persons to whom the Materials are furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Materials.
*
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
**********************************************************************************/
/* $Revision: 11708 $ on $Date: 2010-06-13 23:36:24 -0700 (Sun, 13 Jun 2010) $ */
/* cl_gl_ext.h contains vendor (non-KHR) OpenCL extensions which have */
/* OpenGL dependencies. */
#ifndef __OPENCL_CL_GL_EXT_H
#define __OPENCL_CL_GL_EXT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <cl_gl.h>
/*
* For each extension, follow this template
* cl_VEN_extname extension */
/* #define cl_VEN_extname 1
* ... define new types, if any
* ... define new tokens, if any
* ... define new APIs, if any
*
* If you need GLtypes here, mirror them with a cl_GLtype, rather than including a GL header
* This allows us to avoid having to decide whether to include GL headers or GLES here.
*/
/*
* cl_khr_gl_event extension
* See section 9.9 in the OpenCL 1.1 spec for more information
*/
#define CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR 0x200D
extern CL_API_ENTRY cl_event CL_API_CALL
clCreateEventFromGLsyncKHR(cl_context /* context */,
cl_GLsync /* cl_GLsync */,
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1;
#ifdef __cplusplus
}
#endif
#endif /* __OPENCL_CL_GL_EXT_H */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,43 @@
/*******************************************************************************
* Copyright (c) 2008-2012 The Khronos Group Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and/or associated documentation files (the
* "Materials"), to deal in the Materials without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Materials, and to
* permit persons to whom the Materials are furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Materials.
*
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
******************************************************************************/
/* $Revision: 11708 $ on $Date: 2010-06-13 23:36:24 -0700 (Sun, 13 Jun 2010) $ */
#ifndef __OPENCL_H
#define __OPENCL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <cl.h>
#include <cl_gl.h>
#include <cl_gl_ext.h>
#include <cl_ext.h>
#ifdef __cplusplus
}
#endif
#endif /* __OPENCL_H */

View File

@@ -0,0 +1,83 @@
// +build cl12
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import (
"image"
"unsafe"
)
func (ctx *Context) CreateImage(flags MemFlag, imageFormat ImageFormat, imageDesc ImageDescription, data []byte) (*MemObject, error) {
format := imageFormat.toCl()
desc := imageDesc.toCl()
var dataPtr unsafe.Pointer
if data != nil {
dataPtr = unsafe.Pointer(&data[0])
}
var err C.cl_int
clBuffer := C.clCreateImage(ctx.clContext, C.cl_mem_flags(flags), &format, &desc, dataPtr, &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
if clBuffer == nil {
return nil, ErrUnknown
}
return newMemObject(clBuffer, len(data)), nil
}
func (ctx *Context) CreateImageSimple(flags MemFlag, width, height int, channelOrder ChannelOrder, channelDataType ChannelDataType, data []byte) (*MemObject, error) {
format := ImageFormat{channelOrder, channelDataType}
desc := ImageDescription{
Type: MemObjectTypeImage2D,
Width: width,
Height: height,
}
return ctx.CreateImage(flags, format, desc, data)
}
func (ctx *Context) CreateImageFromImage(flags MemFlag, img image.Image) (*MemObject, error) {
switch m := img.(type) {
case *image.Gray:
format := ImageFormat{ChannelOrderIntensity, ChannelDataTypeUNormInt8}
desc := ImageDescription{
Type: MemObjectTypeImage2D,
Width: m.Bounds().Dx(),
Height: m.Bounds().Dy(),
RowPitch: m.Stride,
}
return ctx.CreateImage(flags, format, desc, m.Pix)
case *image.RGBA:
format := ImageFormat{ChannelOrderRGBA, ChannelDataTypeUNormInt8}
desc := ImageDescription{
Type: MemObjectTypeImage2D,
Width: m.Bounds().Dx(),
Height: m.Bounds().Dy(),
RowPitch: m.Stride,
}
return ctx.CreateImage(flags, format, desc, m.Pix)
}
b := img.Bounds()
w := b.Dx()
h := b.Dy()
data := make([]byte, w*h*4)
dataOffset := 0
for y := 0; y < h; y++ {
for x := 0; x < w; x++ {
c := img.At(x+b.Min.X, y+b.Min.Y)
r, g, b, a := c.RGBA()
data[dataOffset] = uint8(r >> 8)
data[dataOffset+1] = uint8(g >> 8)
data[dataOffset+2] = uint8(b >> 8)
data[dataOffset+3] = uint8(a >> 8)
dataOffset += 4
}
}
return ctx.CreateImageSimple(flags, w, h, ChannelOrderRGBA, ChannelDataTypeUNormInt8, data)
}

View File

@@ -0,0 +1,127 @@
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import (
"fmt"
"unsafe"
)
type ErrUnsupportedArgumentType struct {
Index int
Value interface{}
}
func (e ErrUnsupportedArgumentType) Error() string {
return fmt.Sprintf("cl: unsupported argument type for index %d: %+v", e.Index, e.Value)
}
type Kernel struct {
clKernel C.cl_kernel
name string
}
type LocalBuffer int
func releaseKernel(k *Kernel) {
if k.clKernel != nil {
C.clReleaseKernel(k.clKernel)
k.clKernel = nil
}
}
func (k *Kernel) Release() {
releaseKernel(k)
}
func (k *Kernel) SetArgs(args ...interface{}) error {
for index, arg := range args {
if err := k.SetArg(index, arg); err != nil {
return err
}
}
return nil
}
func (k *Kernel) SetArg(index int, arg interface{}) error {
switch val := arg.(type) {
case uint8:
return k.SetArgUint8(index, val)
case int8:
return k.SetArgInt8(index, val)
case uint32:
return k.SetArgUint32(index, val)
case uint64:
return k.SetArgUint64(index, val)
case int32:
return k.SetArgInt32(index, val)
case float32:
return k.SetArgFloat32(index, val)
case *MemObject:
return k.SetArgBuffer(index, val)
case LocalBuffer:
return k.SetArgLocal(index, int(val))
default:
return ErrUnsupportedArgumentType{Index: index, Value: arg}
}
}
func (k *Kernel) SetArgBuffer(index int, buffer *MemObject) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(buffer.clMem)), unsafe.Pointer(&buffer.clMem))
}
func (k *Kernel) SetArgFloat32(index int, val float32) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
}
func (k *Kernel) SetArgInt8(index int, val int8) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
}
func (k *Kernel) SetArgUint8(index int, val uint8) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
}
func (k *Kernel) SetArgInt32(index int, val int32) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
}
func (k *Kernel) SetArgUint32(index int, val uint32) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
}
func (k *Kernel) SetArgUint64(index int, val uint64) error {
return k.SetArgUnsafe(index, int(unsafe.Sizeof(val)), unsafe.Pointer(&val))
}
func (k *Kernel) SetArgLocal(index int, size int) error {
return k.SetArgUnsafe(index, size, nil)
}
func (k *Kernel) SetArgUnsafe(index, argSize int, arg unsafe.Pointer) error {
//fmt.Println("FUNKY: ", index, argSize)
return toError(C.clSetKernelArg(k.clKernel, C.cl_uint(index), C.size_t(argSize), arg))
}
func (k *Kernel) PreferredWorkGroupSizeMultiple(device *Device) (int, error) {
var size C.size_t
err := C.clGetKernelWorkGroupInfo(k.clKernel, device.nullableId(), C.CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, C.size_t(unsafe.Sizeof(size)), unsafe.Pointer(&size), nil)
return int(size), toError(err)
}
func (k *Kernel) WorkGroupSize(device *Device) (int, error) {
var size C.size_t
err := C.clGetKernelWorkGroupInfo(k.clKernel, device.nullableId(), C.CL_KERNEL_WORK_GROUP_SIZE, C.size_t(unsafe.Sizeof(size)), unsafe.Pointer(&size), nil)
return int(size), toError(err)
}
func (k *Kernel) NumArgs() (int, error) {
var num C.cl_uint
err := C.clGetKernelInfo(k.clKernel, C.CL_KERNEL_NUM_ARGS, C.size_t(unsafe.Sizeof(num)), unsafe.Pointer(&num), nil)
return int(num), toError(err)
}

View File

@@ -0,0 +1,7 @@
// +build !cl12
package cl
func (k *Kernel) ArgName(index int) (string, error) {
return "", ErrUnsupported
}

View File

@@ -0,0 +1,20 @@
// +build cl12
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import "unsafe"
func (k *Kernel) ArgName(index int) (string, error) {
var strC [1024]byte
var strN C.size_t
if err := C.clGetKernelArgInfo(k.clKernel, C.cl_uint(index), C.CL_KERNEL_ARG_NAME, 1024, unsafe.Pointer(&strC[0]), &strN); err != C.CL_SUCCESS {
return "", toError(err)
}
return string(strC[:strN]), nil
}

View File

@@ -0,0 +1,83 @@
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import "unsafe"
const maxPlatforms = 32
type Platform struct {
id C.cl_platform_id
}
// Obtain the list of platforms available.
func GetPlatforms() ([]*Platform, error) {
var platformIds [maxPlatforms]C.cl_platform_id
var nPlatforms C.cl_uint
if err := C.clGetPlatformIDs(C.cl_uint(maxPlatforms), &platformIds[0], &nPlatforms); err != C.CL_SUCCESS {
return nil, toError(err)
}
platforms := make([]*Platform, nPlatforms)
for i := 0; i < int(nPlatforms); i++ {
platforms[i] = &Platform{id: platformIds[i]}
}
return platforms, nil
}
func (p *Platform) GetDevices(deviceType DeviceType) ([]*Device, error) {
return GetDevices(p, deviceType)
}
func (p *Platform) getInfoString(param C.cl_platform_info) (string, error) {
var strC [2048]byte
var strN C.size_t
if err := C.clGetPlatformInfo(p.id, param, 2048, unsafe.Pointer(&strC[0]), &strN); err != C.CL_SUCCESS {
return "", toError(err)
}
return string(strC[:(strN - 1)]), nil
}
func (p *Platform) Name() string {
if str, err := p.getInfoString(C.CL_PLATFORM_NAME); err != nil {
panic("Platform.Name() should never fail")
} else {
return str
}
}
func (p *Platform) Vendor() string {
if str, err := p.getInfoString(C.CL_PLATFORM_VENDOR); err != nil {
panic("Platform.Vendor() should never fail")
} else {
return str
}
}
func (p *Platform) Profile() string {
if str, err := p.getInfoString(C.CL_PLATFORM_PROFILE); err != nil {
panic("Platform.Profile() should never fail")
} else {
return str
}
}
func (p *Platform) Version() string {
if str, err := p.getInfoString(C.CL_PLATFORM_VERSION); err != nil {
panic("Platform.Version() should never fail")
} else {
return str
}
}
func (p *Platform) Extensions() string {
if str, err := p.getInfoString(C.CL_PLATFORM_EXTENSIONS); err != nil {
panic("Platform.Extensions() should never fail")
} else {
return str
}
}

View File

@@ -0,0 +1,105 @@
package cl
// #include <stdlib.h>
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import (
"fmt"
"runtime"
"unsafe"
)
type BuildError struct {
Message string
Device *Device
}
func (e BuildError) Error() string {
if e.Device != nil {
return fmt.Sprintf("cl: build error on %q: %s", e.Device.Name(), e.Message)
} else {
return fmt.Sprintf("cl: build error: %s", e.Message)
}
}
type Program struct {
clProgram C.cl_program
devices []*Device
}
func releaseProgram(p *Program) {
if p.clProgram != nil {
C.clReleaseProgram(p.clProgram)
p.clProgram = nil
}
}
func (p *Program) Release() {
releaseProgram(p)
}
func (p *Program) BuildProgram(devices []*Device, options string) error {
var cOptions *C.char
if options != "" {
cOptions = C.CString(options)
defer C.free(unsafe.Pointer(cOptions))
}
var deviceList []C.cl_device_id
var deviceListPtr *C.cl_device_id
numDevices := C.cl_uint(len(devices))
if devices != nil && len(devices) > 0 {
deviceList = buildDeviceIdList(devices)
deviceListPtr = &deviceList[0]
}
if err := C.clBuildProgram(p.clProgram, numDevices, deviceListPtr, cOptions, nil, nil); err != C.CL_SUCCESS {
buffer := make([]byte, 4096)
var bLen C.size_t
var err C.cl_int
for _, dev := range p.devices {
for i := 2; i >= 0; i-- {
err = C.clGetProgramBuildInfo(p.clProgram, dev.id, C.CL_PROGRAM_BUILD_LOG, C.size_t(len(buffer)), unsafe.Pointer(&buffer[0]), &bLen)
if err == C.CL_INVALID_VALUE && i > 0 && bLen < 1024*1024 {
// INVALID_VALUE probably means our buffer isn't large enough
buffer = make([]byte, bLen)
} else {
break
}
}
if err != C.CL_SUCCESS {
return toError(err)
}
if bLen > 1 {
return BuildError{
Device: dev,
Message: string(buffer[:bLen-1]),
}
}
}
return BuildError{
Device: nil,
Message: "build failed and produced no log entries",
}
}
return nil
}
func (p *Program) CreateKernel(name string) (*Kernel, error) {
cName := C.CString(name)
defer C.free(unsafe.Pointer(cName))
var err C.cl_int
clKernel := C.clCreateKernel(p.clProgram, cName, &err)
if err != C.CL_SUCCESS {
return nil, toError(err)
}
kernel := &Kernel{clKernel: clKernel, name: name}
runtime.SetFinalizer(kernel, releaseKernel)
return kernel, nil
}

View File

@@ -0,0 +1,193 @@
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import "unsafe"
type CommandQueueProperty int
const (
CommandQueueOutOfOrderExecModeEnable CommandQueueProperty = C.CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
CommandQueueProfilingEnable CommandQueueProperty = C.CL_QUEUE_PROFILING_ENABLE
)
type CommandQueue struct {
clQueue C.cl_command_queue
device *Device
}
func releaseCommandQueue(q *CommandQueue) {
if q.clQueue != nil {
C.clReleaseCommandQueue(q.clQueue)
q.clQueue = nil
}
}
// Call clReleaseCommandQueue on the CommandQueue. Using the CommandQueue after Release will cause a panick.
func (q *CommandQueue) Release() {
releaseCommandQueue(q)
}
// Blocks until all previously queued OpenCL commands in a command-queue are issued to the associated device and have completed.
func (q *CommandQueue) Finish() error {
return toError(C.clFinish(q.clQueue))
}
// Issues all previously queued OpenCL commands in a command-queue to the device associated with the command-queue.
func (q *CommandQueue) Flush() error {
return toError(C.clFlush(q.clQueue))
}
// Enqueues a command to map a region of the buffer object given by buffer into the host address space and returns a pointer to this mapped region.
func (q *CommandQueue) EnqueueMapBuffer(buffer *MemObject, blocking bool, flags MapFlag, offset, size int, eventWaitList []*Event) (*MappedMemObject, *Event, error) {
var event C.cl_event
var err C.cl_int
ptr := C.clEnqueueMapBuffer(q.clQueue, buffer.clMem, clBool(blocking), flags.toCl(), C.size_t(offset), C.size_t(size), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event, &err)
if err != C.CL_SUCCESS {
return nil, nil, toError(err)
}
ev := newEvent(event)
if ptr == nil {
return nil, ev, ErrUnknown
}
return &MappedMemObject{ptr: ptr, size: size}, ev, nil
}
// Enqueues a command to map a region of an image object into the host address space and returns a pointer to this mapped region.
func (q *CommandQueue) EnqueueMapImage(buffer *MemObject, blocking bool, flags MapFlag, origin, region [3]int, eventWaitList []*Event) (*MappedMemObject, *Event, error) {
cOrigin := sizeT3(origin)
cRegion := sizeT3(region)
var event C.cl_event
var err C.cl_int
var rowPitch, slicePitch C.size_t
ptr := C.clEnqueueMapImage(q.clQueue, buffer.clMem, clBool(blocking), flags.toCl(), &cOrigin[0], &cRegion[0], &rowPitch, &slicePitch, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event, &err)
if err != C.CL_SUCCESS {
return nil, nil, toError(err)
}
ev := newEvent(event)
if ptr == nil {
return nil, ev, ErrUnknown
}
size := 0 // TODO: could calculate this
return &MappedMemObject{ptr: ptr, size: size, rowPitch: int(rowPitch), slicePitch: int(slicePitch)}, ev, nil
}
// Enqueues a command to unmap a previously mapped region of a memory object.
func (q *CommandQueue) EnqueueUnmapMemObject(buffer *MemObject, mappedObj *MappedMemObject, eventWaitList []*Event) (*Event, error) {
var event C.cl_event
if err := C.clEnqueueUnmapMemObject(q.clQueue, buffer.clMem, mappedObj.ptr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event); err != C.CL_SUCCESS {
return nil, toError(err)
}
return newEvent(event), nil
}
// Enqueues a command to copy a buffer object to another buffer object.
func (q *CommandQueue) EnqueueCopyBuffer(srcBuffer, dstBuffer *MemObject, srcOffset, dstOffset, byteCount int, eventWaitList []*Event) (*Event, error) {
var event C.cl_event
err := toError(C.clEnqueueCopyBuffer(q.clQueue, srcBuffer.clMem, dstBuffer.clMem, C.size_t(srcOffset), C.size_t(dstOffset), C.size_t(byteCount), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
// Enqueue commands to write to a buffer object from host memory.
func (q *CommandQueue) EnqueueWriteBuffer(buffer *MemObject, blocking bool, offset, dataSize int, dataPtr unsafe.Pointer, eventWaitList []*Event) (*Event, error) {
var event C.cl_event
err := toError(C.clEnqueueWriteBuffer(q.clQueue, buffer.clMem, clBool(blocking), C.size_t(offset), C.size_t(dataSize), dataPtr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
func (q *CommandQueue) EnqueueWriteBufferFloat32(buffer *MemObject, blocking bool, offset int, data []float32, eventWaitList []*Event) (*Event, error) {
dataPtr := unsafe.Pointer(&data[0])
dataSize := int(unsafe.Sizeof(data[0])) * len(data)
return q.EnqueueWriteBuffer(buffer, blocking, offset, dataSize, dataPtr, eventWaitList)
}
// Enqueue commands to read from a buffer object to host memory.
func (q *CommandQueue) EnqueueReadBuffer(buffer *MemObject, blocking bool, offset, dataSize int, dataPtr unsafe.Pointer, eventWaitList []*Event) (*Event, error) {
var event C.cl_event
err := toError(C.clEnqueueReadBuffer(q.clQueue, buffer.clMem, clBool(blocking), C.size_t(offset), C.size_t(dataSize), dataPtr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
func (q *CommandQueue) EnqueueReadBufferFloat32(buffer *MemObject, blocking bool, offset int, data []float32, eventWaitList []*Event) (*Event, error) {
dataPtr := unsafe.Pointer(&data[0])
dataSize := int(unsafe.Sizeof(data[0])) * len(data)
return q.EnqueueReadBuffer(buffer, blocking, offset, dataSize, dataPtr, eventWaitList)
}
// Enqueues a command to execute a kernel on a device.
func (q *CommandQueue) EnqueueNDRangeKernel(kernel *Kernel, globalWorkOffset, globalWorkSize, localWorkSize []int, eventWaitList []*Event) (*Event, error) {
workDim := len(globalWorkSize)
var globalWorkOffsetList []C.size_t
var globalWorkOffsetPtr *C.size_t
if globalWorkOffset != nil {
globalWorkOffsetList = make([]C.size_t, len(globalWorkOffset))
for i, off := range globalWorkOffset {
globalWorkOffsetList[i] = C.size_t(off)
}
globalWorkOffsetPtr = &globalWorkOffsetList[0]
}
var globalWorkSizeList []C.size_t
var globalWorkSizePtr *C.size_t
if globalWorkSize != nil {
globalWorkSizeList = make([]C.size_t, len(globalWorkSize))
for i, off := range globalWorkSize {
globalWorkSizeList[i] = C.size_t(off)
}
globalWorkSizePtr = &globalWorkSizeList[0]
}
var localWorkSizeList []C.size_t
var localWorkSizePtr *C.size_t
if localWorkSize != nil {
localWorkSizeList = make([]C.size_t, len(localWorkSize))
for i, off := range localWorkSize {
localWorkSizeList[i] = C.size_t(off)
}
localWorkSizePtr = &localWorkSizeList[0]
}
var event C.cl_event
err := toError(C.clEnqueueNDRangeKernel(q.clQueue, kernel.clKernel, C.cl_uint(workDim), globalWorkOffsetPtr, globalWorkSizePtr, localWorkSizePtr, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
// Enqueues a command to read from a 2D or 3D image object to host memory.
func (q *CommandQueue) EnqueueReadImage(image *MemObject, blocking bool, origin, region [3]int, rowPitch, slicePitch int, data []byte, eventWaitList []*Event) (*Event, error) {
cOrigin := sizeT3(origin)
cRegion := sizeT3(region)
var event C.cl_event
err := toError(C.clEnqueueReadImage(q.clQueue, image.clMem, clBool(blocking), &cOrigin[0], &cRegion[0], C.size_t(rowPitch), C.size_t(slicePitch), unsafe.Pointer(&data[0]), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
// Enqueues a command to write from a 2D or 3D image object to host memory.
func (q *CommandQueue) EnqueueWriteImage(image *MemObject, blocking bool, origin, region [3]int, rowPitch, slicePitch int, data []byte, eventWaitList []*Event) (*Event, error) {
cOrigin := sizeT3(origin)
cRegion := sizeT3(region)
var event C.cl_event
err := toError(C.clEnqueueWriteImage(q.clQueue, image.clMem, clBool(blocking), &cOrigin[0], &cRegion[0], C.size_t(rowPitch), C.size_t(slicePitch), unsafe.Pointer(&data[0]), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
func (q *CommandQueue) EnqueueFillBuffer(buffer *MemObject, pattern unsafe.Pointer, patternSize, offset, size int, eventWaitList []*Event) (*Event, error) {
var event C.cl_event
err := toError(C.clEnqueueFillBuffer(q.clQueue, buffer.clMem, pattern, C.size_t(patternSize), C.size_t(offset), C.size_t(size), C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
// A synchronization point that enqueues a barrier operation.
func (q *CommandQueue) EnqueueBarrierWithWaitList(eventWaitList []*Event) (*Event, error) {
var event C.cl_event
err := toError(C.clEnqueueBarrierWithWaitList(q.clQueue, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}
// Enqueues a marker command which waits for either a list of events to complete, or all previously enqueued commands to complete.
func (q *CommandQueue) EnqueueMarkerWithWaitList(eventWaitList []*Event) (*Event, error) {
var event C.cl_event
err := toError(C.clEnqueueMarkerWithWaitList(q.clQueue, C.cl_uint(len(eventWaitList)), eventListPtr(eventWaitList), &event))
return newEvent(event), err
}

View File

@@ -0,0 +1,487 @@
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
import (
"errors"
"fmt"
"reflect"
"runtime"
"strings"
"unsafe"
)
var (
ErrUnknown = errors.New("cl: unknown error") // Generally an unexpected result from an OpenCL function (e.g. CL_SUCCESS but null pointer)
)
type ErrOther int
func (e ErrOther) Error() string {
return fmt.Sprintf("cl: error %d", int(e))
}
var (
ErrDeviceNotFound = errors.New("cl: Device Not Found")
ErrDeviceNotAvailable = errors.New("cl: Device Not Available")
ErrCompilerNotAvailable = errors.New("cl: Compiler Not Available")
ErrMemObjectAllocationFailure = errors.New("cl: Mem Object Allocation Failure")
ErrOutOfResources = errors.New("cl: Out Of Resources")
ErrOutOfHostMemory = errors.New("cl: Out Of Host Memory")
ErrProfilingInfoNotAvailable = errors.New("cl: Profiling Info Not Available")
ErrMemCopyOverlap = errors.New("cl: Mem Copy Overlap")
ErrImageFormatMismatch = errors.New("cl: Image Format Mismatch")
ErrImageFormatNotSupported = errors.New("cl: Image Format Not Supported")
ErrBuildProgramFailure = errors.New("cl: Build Program Failure")
ErrMapFailure = errors.New("cl: Map Failure")
ErrMisalignedSubBufferOffset = errors.New("cl: Misaligned Sub Buffer Offset")
ErrExecStatusErrorForEventsInWaitList = errors.New("cl: Exec Status Error For Events In Wait List")
ErrCompileProgramFailure = errors.New("cl: Compile Program Failure")
ErrLinkerNotAvailable = errors.New("cl: Linker Not Available")
ErrLinkProgramFailure = errors.New("cl: Link Program Failure")
ErrDevicePartitionFailed = errors.New("cl: Device Partition Failed")
ErrKernelArgInfoNotAvailable = errors.New("cl: Kernel Arg Info Not Available")
ErrInvalidValue = errors.New("cl: Invalid Value")
ErrInvalidDeviceType = errors.New("cl: Invalid Device Type")
ErrInvalidPlatform = errors.New("cl: Invalid Platform")
ErrInvalidDevice = errors.New("cl: Invalid Device")
ErrInvalidContext = errors.New("cl: Invalid Context")
ErrInvalidQueueProperties = errors.New("cl: Invalid Queue Properties")
ErrInvalidCommandQueue = errors.New("cl: Invalid Command Queue")
ErrInvalidHostPtr = errors.New("cl: Invalid Host Ptr")
ErrInvalidMemObject = errors.New("cl: Invalid Mem Object")
ErrInvalidImageFormatDescriptor = errors.New("cl: Invalid Image Format Descriptor")
ErrInvalidImageSize = errors.New("cl: Invalid Image Size")
ErrInvalidSampler = errors.New("cl: Invalid Sampler")
ErrInvalidBinary = errors.New("cl: Invalid Binary")
ErrInvalidBuildOptions = errors.New("cl: Invalid Build Options")
ErrInvalidProgram = errors.New("cl: Invalid Program")
ErrInvalidProgramExecutable = errors.New("cl: Invalid Program Executable")
ErrInvalidKernelName = errors.New("cl: Invalid Kernel Name")
ErrInvalidKernelDefinition = errors.New("cl: Invalid Kernel Definition")
ErrInvalidKernel = errors.New("cl: Invalid Kernel")
ErrInvalidArgIndex = errors.New("cl: Invalid Arg Index")
ErrInvalidArgValue = errors.New("cl: Invalid Arg Value")
ErrInvalidArgSize = errors.New("cl: Invalid Arg Size")
ErrInvalidKernelArgs = errors.New("cl: Invalid Kernel Args")
ErrInvalidWorkDimension = errors.New("cl: Invalid Work Dimension")
ErrInvalidWorkGroupSize = errors.New("cl: Invalid Work Group Size")
ErrInvalidWorkItemSize = errors.New("cl: Invalid Work Item Size")
ErrInvalidGlobalOffset = errors.New("cl: Invalid Global Offset")
ErrInvalidEventWaitList = errors.New("cl: Invalid Event Wait List")
ErrInvalidEvent = errors.New("cl: Invalid Event")
ErrInvalidOperation = errors.New("cl: Invalid Operation")
ErrInvalidGlObject = errors.New("cl: Invalid Gl Object")
ErrInvalidBufferSize = errors.New("cl: Invalid Buffer Size")
ErrInvalidMipLevel = errors.New("cl: Invalid Mip Level")
ErrInvalidGlobalWorkSize = errors.New("cl: Invalid Global Work Size")
ErrInvalidProperty = errors.New("cl: Invalid Property")
ErrInvalidImageDescriptor = errors.New("cl: Invalid Image Descriptor")
ErrInvalidCompilerOptions = errors.New("cl: Invalid Compiler Options")
ErrInvalidLinkerOptions = errors.New("cl: Invalid Linker Options")
ErrInvalidDevicePartitionCount = errors.New("cl: Invalid Device Partition Count")
)
var errorMap = map[C.cl_int]error{
C.CL_SUCCESS: nil,
C.CL_DEVICE_NOT_FOUND: ErrDeviceNotFound,
C.CL_DEVICE_NOT_AVAILABLE: ErrDeviceNotAvailable,
C.CL_COMPILER_NOT_AVAILABLE: ErrCompilerNotAvailable,
C.CL_MEM_OBJECT_ALLOCATION_FAILURE: ErrMemObjectAllocationFailure,
C.CL_OUT_OF_RESOURCES: ErrOutOfResources,
C.CL_OUT_OF_HOST_MEMORY: ErrOutOfHostMemory,
C.CL_PROFILING_INFO_NOT_AVAILABLE: ErrProfilingInfoNotAvailable,
C.CL_MEM_COPY_OVERLAP: ErrMemCopyOverlap,
C.CL_IMAGE_FORMAT_MISMATCH: ErrImageFormatMismatch,
C.CL_IMAGE_FORMAT_NOT_SUPPORTED: ErrImageFormatNotSupported,
C.CL_BUILD_PROGRAM_FAILURE: ErrBuildProgramFailure,
C.CL_MAP_FAILURE: ErrMapFailure,
C.CL_MISALIGNED_SUB_BUFFER_OFFSET: ErrMisalignedSubBufferOffset,
C.CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: ErrExecStatusErrorForEventsInWaitList,
C.CL_INVALID_VALUE: ErrInvalidValue,
C.CL_INVALID_DEVICE_TYPE: ErrInvalidDeviceType,
C.CL_INVALID_PLATFORM: ErrInvalidPlatform,
C.CL_INVALID_DEVICE: ErrInvalidDevice,
C.CL_INVALID_CONTEXT: ErrInvalidContext,
C.CL_INVALID_QUEUE_PROPERTIES: ErrInvalidQueueProperties,
C.CL_INVALID_COMMAND_QUEUE: ErrInvalidCommandQueue,
C.CL_INVALID_HOST_PTR: ErrInvalidHostPtr,
C.CL_INVALID_MEM_OBJECT: ErrInvalidMemObject,
C.CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: ErrInvalidImageFormatDescriptor,
C.CL_INVALID_IMAGE_SIZE: ErrInvalidImageSize,
C.CL_INVALID_SAMPLER: ErrInvalidSampler,
C.CL_INVALID_BINARY: ErrInvalidBinary,
C.CL_INVALID_BUILD_OPTIONS: ErrInvalidBuildOptions,
C.CL_INVALID_PROGRAM: ErrInvalidProgram,
C.CL_INVALID_PROGRAM_EXECUTABLE: ErrInvalidProgramExecutable,
C.CL_INVALID_KERNEL_NAME: ErrInvalidKernelName,
C.CL_INVALID_KERNEL_DEFINITION: ErrInvalidKernelDefinition,
C.CL_INVALID_KERNEL: ErrInvalidKernel,
C.CL_INVALID_ARG_INDEX: ErrInvalidArgIndex,
C.CL_INVALID_ARG_VALUE: ErrInvalidArgValue,
C.CL_INVALID_ARG_SIZE: ErrInvalidArgSize,
C.CL_INVALID_KERNEL_ARGS: ErrInvalidKernelArgs,
C.CL_INVALID_WORK_DIMENSION: ErrInvalidWorkDimension,
C.CL_INVALID_WORK_GROUP_SIZE: ErrInvalidWorkGroupSize,
C.CL_INVALID_WORK_ITEM_SIZE: ErrInvalidWorkItemSize,
C.CL_INVALID_GLOBAL_OFFSET: ErrInvalidGlobalOffset,
C.CL_INVALID_EVENT_WAIT_LIST: ErrInvalidEventWaitList,
C.CL_INVALID_EVENT: ErrInvalidEvent,
C.CL_INVALID_OPERATION: ErrInvalidOperation,
C.CL_INVALID_GL_OBJECT: ErrInvalidGlObject,
C.CL_INVALID_BUFFER_SIZE: ErrInvalidBufferSize,
C.CL_INVALID_MIP_LEVEL: ErrInvalidMipLevel,
C.CL_INVALID_GLOBAL_WORK_SIZE: ErrInvalidGlobalWorkSize,
C.CL_INVALID_PROPERTY: ErrInvalidProperty,
}
func toError(code C.cl_int) error {
if err, ok := errorMap[code]; ok {
return err
}
return ErrOther(code)
}
type LocalMemType int
const (
LocalMemTypeNone LocalMemType = C.CL_NONE
LocalMemTypeGlobal LocalMemType = C.CL_GLOBAL
LocalMemTypeLocal LocalMemType = C.CL_LOCAL
)
var localMemTypeMap = map[LocalMemType]string{
LocalMemTypeNone: "None",
LocalMemTypeGlobal: "Global",
LocalMemTypeLocal: "Local",
}
func (t LocalMemType) String() string {
name := localMemTypeMap[t]
if name == "" {
name = "Unknown"
}
return name
}
type ExecCapability int
const (
ExecCapabilityKernel ExecCapability = C.CL_EXEC_KERNEL // The OpenCL device can execute OpenCL kernels.
ExecCapabilityNativeKernel ExecCapability = C.CL_EXEC_NATIVE_KERNEL // The OpenCL device can execute native kernels.
)
func (ec ExecCapability) String() string {
var parts []string
if ec&ExecCapabilityKernel != 0 {
parts = append(parts, "Kernel")
}
if ec&ExecCapabilityNativeKernel != 0 {
parts = append(parts, "NativeKernel")
}
if parts == nil {
return ""
}
return strings.Join(parts, "|")
}
type MemCacheType int
const (
MemCacheTypeNone MemCacheType = C.CL_NONE
MemCacheTypeReadOnlyCache MemCacheType = C.CL_READ_ONLY_CACHE
MemCacheTypeReadWriteCache MemCacheType = C.CL_READ_WRITE_CACHE
)
func (ct MemCacheType) String() string {
switch ct {
case MemCacheTypeNone:
return "None"
case MemCacheTypeReadOnlyCache:
return "ReadOnly"
case MemCacheTypeReadWriteCache:
return "ReadWrite"
}
return fmt.Sprintf("Unknown(%x)", int(ct))
}
type MemFlag int
const (
MemReadWrite MemFlag = C.CL_MEM_READ_WRITE
MemWriteOnly MemFlag = C.CL_MEM_WRITE_ONLY
MemReadOnly MemFlag = C.CL_MEM_READ_ONLY
MemUseHostPtr MemFlag = C.CL_MEM_USE_HOST_PTR
MemAllocHostPtr MemFlag = C.CL_MEM_ALLOC_HOST_PTR
MemCopyHostPtr MemFlag = C.CL_MEM_COPY_HOST_PTR
MemWriteOnlyHost MemFlag = C.CL_MEM_HOST_WRITE_ONLY
MemReadOnlyHost MemFlag = C.CL_MEM_HOST_READ_ONLY
MemNoAccessHost MemFlag = C.CL_MEM_HOST_NO_ACCESS
)
type MemObjectType int
const (
MemObjectTypeBuffer MemObjectType = C.CL_MEM_OBJECT_BUFFER
MemObjectTypeImage2D MemObjectType = C.CL_MEM_OBJECT_IMAGE2D
MemObjectTypeImage3D MemObjectType = C.CL_MEM_OBJECT_IMAGE3D
)
type MapFlag int
const (
// This flag specifies that the region being mapped in the memory object is being mapped for reading.
MapFlagRead MapFlag = C.CL_MAP_READ
MapFlagWrite MapFlag = C.CL_MAP_WRITE
MapFlagWriteInvalidateRegion MapFlag = C.CL_MAP_WRITE_INVALIDATE_REGION
)
func (mf MapFlag) toCl() C.cl_map_flags {
return C.cl_map_flags(mf)
}
type ChannelOrder int
const (
ChannelOrderR ChannelOrder = C.CL_R
ChannelOrderA ChannelOrder = C.CL_A
ChannelOrderRG ChannelOrder = C.CL_RG
ChannelOrderRA ChannelOrder = C.CL_RA
ChannelOrderRGB ChannelOrder = C.CL_RGB
ChannelOrderRGBA ChannelOrder = C.CL_RGBA
ChannelOrderBGRA ChannelOrder = C.CL_BGRA
ChannelOrderARGB ChannelOrder = C.CL_ARGB
ChannelOrderIntensity ChannelOrder = C.CL_INTENSITY
ChannelOrderLuminance ChannelOrder = C.CL_LUMINANCE
ChannelOrderRx ChannelOrder = C.CL_Rx
ChannelOrderRGx ChannelOrder = C.CL_RGx
ChannelOrderRGBx ChannelOrder = C.CL_RGBx
)
var channelOrderNameMap = map[ChannelOrder]string{
ChannelOrderR: "R",
ChannelOrderA: "A",
ChannelOrderRG: "RG",
ChannelOrderRA: "RA",
ChannelOrderRGB: "RGB",
ChannelOrderRGBA: "RGBA",
ChannelOrderBGRA: "BGRA",
ChannelOrderARGB: "ARGB",
ChannelOrderIntensity: "Intensity",
ChannelOrderLuminance: "Luminance",
ChannelOrderRx: "Rx",
ChannelOrderRGx: "RGx",
ChannelOrderRGBx: "RGBx",
}
func (co ChannelOrder) String() string {
name := channelOrderNameMap[co]
if name == "" {
name = fmt.Sprintf("Unknown(%x)", int(co))
}
return name
}
type ChannelDataType int
const (
ChannelDataTypeSNormInt8 ChannelDataType = C.CL_SNORM_INT8
ChannelDataTypeSNormInt16 ChannelDataType = C.CL_SNORM_INT16
ChannelDataTypeUNormInt8 ChannelDataType = C.CL_UNORM_INT8
ChannelDataTypeUNormInt16 ChannelDataType = C.CL_UNORM_INT16
ChannelDataTypeUNormShort565 ChannelDataType = C.CL_UNORM_SHORT_565
ChannelDataTypeUNormShort555 ChannelDataType = C.CL_UNORM_SHORT_555
ChannelDataTypeUNormInt101010 ChannelDataType = C.CL_UNORM_INT_101010
ChannelDataTypeSignedInt8 ChannelDataType = C.CL_SIGNED_INT8
ChannelDataTypeSignedInt16 ChannelDataType = C.CL_SIGNED_INT16
ChannelDataTypeSignedInt32 ChannelDataType = C.CL_SIGNED_INT32
ChannelDataTypeUnsignedInt8 ChannelDataType = C.CL_UNSIGNED_INT8
ChannelDataTypeUnsignedInt16 ChannelDataType = C.CL_UNSIGNED_INT16
ChannelDataTypeUnsignedInt32 ChannelDataType = C.CL_UNSIGNED_INT32
ChannelDataTypeHalfFloat ChannelDataType = C.CL_HALF_FLOAT
ChannelDataTypeFloat ChannelDataType = C.CL_FLOAT
)
var channelDataTypeNameMap = map[ChannelDataType]string{
ChannelDataTypeSNormInt8: "SNormInt8",
ChannelDataTypeSNormInt16: "SNormInt16",
ChannelDataTypeUNormInt8: "UNormInt8",
ChannelDataTypeUNormInt16: "UNormInt16",
ChannelDataTypeUNormShort565: "UNormShort565",
ChannelDataTypeUNormShort555: "UNormShort555",
ChannelDataTypeUNormInt101010: "UNormInt101010",
ChannelDataTypeSignedInt8: "SignedInt8",
ChannelDataTypeSignedInt16: "SignedInt16",
ChannelDataTypeSignedInt32: "SignedInt32",
ChannelDataTypeUnsignedInt8: "UnsignedInt8",
ChannelDataTypeUnsignedInt16: "UnsignedInt16",
ChannelDataTypeUnsignedInt32: "UnsignedInt32",
ChannelDataTypeHalfFloat: "HalfFloat",
ChannelDataTypeFloat: "Float",
}
func (ct ChannelDataType) String() string {
name := channelDataTypeNameMap[ct]
if name == "" {
name = fmt.Sprintf("Unknown(%x)", int(ct))
}
return name
}
type ImageFormat struct {
ChannelOrder ChannelOrder
ChannelDataType ChannelDataType
}
func (f ImageFormat) toCl() C.cl_image_format {
var format C.cl_image_format
format.image_channel_order = C.cl_channel_order(f.ChannelOrder)
format.image_channel_data_type = C.cl_channel_type(f.ChannelDataType)
return format
}
type ProfilingInfo int
const (
// A 64-bit value that describes the current device time counter in
// nanoseconds when the command identified by event is enqueued in
// a command-queue by the host.
ProfilingInfoCommandQueued ProfilingInfo = C.CL_PROFILING_COMMAND_QUEUED
// A 64-bit value that describes the current device time counter in
// nanoseconds when the command identified by event that has been
// enqueued is submitted by the host to the device associated with the command-queue.
ProfilingInfoCommandSubmit ProfilingInfo = C.CL_PROFILING_COMMAND_SUBMIT
// A 64-bit value that describes the current device time counter in
// nanoseconds when the command identified by event starts execution on the device.
ProfilingInfoCommandStart ProfilingInfo = C.CL_PROFILING_COMMAND_START
// A 64-bit value that describes the current device time counter in
// nanoseconds when the command identified by event has finished
// execution on the device.
ProfilingInfoCommandEnd ProfilingInfo = C.CL_PROFILING_COMMAND_END
)
type CommmandExecStatus int
const (
CommmandExecStatusComplete CommmandExecStatus = C.CL_COMPLETE
CommmandExecStatusRunning CommmandExecStatus = C.CL_RUNNING
CommmandExecStatusSubmitted CommmandExecStatus = C.CL_SUBMITTED
CommmandExecStatusQueued CommmandExecStatus = C.CL_QUEUED
)
type Event struct {
clEvent C.cl_event
}
func releaseEvent(ev *Event) {
if ev.clEvent != nil {
C.clReleaseEvent(ev.clEvent)
ev.clEvent = nil
}
}
func (e *Event) Release() {
releaseEvent(e)
}
func (e *Event) GetEventProfilingInfo(paramName ProfilingInfo) (int64, error) {
var paramValue C.cl_ulong
if err := C.clGetEventProfilingInfo(e.clEvent, C.cl_profiling_info(paramName), C.size_t(unsafe.Sizeof(paramValue)), unsafe.Pointer(&paramValue), nil); err != C.CL_SUCCESS {
return 0, toError(err)
}
return int64(paramValue), nil
}
// Sets the execution status of a user event object.
//
// `status` specifies the new execution status to be set and
// can be CL_COMPLETE or a negative integer value to indicate
// an error. A negative integer value causes all enqueued commands
// that wait on this user event to be terminated. clSetUserEventStatus
// can only be called once to change the execution status of event.
func (e *Event) SetUserEventStatus(status int) error {
return toError(C.clSetUserEventStatus(e.clEvent, C.cl_int(status)))
}
// Waits on the host thread for commands identified by event objects in
// events to complete. A command is considered complete if its execution
// status is CL_COMPLETE or a negative value. The events specified in
// event_list act as synchronization points.
//
// If the cl_khr_gl_event extension is enabled, event objects can also be
// used to reflect the status of an OpenGL sync object. The sync object
// in turn refers to a fence command executing in an OpenGL command
// stream. This provides another method of coordinating sharing of buffers
// and images between OpenGL and OpenCL.
func WaitForEvents(events []*Event) error {
return toError(C.clWaitForEvents(C.cl_uint(len(events)), eventListPtr(events)))
}
func newEvent(clEvent C.cl_event) *Event {
ev := &Event{clEvent: clEvent}
runtime.SetFinalizer(ev, releaseEvent)
return ev
}
func eventListPtr(el []*Event) *C.cl_event {
if el == nil {
return nil
}
elist := make([]C.cl_event, len(el))
for i, e := range el {
elist[i] = e.clEvent
}
return (*C.cl_event)(&elist[0])
}
func clBool(b bool) C.cl_bool {
if b {
return C.CL_TRUE
}
return C.CL_FALSE
}
func sizeT3(i3 [3]int) [3]C.size_t {
var val [3]C.size_t
val[0] = C.size_t(i3[0])
val[1] = C.size_t(i3[1])
val[2] = C.size_t(i3[2])
return val
}
type MappedMemObject struct {
ptr unsafe.Pointer
size int
rowPitch int
slicePitch int
}
func (mb *MappedMemObject) ByteSlice() []byte {
var byteSlice []byte
sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&byteSlice))
sliceHeader.Cap = mb.size
sliceHeader.Len = mb.size
sliceHeader.Data = uintptr(mb.ptr)
return byteSlice
}
func (mb *MappedMemObject) Ptr() unsafe.Pointer {
return mb.ptr
}
func (mb *MappedMemObject) Size() int {
return mb.size
}
func (mb *MappedMemObject) RowPitch() int {
return mb.rowPitch
}
func (mb *MappedMemObject) SlicePitch() int {
return mb.slicePitch
}

View File

@@ -0,0 +1,71 @@
// +build cl12
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
const (
ChannelDataTypeUNormInt24 ChannelDataType = C.CL_UNORM_INT24
ChannelOrderDepth ChannelOrder = C.CL_DEPTH
ChannelOrderDepthStencil ChannelOrder = C.CL_DEPTH_STENCIL
MemHostNoAccess MemFlag = C.CL_MEM_HOST_NO_ACCESS // OpenCL 1.2
MemHostReadOnly MemFlag = C.CL_MEM_HOST_READ_ONLY // OpenCL 1.2
MemHostWriteOnly MemFlag = C.CL_MEM_HOST_WRITE_ONLY // OpenCL 1.2
MemObjectTypeImage1D MemObjectType = C.CL_MEM_OBJECT_IMAGE1D
MemObjectTypeImage1DArray MemObjectType = C.CL_MEM_OBJECT_IMAGE1D_ARRAY
MemObjectTypeImage1DBuffer MemObjectType = C.CL_MEM_OBJECT_IMAGE1D_BUFFER
MemObjectTypeImage2DArray MemObjectType = C.CL_MEM_OBJECT_IMAGE2D_ARRAY
// This flag specifies that the region being mapped in the memory object is being mapped for writing.
//
// The contents of the region being mapped are to be discarded. This is typically the case when the
// region being mapped is overwritten by the host. This flag allows the implementation to no longer
// guarantee that the pointer returned by clEnqueueMapBuffer or clEnqueueMapImage contains the
// latest bits in the region being mapped which can be a significant performance enhancement.
MapFlagWriteInvalidateRegion MapFlag = C.CL_MAP_WRITE_INVALIDATE_REGION
)
func init() {
errorMap[C.CL_COMPILE_PROGRAM_FAILURE] = ErrCompileProgramFailure
errorMap[C.CL_DEVICE_PARTITION_FAILED] = ErrDevicePartitionFailed
errorMap[C.CL_INVALID_COMPILER_OPTIONS] = ErrInvalidCompilerOptions
errorMap[C.CL_INVALID_DEVICE_PARTITION_COUNT] = ErrInvalidDevicePartitionCount
errorMap[C.CL_INVALID_IMAGE_DESCRIPTOR] = ErrInvalidImageDescriptor
errorMap[C.CL_INVALID_LINKER_OPTIONS] = ErrInvalidLinkerOptions
errorMap[C.CL_KERNEL_ARG_INFO_NOT_AVAILABLE] = ErrKernelArgInfoNotAvailable
errorMap[C.CL_LINK_PROGRAM_FAILURE] = ErrLinkProgramFailure
errorMap[C.CL_LINKER_NOT_AVAILABLE] = ErrLinkerNotAvailable
channelOrderNameMap[ChannelOrderDepth] = "Depth"
channelOrderNameMap[ChannelOrderDepthStencil] = "DepthStencil"
channelDataTypeNameMap[ChannelDataTypeUNormInt24] = "UNormInt24"
}
type ImageDescription struct {
Type MemObjectType
Width, Height, Depth int
ArraySize, RowPitch, SlicePitch int
NumMipLevels, NumSamples int
Buffer *MemObject
}
func (d ImageDescription) toCl() C.cl_image_desc {
var desc C.cl_image_desc
desc.image_type = C.cl_mem_object_type(d.Type)
desc.image_width = C.size_t(d.Width)
desc.image_height = C.size_t(d.Height)
desc.image_depth = C.size_t(d.Depth)
desc.image_array_size = C.size_t(d.ArraySize)
desc.image_row_pitch = C.size_t(d.RowPitch)
desc.image_slice_pitch = C.size_t(d.SlicePitch)
desc.num_mip_levels = C.cl_uint(d.NumMipLevels)
desc.num_samples = C.cl_uint(d.NumSamples)
desc.buffer = nil
if d.Buffer != nil {
desc.buffer = d.Buffer.clMem
}
return desc
}

View File

@@ -0,0 +1,45 @@
package cl
// #ifdef __APPLE__
// #include "OpenCL/opencl.h"
// #else
// #include "cl.h"
// #endif
import "C"
// Extension: cl_APPLE_fixed_alpha_channel_orders
//
// These selectors may be passed to clCreateImage2D() in the cl_image_format.image_channel_order field.
// They are like CL_BGRA and CL_ARGB except that the alpha channel to be ignored. On calls to read_imagef,
// the alpha will be 0xff (1.0f) if the sample falls in the image and 0 if it does not fall in the image.
// On calls to write_imagef, the alpha value is ignored and 0xff (1.0f) is written. These formats are
// currently only available for the CL_UNORM_INT8 cl_channel_type. They are intended to support legacy
// image formats.
const (
ChannelOrder1RGBApple ChannelOrder = C.CL_1RGB_APPLE // Introduced in MacOS X.7.
ChannelOrderBGR1Apple ChannelOrder = C.CL_BGR1_APPLE // Introduced in MacOS X.7.
)
// Extension: cl_APPLE_biased_fixed_point_image_formats
//
// This selector may be passed to clCreateImage2D() in the cl_image_format.image_channel_data_type field.
// It defines a biased signed 1.14 fixed point storage format, with range [-1, 3). The conversion from
// float to this fixed point format is defined as follows:
//
// ushort float_to_sfixed14( float x ){
// int i = convert_int_sat_rte( x * 0x1.0p14f ); // scale [-1, 3.0) to [-16384, 3*16384), round to nearest integer
// i = add_sat( i, 0x4000 ); // apply bias, to convert to [0, 65535) range
// return convert_ushort_sat(i); // clamp to destination size
// }
//
// The inverse conversion is the reverse process. The formats are currently only available on the CPU with
// the CL_RGBA channel layout.
const (
ChannelDataTypeSFixed14Apple ChannelDataType = C.CL_SFIXED14_APPLE // Introduced in MacOS X.7.
)
func init() {
channelOrderNameMap[ChannelOrder1RGBApple] = "1RGBApple"
channelOrderNameMap[ChannelOrderBGR1Apple] = "RGB1Apple"
channelDataTypeNameMap[ChannelDataTypeSFixed14Apple] = "SFixed14Apple"
}

View File

@@ -0,0 +1,19 @@
Copyright (c) 2015 Caleb Spare
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,9 @@
# cp
[![GoDoc](https://godoc.org/github.com/cespare/cp?status.svg)](https://godoc.org/github.com/cespare/cp)
cp is a small Go package for copying files and directories.
The API may change because I want to add some options in the future (for merging with existing dirs).
It does not currently handle Windows specifically (I think it may require some special treatment).

58
Godeps/_workspace/src/github.com/cespare/cp/cp.go generated vendored Normal file
View File

@@ -0,0 +1,58 @@
// Package cp offers simple file and directory copying for Go.
package cp
import (
"errors"
"io"
"os"
"path/filepath"
"strings"
)
var errCopyFileWithDir = errors.New("dir argument to CopyFile")
// CopyFile copies the file with path src to dst. The new file must not exist.
// It is created with the same permissions as src.
func CopyFile(dst, src string) error {
rf, err := os.Open(src)
if err != nil {
return err
}
defer rf.Close()
rstat, err := rf.Stat()
if err != nil {
return err
}
if rstat.IsDir() {
return errCopyFileWithDir
}
wf, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_EXCL, rstat.Mode())
if err != nil {
return err
}
if _, err := io.Copy(wf, rf); err != nil {
wf.Close()
return err
}
return wf.Close()
}
// CopyAll copies the file or (recursively) the directory at src to dst.
// Permissions are preserved. dst must not already exist.
func CopyAll(dst, src string) error {
return filepath.Walk(src, makeWalkFn(dst, src))
}
func makeWalkFn(dst, src string) filepath.WalkFunc {
return func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
dstPath := filepath.Join(dst, strings.TrimPrefix(path, src))
if info.IsDir() {
return os.Mkdir(dstPath, info.Mode())
}
return CopyFile(dstPath, path)
}
}

View File

@@ -0,0 +1,19 @@
language: go
sudo: false
go:
- 1.0.3
- 1.1.2
- 1.2.2
- 1.3.3
- 1.4.2
- 1.5.1
- tip
matrix:
allow_failures:
- go: tip
script:
- go vet ./...
- go test -v ./...

View File

@@ -0,0 +1,21 @@
Copyright (C) 2013 Jeremy Saenz
All Rights Reserved.
MIT LICENSE
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,352 @@
[![Coverage](http://gocover.io/_badge/github.com/codegangsta/cli?0)](http://gocover.io/github.com/codegangsta/cli)
[![Build Status](https://travis-ci.org/codegangsta/cli.svg?branch=master)](https://travis-ci.org/codegangsta/cli)
[![GoDoc](https://godoc.org/github.com/codegangsta/cli?status.svg)](https://godoc.org/github.com/codegangsta/cli)
# cli.go
`cli.go` is simple, fast, and fun package for building command line apps in Go. The goal is to enable developers to write fast and distributable command line applications in an expressive way.
## Overview
Command line apps are usually so tiny that there is absolutely no reason why your code should *not* be self-documenting. Things like generating help text and parsing command flags/options should not hinder productivity when writing a command line app.
**This is where `cli.go` comes into play.** `cli.go` makes command line programming fun, organized, and expressive!
## Installation
Make sure you have a working Go environment (go 1.1+ is *required*). [See the install instructions](http://golang.org/doc/install.html).
To install `cli.go`, simply run:
```
$ go get github.com/codegangsta/cli
```
Make sure your `PATH` includes to the `$GOPATH/bin` directory so your commands can be easily used:
```
export PATH=$PATH:$GOPATH/bin
```
## Getting Started
One of the philosophies behind `cli.go` is that an API should be playful and full of discovery. So a `cli.go` app can be as little as one line of code in `main()`.
``` go
package main
import (
"os"
"github.com/codegangsta/cli"
)
func main() {
cli.NewApp().Run(os.Args)
}
```
This app will run and show help text, but is not very useful. Let's give an action to execute and some help documentation:
``` go
package main
import (
"os"
"github.com/codegangsta/cli"
)
func main() {
app := cli.NewApp()
app.Name = "boom"
app.Usage = "make an explosive entrance"
app.Action = func(c *cli.Context) {
println("boom! I say!")
}
app.Run(os.Args)
}
```
Running this already gives you a ton of functionality, plus support for things like subcommands and flags, which are covered below.
## Example
Being a programmer can be a lonely job. Thankfully by the power of automation that is not the case! Let's create a greeter app to fend off our demons of loneliness!
Start by creating a directory named `greet`, and within it, add a file, `greet.go` with the following code in it:
``` go
package main
import (
"os"
"github.com/codegangsta/cli"
)
func main() {
app := cli.NewApp()
app.Name = "greet"
app.Usage = "fight the loneliness!"
app.Action = func(c *cli.Context) {
println("Hello friend!")
}
app.Run(os.Args)
}
```
Install our command to the `$GOPATH/bin` directory:
```
$ go install
```
Finally run our new command:
```
$ greet
Hello friend!
```
`cli.go` also generates neat help text:
```
$ greet help
NAME:
greet - fight the loneliness!
USAGE:
greet [global options] command [command options] [arguments...]
VERSION:
0.0.0
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS
--version Shows version information
```
### Arguments
You can lookup arguments by calling the `Args` function on `cli.Context`.
``` go
...
app.Action = func(c *cli.Context) {
println("Hello", c.Args()[0])
}
...
```
### Flags
Setting and querying flags is simple.
``` go
...
app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang",
Value: "english",
Usage: "language for the greeting",
},
}
app.Action = func(c *cli.Context) {
name := "someone"
if len(c.Args()) > 0 {
name = c.Args()[0]
}
if c.String("lang") == "spanish" {
println("Hola", name)
} else {
println("Hello", name)
}
}
...
```
You can also set a destination variable for a flag, to which the content will be scanned.
``` go
...
var language string
app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang",
Value: "english",
Usage: "language for the greeting",
Destination: &language,
},
}
app.Action = func(c *cli.Context) {
name := "someone"
if len(c.Args()) > 0 {
name = c.Args()[0]
}
if language == "spanish" {
println("Hola", name)
} else {
println("Hello", name)
}
}
...
```
See full list of flags at http://godoc.org/github.com/codegangsta/cli
#### Alternate Names
You can set alternate (or short) names for flags by providing a comma-delimited list for the `Name`. e.g.
``` go
app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang, l",
Value: "english",
Usage: "language for the greeting",
},
}
```
That flag can then be set with `--lang spanish` or `-l spanish`. Note that giving two different forms of the same flag in the same command invocation is an error.
#### Values from the Environment
You can also have the default value set from the environment via `EnvVar`. e.g.
``` go
app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang, l",
Value: "english",
Usage: "language for the greeting",
EnvVar: "APP_LANG",
},
}
```
The `EnvVar` may also be given as a comma-delimited "cascade", where the first environment variable that resolves is used as the default.
``` go
app.Flags = []cli.Flag {
cli.StringFlag{
Name: "lang, l",
Value: "english",
Usage: "language for the greeting",
EnvVar: "LEGACY_COMPAT_LANG,APP_LANG,LANG",
},
}
```
### Subcommands
Subcommands can be defined for a more git-like command line app.
```go
...
app.Commands = []cli.Command{
{
Name: "add",
Aliases: []string{"a"},
Usage: "add a task to the list",
Action: func(c *cli.Context) {
println("added task: ", c.Args().First())
},
},
{
Name: "complete",
Aliases: []string{"c"},
Usage: "complete a task on the list",
Action: func(c *cli.Context) {
println("completed task: ", c.Args().First())
},
},
{
Name: "template",
Aliases: []string{"r"},
Usage: "options for task templates",
Subcommands: []cli.Command{
{
Name: "add",
Usage: "add a new template",
Action: func(c *cli.Context) {
println("new task template: ", c.Args().First())
},
},
{
Name: "remove",
Usage: "remove an existing template",
Action: func(c *cli.Context) {
println("removed task template: ", c.Args().First())
},
},
},
},
}
...
```
### Bash Completion
You can enable completion commands by setting the `EnableBashCompletion`
flag on the `App` object. By default, this setting will only auto-complete to
show an app's subcommands, but you can write your own completion methods for
the App or its subcommands.
```go
...
var tasks = []string{"cook", "clean", "laundry", "eat", "sleep", "code"}
app := cli.NewApp()
app.EnableBashCompletion = true
app.Commands = []cli.Command{
{
Name: "complete",
Aliases: []string{"c"},
Usage: "complete a task on the list",
Action: func(c *cli.Context) {
println("completed task: ", c.Args().First())
},
BashComplete: func(c *cli.Context) {
// This will complete if no args are passed
if len(c.Args()) > 0 {
return
}
for _, t := range tasks {
fmt.Println(t)
}
},
}
}
...
```
#### To Enable
Source the `autocomplete/bash_autocomplete` file in your `.bashrc` file while
setting the `PROG` variable to the name of your program:
`PROG=myprogram source /.../cli/autocomplete/bash_autocomplete`
#### To Distribute
Copy `autocomplete/bash_autocomplete` into `/etc/bash_completion.d/` and rename
it to the name of the program you wish to add autocomplete support for (or
automatically install it there if you are distributing a package). Don't forget
to source the file to make it active in the current shell.
```
sudo cp src/bash_autocomplete /etc/bash_completion.d/<myprogram>
source /etc/bash_completion.d/<myprogram>
```
Alternatively, you can just document that users should source the generic
`autocomplete/bash_autocomplete` in their bash configuration with `$PROG` set
to the name of their program (as above).
## Contribution Guidelines
Feel free to put up a pull request to fix a bug or maybe add a feature. I will give it a code review and make sure that it does not break backwards compatibility. If I or any other collaborators agree that it is in line with the vision of the project, we will work with you to get the code into a mergeable state and merge it into the master branch.
If you have contributed something significant to the project, I will most likely add you as a collaborator. As a collaborator you are given the ability to merge others pull requests. It is very important that new code does not break existing code, so be careful about what code you do choose to merge. If you have any questions feel free to link @codegangsta to the issue in question and we can review it together.
If you feel like you have contributed to the project but have not yet been added as a collaborator, I probably forgot to add you. Hit @codegangsta up over email and we will get it figured out.

349
Godeps/_workspace/src/github.com/codegangsta/cli/app.go generated vendored Normal file
View File

@@ -0,0 +1,349 @@
package cli
import (
"fmt"
"io"
"io/ioutil"
"os"
"path"
"time"
)
// App is the main structure of a cli application. It is recommended that
// an app be created with the cli.NewApp() function
type App struct {
// The name of the program. Defaults to path.Base(os.Args[0])
Name string
// Full name of command for help, defaults to Name
HelpName string
// Description of the program.
Usage string
// Text to override the USAGE section of help
UsageText string
// Description of the program argument format.
ArgsUsage string
// Version of the program
Version string
// List of commands to execute
Commands []Command
// List of flags to parse
Flags []Flag
// Boolean to enable bash completion commands
EnableBashCompletion bool
// Boolean to hide built-in help command
HideHelp bool
// Boolean to hide built-in version flag
HideVersion bool
// An action to execute when the bash-completion flag is set
BashComplete func(context *Context)
// An action to execute before any subcommands are run, but after the context is ready
// If a non-nil error is returned, no subcommands are run
Before func(context *Context) error
// An action to execute after any subcommands are run, but after the subcommand has finished
// It is run even if Action() panics
After func(context *Context) error
// The action to execute when no subcommands are specified
Action func(context *Context)
// Execute this function if the proper command cannot be found
CommandNotFound func(context *Context, command string)
// Execute this function, if an usage error occurs. This is useful for displaying customized usage error messages.
// This function is able to replace the original error messages.
// If this function is not set, the "Incorrect usage" is displayed and the execution is interrupted.
OnUsageError func(context *Context, err error, isSubcommand bool) error
// Compilation date
Compiled time.Time
// List of all authors who contributed
Authors []Author
// Copyright of the binary if any
Copyright string
// Name of Author (Note: Use App.Authors, this is deprecated)
Author string
// Email of Author (Note: Use App.Authors, this is deprecated)
Email string
// Writer writer to write output to
Writer io.Writer
}
// Tries to find out when this binary was compiled.
// Returns the current time if it fails to find it.
func compileTime() time.Time {
info, err := os.Stat(os.Args[0])
if err != nil {
return time.Now()
}
return info.ModTime()
}
// Creates a new cli Application with some reasonable defaults for Name, Usage, Version and Action.
func NewApp() *App {
return &App{
Name: path.Base(os.Args[0]),
HelpName: path.Base(os.Args[0]),
Usage: "A new cli application",
UsageText: "",
Version: "0.0.0",
BashComplete: DefaultAppComplete,
Action: helpCommand.Action,
Compiled: compileTime(),
Writer: os.Stdout,
}
}
// Entry point to the cli app. Parses the arguments slice and routes to the proper flag/args combination
func (a *App) Run(arguments []string) (err error) {
if a.Author != "" || a.Email != "" {
a.Authors = append(a.Authors, Author{Name: a.Author, Email: a.Email})
}
newCmds := []Command{}
for _, c := range a.Commands {
if c.HelpName == "" {
c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name)
}
newCmds = append(newCmds, c)
}
a.Commands = newCmds
// append help to commands
if a.Command(helpCommand.Name) == nil && !a.HideHelp {
a.Commands = append(a.Commands, helpCommand)
if (HelpFlag != BoolFlag{}) {
a.appendFlag(HelpFlag)
}
}
//append version/help flags
if a.EnableBashCompletion {
a.appendFlag(BashCompletionFlag)
}
if !a.HideVersion {
a.appendFlag(VersionFlag)
}
// parse flags
set := flagSet(a.Name, a.Flags)
set.SetOutput(ioutil.Discard)
err = set.Parse(arguments[1:])
nerr := normalizeFlags(a.Flags, set)
context := NewContext(a, set, nil)
if nerr != nil {
fmt.Fprintln(a.Writer, nerr)
ShowAppHelp(context)
return nerr
}
if checkCompletions(context) {
return nil
}
if err != nil {
if a.OnUsageError != nil {
err := a.OnUsageError(context, err, false)
return err
} else {
fmt.Fprintf(a.Writer, "%s\n\n", "Incorrect Usage.")
ShowAppHelp(context)
return err
}
}
if !a.HideHelp && checkHelp(context) {
ShowAppHelp(context)
return nil
}
if !a.HideVersion && checkVersion(context) {
ShowVersion(context)
return nil
}
if a.After != nil {
defer func() {
if afterErr := a.After(context); afterErr != nil {
if err != nil {
err = NewMultiError(err, afterErr)
} else {
err = afterErr
}
}
}()
}
if a.Before != nil {
err = a.Before(context)
if err != nil {
fmt.Fprintf(a.Writer, "%v\n\n", err)
ShowAppHelp(context)
return err
}
}
args := context.Args()
if args.Present() {
name := args.First()
c := a.Command(name)
if c != nil {
return c.Run(context)
}
}
// Run default Action
a.Action(context)
return nil
}
// Another entry point to the cli app, takes care of passing arguments and error handling
func (a *App) RunAndExitOnError() {
if err := a.Run(os.Args); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
// Invokes the subcommand given the context, parses ctx.Args() to generate command-specific flags
func (a *App) RunAsSubcommand(ctx *Context) (err error) {
// append help to commands
if len(a.Commands) > 0 {
if a.Command(helpCommand.Name) == nil && !a.HideHelp {
a.Commands = append(a.Commands, helpCommand)
if (HelpFlag != BoolFlag{}) {
a.appendFlag(HelpFlag)
}
}
}
newCmds := []Command{}
for _, c := range a.Commands {
if c.HelpName == "" {
c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name)
}
newCmds = append(newCmds, c)
}
a.Commands = newCmds
// append flags
if a.EnableBashCompletion {
a.appendFlag(BashCompletionFlag)
}
// parse flags
set := flagSet(a.Name, a.Flags)
set.SetOutput(ioutil.Discard)
err = set.Parse(ctx.Args().Tail())
nerr := normalizeFlags(a.Flags, set)
context := NewContext(a, set, ctx)
if nerr != nil {
fmt.Fprintln(a.Writer, nerr)
fmt.Fprintln(a.Writer)
if len(a.Commands) > 0 {
ShowSubcommandHelp(context)
} else {
ShowCommandHelp(ctx, context.Args().First())
}
return nerr
}
if checkCompletions(context) {
return nil
}
if err != nil {
if a.OnUsageError != nil {
err = a.OnUsageError(context, err, true)
return err
} else {
fmt.Fprintf(a.Writer, "%s\n\n", "Incorrect Usage.")
ShowSubcommandHelp(context)
return err
}
}
if len(a.Commands) > 0 {
if checkSubcommandHelp(context) {
return nil
}
} else {
if checkCommandHelp(ctx, context.Args().First()) {
return nil
}
}
if a.After != nil {
defer func() {
afterErr := a.After(context)
if afterErr != nil {
if err != nil {
err = NewMultiError(err, afterErr)
} else {
err = afterErr
}
}
}()
}
if a.Before != nil {
err := a.Before(context)
if err != nil {
return err
}
}
args := context.Args()
if args.Present() {
name := args.First()
c := a.Command(name)
if c != nil {
return c.Run(context)
}
}
// Run default Action
a.Action(context)
return nil
}
// Returns the named command on App. Returns nil if the command does not exist
func (a *App) Command(name string) *Command {
for _, c := range a.Commands {
if c.HasName(name) {
return &c
}
}
return nil
}
func (a *App) hasFlag(flag Flag) bool {
for _, f := range a.Flags {
if flag == f {
return true
}
}
return false
}
func (a *App) appendFlag(flag Flag) {
if !a.hasFlag(flag) {
a.Flags = append(a.Flags, flag)
}
}
// Author represents someone who has contributed to a cli project.
type Author struct {
Name string // The Authors name
Email string // The Authors email
}
// String makes Author comply to the Stringer interface, to allow an easy print in the templating process
func (a Author) String() string {
e := ""
if a.Email != "" {
e = "<" + a.Email + "> "
}
return fmt.Sprintf("%v %v", a.Name, e)
}

View File

@@ -0,0 +1,16 @@
version: "{build}"
os: Windows Server 2012 R2
install:
- go version
- go env
build_script:
- cd %APPVEYOR_BUILD_FOLDER%
- go vet ./...
- go test -v ./...
test: off
deploy: off

View File

@@ -0,0 +1,14 @@
#! /bin/bash
: ${PROG:=$(basename ${BASH_SOURCE})}
_cli_bash_autocomplete() {
local cur opts base
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion )
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -F _cli_bash_autocomplete $PROG

View File

@@ -0,0 +1,5 @@
autoload -U compinit && compinit
autoload -U bashcompinit && bashcompinit
script_dir=$(dirname $0)
source ${script_dir}/bash_autocomplete

View File

@@ -0,0 +1,40 @@
// Package cli provides a minimal framework for creating and organizing command line
// Go applications. cli is designed to be easy to understand and write, the most simple
// cli application can be written as follows:
// func main() {
// cli.NewApp().Run(os.Args)
// }
//
// Of course this application does not do much, so let's make this an actual application:
// func main() {
// app := cli.NewApp()
// app.Name = "greet"
// app.Usage = "say a greeting"
// app.Action = func(c *cli.Context) {
// println("Greetings")
// }
//
// app.Run(os.Args)
// }
package cli
import (
"strings"
)
type MultiError struct {
Errors []error
}
func NewMultiError(err ...error) MultiError {
return MultiError{Errors: err}
}
func (m MultiError) Error() string {
errs := make([]string, len(m.Errors))
for i, err := range m.Errors {
errs[i] = err.Error()
}
return strings.Join(errs, "\n")
}

View File

@@ -0,0 +1,250 @@
package cli
import (
"fmt"
"io/ioutil"
"strings"
)
// Command is a subcommand for a cli.App.
type Command struct {
// The name of the command
Name string
// short name of the command. Typically one character (deprecated, use `Aliases`)
ShortName string
// A list of aliases for the command
Aliases []string
// A short description of the usage of this command
Usage string
// Custom text to show on USAGE section of help
UsageText string
// A longer explanation of how the command works
Description string
// A short description of the arguments of this command
ArgsUsage string
// The function to call when checking for bash command completions
BashComplete func(context *Context)
// An action to execute before any sub-subcommands are run, but after the context is ready
// If a non-nil error is returned, no sub-subcommands are run
Before func(context *Context) error
// An action to execute after any subcommands are run, but after the subcommand has finished
// It is run even if Action() panics
After func(context *Context) error
// The function to call when this command is invoked
Action func(context *Context)
// Execute this function, if an usage error occurs. This is useful for displaying customized usage error messages.
// This function is able to replace the original error messages.
// If this function is not set, the "Incorrect usage" is displayed and the execution is interrupted.
OnUsageError func(context *Context, err error) error
// List of child commands
Subcommands []Command
// List of flags to parse
Flags []Flag
// Treat all flags as normal arguments if true
SkipFlagParsing bool
// Boolean to hide built-in help command
HideHelp bool
// Full name of command for help, defaults to full command name, including parent commands.
HelpName string
commandNamePath []string
}
// Returns the full name of the command.
// For subcommands this ensures that parent commands are part of the command path
func (c Command) FullName() string {
if c.commandNamePath == nil {
return c.Name
}
return strings.Join(c.commandNamePath, " ")
}
// Invokes the command given the context, parses ctx.Args() to generate command-specific flags
func (c Command) Run(ctx *Context) (err error) {
if len(c.Subcommands) > 0 {
return c.startApp(ctx)
}
if !c.HideHelp && (HelpFlag != BoolFlag{}) {
// append help to flags
c.Flags = append(
c.Flags,
HelpFlag,
)
}
if ctx.App.EnableBashCompletion {
c.Flags = append(c.Flags, BashCompletionFlag)
}
set := flagSet(c.Name, c.Flags)
set.SetOutput(ioutil.Discard)
if !c.SkipFlagParsing {
firstFlagIndex := -1
terminatorIndex := -1
for index, arg := range ctx.Args() {
if arg == "--" {
terminatorIndex = index
break
} else if arg == "-" {
// Do nothing. A dash alone is not really a flag.
continue
} else if strings.HasPrefix(arg, "-") && firstFlagIndex == -1 {
firstFlagIndex = index
}
}
if firstFlagIndex > -1 {
args := ctx.Args()
regularArgs := make([]string, len(args[1:firstFlagIndex]))
copy(regularArgs, args[1:firstFlagIndex])
var flagArgs []string
if terminatorIndex > -1 {
flagArgs = args[firstFlagIndex:terminatorIndex]
regularArgs = append(regularArgs, args[terminatorIndex:]...)
} else {
flagArgs = args[firstFlagIndex:]
}
err = set.Parse(append(flagArgs, regularArgs...))
} else {
err = set.Parse(ctx.Args().Tail())
}
} else {
if c.SkipFlagParsing {
err = set.Parse(append([]string{"--"}, ctx.Args().Tail()...))
}
}
if err != nil {
if c.OnUsageError != nil {
err := c.OnUsageError(ctx, err)
return err
} else {
fmt.Fprintln(ctx.App.Writer, "Incorrect Usage.")
fmt.Fprintln(ctx.App.Writer)
ShowCommandHelp(ctx, c.Name)
return err
}
}
nerr := normalizeFlags(c.Flags, set)
if nerr != nil {
fmt.Fprintln(ctx.App.Writer, nerr)
fmt.Fprintln(ctx.App.Writer)
ShowCommandHelp(ctx, c.Name)
return nerr
}
context := NewContext(ctx.App, set, ctx)
if checkCommandCompletions(context, c.Name) {
return nil
}
if checkCommandHelp(context, c.Name) {
return nil
}
if c.After != nil {
defer func() {
afterErr := c.After(context)
if afterErr != nil {
if err != nil {
err = NewMultiError(err, afterErr)
} else {
err = afterErr
}
}
}()
}
if c.Before != nil {
err := c.Before(context)
if err != nil {
fmt.Fprintln(ctx.App.Writer, err)
fmt.Fprintln(ctx.App.Writer)
ShowCommandHelp(ctx, c.Name)
return err
}
}
context.Command = c
c.Action(context)
return nil
}
func (c Command) Names() []string {
names := []string{c.Name}
if c.ShortName != "" {
names = append(names, c.ShortName)
}
return append(names, c.Aliases...)
}
// Returns true if Command.Name or Command.ShortName matches given name
func (c Command) HasName(name string) bool {
for _, n := range c.Names() {
if n == name {
return true
}
}
return false
}
func (c Command) startApp(ctx *Context) error {
app := NewApp()
// set the name and usage
app.Name = fmt.Sprintf("%s %s", ctx.App.Name, c.Name)
if c.HelpName == "" {
app.HelpName = c.HelpName
} else {
app.HelpName = app.Name
}
if c.Description != "" {
app.Usage = c.Description
} else {
app.Usage = c.Usage
}
// set CommandNotFound
app.CommandNotFound = ctx.App.CommandNotFound
// set the flags and commands
app.Commands = c.Subcommands
app.Flags = c.Flags
app.HideHelp = c.HideHelp
app.Version = ctx.App.Version
app.HideVersion = ctx.App.HideVersion
app.Compiled = ctx.App.Compiled
app.Author = ctx.App.Author
app.Email = ctx.App.Email
app.Writer = ctx.App.Writer
// bash completion
app.EnableBashCompletion = ctx.App.EnableBashCompletion
if c.BashComplete != nil {
app.BashComplete = c.BashComplete
}
// set the actions
app.Before = c.Before
app.After = c.After
if c.Action != nil {
app.Action = c.Action
} else {
app.Action = helpSubcommand.Action
}
for index, cc := range app.Commands {
app.Commands[index].commandNamePath = []string{c.Name, cc.Name}
}
return app.RunAsSubcommand(ctx)
}

View File

@@ -0,0 +1,388 @@
package cli
import (
"errors"
"flag"
"strconv"
"strings"
"time"
)
// Context is a type that is passed through to
// each Handler action in a cli application. Context
// can be used to retrieve context-specific Args and
// parsed command-line options.
type Context struct {
App *App
Command Command
flagSet *flag.FlagSet
setFlags map[string]bool
globalSetFlags map[string]bool
parentContext *Context
}
// Creates a new context. For use in when invoking an App or Command action.
func NewContext(app *App, set *flag.FlagSet, parentCtx *Context) *Context {
return &Context{App: app, flagSet: set, parentContext: parentCtx}
}
// Looks up the value of a local int flag, returns 0 if no int flag exists
func (c *Context) Int(name string) int {
return lookupInt(name, c.flagSet)
}
// Looks up the value of a local time.Duration flag, returns 0 if no time.Duration flag exists
func (c *Context) Duration(name string) time.Duration {
return lookupDuration(name, c.flagSet)
}
// Looks up the value of a local float64 flag, returns 0 if no float64 flag exists
func (c *Context) Float64(name string) float64 {
return lookupFloat64(name, c.flagSet)
}
// Looks up the value of a local bool flag, returns false if no bool flag exists
func (c *Context) Bool(name string) bool {
return lookupBool(name, c.flagSet)
}
// Looks up the value of a local boolT flag, returns false if no bool flag exists
func (c *Context) BoolT(name string) bool {
return lookupBoolT(name, c.flagSet)
}
// Looks up the value of a local string flag, returns "" if no string flag exists
func (c *Context) String(name string) string {
return lookupString(name, c.flagSet)
}
// Looks up the value of a local string slice flag, returns nil if no string slice flag exists
func (c *Context) StringSlice(name string) []string {
return lookupStringSlice(name, c.flagSet)
}
// Looks up the value of a local int slice flag, returns nil if no int slice flag exists
func (c *Context) IntSlice(name string) []int {
return lookupIntSlice(name, c.flagSet)
}
// Looks up the value of a local generic flag, returns nil if no generic flag exists
func (c *Context) Generic(name string) interface{} {
return lookupGeneric(name, c.flagSet)
}
// Looks up the value of a global int flag, returns 0 if no int flag exists
func (c *Context) GlobalInt(name string) int {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupInt(name, fs)
}
return 0
}
// Looks up the value of a global time.Duration flag, returns 0 if no time.Duration flag exists
func (c *Context) GlobalDuration(name string) time.Duration {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupDuration(name, fs)
}
return 0
}
// Looks up the value of a global bool flag, returns false if no bool flag exists
func (c *Context) GlobalBool(name string) bool {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupBool(name, fs)
}
return false
}
// Looks up the value of a global string flag, returns "" if no string flag exists
func (c *Context) GlobalString(name string) string {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupString(name, fs)
}
return ""
}
// Looks up the value of a global string slice flag, returns nil if no string slice flag exists
func (c *Context) GlobalStringSlice(name string) []string {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupStringSlice(name, fs)
}
return nil
}
// Looks up the value of a global int slice flag, returns nil if no int slice flag exists
func (c *Context) GlobalIntSlice(name string) []int {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupIntSlice(name, fs)
}
return nil
}
// Looks up the value of a global generic flag, returns nil if no generic flag exists
func (c *Context) GlobalGeneric(name string) interface{} {
if fs := lookupGlobalFlagSet(name, c); fs != nil {
return lookupGeneric(name, fs)
}
return nil
}
// Returns the number of flags set
func (c *Context) NumFlags() int {
return c.flagSet.NFlag()
}
// Determines if the flag was actually set
func (c *Context) IsSet(name string) bool {
if c.setFlags == nil {
c.setFlags = make(map[string]bool)
c.flagSet.Visit(func(f *flag.Flag) {
c.setFlags[f.Name] = true
})
}
return c.setFlags[name] == true
}
// Determines if the global flag was actually set
func (c *Context) GlobalIsSet(name string) bool {
if c.globalSetFlags == nil {
c.globalSetFlags = make(map[string]bool)
ctx := c
if ctx.parentContext != nil {
ctx = ctx.parentContext
}
for ; ctx != nil && c.globalSetFlags[name] == false; ctx = ctx.parentContext {
ctx.flagSet.Visit(func(f *flag.Flag) {
c.globalSetFlags[f.Name] = true
})
}
}
return c.globalSetFlags[name]
}
// Returns a slice of flag names used in this context.
func (c *Context) FlagNames() (names []string) {
for _, flag := range c.Command.Flags {
name := strings.Split(flag.GetName(), ",")[0]
if name == "help" {
continue
}
names = append(names, name)
}
return
}
// Returns a slice of global flag names used by the app.
func (c *Context) GlobalFlagNames() (names []string) {
for _, flag := range c.App.Flags {
name := strings.Split(flag.GetName(), ",")[0]
if name == "help" || name == "version" {
continue
}
names = append(names, name)
}
return
}
// Returns the parent context, if any
func (c *Context) Parent() *Context {
return c.parentContext
}
type Args []string
// Returns the command line arguments associated with the context.
func (c *Context) Args() Args {
args := Args(c.flagSet.Args())
return args
}
// Returns the nth argument, or else a blank string
func (a Args) Get(n int) string {
if len(a) > n {
return a[n]
}
return ""
}
// Returns the first argument, or else a blank string
func (a Args) First() string {
return a.Get(0)
}
// Return the rest of the arguments (not the first one)
// or else an empty string slice
func (a Args) Tail() []string {
if len(a) >= 2 {
return []string(a)[1:]
}
return []string{}
}
// Checks if there are any arguments present
func (a Args) Present() bool {
return len(a) != 0
}
// Swaps arguments at the given indexes
func (a Args) Swap(from, to int) error {
if from >= len(a) || to >= len(a) {
return errors.New("index out of range")
}
a[from], a[to] = a[to], a[from]
return nil
}
func lookupGlobalFlagSet(name string, ctx *Context) *flag.FlagSet {
if ctx.parentContext != nil {
ctx = ctx.parentContext
}
for ; ctx != nil; ctx = ctx.parentContext {
if f := ctx.flagSet.Lookup(name); f != nil {
return ctx.flagSet
}
}
return nil
}
func lookupInt(name string, set *flag.FlagSet) int {
f := set.Lookup(name)
if f != nil {
val, err := strconv.Atoi(f.Value.String())
if err != nil {
return 0
}
return val
}
return 0
}
func lookupDuration(name string, set *flag.FlagSet) time.Duration {
f := set.Lookup(name)
if f != nil {
val, err := time.ParseDuration(f.Value.String())
if err == nil {
return val
}
}
return 0
}
func lookupFloat64(name string, set *flag.FlagSet) float64 {
f := set.Lookup(name)
if f != nil {
val, err := strconv.ParseFloat(f.Value.String(), 64)
if err != nil {
return 0
}
return val
}
return 0
}
func lookupString(name string, set *flag.FlagSet) string {
f := set.Lookup(name)
if f != nil {
return f.Value.String()
}
return ""
}
func lookupStringSlice(name string, set *flag.FlagSet) []string {
f := set.Lookup(name)
if f != nil {
return (f.Value.(*StringSlice)).Value()
}
return nil
}
func lookupIntSlice(name string, set *flag.FlagSet) []int {
f := set.Lookup(name)
if f != nil {
return (f.Value.(*IntSlice)).Value()
}
return nil
}
func lookupGeneric(name string, set *flag.FlagSet) interface{} {
f := set.Lookup(name)
if f != nil {
return f.Value
}
return nil
}
func lookupBool(name string, set *flag.FlagSet) bool {
f := set.Lookup(name)
if f != nil {
val, err := strconv.ParseBool(f.Value.String())
if err != nil {
return false
}
return val
}
return false
}
func lookupBoolT(name string, set *flag.FlagSet) bool {
f := set.Lookup(name)
if f != nil {
val, err := strconv.ParseBool(f.Value.String())
if err != nil {
return true
}
return val
}
return false
}
func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) {
switch ff.Value.(type) {
case *StringSlice:
default:
set.Set(name, ff.Value.String())
}
}
func normalizeFlags(flags []Flag, set *flag.FlagSet) error {
visited := make(map[string]bool)
set.Visit(func(f *flag.Flag) {
visited[f.Name] = true
})
for _, f := range flags {
parts := strings.Split(f.GetName(), ",")
if len(parts) == 1 {
continue
}
var ff *flag.Flag
for _, name := range parts {
name = strings.Trim(name, " ")
if visited[name] {
if ff != nil {
return errors.New("Cannot use two forms of the same flag: " + name + " " + ff.Name)
}
ff = set.Lookup(name)
}
}
if ff == nil {
continue
}
for _, name := range parts {
name = strings.Trim(name, " ")
if !visited[name] {
copyFlag(name, ff, set)
}
}
}
return nil
}

View File

@@ -0,0 +1,546 @@
package cli
import (
"flag"
"fmt"
"os"
"runtime"
"strconv"
"strings"
"time"
)
// This flag enables bash-completion for all commands and subcommands
var BashCompletionFlag = BoolFlag{
Name: "generate-bash-completion",
}
// This flag prints the version for the application
var VersionFlag = BoolFlag{
Name: "version, v",
Usage: "print the version",
}
// This flag prints the help for all commands and subcommands
// Set to the zero value (BoolFlag{}) to disable flag -- keeps subcommand
// unless HideHelp is set to true)
var HelpFlag = BoolFlag{
Name: "help, h",
Usage: "show help",
}
// Flag is a common interface related to parsing flags in cli.
// For more advanced flag parsing techniques, it is recommended that
// this interface be implemented.
type Flag interface {
fmt.Stringer
// Apply Flag settings to the given flag set
Apply(*flag.FlagSet)
GetName() string
}
func flagSet(name string, flags []Flag) *flag.FlagSet {
set := flag.NewFlagSet(name, flag.ContinueOnError)
for _, f := range flags {
f.Apply(set)
}
return set
}
func eachName(longName string, fn func(string)) {
parts := strings.Split(longName, ",")
for _, name := range parts {
name = strings.Trim(name, " ")
fn(name)
}
}
// Generic is a generic parseable type identified by a specific flag
type Generic interface {
Set(value string) error
String() string
}
// GenericFlag is the flag type for types implementing Generic
type GenericFlag struct {
Name string
Value Generic
Usage string
EnvVar string
}
// String returns the string representation of the generic flag to display the
// help text to the user (uses the String() method of the generic flag to show
// the value)
func (f GenericFlag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s %v\t%v", prefixedNames(f.Name), f.FormatValueHelp(), f.Usage))
}
func (f GenericFlag) FormatValueHelp() string {
if f.Value == nil {
return ""
}
s := f.Value.String()
if len(s) == 0 {
return ""
}
return fmt.Sprintf("\"%s\"", s)
}
// Apply takes the flagset and calls Set on the generic flag with the value
// provided by the user for parsing by the flag
func (f GenericFlag) Apply(set *flag.FlagSet) {
val := f.Value
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
val.Set(envVal)
break
}
}
}
eachName(f.Name, func(name string) {
set.Var(f.Value, name, f.Usage)
})
}
func (f GenericFlag) GetName() string {
return f.Name
}
// StringSlice is an opaque type for []string to satisfy flag.Value
type StringSlice []string
// Set appends the string value to the list of values
func (f *StringSlice) Set(value string) error {
*f = append(*f, value)
return nil
}
// String returns a readable representation of this value (for usage defaults)
func (f *StringSlice) String() string {
return fmt.Sprintf("%s", *f)
}
// Value returns the slice of strings set by this flag
func (f *StringSlice) Value() []string {
return *f
}
// StringSlice is a string flag that can be specified multiple times on the
// command-line
type StringSliceFlag struct {
Name string
Value *StringSlice
Usage string
EnvVar string
}
// String returns the usage
func (f StringSliceFlag) String() string {
firstName := strings.Trim(strings.Split(f.Name, ",")[0], " ")
pref := prefixFor(firstName)
return withEnvHint(f.EnvVar, fmt.Sprintf("%s [%v]\t%v", prefixedNames(f.Name), pref+firstName+" option "+pref+firstName+" option", f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f StringSliceFlag) Apply(set *flag.FlagSet) {
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
newVal := &StringSlice{}
for _, s := range strings.Split(envVal, ",") {
s = strings.TrimSpace(s)
newVal.Set(s)
}
f.Value = newVal
break
}
}
}
eachName(f.Name, func(name string) {
if f.Value == nil {
f.Value = &StringSlice{}
}
set.Var(f.Value, name, f.Usage)
})
}
func (f StringSliceFlag) GetName() string {
return f.Name
}
// StringSlice is an opaque type for []int to satisfy flag.Value
type IntSlice []int
// Set parses the value into an integer and appends it to the list of values
func (f *IntSlice) Set(value string) error {
tmp, err := strconv.Atoi(value)
if err != nil {
return err
} else {
*f = append(*f, tmp)
}
return nil
}
// String returns a readable representation of this value (for usage defaults)
func (f *IntSlice) String() string {
return fmt.Sprintf("%d", *f)
}
// Value returns the slice of ints set by this flag
func (f *IntSlice) Value() []int {
return *f
}
// IntSliceFlag is an int flag that can be specified multiple times on the
// command-line
type IntSliceFlag struct {
Name string
Value *IntSlice
Usage string
EnvVar string
}
// String returns the usage
func (f IntSliceFlag) String() string {
firstName := strings.Trim(strings.Split(f.Name, ",")[0], " ")
pref := prefixFor(firstName)
return withEnvHint(f.EnvVar, fmt.Sprintf("%s [%v]\t%v", prefixedNames(f.Name), pref+firstName+" option "+pref+firstName+" option", f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f IntSliceFlag) Apply(set *flag.FlagSet) {
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
newVal := &IntSlice{}
for _, s := range strings.Split(envVal, ",") {
s = strings.TrimSpace(s)
err := newVal.Set(s)
if err != nil {
fmt.Fprintf(os.Stderr, err.Error())
}
}
f.Value = newVal
break
}
}
}
eachName(f.Name, func(name string) {
if f.Value == nil {
f.Value = &IntSlice{}
}
set.Var(f.Value, name, f.Usage)
})
}
func (f IntSliceFlag) GetName() string {
return f.Name
}
// BoolFlag is a switch that defaults to false
type BoolFlag struct {
Name string
Usage string
EnvVar string
Destination *bool
}
// String returns a readable representation of this value (for usage defaults)
func (f BoolFlag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s\t%v", prefixedNames(f.Name), f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f BoolFlag) Apply(set *flag.FlagSet) {
val := false
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
envValBool, err := strconv.ParseBool(envVal)
if err == nil {
val = envValBool
}
break
}
}
}
eachName(f.Name, func(name string) {
if f.Destination != nil {
set.BoolVar(f.Destination, name, val, f.Usage)
return
}
set.Bool(name, val, f.Usage)
})
}
func (f BoolFlag) GetName() string {
return f.Name
}
// BoolTFlag this represents a boolean flag that is true by default, but can
// still be set to false by --some-flag=false
type BoolTFlag struct {
Name string
Usage string
EnvVar string
Destination *bool
}
// String returns a readable representation of this value (for usage defaults)
func (f BoolTFlag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s\t%v", prefixedNames(f.Name), f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f BoolTFlag) Apply(set *flag.FlagSet) {
val := true
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
envValBool, err := strconv.ParseBool(envVal)
if err == nil {
val = envValBool
break
}
}
}
}
eachName(f.Name, func(name string) {
if f.Destination != nil {
set.BoolVar(f.Destination, name, val, f.Usage)
return
}
set.Bool(name, val, f.Usage)
})
}
func (f BoolTFlag) GetName() string {
return f.Name
}
// StringFlag represents a flag that takes as string value
type StringFlag struct {
Name string
Value string
Usage string
EnvVar string
Destination *string
}
// String returns the usage
func (f StringFlag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s %v\t%v", prefixedNames(f.Name), f.FormatValueHelp(), f.Usage))
}
func (f StringFlag) FormatValueHelp() string {
s := f.Value
if len(s) == 0 {
return ""
}
return fmt.Sprintf("\"%s\"", s)
}
// Apply populates the flag given the flag set and environment
func (f StringFlag) Apply(set *flag.FlagSet) {
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
f.Value = envVal
break
}
}
}
eachName(f.Name, func(name string) {
if f.Destination != nil {
set.StringVar(f.Destination, name, f.Value, f.Usage)
return
}
set.String(name, f.Value, f.Usage)
})
}
func (f StringFlag) GetName() string {
return f.Name
}
// IntFlag is a flag that takes an integer
// Errors if the value provided cannot be parsed
type IntFlag struct {
Name string
Value int
Usage string
EnvVar string
Destination *int
}
// String returns the usage
func (f IntFlag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s \"%v\"\t%v", prefixedNames(f.Name), f.Value, f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f IntFlag) Apply(set *flag.FlagSet) {
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
envValInt, err := strconv.ParseInt(envVal, 0, 64)
if err == nil {
f.Value = int(envValInt)
break
}
}
}
}
eachName(f.Name, func(name string) {
if f.Destination != nil {
set.IntVar(f.Destination, name, f.Value, f.Usage)
return
}
set.Int(name, f.Value, f.Usage)
})
}
func (f IntFlag) GetName() string {
return f.Name
}
// DurationFlag is a flag that takes a duration specified in Go's duration
// format: https://golang.org/pkg/time/#ParseDuration
type DurationFlag struct {
Name string
Value time.Duration
Usage string
EnvVar string
Destination *time.Duration
}
// String returns a readable representation of this value (for usage defaults)
func (f DurationFlag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s \"%v\"\t%v", prefixedNames(f.Name), f.Value, f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f DurationFlag) Apply(set *flag.FlagSet) {
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
envValDuration, err := time.ParseDuration(envVal)
if err == nil {
f.Value = envValDuration
break
}
}
}
}
eachName(f.Name, func(name string) {
if f.Destination != nil {
set.DurationVar(f.Destination, name, f.Value, f.Usage)
return
}
set.Duration(name, f.Value, f.Usage)
})
}
func (f DurationFlag) GetName() string {
return f.Name
}
// Float64Flag is a flag that takes an float value
// Errors if the value provided cannot be parsed
type Float64Flag struct {
Name string
Value float64
Usage string
EnvVar string
Destination *float64
}
// String returns the usage
func (f Float64Flag) String() string {
return withEnvHint(f.EnvVar, fmt.Sprintf("%s \"%v\"\t%v", prefixedNames(f.Name), f.Value, f.Usage))
}
// Apply populates the flag given the flag set and environment
func (f Float64Flag) Apply(set *flag.FlagSet) {
if f.EnvVar != "" {
for _, envVar := range strings.Split(f.EnvVar, ",") {
envVar = strings.TrimSpace(envVar)
if envVal := os.Getenv(envVar); envVal != "" {
envValFloat, err := strconv.ParseFloat(envVal, 10)
if err == nil {
f.Value = float64(envValFloat)
}
}
}
}
eachName(f.Name, func(name string) {
if f.Destination != nil {
set.Float64Var(f.Destination, name, f.Value, f.Usage)
return
}
set.Float64(name, f.Value, f.Usage)
})
}
func (f Float64Flag) GetName() string {
return f.Name
}
func prefixFor(name string) (prefix string) {
if len(name) == 1 {
prefix = "-"
} else {
prefix = "--"
}
return
}
func prefixedNames(fullName string) (prefixed string) {
parts := strings.Split(fullName, ",")
for i, name := range parts {
name = strings.Trim(name, " ")
prefixed += prefixFor(name) + name
if i < len(parts)-1 {
prefixed += ", "
}
}
return
}
func withEnvHint(envVar, str string) string {
envText := ""
if envVar != "" {
prefix := "$"
suffix := ""
sep := ", $"
if runtime.GOOS == "windows" {
prefix = "%"
suffix = "%"
sep = "%, %"
}
envText = fmt.Sprintf(" [%s%s%s]", prefix, strings.Join(strings.Split(envVar, ","), sep), suffix)
}
return str + envText
}

View File

@@ -0,0 +1,248 @@
package cli
import (
"fmt"
"io"
"strings"
"text/tabwriter"
"text/template"
)
// The text template for the Default help topic.
// cli.go uses text/template to render templates. You can
// render custom help text by setting this variable.
var AppHelpTemplate = `NAME:
{{.Name}} - {{.Usage}}
USAGE:
{{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} {{if .Flags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}
{{if .Version}}
VERSION:
{{.Version}}
{{end}}{{if len .Authors}}
AUTHOR(S):
{{range .Authors}}{{ . }}{{end}}
{{end}}{{if .Commands}}
COMMANDS:
{{range .Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
{{end}}{{end}}{{if .Flags}}
GLOBAL OPTIONS:
{{range .Flags}}{{.}}
{{end}}{{end}}{{if .Copyright }}
COPYRIGHT:
{{.Copyright}}
{{end}}
`
// The text template for the command help topic.
// cli.go uses text/template to render templates. You can
// render custom help text by setting this variable.
var CommandHelpTemplate = `NAME:
{{.HelpName}} - {{.Usage}}
USAGE:
{{.HelpName}}{{if .Flags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{if .Description}}
DESCRIPTION:
{{.Description}}{{end}}{{if .Flags}}
OPTIONS:
{{range .Flags}}{{.}}
{{end}}{{ end }}
`
// The text template for the subcommand help topic.
// cli.go uses text/template to render templates. You can
// render custom help text by setting this variable.
var SubcommandHelpTemplate = `NAME:
{{.HelpName}} - {{.Usage}}
USAGE:
{{.HelpName}} command{{if .Flags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}
COMMANDS:
{{range .Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
{{end}}{{if .Flags}}
OPTIONS:
{{range .Flags}}{{.}}
{{end}}{{end}}
`
var helpCommand = Command{
Name: "help",
Aliases: []string{"h"},
Usage: "Shows a list of commands or help for one command",
ArgsUsage: "[command]",
Action: func(c *Context) {
args := c.Args()
if args.Present() {
ShowCommandHelp(c, args.First())
} else {
ShowAppHelp(c)
}
},
}
var helpSubcommand = Command{
Name: "help",
Aliases: []string{"h"},
Usage: "Shows a list of commands or help for one command",
ArgsUsage: "[command]",
Action: func(c *Context) {
args := c.Args()
if args.Present() {
ShowCommandHelp(c, args.First())
} else {
ShowSubcommandHelp(c)
}
},
}
// Prints help for the App or Command
type helpPrinter func(w io.Writer, templ string, data interface{})
var HelpPrinter helpPrinter = printHelp
// Prints version for the App
var VersionPrinter = printVersion
func ShowAppHelp(c *Context) {
HelpPrinter(c.App.Writer, AppHelpTemplate, c.App)
}
// Prints the list of subcommands as the default app completion method
func DefaultAppComplete(c *Context) {
for _, command := range c.App.Commands {
for _, name := range command.Names() {
fmt.Fprintln(c.App.Writer, name)
}
}
}
// Prints help for the given command
func ShowCommandHelp(ctx *Context, command string) {
// show the subcommand help for a command with subcommands
if command == "" {
HelpPrinter(ctx.App.Writer, SubcommandHelpTemplate, ctx.App)
return
}
for _, c := range ctx.App.Commands {
if c.HasName(command) {
HelpPrinter(ctx.App.Writer, CommandHelpTemplate, c)
return
}
}
if ctx.App.CommandNotFound != nil {
ctx.App.CommandNotFound(ctx, command)
} else {
fmt.Fprintf(ctx.App.Writer, "No help topic for '%v'\n", command)
}
}
// Prints help for the given subcommand
func ShowSubcommandHelp(c *Context) {
ShowCommandHelp(c, c.Command.Name)
}
// Prints the version number of the App
func ShowVersion(c *Context) {
VersionPrinter(c)
}
func printVersion(c *Context) {
fmt.Fprintf(c.App.Writer, "%v version %v\n", c.App.Name, c.App.Version)
}
// Prints the lists of commands within a given context
func ShowCompletions(c *Context) {
a := c.App
if a != nil && a.BashComplete != nil {
a.BashComplete(c)
}
}
// Prints the custom completions for a given command
func ShowCommandCompletions(ctx *Context, command string) {
c := ctx.App.Command(command)
if c != nil && c.BashComplete != nil {
c.BashComplete(ctx)
}
}
func printHelp(out io.Writer, templ string, data interface{}) {
funcMap := template.FuncMap{
"join": strings.Join,
}
w := tabwriter.NewWriter(out, 0, 8, 1, '\t', 0)
t := template.Must(template.New("help").Funcs(funcMap).Parse(templ))
err := t.Execute(w, data)
if err != nil {
// If the writer is closed, t.Execute will fail, and there's nothing
// we can do to recover. We could send this to os.Stderr if we need.
return
}
w.Flush()
}
func checkVersion(c *Context) bool {
found := false
if VersionFlag.Name != "" {
eachName(VersionFlag.Name, func(name string) {
if c.GlobalBool(name) || c.Bool(name) {
found = true
}
})
}
return found
}
func checkHelp(c *Context) bool {
found := false
if HelpFlag.Name != "" {
eachName(HelpFlag.Name, func(name string) {
if c.GlobalBool(name) || c.Bool(name) {
found = true
}
})
}
return found
}
func checkCommandHelp(c *Context, name string) bool {
if c.Bool("h") || c.Bool("help") {
ShowCommandHelp(c, name)
return true
}
return false
}
func checkSubcommandHelp(c *Context) bool {
if c.GlobalBool("h") || c.GlobalBool("help") {
ShowSubcommandHelp(c)
return true
}
return false
}
func checkCompletions(c *Context) bool {
if (c.GlobalBool(BashCompletionFlag.Name) || c.Bool(BashCompletionFlag.Name)) && c.App.EnableBashCompletion {
ShowCompletions(c)
return true
}
return false
}
func checkCommandCompletions(c *Context, name string) bool {
if c.Bool(BashCompletionFlag.Name) && c.App.EnableBashCompletion {
ShowCommandCompletions(c, name)
return true
}
return false
}

View File

@@ -0,0 +1,13 @@
Copyright (c) 2012-2013 Dave Collins <dave@davec.name>
Permission to use, copy, modify, and distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@@ -0,0 +1,151 @@
// Copyright (c) 2015 Dave Collins <dave@davec.name>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
// NOTE: Due to the following build constraints, this file will only be compiled
// when the code is not running on Google App Engine and "-tags disableunsafe"
// is not added to the go build command line.
// +build !appengine,!disableunsafe
package spew
import (
"reflect"
"unsafe"
)
const (
// UnsafeDisabled is a build-time constant which specifies whether or
// not access to the unsafe package is available.
UnsafeDisabled = false
// ptrSize is the size of a pointer on the current arch.
ptrSize = unsafe.Sizeof((*byte)(nil))
)
var (
// offsetPtr, offsetScalar, and offsetFlag are the offsets for the
// internal reflect.Value fields. These values are valid before golang
// commit ecccf07e7f9d which changed the format. The are also valid
// after commit 82f48826c6c7 which changed the format again to mirror
// the original format. Code in the init function updates these offsets
// as necessary.
offsetPtr = uintptr(ptrSize)
offsetScalar = uintptr(0)
offsetFlag = uintptr(ptrSize * 2)
// flagKindWidth and flagKindShift indicate various bits that the
// reflect package uses internally to track kind information.
//
// flagRO indicates whether or not the value field of a reflect.Value is
// read-only.
//
// flagIndir indicates whether the value field of a reflect.Value is
// the actual data or a pointer to the data.
//
// These values are valid before golang commit 90a7c3c86944 which
// changed their positions. Code in the init function updates these
// flags as necessary.
flagKindWidth = uintptr(5)
flagKindShift = uintptr(flagKindWidth - 1)
flagRO = uintptr(1 << 0)
flagIndir = uintptr(1 << 1)
)
func init() {
// Older versions of reflect.Value stored small integers directly in the
// ptr field (which is named val in the older versions). Versions
// between commits ecccf07e7f9d and 82f48826c6c7 added a new field named
// scalar for this purpose which unfortunately came before the flag
// field, so the offset of the flag field is different for those
// versions.
//
// This code constructs a new reflect.Value from a known small integer
// and checks if the size of the reflect.Value struct indicates it has
// the scalar field. When it does, the offsets are updated accordingly.
vv := reflect.ValueOf(0xf00)
if unsafe.Sizeof(vv) == (ptrSize * 4) {
offsetScalar = ptrSize * 2
offsetFlag = ptrSize * 3
}
// Commit 90a7c3c86944 changed the flag positions such that the low
// order bits are the kind. This code extracts the kind from the flags
// field and ensures it's the correct type. When it's not, the flag
// order has been changed to the newer format, so the flags are updated
// accordingly.
upf := unsafe.Pointer(uintptr(unsafe.Pointer(&vv)) + offsetFlag)
upfv := *(*uintptr)(upf)
flagKindMask := uintptr((1<<flagKindWidth - 1) << flagKindShift)
if (upfv&flagKindMask)>>flagKindShift != uintptr(reflect.Int) {
flagKindShift = 0
flagRO = 1 << 5
flagIndir = 1 << 6
// Commit adf9b30e5594 modified the flags to separate the
// flagRO flag into two bits which specifies whether or not the
// field is embedded. This causes flagIndir to move over a bit
// and means that flagRO is the combination of either of the
// original flagRO bit and the new bit.
//
// This code detects the change by extracting what used to be
// the indirect bit to ensure it's set. When it's not, the flag
// order has been changed to the newer format, so the flags are
// updated accordingly.
if upfv&flagIndir == 0 {
flagRO = 3 << 5
flagIndir = 1 << 7
}
}
}
// unsafeReflectValue converts the passed reflect.Value into a one that bypasses
// the typical safety restrictions preventing access to unaddressable and
// unexported data. It works by digging the raw pointer to the underlying
// value out of the protected value and generating a new unprotected (unsafe)
// reflect.Value to it.
//
// This allows us to check for implementations of the Stringer and error
// interfaces to be used for pretty printing ordinarily unaddressable and
// inaccessible values such as unexported struct fields.
func unsafeReflectValue(v reflect.Value) (rv reflect.Value) {
indirects := 1
vt := v.Type()
upv := unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetPtr)
rvf := *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetFlag))
if rvf&flagIndir != 0 {
vt = reflect.PtrTo(v.Type())
indirects++
} else if offsetScalar != 0 {
// The value is in the scalar field when it's not one of the
// reference types.
switch vt.Kind() {
case reflect.Uintptr:
case reflect.Chan:
case reflect.Func:
case reflect.Map:
case reflect.Ptr:
case reflect.UnsafePointer:
default:
upv = unsafe.Pointer(uintptr(unsafe.Pointer(&v)) +
offsetScalar)
}
}
pv := reflect.NewAt(vt, upv)
rv = pv
for i := 0; i < indirects; i++ {
rv = rv.Elem()
}
return rv
}

View File

@@ -0,0 +1,37 @@
// Copyright (c) 2015 Dave Collins <dave@davec.name>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
// NOTE: Due to the following build constraints, this file will only be compiled
// when either the code is running on Google App Engine or "-tags disableunsafe"
// is added to the go build command line.
// +build appengine disableunsafe
package spew
import "reflect"
const (
// UnsafeDisabled is a build-time constant which specifies whether or
// not access to the unsafe package is available.
UnsafeDisabled = true
)
// unsafeReflectValue typically converts the passed reflect.Value into a one
// that bypasses the typical safety restrictions preventing access to
// unaddressable and unexported data. However, doing this relies on access to
// the unsafe package. This is a stub version which simply returns the passed
// reflect.Value when the unsafe package is not available.
func unsafeReflectValue(v reflect.Value) reflect.Value {
return v
}

View File

@@ -0,0 +1,341 @@
/*
* Copyright (c) 2013 Dave Collins <dave@davec.name>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package spew
import (
"bytes"
"fmt"
"io"
"reflect"
"sort"
"strconv"
)
// Some constants in the form of bytes to avoid string overhead. This mirrors
// the technique used in the fmt package.
var (
panicBytes = []byte("(PANIC=")
plusBytes = []byte("+")
iBytes = []byte("i")
trueBytes = []byte("true")
falseBytes = []byte("false")
interfaceBytes = []byte("(interface {})")
commaNewlineBytes = []byte(",\n")
newlineBytes = []byte("\n")
openBraceBytes = []byte("{")
openBraceNewlineBytes = []byte("{\n")
closeBraceBytes = []byte("}")
asteriskBytes = []byte("*")
colonBytes = []byte(":")
colonSpaceBytes = []byte(": ")
openParenBytes = []byte("(")
closeParenBytes = []byte(")")
spaceBytes = []byte(" ")
pointerChainBytes = []byte("->")
nilAngleBytes = []byte("<nil>")
maxNewlineBytes = []byte("<max depth reached>\n")
maxShortBytes = []byte("<max>")
circularBytes = []byte("<already shown>")
circularShortBytes = []byte("<shown>")
invalidAngleBytes = []byte("<invalid>")
openBracketBytes = []byte("[")
closeBracketBytes = []byte("]")
percentBytes = []byte("%")
precisionBytes = []byte(".")
openAngleBytes = []byte("<")
closeAngleBytes = []byte(">")
openMapBytes = []byte("map[")
closeMapBytes = []byte("]")
lenEqualsBytes = []byte("len=")
capEqualsBytes = []byte("cap=")
)
// hexDigits is used to map a decimal value to a hex digit.
var hexDigits = "0123456789abcdef"
// catchPanic handles any panics that might occur during the handleMethods
// calls.
func catchPanic(w io.Writer, v reflect.Value) {
if err := recover(); err != nil {
w.Write(panicBytes)
fmt.Fprintf(w, "%v", err)
w.Write(closeParenBytes)
}
}
// handleMethods attempts to call the Error and String methods on the underlying
// type the passed reflect.Value represents and outputes the result to Writer w.
//
// It handles panics in any called methods by catching and displaying the error
// as the formatted value.
func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) {
// We need an interface to check if the type implements the error or
// Stringer interface. However, the reflect package won't give us an
// interface on certain things like unexported struct fields in order
// to enforce visibility rules. We use unsafe, when it's available,
// to bypass these restrictions since this package does not mutate the
// values.
if !v.CanInterface() {
if UnsafeDisabled {
return false
}
v = unsafeReflectValue(v)
}
// Choose whether or not to do error and Stringer interface lookups against
// the base type or a pointer to the base type depending on settings.
// Technically calling one of these methods with a pointer receiver can
// mutate the value, however, types which choose to satisify an error or
// Stringer interface with a pointer receiver should not be mutating their
// state inside these interface methods.
if !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() {
v = unsafeReflectValue(v)
}
if v.CanAddr() {
v = v.Addr()
}
// Is it an error or Stringer?
switch iface := v.Interface().(type) {
case error:
defer catchPanic(w, v)
if cs.ContinueOnMethod {
w.Write(openParenBytes)
w.Write([]byte(iface.Error()))
w.Write(closeParenBytes)
w.Write(spaceBytes)
return false
}
w.Write([]byte(iface.Error()))
return true
case fmt.Stringer:
defer catchPanic(w, v)
if cs.ContinueOnMethod {
w.Write(openParenBytes)
w.Write([]byte(iface.String()))
w.Write(closeParenBytes)
w.Write(spaceBytes)
return false
}
w.Write([]byte(iface.String()))
return true
}
return false
}
// printBool outputs a boolean value as true or false to Writer w.
func printBool(w io.Writer, val bool) {
if val {
w.Write(trueBytes)
} else {
w.Write(falseBytes)
}
}
// printInt outputs a signed integer value to Writer w.
func printInt(w io.Writer, val int64, base int) {
w.Write([]byte(strconv.FormatInt(val, base)))
}
// printUint outputs an unsigned integer value to Writer w.
func printUint(w io.Writer, val uint64, base int) {
w.Write([]byte(strconv.FormatUint(val, base)))
}
// printFloat outputs a floating point value using the specified precision,
// which is expected to be 32 or 64bit, to Writer w.
func printFloat(w io.Writer, val float64, precision int) {
w.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision)))
}
// printComplex outputs a complex value using the specified float precision
// for the real and imaginary parts to Writer w.
func printComplex(w io.Writer, c complex128, floatPrecision int) {
r := real(c)
w.Write(openParenBytes)
w.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision)))
i := imag(c)
if i >= 0 {
w.Write(plusBytes)
}
w.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision)))
w.Write(iBytes)
w.Write(closeParenBytes)
}
// printHexPtr outputs a uintptr formatted as hexidecimal with a leading '0x'
// prefix to Writer w.
func printHexPtr(w io.Writer, p uintptr) {
// Null pointer.
num := uint64(p)
if num == 0 {
w.Write(nilAngleBytes)
return
}
// Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix
buf := make([]byte, 18)
// It's simpler to construct the hex string right to left.
base := uint64(16)
i := len(buf) - 1
for num >= base {
buf[i] = hexDigits[num%base]
num /= base
i--
}
buf[i] = hexDigits[num]
// Add '0x' prefix.
i--
buf[i] = 'x'
i--
buf[i] = '0'
// Strip unused leading bytes.
buf = buf[i:]
w.Write(buf)
}
// valuesSorter implements sort.Interface to allow a slice of reflect.Value
// elements to be sorted.
type valuesSorter struct {
values []reflect.Value
strings []string // either nil or same len and values
cs *ConfigState
}
// newValuesSorter initializes a valuesSorter instance, which holds a set of
// surrogate keys on which the data should be sorted. It uses flags in
// ConfigState to decide if and how to populate those surrogate keys.
func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface {
vs := &valuesSorter{values: values, cs: cs}
if canSortSimply(vs.values[0].Kind()) {
return vs
}
if !cs.DisableMethods {
vs.strings = make([]string, len(values))
for i := range vs.values {
b := bytes.Buffer{}
if !handleMethods(cs, &b, vs.values[i]) {
vs.strings = nil
break
}
vs.strings[i] = b.String()
}
}
if vs.strings == nil && cs.SpewKeys {
vs.strings = make([]string, len(values))
for i := range vs.values {
vs.strings[i] = Sprintf("%#v", vs.values[i].Interface())
}
}
return vs
}
// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted
// directly, or whether it should be considered for sorting by surrogate keys
// (if the ConfigState allows it).
func canSortSimply(kind reflect.Kind) bool {
// This switch parallels valueSortLess, except for the default case.
switch kind {
case reflect.Bool:
return true
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
return true
case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
return true
case reflect.Float32, reflect.Float64:
return true
case reflect.String:
return true
case reflect.Uintptr:
return true
case reflect.Array:
return true
}
return false
}
// Len returns the number of values in the slice. It is part of the
// sort.Interface implementation.
func (s *valuesSorter) Len() int {
return len(s.values)
}
// Swap swaps the values at the passed indices. It is part of the
// sort.Interface implementation.
func (s *valuesSorter) Swap(i, j int) {
s.values[i], s.values[j] = s.values[j], s.values[i]
if s.strings != nil {
s.strings[i], s.strings[j] = s.strings[j], s.strings[i]
}
}
// valueSortLess returns whether the first value should sort before the second
// value. It is used by valueSorter.Less as part of the sort.Interface
// implementation.
func valueSortLess(a, b reflect.Value) bool {
switch a.Kind() {
case reflect.Bool:
return !a.Bool() && b.Bool()
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
return a.Int() < b.Int()
case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
return a.Uint() < b.Uint()
case reflect.Float32, reflect.Float64:
return a.Float() < b.Float()
case reflect.String:
return a.String() < b.String()
case reflect.Uintptr:
return a.Uint() < b.Uint()
case reflect.Array:
// Compare the contents of both arrays.
l := a.Len()
for i := 0; i < l; i++ {
av := a.Index(i)
bv := b.Index(i)
if av.Interface() == bv.Interface() {
continue
}
return valueSortLess(av, bv)
}
}
return a.String() < b.String()
}
// Less returns whether the value at index i should sort before the
// value at index j. It is part of the sort.Interface implementation.
func (s *valuesSorter) Less(i, j int) bool {
if s.strings == nil {
return valueSortLess(s.values[i], s.values[j])
}
return s.strings[i] < s.strings[j]
}
// sortValues is a sort function that handles both native types and any type that
// can be converted to error or Stringer. Other inputs are sorted according to
// their Value.String() value to ensure display stability.
func sortValues(values []reflect.Value, cs *ConfigState) {
if len(values) == 0 {
return
}
sort.Sort(newValuesSorter(values, cs))
}

View File

@@ -0,0 +1,297 @@
/*
* Copyright (c) 2013 Dave Collins <dave@davec.name>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package spew
import (
"bytes"
"fmt"
"io"
"os"
)
// ConfigState houses the configuration options used by spew to format and
// display values. There is a global instance, Config, that is used to control
// all top-level Formatter and Dump functionality. Each ConfigState instance
// provides methods equivalent to the top-level functions.
//
// The zero value for ConfigState provides no indentation. You would typically
// want to set it to a space or a tab.
//
// Alternatively, you can use NewDefaultConfig to get a ConfigState instance
// with default settings. See the documentation of NewDefaultConfig for default
// values.
type ConfigState struct {
// Indent specifies the string to use for each indentation level. The
// global config instance that all top-level functions use set this to a
// single space by default. If you would like more indentation, you might
// set this to a tab with "\t" or perhaps two spaces with " ".
Indent string
// MaxDepth controls the maximum number of levels to descend into nested
// data structures. The default, 0, means there is no limit.
//
// NOTE: Circular data structures are properly detected, so it is not
// necessary to set this value unless you specifically want to limit deeply
// nested data structures.
MaxDepth int
// DisableMethods specifies whether or not error and Stringer interfaces are
// invoked for types that implement them.
DisableMethods bool
// DisablePointerMethods specifies whether or not to check for and invoke
// error and Stringer interfaces on types which only accept a pointer
// receiver when the current type is not a pointer.
//
// NOTE: This might be an unsafe action since calling one of these methods
// with a pointer receiver could technically mutate the value, however,
// in practice, types which choose to satisify an error or Stringer
// interface with a pointer receiver should not be mutating their state
// inside these interface methods. As a result, this option relies on
// access to the unsafe package, so it will not have any effect when
// running in environments without access to the unsafe package such as
// Google App Engine or with the "disableunsafe" build tag specified.
DisablePointerMethods bool
// ContinueOnMethod specifies whether or not recursion should continue once
// a custom error or Stringer interface is invoked. The default, false,
// means it will print the results of invoking the custom error or Stringer
// interface and return immediately instead of continuing to recurse into
// the internals of the data type.
//
// NOTE: This flag does not have any effect if method invocation is disabled
// via the DisableMethods or DisablePointerMethods options.
ContinueOnMethod bool
// SortKeys specifies map keys should be sorted before being printed. Use
// this to have a more deterministic, diffable output. Note that only
// native types (bool, int, uint, floats, uintptr and string) and types
// that support the error or Stringer interfaces (if methods are
// enabled) are supported, with other types sorted according to the
// reflect.Value.String() output which guarantees display stability.
SortKeys bool
// SpewKeys specifies that, as a last resort attempt, map keys should
// be spewed to strings and sorted by those strings. This is only
// considered if SortKeys is true.
SpewKeys bool
}
// Config is the active configuration of the top-level functions.
// The configuration can be changed by modifying the contents of spew.Config.
var Config = ConfigState{Indent: " "}
// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the formatted string as a value that satisfies error. See NewFormatter
// for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Errorf(format string, a ...interface{}) (err error) {
return fmt.Errorf(format, c.convertArgs(a)...)
}
// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) {
return fmt.Fprint(w, c.convertArgs(a)...)
}
// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
return fmt.Fprintf(w, format, c.convertArgs(a)...)
}
// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it
// passed with a Formatter interface returned by c.NewFormatter. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
return fmt.Fprintln(w, c.convertArgs(a)...)
}
// Print is a wrapper for fmt.Print that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Print(c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Print(a ...interface{}) (n int, err error) {
return fmt.Print(c.convertArgs(a)...)
}
// Printf is a wrapper for fmt.Printf that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) {
return fmt.Printf(format, c.convertArgs(a)...)
}
// Println is a wrapper for fmt.Println that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Println(c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Println(a ...interface{}) (n int, err error) {
return fmt.Println(c.convertArgs(a)...)
}
// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the resulting string. See NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Sprint(c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Sprint(a ...interface{}) string {
return fmt.Sprint(c.convertArgs(a)...)
}
// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were
// passed with a Formatter interface returned by c.NewFormatter. It returns
// the resulting string. See NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Sprintf(format string, a ...interface{}) string {
return fmt.Sprintf(format, c.convertArgs(a)...)
}
// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it
// were passed with a Formatter interface returned by c.NewFormatter. It
// returns the resulting string. See NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b))
func (c *ConfigState) Sprintln(a ...interface{}) string {
return fmt.Sprintln(c.convertArgs(a)...)
}
/*
NewFormatter returns a custom formatter that satisfies the fmt.Formatter
interface. As a result, it integrates cleanly with standard fmt package
printing functions. The formatter is useful for inline printing of smaller data
types similar to the standard %v format specifier.
The custom formatter only responds to the %v (most compact), %+v (adds pointer
addresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb
combinations. Any other verbs such as %x and %q will be sent to the the
standard fmt package for formatting. In addition, the custom formatter ignores
the width and precision arguments (however they will still work on the format
specifiers not handled by the custom formatter).
Typically this function shouldn't be called directly. It is much easier to make
use of the custom formatter by calling one of the convenience functions such as
c.Printf, c.Println, or c.Printf.
*/
func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter {
return newFormatter(c, v)
}
// Fdump formats and displays the passed arguments to io.Writer w. It formats
// exactly the same as Dump.
func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) {
fdump(c, w, a...)
}
/*
Dump displays the passed parameters to standard out with newlines, customizable
indentation, and additional debug information such as complete types and all
pointer addresses used to indirect to the final value. It provides the
following features over the built-in printing facilities provided by the fmt
package:
* Pointers are dereferenced and followed
* Circular data structures are detected and handled properly
* Custom Stringer/error interfaces are optionally invoked, including
on unexported types
* Custom types which only implement the Stringer/error interfaces via
a pointer receiver are optionally invoked when passing non-pointer
variables
* Byte arrays and slices are dumped like the hexdump -C command which
includes offsets, byte values in hex, and ASCII output
The configuration options are controlled by modifying the public members
of c. See ConfigState for options documentation.
See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to
get the formatted result as a string.
*/
func (c *ConfigState) Dump(a ...interface{}) {
fdump(c, os.Stdout, a...)
}
// Sdump returns a string with the passed arguments formatted exactly the same
// as Dump.
func (c *ConfigState) Sdump(a ...interface{}) string {
var buf bytes.Buffer
fdump(c, &buf, a...)
return buf.String()
}
// convertArgs accepts a slice of arguments and returns a slice of the same
// length with each argument converted to a spew Formatter interface using
// the ConfigState associated with s.
func (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) {
formatters = make([]interface{}, len(args))
for index, arg := range args {
formatters[index] = newFormatter(c, arg)
}
return formatters
}
// NewDefaultConfig returns a ConfigState with the following default settings.
//
// Indent: " "
// MaxDepth: 0
// DisableMethods: false
// DisablePointerMethods: false
// ContinueOnMethod: false
// SortKeys: false
func NewDefaultConfig() *ConfigState {
return &ConfigState{Indent: " "}
}

View File

@@ -0,0 +1,202 @@
/*
* Copyright (c) 2013 Dave Collins <dave@davec.name>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
Package spew implements a deep pretty printer for Go data structures to aid in
debugging.
A quick overview of the additional features spew provides over the built-in
printing facilities for Go data types are as follows:
* Pointers are dereferenced and followed
* Circular data structures are detected and handled properly
* Custom Stringer/error interfaces are optionally invoked, including
on unexported types
* Custom types which only implement the Stringer/error interfaces via
a pointer receiver are optionally invoked when passing non-pointer
variables
* Byte arrays and slices are dumped like the hexdump -C command which
includes offsets, byte values in hex, and ASCII output (only when using
Dump style)
There are two different approaches spew allows for dumping Go data structures:
* Dump style which prints with newlines, customizable indentation,
and additional debug information such as types and all pointer addresses
used to indirect to the final value
* A custom Formatter interface that integrates cleanly with the standard fmt
package and replaces %v, %+v, %#v, and %#+v to provide inline printing
similar to the default %v while providing the additional functionality
outlined above and passing unsupported format verbs such as %x and %q
along to fmt
Quick Start
This section demonstrates how to quickly get started with spew. See the
sections below for further details on formatting and configuration options.
To dump a variable with full newlines, indentation, type, and pointer
information use Dump, Fdump, or Sdump:
spew.Dump(myVar1, myVar2, ...)
spew.Fdump(someWriter, myVar1, myVar2, ...)
str := spew.Sdump(myVar1, myVar2, ...)
Alternatively, if you would prefer to use format strings with a compacted inline
printing style, use the convenience wrappers Printf, Fprintf, etc with
%v (most compact), %+v (adds pointer addresses), %#v (adds types), or
%#+v (adds types and pointer addresses):
spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2)
spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4)
spew.Fprintf(someWriter, "myVar1: %v -- myVar2: %+v", myVar1, myVar2)
spew.Fprintf(someWriter, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4)
Configuration Options
Configuration of spew is handled by fields in the ConfigState type. For
convenience, all of the top-level functions use a global state available
via the spew.Config global.
It is also possible to create a ConfigState instance that provides methods
equivalent to the top-level functions. This allows concurrent configuration
options. See the ConfigState documentation for more details.
The following configuration options are available:
* Indent
String to use for each indentation level for Dump functions.
It is a single space by default. A popular alternative is "\t".
* MaxDepth
Maximum number of levels to descend into nested data structures.
There is no limit by default.
* DisableMethods
Disables invocation of error and Stringer interface methods.
Method invocation is enabled by default.
* DisablePointerMethods
Disables invocation of error and Stringer interface methods on types
which only accept pointer receivers from non-pointer variables.
Pointer method invocation is enabled by default.
* ContinueOnMethod
Enables recursion into types after invoking error and Stringer interface
methods. Recursion after method invocation is disabled by default.
* SortKeys
Specifies map keys should be sorted before being printed. Use
this to have a more deterministic, diffable output. Note that
only native types (bool, int, uint, floats, uintptr and string)
and types which implement error or Stringer interfaces are
supported with other types sorted according to the
reflect.Value.String() output which guarantees display
stability. Natural map order is used by default.
* SpewKeys
Specifies that, as a last resort attempt, map keys should be
spewed to strings and sorted by those strings. This is only
considered if SortKeys is true.
Dump Usage
Simply call spew.Dump with a list of variables you want to dump:
spew.Dump(myVar1, myVar2, ...)
You may also call spew.Fdump if you would prefer to output to an arbitrary
io.Writer. For example, to dump to standard error:
spew.Fdump(os.Stderr, myVar1, myVar2, ...)
A third option is to call spew.Sdump to get the formatted output as a string:
str := spew.Sdump(myVar1, myVar2, ...)
Sample Dump Output
See the Dump example for details on the setup of the types and variables being
shown here.
(main.Foo) {
unexportedField: (*main.Bar)(0xf84002e210)({
flag: (main.Flag) flagTwo,
data: (uintptr) <nil>
}),
ExportedField: (map[interface {}]interface {}) (len=1) {
(string) (len=3) "one": (bool) true
}
}
Byte (and uint8) arrays and slices are displayed uniquely like the hexdump -C
command as shown.
([]uint8) (len=32 cap=32) {
00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... |
00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 |!"#$%&'()*+,-./0|
00000020 31 32 |12|
}
Custom Formatter
Spew provides a custom formatter that implements the fmt.Formatter interface
so that it integrates cleanly with standard fmt package printing functions. The
formatter is useful for inline printing of smaller data types similar to the
standard %v format specifier.
The custom formatter only responds to the %v (most compact), %+v (adds pointer
addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb
combinations. Any other verbs such as %x and %q will be sent to the the
standard fmt package for formatting. In addition, the custom formatter ignores
the width and precision arguments (however they will still work on the format
specifiers not handled by the custom formatter).
Custom Formatter Usage
The simplest way to make use of the spew custom formatter is to call one of the
convenience functions such as spew.Printf, spew.Println, or spew.Printf. The
functions have syntax you are most likely already familiar with:
spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2)
spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4)
spew.Println(myVar, myVar2)
spew.Fprintf(os.Stderr, "myVar1: %v -- myVar2: %+v", myVar1, myVar2)
spew.Fprintf(os.Stderr, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4)
See the Index for the full list convenience functions.
Sample Formatter Output
Double pointer to a uint8:
%v: <**>5
%+v: <**>(0xf8400420d0->0xf8400420c8)5
%#v: (**uint8)5
%#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5
Pointer to circular struct with a uint8 field and a pointer to itself:
%v: <*>{1 <*><shown>}
%+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)<shown>}
%#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)<shown>}
%#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)<shown>}
See the Printf example for details on the setup of variables being shown
here.
Errors
Since it is possible for custom Stringer/error interfaces to panic, spew
detects them and handles them internally by printing the panic information
inline with the output. Since spew is intended to provide deep pretty printing
capabilities on structures, it intentionally does not return any errors.
*/
package spew

View File

@@ -0,0 +1,509 @@
/*
* Copyright (c) 2013 Dave Collins <dave@davec.name>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package spew
import (
"bytes"
"encoding/hex"
"fmt"
"io"
"os"
"reflect"
"regexp"
"strconv"
"strings"
)
var (
// uint8Type is a reflect.Type representing a uint8. It is used to
// convert cgo types to uint8 slices for hexdumping.
uint8Type = reflect.TypeOf(uint8(0))
// cCharRE is a regular expression that matches a cgo char.
// It is used to detect character arrays to hexdump them.
cCharRE = regexp.MustCompile("^.*\\._Ctype_char$")
// cUnsignedCharRE is a regular expression that matches a cgo unsigned
// char. It is used to detect unsigned character arrays to hexdump
// them.
cUnsignedCharRE = regexp.MustCompile("^.*\\._Ctype_unsignedchar$")
// cUint8tCharRE is a regular expression that matches a cgo uint8_t.
// It is used to detect uint8_t arrays to hexdump them.
cUint8tCharRE = regexp.MustCompile("^.*\\._Ctype_uint8_t$")
)
// dumpState contains information about the state of a dump operation.
type dumpState struct {
w io.Writer
depth int
pointers map[uintptr]int
ignoreNextType bool
ignoreNextIndent bool
cs *ConfigState
}
// indent performs indentation according to the depth level and cs.Indent
// option.
func (d *dumpState) indent() {
if d.ignoreNextIndent {
d.ignoreNextIndent = false
return
}
d.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth))
}
// unpackValue returns values inside of non-nil interfaces when possible.
// This is useful for data types like structs, arrays, slices, and maps which
// can contain varying types packed inside an interface.
func (d *dumpState) unpackValue(v reflect.Value) reflect.Value {
if v.Kind() == reflect.Interface && !v.IsNil() {
v = v.Elem()
}
return v
}
// dumpPtr handles formatting of pointers by indirecting them as necessary.
func (d *dumpState) dumpPtr(v reflect.Value) {
// Remove pointers at or below the current depth from map used to detect
// circular refs.
for k, depth := range d.pointers {
if depth >= d.depth {
delete(d.pointers, k)
}
}
// Keep list of all dereferenced pointers to show later.
pointerChain := make([]uintptr, 0)
// Figure out how many levels of indirection there are by dereferencing
// pointers and unpacking interfaces down the chain while detecting circular
// references.
nilFound := false
cycleFound := false
indirects := 0
ve := v
for ve.Kind() == reflect.Ptr {
if ve.IsNil() {
nilFound = true
break
}
indirects++
addr := ve.Pointer()
pointerChain = append(pointerChain, addr)
if pd, ok := d.pointers[addr]; ok && pd < d.depth {
cycleFound = true
indirects--
break
}
d.pointers[addr] = d.depth
ve = ve.Elem()
if ve.Kind() == reflect.Interface {
if ve.IsNil() {
nilFound = true
break
}
ve = ve.Elem()
}
}
// Display type information.
d.w.Write(openParenBytes)
d.w.Write(bytes.Repeat(asteriskBytes, indirects))
d.w.Write([]byte(ve.Type().String()))
d.w.Write(closeParenBytes)
// Display pointer information.
if len(pointerChain) > 0 {
d.w.Write(openParenBytes)
for i, addr := range pointerChain {
if i > 0 {
d.w.Write(pointerChainBytes)
}
printHexPtr(d.w, addr)
}
d.w.Write(closeParenBytes)
}
// Display dereferenced value.
d.w.Write(openParenBytes)
switch {
case nilFound == true:
d.w.Write(nilAngleBytes)
case cycleFound == true:
d.w.Write(circularBytes)
default:
d.ignoreNextType = true
d.dump(ve)
}
d.w.Write(closeParenBytes)
}
// dumpSlice handles formatting of arrays and slices. Byte (uint8 under
// reflection) arrays and slices are dumped in hexdump -C fashion.
func (d *dumpState) dumpSlice(v reflect.Value) {
// Determine whether this type should be hex dumped or not. Also,
// for types which should be hexdumped, try to use the underlying data
// first, then fall back to trying to convert them to a uint8 slice.
var buf []uint8
doConvert := false
doHexDump := false
numEntries := v.Len()
if numEntries > 0 {
vt := v.Index(0).Type()
vts := vt.String()
switch {
// C types that need to be converted.
case cCharRE.MatchString(vts):
fallthrough
case cUnsignedCharRE.MatchString(vts):
fallthrough
case cUint8tCharRE.MatchString(vts):
doConvert = true
// Try to use existing uint8 slices and fall back to converting
// and copying if that fails.
case vt.Kind() == reflect.Uint8:
// We need an addressable interface to convert the type
// to a byte slice. However, the reflect package won't
// give us an interface on certain things like
// unexported struct fields in order to enforce
// visibility rules. We use unsafe, when available, to
// bypass these restrictions since this package does not
// mutate the values.
vs := v
if !vs.CanInterface() || !vs.CanAddr() {
vs = unsafeReflectValue(vs)
}
if !UnsafeDisabled {
vs = vs.Slice(0, numEntries)
// Use the existing uint8 slice if it can be
// type asserted.
iface := vs.Interface()
if slice, ok := iface.([]uint8); ok {
buf = slice
doHexDump = true
break
}
}
// The underlying data needs to be converted if it can't
// be type asserted to a uint8 slice.
doConvert = true
}
// Copy and convert the underlying type if needed.
if doConvert && vt.ConvertibleTo(uint8Type) {
// Convert and copy each element into a uint8 byte
// slice.
buf = make([]uint8, numEntries)
for i := 0; i < numEntries; i++ {
vv := v.Index(i)
buf[i] = uint8(vv.Convert(uint8Type).Uint())
}
doHexDump = true
}
}
// Hexdump the entire slice as needed.
if doHexDump {
indent := strings.Repeat(d.cs.Indent, d.depth)
str := indent + hex.Dump(buf)
str = strings.Replace(str, "\n", "\n"+indent, -1)
str = strings.TrimRight(str, d.cs.Indent)
d.w.Write([]byte(str))
return
}
// Recursively call dump for each item.
for i := 0; i < numEntries; i++ {
d.dump(d.unpackValue(v.Index(i)))
if i < (numEntries - 1) {
d.w.Write(commaNewlineBytes)
} else {
d.w.Write(newlineBytes)
}
}
}
// dump is the main workhorse for dumping a value. It uses the passed reflect
// value to figure out what kind of object we are dealing with and formats it
// appropriately. It is a recursive function, however circular data structures
// are detected and handled properly.
func (d *dumpState) dump(v reflect.Value) {
// Handle invalid reflect values immediately.
kind := v.Kind()
if kind == reflect.Invalid {
d.w.Write(invalidAngleBytes)
return
}
// Handle pointers specially.
if kind == reflect.Ptr {
d.indent()
d.dumpPtr(v)
return
}
// Print type information unless already handled elsewhere.
if !d.ignoreNextType {
d.indent()
d.w.Write(openParenBytes)
d.w.Write([]byte(v.Type().String()))
d.w.Write(closeParenBytes)
d.w.Write(spaceBytes)
}
d.ignoreNextType = false
// Display length and capacity if the built-in len and cap functions
// work with the value's kind and the len/cap itself is non-zero.
valueLen, valueCap := 0, 0
switch v.Kind() {
case reflect.Array, reflect.Slice, reflect.Chan:
valueLen, valueCap = v.Len(), v.Cap()
case reflect.Map, reflect.String:
valueLen = v.Len()
}
if valueLen != 0 || valueCap != 0 {
d.w.Write(openParenBytes)
if valueLen != 0 {
d.w.Write(lenEqualsBytes)
printInt(d.w, int64(valueLen), 10)
}
if valueCap != 0 {
if valueLen != 0 {
d.w.Write(spaceBytes)
}
d.w.Write(capEqualsBytes)
printInt(d.w, int64(valueCap), 10)
}
d.w.Write(closeParenBytes)
d.w.Write(spaceBytes)
}
// Call Stringer/error interfaces if they exist and the handle methods flag
// is enabled
if !d.cs.DisableMethods {
if (kind != reflect.Invalid) && (kind != reflect.Interface) {
if handled := handleMethods(d.cs, d.w, v); handled {
return
}
}
}
switch kind {
case reflect.Invalid:
// Do nothing. We should never get here since invalid has already
// been handled above.
case reflect.Bool:
printBool(d.w, v.Bool())
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
printInt(d.w, v.Int(), 10)
case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
printUint(d.w, v.Uint(), 10)
case reflect.Float32:
printFloat(d.w, v.Float(), 32)
case reflect.Float64:
printFloat(d.w, v.Float(), 64)
case reflect.Complex64:
printComplex(d.w, v.Complex(), 32)
case reflect.Complex128:
printComplex(d.w, v.Complex(), 64)
case reflect.Slice:
if v.IsNil() {
d.w.Write(nilAngleBytes)
break
}
fallthrough
case reflect.Array:
d.w.Write(openBraceNewlineBytes)
d.depth++
if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {
d.indent()
d.w.Write(maxNewlineBytes)
} else {
d.dumpSlice(v)
}
d.depth--
d.indent()
d.w.Write(closeBraceBytes)
case reflect.String:
d.w.Write([]byte(strconv.Quote(v.String())))
case reflect.Interface:
// The only time we should get here is for nil interfaces due to
// unpackValue calls.
if v.IsNil() {
d.w.Write(nilAngleBytes)
}
case reflect.Ptr:
// Do nothing. We should never get here since pointers have already
// been handled above.
case reflect.Map:
// nil maps should be indicated as different than empty maps
if v.IsNil() {
d.w.Write(nilAngleBytes)
break
}
d.w.Write(openBraceNewlineBytes)
d.depth++
if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {
d.indent()
d.w.Write(maxNewlineBytes)
} else {
numEntries := v.Len()
keys := v.MapKeys()
if d.cs.SortKeys {
sortValues(keys, d.cs)
}
for i, key := range keys {
d.dump(d.unpackValue(key))
d.w.Write(colonSpaceBytes)
d.ignoreNextIndent = true
d.dump(d.unpackValue(v.MapIndex(key)))
if i < (numEntries - 1) {
d.w.Write(commaNewlineBytes)
} else {
d.w.Write(newlineBytes)
}
}
}
d.depth--
d.indent()
d.w.Write(closeBraceBytes)
case reflect.Struct:
d.w.Write(openBraceNewlineBytes)
d.depth++
if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {
d.indent()
d.w.Write(maxNewlineBytes)
} else {
vt := v.Type()
numFields := v.NumField()
for i := 0; i < numFields; i++ {
d.indent()
vtf := vt.Field(i)
d.w.Write([]byte(vtf.Name))
d.w.Write(colonSpaceBytes)
d.ignoreNextIndent = true
d.dump(d.unpackValue(v.Field(i)))
if i < (numFields - 1) {
d.w.Write(commaNewlineBytes)
} else {
d.w.Write(newlineBytes)
}
}
}
d.depth--
d.indent()
d.w.Write(closeBraceBytes)
case reflect.Uintptr:
printHexPtr(d.w, uintptr(v.Uint()))
case reflect.UnsafePointer, reflect.Chan, reflect.Func:
printHexPtr(d.w, v.Pointer())
// There were not any other types at the time this code was written, but
// fall back to letting the default fmt package handle it in case any new
// types are added.
default:
if v.CanInterface() {
fmt.Fprintf(d.w, "%v", v.Interface())
} else {
fmt.Fprintf(d.w, "%v", v.String())
}
}
}
// fdump is a helper function to consolidate the logic from the various public
// methods which take varying writers and config states.
func fdump(cs *ConfigState, w io.Writer, a ...interface{}) {
for _, arg := range a {
if arg == nil {
w.Write(interfaceBytes)
w.Write(spaceBytes)
w.Write(nilAngleBytes)
w.Write(newlineBytes)
continue
}
d := dumpState{w: w, cs: cs}
d.pointers = make(map[uintptr]int)
d.dump(reflect.ValueOf(arg))
d.w.Write(newlineBytes)
}
}
// Fdump formats and displays the passed arguments to io.Writer w. It formats
// exactly the same as Dump.
func Fdump(w io.Writer, a ...interface{}) {
fdump(&Config, w, a...)
}
// Sdump returns a string with the passed arguments formatted exactly the same
// as Dump.
func Sdump(a ...interface{}) string {
var buf bytes.Buffer
fdump(&Config, &buf, a...)
return buf.String()
}
/*
Dump displays the passed parameters to standard out with newlines, customizable
indentation, and additional debug information such as complete types and all
pointer addresses used to indirect to the final value. It provides the
following features over the built-in printing facilities provided by the fmt
package:
* Pointers are dereferenced and followed
* Circular data structures are detected and handled properly
* Custom Stringer/error interfaces are optionally invoked, including
on unexported types
* Custom types which only implement the Stringer/error interfaces via
a pointer receiver are optionally invoked when passing non-pointer
variables
* Byte arrays and slices are dumped like the hexdump -C command which
includes offsets, byte values in hex, and ASCII output
The configuration options are controlled by an exported package global,
spew.Config. See ConfigState for options documentation.
See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to
get the formatted result as a string.
*/
func Dump(a ...interface{}) {
fdump(&Config, os.Stdout, a...)
}

View File

@@ -0,0 +1,419 @@
/*
* Copyright (c) 2013 Dave Collins <dave@davec.name>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package spew
import (
"bytes"
"fmt"
"reflect"
"strconv"
"strings"
)
// supportedFlags is a list of all the character flags supported by fmt package.
const supportedFlags = "0-+# "
// formatState implements the fmt.Formatter interface and contains information
// about the state of a formatting operation. The NewFormatter function can
// be used to get a new Formatter which can be used directly as arguments
// in standard fmt package printing calls.
type formatState struct {
value interface{}
fs fmt.State
depth int
pointers map[uintptr]int
ignoreNextType bool
cs *ConfigState
}
// buildDefaultFormat recreates the original format string without precision
// and width information to pass in to fmt.Sprintf in the case of an
// unrecognized type. Unless new types are added to the language, this
// function won't ever be called.
func (f *formatState) buildDefaultFormat() (format string) {
buf := bytes.NewBuffer(percentBytes)
for _, flag := range supportedFlags {
if f.fs.Flag(int(flag)) {
buf.WriteRune(flag)
}
}
buf.WriteRune('v')
format = buf.String()
return format
}
// constructOrigFormat recreates the original format string including precision
// and width information to pass along to the standard fmt package. This allows
// automatic deferral of all format strings this package doesn't support.
func (f *formatState) constructOrigFormat(verb rune) (format string) {
buf := bytes.NewBuffer(percentBytes)
for _, flag := range supportedFlags {
if f.fs.Flag(int(flag)) {
buf.WriteRune(flag)
}
}
if width, ok := f.fs.Width(); ok {
buf.WriteString(strconv.Itoa(width))
}
if precision, ok := f.fs.Precision(); ok {
buf.Write(precisionBytes)
buf.WriteString(strconv.Itoa(precision))
}
buf.WriteRune(verb)
format = buf.String()
return format
}
// unpackValue returns values inside of non-nil interfaces when possible and
// ensures that types for values which have been unpacked from an interface
// are displayed when the show types flag is also set.
// This is useful for data types like structs, arrays, slices, and maps which
// can contain varying types packed inside an interface.
func (f *formatState) unpackValue(v reflect.Value) reflect.Value {
if v.Kind() == reflect.Interface {
f.ignoreNextType = false
if !v.IsNil() {
v = v.Elem()
}
}
return v
}
// formatPtr handles formatting of pointers by indirecting them as necessary.
func (f *formatState) formatPtr(v reflect.Value) {
// Display nil if top level pointer is nil.
showTypes := f.fs.Flag('#')
if v.IsNil() && (!showTypes || f.ignoreNextType) {
f.fs.Write(nilAngleBytes)
return
}
// Remove pointers at or below the current depth from map used to detect
// circular refs.
for k, depth := range f.pointers {
if depth >= f.depth {
delete(f.pointers, k)
}
}
// Keep list of all dereferenced pointers to possibly show later.
pointerChain := make([]uintptr, 0)
// Figure out how many levels of indirection there are by derferencing
// pointers and unpacking interfaces down the chain while detecting circular
// references.
nilFound := false
cycleFound := false
indirects := 0
ve := v
for ve.Kind() == reflect.Ptr {
if ve.IsNil() {
nilFound = true
break
}
indirects++
addr := ve.Pointer()
pointerChain = append(pointerChain, addr)
if pd, ok := f.pointers[addr]; ok && pd < f.depth {
cycleFound = true
indirects--
break
}
f.pointers[addr] = f.depth
ve = ve.Elem()
if ve.Kind() == reflect.Interface {
if ve.IsNil() {
nilFound = true
break
}
ve = ve.Elem()
}
}
// Display type or indirection level depending on flags.
if showTypes && !f.ignoreNextType {
f.fs.Write(openParenBytes)
f.fs.Write(bytes.Repeat(asteriskBytes, indirects))
f.fs.Write([]byte(ve.Type().String()))
f.fs.Write(closeParenBytes)
} else {
if nilFound || cycleFound {
indirects += strings.Count(ve.Type().String(), "*")
}
f.fs.Write(openAngleBytes)
f.fs.Write([]byte(strings.Repeat("*", indirects)))
f.fs.Write(closeAngleBytes)
}
// Display pointer information depending on flags.
if f.fs.Flag('+') && (len(pointerChain) > 0) {
f.fs.Write(openParenBytes)
for i, addr := range pointerChain {
if i > 0 {
f.fs.Write(pointerChainBytes)
}
printHexPtr(f.fs, addr)
}
f.fs.Write(closeParenBytes)
}
// Display dereferenced value.
switch {
case nilFound == true:
f.fs.Write(nilAngleBytes)
case cycleFound == true:
f.fs.Write(circularShortBytes)
default:
f.ignoreNextType = true
f.format(ve)
}
}
// format is the main workhorse for providing the Formatter interface. It
// uses the passed reflect value to figure out what kind of object we are
// dealing with and formats it appropriately. It is a recursive function,
// however circular data structures are detected and handled properly.
func (f *formatState) format(v reflect.Value) {
// Handle invalid reflect values immediately.
kind := v.Kind()
if kind == reflect.Invalid {
f.fs.Write(invalidAngleBytes)
return
}
// Handle pointers specially.
if kind == reflect.Ptr {
f.formatPtr(v)
return
}
// Print type information unless already handled elsewhere.
if !f.ignoreNextType && f.fs.Flag('#') {
f.fs.Write(openParenBytes)
f.fs.Write([]byte(v.Type().String()))
f.fs.Write(closeParenBytes)
}
f.ignoreNextType = false
// Call Stringer/error interfaces if they exist and the handle methods
// flag is enabled.
if !f.cs.DisableMethods {
if (kind != reflect.Invalid) && (kind != reflect.Interface) {
if handled := handleMethods(f.cs, f.fs, v); handled {
return
}
}
}
switch kind {
case reflect.Invalid:
// Do nothing. We should never get here since invalid has already
// been handled above.
case reflect.Bool:
printBool(f.fs, v.Bool())
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
printInt(f.fs, v.Int(), 10)
case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
printUint(f.fs, v.Uint(), 10)
case reflect.Float32:
printFloat(f.fs, v.Float(), 32)
case reflect.Float64:
printFloat(f.fs, v.Float(), 64)
case reflect.Complex64:
printComplex(f.fs, v.Complex(), 32)
case reflect.Complex128:
printComplex(f.fs, v.Complex(), 64)
case reflect.Slice:
if v.IsNil() {
f.fs.Write(nilAngleBytes)
break
}
fallthrough
case reflect.Array:
f.fs.Write(openBracketBytes)
f.depth++
if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {
f.fs.Write(maxShortBytes)
} else {
numEntries := v.Len()
for i := 0; i < numEntries; i++ {
if i > 0 {
f.fs.Write(spaceBytes)
}
f.ignoreNextType = true
f.format(f.unpackValue(v.Index(i)))
}
}
f.depth--
f.fs.Write(closeBracketBytes)
case reflect.String:
f.fs.Write([]byte(v.String()))
case reflect.Interface:
// The only time we should get here is for nil interfaces due to
// unpackValue calls.
if v.IsNil() {
f.fs.Write(nilAngleBytes)
}
case reflect.Ptr:
// Do nothing. We should never get here since pointers have already
// been handled above.
case reflect.Map:
// nil maps should be indicated as different than empty maps
if v.IsNil() {
f.fs.Write(nilAngleBytes)
break
}
f.fs.Write(openMapBytes)
f.depth++
if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {
f.fs.Write(maxShortBytes)
} else {
keys := v.MapKeys()
if f.cs.SortKeys {
sortValues(keys, f.cs)
}
for i, key := range keys {
if i > 0 {
f.fs.Write(spaceBytes)
}
f.ignoreNextType = true
f.format(f.unpackValue(key))
f.fs.Write(colonBytes)
f.ignoreNextType = true
f.format(f.unpackValue(v.MapIndex(key)))
}
}
f.depth--
f.fs.Write(closeMapBytes)
case reflect.Struct:
numFields := v.NumField()
f.fs.Write(openBraceBytes)
f.depth++
if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {
f.fs.Write(maxShortBytes)
} else {
vt := v.Type()
for i := 0; i < numFields; i++ {
if i > 0 {
f.fs.Write(spaceBytes)
}
vtf := vt.Field(i)
if f.fs.Flag('+') || f.fs.Flag('#') {
f.fs.Write([]byte(vtf.Name))
f.fs.Write(colonBytes)
}
f.format(f.unpackValue(v.Field(i)))
}
}
f.depth--
f.fs.Write(closeBraceBytes)
case reflect.Uintptr:
printHexPtr(f.fs, uintptr(v.Uint()))
case reflect.UnsafePointer, reflect.Chan, reflect.Func:
printHexPtr(f.fs, v.Pointer())
// There were not any other types at the time this code was written, but
// fall back to letting the default fmt package handle it if any get added.
default:
format := f.buildDefaultFormat()
if v.CanInterface() {
fmt.Fprintf(f.fs, format, v.Interface())
} else {
fmt.Fprintf(f.fs, format, v.String())
}
}
}
// Format satisfies the fmt.Formatter interface. See NewFormatter for usage
// details.
func (f *formatState) Format(fs fmt.State, verb rune) {
f.fs = fs
// Use standard formatting for verbs that are not v.
if verb != 'v' {
format := f.constructOrigFormat(verb)
fmt.Fprintf(fs, format, f.value)
return
}
if f.value == nil {
if fs.Flag('#') {
fs.Write(interfaceBytes)
}
fs.Write(nilAngleBytes)
return
}
f.format(reflect.ValueOf(f.value))
}
// newFormatter is a helper function to consolidate the logic from the various
// public methods which take varying config states.
func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter {
fs := &formatState{value: v, cs: cs}
fs.pointers = make(map[uintptr]int)
return fs
}
/*
NewFormatter returns a custom formatter that satisfies the fmt.Formatter
interface. As a result, it integrates cleanly with standard fmt package
printing functions. The formatter is useful for inline printing of smaller data
types similar to the standard %v format specifier.
The custom formatter only responds to the %v (most compact), %+v (adds pointer
addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb
combinations. Any other verbs such as %x and %q will be sent to the the
standard fmt package for formatting. In addition, the custom formatter ignores
the width and precision arguments (however they will still work on the format
specifiers not handled by the custom formatter).
Typically this function shouldn't be called directly. It is much easier to make
use of the custom formatter by calling one of the convenience functions such as
Printf, Println, or Fprintf.
*/
func NewFormatter(v interface{}) fmt.Formatter {
return newFormatter(&Config, v)
}

View File

@@ -0,0 +1,148 @@
/*
* Copyright (c) 2013 Dave Collins <dave@davec.name>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package spew
import (
"fmt"
"io"
)
// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the formatted string as a value that satisfies error. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b))
func Errorf(format string, a ...interface{}) (err error) {
return fmt.Errorf(format, convertArgs(a)...)
}
// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b))
func Fprint(w io.Writer, a ...interface{}) (n int, err error) {
return fmt.Fprint(w, convertArgs(a)...)
}
// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b))
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
return fmt.Fprintf(w, format, convertArgs(a)...)
}
// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it
// passed with a default Formatter interface returned by NewFormatter. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b))
func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
return fmt.Fprintln(w, convertArgs(a)...)
}
// Print is a wrapper for fmt.Print that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Print(spew.NewFormatter(a), spew.NewFormatter(b))
func Print(a ...interface{}) (n int, err error) {
return fmt.Print(convertArgs(a)...)
}
// Printf is a wrapper for fmt.Printf that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b))
func Printf(format string, a ...interface{}) (n int, err error) {
return fmt.Printf(format, convertArgs(a)...)
}
// Println is a wrapper for fmt.Println that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the number of bytes written and any write error encountered. See
// NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Println(spew.NewFormatter(a), spew.NewFormatter(b))
func Println(a ...interface{}) (n int, err error) {
return fmt.Println(convertArgs(a)...)
}
// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the resulting string. See NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b))
func Sprint(a ...interface{}) string {
return fmt.Sprint(convertArgs(a)...)
}
// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were
// passed with a default Formatter interface returned by NewFormatter. It
// returns the resulting string. See NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b))
func Sprintf(format string, a ...interface{}) string {
return fmt.Sprintf(format, convertArgs(a)...)
}
// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it
// were passed with a default Formatter interface returned by NewFormatter. It
// returns the resulting string. See NewFormatter for formatting details.
//
// This function is shorthand for the following syntax:
//
// fmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b))
func Sprintln(a ...interface{}) string {
return fmt.Sprintln(convertArgs(a)...)
}
// convertArgs accepts a slice of arguments and returns a slice of the same
// length with each argument converted to a default spew Formatter interface.
func convertArgs(args []interface{}) (formatters []interface{}) {
formatters = make([]interface{}, len(args))
for index, arg := range args {
formatters[index] = NewFormatter(arg)
}
return formatters
}

View File

@@ -0,0 +1,12 @@
.idea/
.DS_Store
*/**/*un~
.vagrant/
*.pyc
build/
pyethash.egg-info/
*.so
*~
*.swp
MANIFEST
dist/

View File

@@ -0,0 +1,23 @@
language: go
go:
- 1.4.2
before_install:
# for g++4.8 and C++11
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
# Set up go-ethereum
- sudo apt-get update -y -qq
- sudo apt-get install -yqq libgmp3-dev
- git clone --depth=10 https://github.com/ethereum/go-ethereum ${GOPATH}/src/github.com/ethereum/go-ethereum
# use canned dependencies from the go-ethereum repository
- export GOPATH=$GOPATH:$GOPATH/src/github.com/ethereum/go-ethereum/Godeps/_workspace/
- echo $GOPATH
install:
# need to explicitly request version 1.48 since by default we get 1.46 which does not work with C++11
- sudo apt-get install -qq --yes --force-yes g++-4.8
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
- sudo apt-get install -qq wget cmake bash libboost-test1.48-dev libboost-system1.48-dev libboost-filesystem1.48-dev nodejs python-pip python-dev valgrind
- sudo pip install virtualenv -q
script: "./test/test.sh"

View File

@@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 2.8.7)
project(ethash)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
set(ETHHASH_LIBS ethash)
if (WIN32 AND WANT_CRYPTOPP)
add_subdirectory(cryptopp)
endif()
add_subdirectory(src/libethash)
add_subdirectory(src/benchmark EXCLUDE_FROM_ALL)
add_subdirectory(test/c)

View File

@@ -0,0 +1,17 @@
include setup.py
# C sources
include src/libethash/internal.c
include src/libethash/sha3.c
include src/libethash/util.c
include src/python/core.c
# Headers
include src/libethash/compiler.h
include src/libethash/data_sizes.h
include src/libethash/endian.h
include src/libethash/ethash.h
include src/libethash/fnv.h
include src/libethash/internal.h
include src/libethash/sha3.h
include src/libethash/util.h

View File

@@ -0,0 +1,6 @@
.PHONY: clean test
test:
./test/test.sh
clean:
rm -rf *.so pyethash.egg-info/ build/ test/python/python-virtual-env/ test/c/build/ pyethash.so test/python/*.pyc dist/ MANIFEST

View File

@@ -0,0 +1,22 @@
[![Build Status](https://travis-ci.org/ethereum/ethash.svg?branch=master)](https://travis-ci.org/ethereum/ethash)
[![Windows Build Status](https://ci.appveyor.com/api/projects/status/github/debris/ethash?branch=master&svg=true)](https://ci.appveyor.com/project/debris/ethash-nr37r/branch/master)
# Ethash
For details on this project, please see the Ethereum wiki:
https://github.com/ethereum/wiki/wiki/Ethash
### Coding Style for C++ code:
Follow the same exact style as in [cpp-ethereum](https://github.com/ethereum/cpp-ethereum/blob/develop/CodingStandards.txt)
### Coding Style for C code:
The main thing above all is code consistency.
- Tabs for indentation. A tab is 4 spaces
- Try to stick to the [K&R](http://en.wikipedia.org/wiki/Indent_style#K.26R_style),
especially for the C code.
- Keep the line lengths reasonable. No hard limit on 80 characters but don't go further
than 110. Some people work with multiple buffers next to each other.
Make them like you :)

View File

@@ -0,0 +1,7 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "Ubuntu 12.04"
config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
end

View File

@@ -0,0 +1,43 @@
version: 1.0.0.{build}
environment:
BOOST_ROOT: "c:/projects/ethash/deps/boost"
branches:
only:
- master
- develop
os: Windows Server 2012 R2
clone_folder: c:\projects\ethash
#platform: Any CPU
#configuration: Debug
install:
# by default, all script lines are interpreted as batch
# scripts to run before build
before_build:
- echo "Downloading boost..."
- mkdir c:\projects\ethash\deps
- cd c:\projects\ethash\deps
- curl -O https://build.ethdev.com/builds/windows-precompiled/boost.tar.gz
- echo "Unzipping boost..."
- 7z x boost.tar.gz > nul
- 7z x boost.tar > nul
- ls
- echo "Running cmake..."
- cd c:\projects\ethash
- cmake .
build:
project: ALL_BUILD.vcxproj # path to Visual Studio solution or project
after_build:
- echo "Running tests..."
- cd c:\projects\ethash\test\c\Debug
- Test.exe
- echo "Finished!"

View File

@@ -0,0 +1,441 @@
// Copyright 2015 The go-ethereum Authors
// Copyright 2015 Lefteris Karapetsas <lefteris@refu.co>
// Copyright 2015 Matthew Wampler-Doty <matthew.wampler.doty@gmail.com>
// This file is part of the go-ethereum library.
//
// The go-ethereum library 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.
//
// The go-ethereum library 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 the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package ethash
/*
#include "src/libethash/internal.h"
int ethashGoCallback_cgo(unsigned);
*/
import "C"
import (
"errors"
"fmt"
"io/ioutil"
"math/big"
"math/rand"
"os"
"os/user"
"path/filepath"
"runtime"
"sync"
"sync/atomic"
"time"
"unsafe"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/pow"
)
var (
maxUint256 = new(big.Int).Exp(big.NewInt(2), big.NewInt(256), big.NewInt(0))
sharedLight = new(Light)
)
const (
epochLength uint64 = 30000
cacheSizeForTesting C.uint64_t = 1024
dagSizeForTesting C.uint64_t = 1024 * 32
)
var DefaultDir = defaultDir()
func defaultDir() string {
home := os.Getenv("HOME")
if user, err := user.Current(); err == nil {
home = user.HomeDir
}
if runtime.GOOS == "windows" {
return filepath.Join(home, "AppData", "Ethash")
}
return filepath.Join(home, ".ethash")
}
// cache wraps an ethash_light_t with some metadata
// and automatic memory management.
type cache struct {
epoch uint64
used time.Time
test bool
gen sync.Once // ensures cache is only generated once.
ptr *C.struct_ethash_light
}
// generate creates the actual cache. it can be called from multiple
// goroutines. the first call will generate the cache, subsequent
// calls wait until it is generated.
func (cache *cache) generate() {
cache.gen.Do(func() {
started := time.Now()
seedHash := makeSeedHash(cache.epoch)
glog.V(logger.Debug).Infof("Generating cache for epoch %d (%x)", cache.epoch, seedHash)
size := C.ethash_get_cachesize(C.uint64_t(cache.epoch * epochLength))
if cache.test {
size = cacheSizeForTesting
}
cache.ptr = C.ethash_light_new_internal(size, (*C.ethash_h256_t)(unsafe.Pointer(&seedHash[0])))
runtime.SetFinalizer(cache, freeCache)
glog.V(logger.Debug).Infof("Done generating cache for epoch %d, it took %v", cache.epoch, time.Since(started))
})
}
func freeCache(cache *cache) {
C.ethash_light_delete(cache.ptr)
cache.ptr = nil
}
func (cache *cache) compute(dagSize uint64, hash common.Hash, nonce uint64) (ok bool, mixDigest, result common.Hash) {
ret := C.ethash_light_compute_internal(cache.ptr, C.uint64_t(dagSize), hashToH256(hash), C.uint64_t(nonce))
// Make sure cache is live until after the C call.
// This is important because a GC might happen and execute
// the finalizer before the call completes.
_ = cache
return bool(ret.success), h256ToHash(ret.mix_hash), h256ToHash(ret.result)
}
// Light implements the Verify half of the proof of work. It uses a few small
// in-memory caches to verify the nonces found by Full.
type Light struct {
test bool // If set, use a smaller cache size
mu sync.Mutex // Protects the per-epoch map of verification caches
caches map[uint64]*cache // Currently maintained verification caches
future *cache // Pre-generated cache for the estimated future DAG
NumCaches int // Maximum number of caches to keep before eviction (only init, don't modify)
}
// Verify checks whether the block's nonce is valid.
func (l *Light) Verify(block pow.Block) bool {
// TODO: do ethash_quick_verify before getCache in order
// to prevent DOS attacks.
blockNum := block.NumberU64()
if blockNum >= epochLength*2048 {
glog.V(logger.Debug).Infof("block number %d too high, limit is %d", epochLength*2048)
return false
}
difficulty := block.Difficulty()
/* Cannot happen if block header diff is validated prior to PoW, but can
happen if PoW is checked first due to parallel PoW checking.
We could check the minimum valid difficulty but for SoC we avoid (duplicating)
Ethereum protocol consensus rules here which are not in scope of Ethash
*/
if difficulty.Cmp(common.Big0) == 0 {
glog.V(logger.Debug).Infof("invalid block difficulty")
return false
}
cache := l.getCache(blockNum)
dagSize := C.ethash_get_datasize(C.uint64_t(blockNum))
if l.test {
dagSize = dagSizeForTesting
}
// Recompute the hash using the cache.
ok, mixDigest, result := cache.compute(uint64(dagSize), block.HashNoNonce(), block.Nonce())
if !ok {
return false
}
// avoid mixdigest malleability as it's not included in a block's "hashNononce"
if block.MixDigest() != mixDigest {
return false
}
// The actual check.
target := new(big.Int).Div(maxUint256, difficulty)
return result.Big().Cmp(target) <= 0
}
func h256ToHash(in C.ethash_h256_t) common.Hash {
return *(*common.Hash)(unsafe.Pointer(&in.b))
}
func hashToH256(in common.Hash) C.ethash_h256_t {
return C.ethash_h256_t{b: *(*[32]C.uint8_t)(unsafe.Pointer(&in[0]))}
}
func (l *Light) getCache(blockNum uint64) *cache {
var c *cache
epoch := blockNum / epochLength
// If we have a PoW for that epoch, use that
l.mu.Lock()
if l.caches == nil {
l.caches = make(map[uint64]*cache)
}
if l.NumCaches == 0 {
l.NumCaches = 3
}
c = l.caches[epoch]
if c == nil {
// No cached DAG, evict the oldest if the cache limit was reached
if len(l.caches) >= l.NumCaches {
var evict *cache
for _, cache := range l.caches {
if evict == nil || evict.used.After(cache.used) {
evict = cache
}
}
glog.V(logger.Debug).Infof("Evicting DAG for epoch %d in favour of epoch %d", evict.epoch, epoch)
delete(l.caches, evict.epoch)
}
// If we have the new DAG pre-generated, use that, otherwise create a new one
if l.future != nil && l.future.epoch == epoch {
glog.V(logger.Debug).Infof("Using pre-generated DAG for epoch %d", epoch)
c, l.future = l.future, nil
} else {
glog.V(logger.Debug).Infof("No pre-generated DAG available, creating new for epoch %d", epoch)
c = &cache{epoch: epoch, test: l.test}
}
l.caches[epoch] = c
// If we just used up the future cache, or need a refresh, regenerate
if l.future == nil || l.future.epoch <= epoch {
glog.V(logger.Debug).Infof("Pre-generating DAG for epoch %d", epoch+1)
l.future = &cache{epoch: epoch + 1, test: l.test}
go l.future.generate()
}
}
c.used = time.Now()
l.mu.Unlock()
// Wait for generation finish and return the cache
c.generate()
return c
}
// dag wraps an ethash_full_t with some metadata
// and automatic memory management.
type dag struct {
epoch uint64
test bool
dir string
gen sync.Once // ensures DAG is only generated once.
ptr *C.struct_ethash_full
}
// generate creates the actual DAG. it can be called from multiple
// goroutines. the first call will generate the DAG, subsequent
// calls wait until it is generated.
func (d *dag) generate() {
d.gen.Do(func() {
var (
started = time.Now()
seedHash = makeSeedHash(d.epoch)
blockNum = C.uint64_t(d.epoch * epochLength)
cacheSize = C.ethash_get_cachesize(blockNum)
dagSize = C.ethash_get_datasize(blockNum)
)
if d.test {
cacheSize = cacheSizeForTesting
dagSize = dagSizeForTesting
}
if d.dir == "" {
d.dir = DefaultDir
}
glog.V(logger.Info).Infof("Generating DAG for epoch %d (size %d) (%x)", d.epoch, dagSize, seedHash)
// Generate a temporary cache.
// TODO: this could share the cache with Light
cache := C.ethash_light_new_internal(cacheSize, (*C.ethash_h256_t)(unsafe.Pointer(&seedHash[0])))
defer C.ethash_light_delete(cache)
// Generate the actual DAG.
d.ptr = C.ethash_full_new_internal(
C.CString(d.dir),
hashToH256(seedHash),
dagSize,
cache,
(C.ethash_callback_t)(unsafe.Pointer(C.ethashGoCallback_cgo)),
)
if d.ptr == nil {
panic("ethash_full_new IO or memory error")
}
runtime.SetFinalizer(d, freeDAG)
glog.V(logger.Info).Infof("Done generating DAG for epoch %d, it took %v", d.epoch, time.Since(started))
})
}
func freeDAG(d *dag) {
C.ethash_full_delete(d.ptr)
d.ptr = nil
}
func (d *dag) Ptr() unsafe.Pointer {
return unsafe.Pointer(d.ptr.data)
}
//export ethashGoCallback
func ethashGoCallback(percent C.unsigned) C.int {
glog.V(logger.Info).Infof("Generating DAG: %d%%", percent)
return 0
}
// MakeDAG pre-generates a DAG file for the given block number in the
// given directory. If dir is the empty string, the default directory
// is used.
func MakeDAG(blockNum uint64, dir string) error {
d := &dag{epoch: blockNum / epochLength, dir: dir}
if blockNum >= epochLength*2048 {
return fmt.Errorf("block number too high, limit is %d", epochLength*2048)
}
d.generate()
if d.ptr == nil {
return errors.New("failed")
}
return nil
}
// Full implements the Search half of the proof of work.
type Full struct {
Dir string // use this to specify a non-default DAG directory
test bool // if set use a smaller DAG size
turbo bool
hashRate int32
mu sync.Mutex // protects dag
current *dag // current full DAG
}
func (pow *Full) getDAG(blockNum uint64) (d *dag) {
epoch := blockNum / epochLength
pow.mu.Lock()
if pow.current != nil && pow.current.epoch == epoch {
d = pow.current
} else {
d = &dag{epoch: epoch, test: pow.test, dir: pow.Dir}
pow.current = d
}
pow.mu.Unlock()
// wait for it to finish generating.
d.generate()
return d
}
func (pow *Full) Search(block pow.Block, stop <-chan struct{}, index int) (nonce uint64, mixDigest []byte) {
dag := pow.getDAG(block.NumberU64())
r := rand.New(rand.NewSource(time.Now().UnixNano()))
diff := block.Difficulty()
i := int64(0)
starti := i
start := time.Now().UnixNano()
previousHashrate := int32(0)
nonce = uint64(r.Int63())
hash := hashToH256(block.HashNoNonce())
target := new(big.Int).Div(maxUint256, diff)
for {
select {
case <-stop:
atomic.AddInt32(&pow.hashRate, -previousHashrate)
return 0, nil
default:
i++
// we don't have to update hash rate on every nonce, so update after
// first nonce check and then after 2^X nonces
if i == 2 || ((i % (1 << 16)) == 0) {
elapsed := time.Now().UnixNano() - start
hashes := (float64(1e9) / float64(elapsed)) * float64(i-starti)
hashrateDiff := int32(hashes) - previousHashrate
previousHashrate = int32(hashes)
atomic.AddInt32(&pow.hashRate, hashrateDiff)
}
ret := C.ethash_full_compute(dag.ptr, hash, C.uint64_t(nonce))
result := h256ToHash(ret.result).Big()
// TODO: disagrees with the spec https://github.com/ethereum/wiki/wiki/Ethash#mining
if ret.success && result.Cmp(target) <= 0 {
mixDigest = C.GoBytes(unsafe.Pointer(&ret.mix_hash), C.int(32))
atomic.AddInt32(&pow.hashRate, -previousHashrate)
return nonce, mixDigest
}
nonce += 1
}
if !pow.turbo {
time.Sleep(20 * time.Microsecond)
}
}
}
func (pow *Full) GetHashrate() int64 {
return int64(atomic.LoadInt32(&pow.hashRate))
}
func (pow *Full) Turbo(on bool) {
// TODO: this needs to use an atomic operation.
pow.turbo = on
}
// Ethash combines block verification with Light and
// nonce searching with Full into a single proof of work.
type Ethash struct {
*Light
*Full
}
// New creates an instance of the proof of work.
func New() *Ethash {
return &Ethash{new(Light), &Full{turbo: true}}
}
// NewShared creates an instance of the proof of work., where a single instance
// of the Light cache is shared across all instances created with NewShared.
func NewShared() *Ethash {
return &Ethash{sharedLight, &Full{turbo: true}}
}
// NewForTesting creates a proof of work for use in unit tests.
// It uses a smaller DAG and cache size to keep test times low.
// DAG files are stored in a temporary directory.
//
// Nonces found by a testing instance are not verifiable with a
// regular-size cache.
func NewForTesting() (*Ethash, error) {
dir, err := ioutil.TempDir("", "ethash-test")
if err != nil {
return nil, err
}
return &Ethash{&Light{test: true}, &Full{Dir: dir, test: true}}, nil
}
func GetSeedHash(blockNum uint64) ([]byte, error) {
if blockNum >= epochLength*2048 {
return nil, fmt.Errorf("block number too high, limit is %d", epochLength*2048)
}
sh := makeSeedHash(blockNum / epochLength)
return sh[:], nil
}
func makeSeedHash(epoch uint64) (sh common.Hash) {
for ; epoch > 0; epoch-- {
sh = crypto.Sha3Hash(sh[:])
}
return sh
}

View File

@@ -0,0 +1,628 @@
// Copyright 2014 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library 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.
//
// The go-ethereum library 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 the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
// +build opencl
package ethash
//#cgo LDFLAGS: -w
//#include <stdint.h>
//#include <string.h>
//#include "src/libethash/internal.h"
import "C"
import (
crand "crypto/rand"
"encoding/binary"
"fmt"
"math"
"math/big"
mrand "math/rand"
"strconv"
"strings"
"sync"
"sync/atomic"
"time"
"unsafe"
"github.com/Gustav-Simonsson/go-opencl/cl"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/pow"
)
/*
This code have two main entry points:
1. The initCL(...) function configures one or more OpenCL device
(for now only GPU) and loads the Ethash DAG onto device memory
2. The Search(...) function loads a Ethash nonce into device(s) memory and
executes the Ethash OpenCL kernel.
Throughout the code, we refer to "host memory" and "device memory".
For most systems (e.g. regular PC GPU miner) the host memory is RAM and
device memory is the GPU global memory (e.g. GDDR5).
References mentioned in code comments:
1. https://github.com/ethereum/wiki/wiki/Ethash
2. https://github.com/ethereum/cpp-ethereum/blob/develop/libethash-cl/ethash_cl_miner.cpp
3. https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/
4. http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_OpenCL_Programming_User_Guide.pdf
*/
type OpenCLDevice struct {
deviceId int
device *cl.Device
openCL11 bool // OpenCL version 1.1 and 1.2 are handled a bit different
openCL12 bool
dagBuf *cl.MemObject // Ethash full DAG in device mem
headerBuf *cl.MemObject // Hash of block-to-mine in device mem
searchBuffers []*cl.MemObject
searchKernel *cl.Kernel
hashKernel *cl.Kernel
queue *cl.CommandQueue
ctx *cl.Context
workGroupSize int
nonceRand *mrand.Rand // seeded by crypto/rand, see comments where it's initialised
result common.Hash
}
type OpenCLMiner struct {
mu sync.Mutex
ethash *Ethash // Ethash full DAG & cache in host mem
deviceIds []int
devices []*OpenCLDevice
dagSize uint64
hashRate int32 // Go atomics & uint64 have some issues; int32 is supported on all platforms
}
type pendingSearch struct {
bufIndex uint32
startNonce uint64
}
const (
SIZEOF_UINT32 = 4
// See [1]
ethashMixBytesLen = 128
ethashAccesses = 64
// See [4]
workGroupSize = 32 // must be multiple of 8
maxSearchResults = 63
searchBufSize = 2
globalWorkSize = 1024 * 256
)
func NewCL(deviceIds []int) *OpenCLMiner {
ids := make([]int, len(deviceIds))
copy(ids, deviceIds)
return &OpenCLMiner{
ethash: New(),
dagSize: 0, // to see if we need to update DAG.
deviceIds: ids,
}
}
func PrintDevices() {
fmt.Println("=============================================")
fmt.Println("============ OpenCL Device Info =============")
fmt.Println("=============================================")
var found []*cl.Device
platforms, err := cl.GetPlatforms()
if err != nil {
fmt.Println("Plaform error (check your OpenCL installation):", err)
return
}
for i, p := range platforms {
fmt.Println("Platform id ", i)
fmt.Println("Platform Name ", p.Name())
fmt.Println("Platform Vendor ", p.Vendor())
fmt.Println("Platform Version ", p.Version())
fmt.Println("Platform Extensions ", p.Extensions())
fmt.Println("Platform Profile ", p.Profile())
fmt.Println("")
devices, err := cl.GetDevices(p, cl.DeviceTypeGPU)
if err != nil {
fmt.Println("Device error (check your GPU drivers) :", err)
return
}
for _, d := range devices {
fmt.Println("Device OpenCL id ", i)
fmt.Println("Device id for mining ", len(found))
fmt.Println("Device Name ", d.Name())
fmt.Println("Vendor ", d.Vendor())
fmt.Println("Version ", d.Version())
fmt.Println("Driver version ", d.DriverVersion())
fmt.Println("Address bits ", d.AddressBits())
fmt.Println("Max clock freq ", d.MaxClockFrequency())
fmt.Println("Global mem size ", d.GlobalMemSize())
fmt.Println("Max constant buffer size", d.MaxConstantBufferSize())
fmt.Println("Max mem alloc size ", d.MaxMemAllocSize())
fmt.Println("Max compute units ", d.MaxComputeUnits())
fmt.Println("Max work group size ", d.MaxWorkGroupSize())
fmt.Println("Max work item sizes ", d.MaxWorkItemSizes())
fmt.Println("=============================================")
found = append(found, d)
}
}
if len(found) == 0 {
fmt.Println("Found no GPU(s). Check that your OS can see the GPU(s)")
} else {
var idsFormat string
for i := 0; i < len(found); i++ {
idsFormat += strconv.Itoa(i)
if i != len(found)-1 {
idsFormat += ","
}
}
fmt.Printf("Found %v devices. Benchmark first GPU: geth gpubench 0\n", len(found))
fmt.Printf("Mine using all GPUs: geth --minegpu %v\n", idsFormat)
}
}
// See [2]. We basically do the same here, but the Go OpenCL bindings
// are at a slightly higher abtraction level.
func InitCL(blockNum uint64, c *OpenCLMiner) error {
platforms, err := cl.GetPlatforms()
if err != nil {
return fmt.Errorf("Plaform error: %v\nCheck your OpenCL installation and then run geth gpuinfo", err)
}
var devices []*cl.Device
for _, p := range platforms {
ds, err := cl.GetDevices(p, cl.DeviceTypeGPU)
if err != nil {
return fmt.Errorf("Devices error: %v\nCheck your GPU drivers and then run geth gpuinfo", err)
}
for _, d := range ds {
devices = append(devices, d)
}
}
pow := New()
_ = pow.getDAG(blockNum) // generates DAG if we don't have it
pow.Light.getCache(blockNum) // and cache
c.ethash = pow
dagSize := uint64(C.ethash_get_datasize(C.uint64_t(blockNum)))
c.dagSize = dagSize
for _, id := range c.deviceIds {
if id > len(devices)-1 {
return fmt.Errorf("Device id not found. See available device ids with: geth gpuinfo")
} else {
err := initCLDevice(id, devices[id], c)
if err != nil {
return err
}
}
}
if len(c.devices) == 0 {
return fmt.Errorf("No GPU devices found")
}
return nil
}
func initCLDevice(deviceId int, device *cl.Device, c *OpenCLMiner) error {
devMaxAlloc := uint64(device.MaxMemAllocSize())
devGlobalMem := uint64(device.GlobalMemSize())
// TODO: more fine grained version logic
if device.Version() == "OpenCL 1.0" {
fmt.Println("Device OpenCL version not supported: ", device.Version())
return fmt.Errorf("opencl version not supported")
}
var cl11, cl12 bool
if device.Version() == "OpenCL 1.1" {
cl11 = true
}
if device.Version() == "OpenCL 1.2" {
cl12 = true
}
// log warnings but carry on; some device drivers report inaccurate values
if c.dagSize > devGlobalMem {
fmt.Printf("WARNING: device memory may be insufficient: %v. DAG size: %v.\n", devGlobalMem, c.dagSize)
}
if c.dagSize > devMaxAlloc {
fmt.Printf("WARNING: DAG size (%v) larger than device max memory allocation size (%v).\n", c.dagSize, devMaxAlloc)
fmt.Printf("You probably have to export GPU_MAX_ALLOC_PERCENT=95\n")
}
fmt.Printf("Initialising device %v: %v\n", deviceId, device.Name())
context, err := cl.CreateContext([]*cl.Device{device})
if err != nil {
return fmt.Errorf("failed creating context: %v", err)
}
// TODO: test running with CL_QUEUE_PROFILING_ENABLE for profiling?
queue, err := context.CreateCommandQueue(device, 0)
if err != nil {
return fmt.Errorf("command queue err: %v", err)
}
// See [4] section 3.2 and [3] "clBuildProgram".
// The OpenCL kernel code is compiled at run-time.
kvs := make(map[string]string, 4)
kvs["GROUP_SIZE"] = strconv.FormatUint(workGroupSize, 10)
kvs["DAG_SIZE"] = strconv.FormatUint(c.dagSize/ethashMixBytesLen, 10)
kvs["ACCESSES"] = strconv.FormatUint(ethashAccesses, 10)
kvs["MAX_OUTPUTS"] = strconv.FormatUint(maxSearchResults, 10)
kernelCode := replaceWords(kernel, kvs)
program, err := context.CreateProgramWithSource([]string{kernelCode})
if err != nil {
return fmt.Errorf("program err: %v", err)
}
/* if using AMD OpenCL impl, you can set this to debug on x86 CPU device.
see AMD OpenCL programming guide section 4.2
export in shell before running:
export AMD_OCL_BUILD_OPTIONS_APPEND="-g -O0"
export CPU_MAX_COMPUTE_UNITS=1
buildOpts := "-g -cl-opt-disable"
*/
buildOpts := ""
err = program.BuildProgram([]*cl.Device{device}, buildOpts)
if err != nil {
return fmt.Errorf("program build err: %v", err)
}
var searchKernelName, hashKernelName string
searchKernelName = "ethash_search"
hashKernelName = "ethash_hash"
searchKernel, err := program.CreateKernel(searchKernelName)
hashKernel, err := program.CreateKernel(hashKernelName)
if err != nil {
return fmt.Errorf("kernel err: %v", err)
}
// TODO: when this DAG size appears, patch the Go bindings
// (context.go) to work with uint64 as size_t
if c.dagSize > math.MaxInt32 {
fmt.Println("DAG too large for allocation.")
return fmt.Errorf("DAG too large for alloc")
}
// TODO: patch up Go bindings to work with size_t, will overflow if > maxint32
// TODO: fuck. shit's gonna overflow around 2017-06-09 12:17:02
dagBuf := *(new(*cl.MemObject))
dagBuf, err = context.CreateEmptyBuffer(cl.MemReadOnly, int(c.dagSize))
if err != nil {
return fmt.Errorf("allocating dag buf failed: %v", err)
}
// write DAG to device mem
dagPtr := unsafe.Pointer(c.ethash.Full.current.ptr.data)
_, err = queue.EnqueueWriteBuffer(dagBuf, true, 0, int(c.dagSize), dagPtr, nil)
if err != nil {
return fmt.Errorf("writing to dag buf failed: %v", err)
}
searchBuffers := make([]*cl.MemObject, searchBufSize)
for i := 0; i < searchBufSize; i++ {
searchBuff, err := context.CreateEmptyBuffer(cl.MemWriteOnly, (1+maxSearchResults)*SIZEOF_UINT32)
if err != nil {
return fmt.Errorf("search buffer err: %v", err)
}
searchBuffers[i] = searchBuff
}
headerBuf, err := context.CreateEmptyBuffer(cl.MemReadOnly, 32)
if err != nil {
return fmt.Errorf("header buffer err: %v", err)
}
// Unique, random nonces are crucial for mining efficieny.
// While we do not need cryptographically secure PRNG for nonces,
// we want to have uniform distribution and minimal repetition of nonces.
// We could guarantee strict uniqueness of nonces by generating unique ranges,
// but a int64 seed from crypto/rand should be good enough.
// we then use math/rand for speed and to avoid draining OS entropy pool
seed, err := crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
if err != nil {
return err
}
nonceRand := mrand.New(mrand.NewSource(seed.Int64()))
deviceStruct := &OpenCLDevice{
deviceId: deviceId,
device: device,
openCL11: cl11,
openCL12: cl12,
dagBuf: dagBuf,
headerBuf: headerBuf,
searchBuffers: searchBuffers,
searchKernel: searchKernel,
hashKernel: hashKernel,
queue: queue,
ctx: context,
workGroupSize: workGroupSize,
nonceRand: nonceRand,
}
c.devices = append(c.devices, deviceStruct)
return nil
}
func (c *OpenCLMiner) Search(block pow.Block, stop <-chan struct{}, index int) (uint64, []byte) {
c.mu.Lock()
newDagSize := uint64(C.ethash_get_datasize(C.uint64_t(block.NumberU64())))
if newDagSize > c.dagSize {
// TODO: clean up buffers from previous DAG?
err := InitCL(block.NumberU64(), c)
if err != nil {
fmt.Println("OpenCL init error: ", err)
return 0, []byte{0}
}
}
defer c.mu.Unlock()
// Avoid unneeded OpenCL initialisation if we received stop while running InitCL
select {
case <-stop:
return 0, []byte{0}
default:
}
headerHash := block.HashNoNonce()
diff := block.Difficulty()
target256 := new(big.Int).Div(maxUint256, diff)
target64 := new(big.Int).Rsh(target256, 192).Uint64()
var zero uint32 = 0
d := c.devices[index]
_, err := d.queue.EnqueueWriteBuffer(d.headerBuf, false, 0, 32, unsafe.Pointer(&headerHash[0]), nil)
if err != nil {
fmt.Println("Error in Search clEnqueueWriterBuffer : ", err)
return 0, []byte{0}
}
for i := 0; i < searchBufSize; i++ {
_, err := d.queue.EnqueueWriteBuffer(d.searchBuffers[i], false, 0, 4, unsafe.Pointer(&zero), nil)
if err != nil {
fmt.Println("Error in Search clEnqueueWriterBuffer : ", err)
return 0, []byte{0}
}
}
// wait for all search buffers to complete
err = d.queue.Finish()
if err != nil {
fmt.Println("Error in Search clFinish : ", err)
return 0, []byte{0}
}
err = d.searchKernel.SetArg(1, d.headerBuf)
if err != nil {
fmt.Println("Error in Search clSetKernelArg : ", err)
return 0, []byte{0}
}
err = d.searchKernel.SetArg(2, d.dagBuf)
if err != nil {
fmt.Println("Error in Search clSetKernelArg : ", err)
return 0, []byte{0}
}
err = d.searchKernel.SetArg(4, target64)
if err != nil {
fmt.Println("Error in Search clSetKernelArg : ", err)
return 0, []byte{0}
}
err = d.searchKernel.SetArg(5, uint32(math.MaxUint32))
if err != nil {
fmt.Println("Error in Search clSetKernelArg : ", err)
return 0, []byte{0}
}
// wait on this before returning
var preReturnEvent *cl.Event
if d.openCL12 {
preReturnEvent, err = d.ctx.CreateUserEvent()
if err != nil {
fmt.Println("Error in Search create CL user event : ", err)
return 0, []byte{0}
}
}
pending := make([]pendingSearch, 0, searchBufSize)
var p *pendingSearch
searchBufIndex := uint32(0)
var checkNonce uint64
loops := int64(0)
prevHashRate := int32(0)
start := time.Now().UnixNano()
// we grab a single random nonce and sets this as argument to the kernel search function
// the device will then add each local threads gid to the nonce, creating a unique nonce
// for each device computing unit executing in parallel
initNonce := uint64(d.nonceRand.Int63())
for nonce := initNonce; ; nonce += uint64(globalWorkSize) {
select {
case <-stop:
/*
if d.openCL12 {
err = cl.WaitForEvents([]*cl.Event{preReturnEvent})
if err != nil {
fmt.Println("Error in Search WaitForEvents: ", err)
}
}
*/
atomic.AddInt32(&c.hashRate, -prevHashRate)
return 0, []byte{0}
default:
}
if (loops % (1 << 7)) == 0 {
elapsed := time.Now().UnixNano() - start
// TODO: verify if this is correct hash rate calculation
hashes := (float64(1e9) / float64(elapsed)) * float64(loops*1024*256)
hashrateDiff := int32(hashes) - prevHashRate
prevHashRate = int32(hashes)
atomic.AddInt32(&c.hashRate, hashrateDiff)
}
loops++
err = d.searchKernel.SetArg(0, d.searchBuffers[searchBufIndex])
if err != nil {
fmt.Println("Error in Search clSetKernelArg : ", err)
return 0, []byte{0}
}
err = d.searchKernel.SetArg(3, nonce)
if err != nil {
fmt.Println("Error in Search clSetKernelArg : ", err)
return 0, []byte{0}
}
// execute kernel
_, err := d.queue.EnqueueNDRangeKernel(
d.searchKernel,
[]int{0},
[]int{globalWorkSize},
[]int{d.workGroupSize},
nil)
if err != nil {
fmt.Println("Error in Search clEnqueueNDRangeKernel : ", err)
return 0, []byte{0}
}
pending = append(pending, pendingSearch{bufIndex: searchBufIndex, startNonce: nonce})
searchBufIndex = (searchBufIndex + 1) % searchBufSize
if len(pending) == searchBufSize {
p = &(pending[searchBufIndex])
cres, _, err := d.queue.EnqueueMapBuffer(d.searchBuffers[p.bufIndex], true,
cl.MapFlagRead, 0, (1+maxSearchResults)*SIZEOF_UINT32,
nil)
if err != nil {
fmt.Println("Error in Search clEnqueueMapBuffer: ", err)
return 0, []byte{0}
}
results := cres.ByteSlice()
nfound := binary.LittleEndian.Uint32(results)
nfound = uint32(math.Min(float64(nfound), float64(maxSearchResults)))
// OpenCL returns the offsets from the start nonce
for i := uint32(0); i < nfound; i++ {
lo := (i + 1) * SIZEOF_UINT32
hi := (i + 2) * SIZEOF_UINT32
upperNonce := uint64(binary.LittleEndian.Uint32(results[lo:hi]))
checkNonce = p.startNonce + upperNonce
if checkNonce != 0 {
// We verify that the nonce is indeed a solution by
// executing the Ethash verification function (on the CPU).
cache := c.ethash.Light.getCache(block.NumberU64())
ok, mixDigest, result := cache.compute(c.dagSize, headerHash, checkNonce)
// TODO: return result first
if ok && result.Big().Cmp(target256) <= 0 {
_, err = d.queue.EnqueueUnmapMemObject(d.searchBuffers[p.bufIndex], cres, nil)
if err != nil {
fmt.Println("Error in Search clEnqueueUnmapMemObject: ", err)
}
if d.openCL12 {
err = cl.WaitForEvents([]*cl.Event{preReturnEvent})
if err != nil {
fmt.Println("Error in Search WaitForEvents: ", err)
}
}
return checkNonce, mixDigest.Bytes()
}
_, err := d.queue.EnqueueWriteBuffer(d.searchBuffers[p.bufIndex], false, 0, 4, unsafe.Pointer(&zero), nil)
if err != nil {
fmt.Println("Error in Search cl: EnqueueWriteBuffer", err)
return 0, []byte{0}
}
}
}
_, err = d.queue.EnqueueUnmapMemObject(d.searchBuffers[p.bufIndex], cres, nil)
if err != nil {
fmt.Println("Error in Search clEnqueueUnMapMemObject: ", err)
return 0, []byte{0}
}
pending = append(pending[:searchBufIndex], pending[searchBufIndex+1:]...)
}
}
if d.openCL12 {
err := cl.WaitForEvents([]*cl.Event{preReturnEvent})
if err != nil {
fmt.Println("Error in Search clWaitForEvents: ", err)
return 0, []byte{0}
}
}
return 0, []byte{0}
}
func (c *OpenCLMiner) Verify(block pow.Block) bool {
return c.ethash.Light.Verify(block)
}
func (c *OpenCLMiner) GetHashrate() int64 {
return int64(atomic.LoadInt32(&c.hashRate))
}
func (c *OpenCLMiner) Turbo(on bool) {
// This is GPU mining. Always be turbo.
}
func replaceWords(text string, kvs map[string]string) string {
for k, v := range kvs {
text = strings.Replace(text, k, v, -1)
}
return text
}
func logErr(err error) {
if err != nil {
fmt.Println("Error in OpenCL call:", err)
}
}
func argErr(err error) error {
return fmt.Errorf("arg err: %v", err)
}

View File

@@ -0,0 +1,600 @@
package ethash
/* DO NOT EDIT!!!
This code is version controlled at
https://github.com/ethereum/cpp-ethereum/blob/develop/libethash-cl/ethash_cl_miner_kernel.cl
If needed change it there first, then copy over here.
*/
const kernel = `
// author Tim Hughes <tim@twistedfury.com>
// Tested on Radeon HD 7850
// Hashrate: 15940347 hashes/s
// Bandwidth: 124533 MB/s
// search kernel should fit in <= 84 VGPRS (3 wavefronts)
#define THREADS_PER_HASH (128 / 16)
#define HASHES_PER_LOOP (GROUP_SIZE / THREADS_PER_HASH)
#define FNV_PRIME 0x01000193
__constant uint2 const Keccak_f1600_RC[24] = {
(uint2)(0x00000001, 0x00000000),
(uint2)(0x00008082, 0x00000000),
(uint2)(0x0000808a, 0x80000000),
(uint2)(0x80008000, 0x80000000),
(uint2)(0x0000808b, 0x00000000),
(uint2)(0x80000001, 0x00000000),
(uint2)(0x80008081, 0x80000000),
(uint2)(0x00008009, 0x80000000),
(uint2)(0x0000008a, 0x00000000),
(uint2)(0x00000088, 0x00000000),
(uint2)(0x80008009, 0x00000000),
(uint2)(0x8000000a, 0x00000000),
(uint2)(0x8000808b, 0x00000000),
(uint2)(0x0000008b, 0x80000000),
(uint2)(0x00008089, 0x80000000),
(uint2)(0x00008003, 0x80000000),
(uint2)(0x00008002, 0x80000000),
(uint2)(0x00000080, 0x80000000),
(uint2)(0x0000800a, 0x00000000),
(uint2)(0x8000000a, 0x80000000),
(uint2)(0x80008081, 0x80000000),
(uint2)(0x00008080, 0x80000000),
(uint2)(0x80000001, 0x00000000),
(uint2)(0x80008008, 0x80000000),
};
void keccak_f1600_round(uint2* a, uint r, uint out_size)
{
#if !__ENDIAN_LITTLE__
for (uint i = 0; i != 25; ++i)
a[i] = a[i].yx;
#endif
uint2 b[25];
uint2 t;
// Theta
b[0] = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20];
b[1] = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21];
b[2] = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22];
b[3] = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23];
b[4] = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24];
t = b[4] ^ (uint2)(b[1].x << 1 | b[1].y >> 31, b[1].y << 1 | b[1].x >> 31);
a[0] ^= t;
a[5] ^= t;
a[10] ^= t;
a[15] ^= t;
a[20] ^= t;
t = b[0] ^ (uint2)(b[2].x << 1 | b[2].y >> 31, b[2].y << 1 | b[2].x >> 31);
a[1] ^= t;
a[6] ^= t;
a[11] ^= t;
a[16] ^= t;
a[21] ^= t;
t = b[1] ^ (uint2)(b[3].x << 1 | b[3].y >> 31, b[3].y << 1 | b[3].x >> 31);
a[2] ^= t;
a[7] ^= t;
a[12] ^= t;
a[17] ^= t;
a[22] ^= t;
t = b[2] ^ (uint2)(b[4].x << 1 | b[4].y >> 31, b[4].y << 1 | b[4].x >> 31);
a[3] ^= t;
a[8] ^= t;
a[13] ^= t;
a[18] ^= t;
a[23] ^= t;
t = b[3] ^ (uint2)(b[0].x << 1 | b[0].y >> 31, b[0].y << 1 | b[0].x >> 31);
a[4] ^= t;
a[9] ^= t;
a[14] ^= t;
a[19] ^= t;
a[24] ^= t;
// Rho Pi
b[0] = a[0];
b[10] = (uint2)(a[1].x << 1 | a[1].y >> 31, a[1].y << 1 | a[1].x >> 31);
b[7] = (uint2)(a[10].x << 3 | a[10].y >> 29, a[10].y << 3 | a[10].x >> 29);
b[11] = (uint2)(a[7].x << 6 | a[7].y >> 26, a[7].y << 6 | a[7].x >> 26);
b[17] = (uint2)(a[11].x << 10 | a[11].y >> 22, a[11].y << 10 | a[11].x >> 22);
b[18] = (uint2)(a[17].x << 15 | a[17].y >> 17, a[17].y << 15 | a[17].x >> 17);
b[3] = (uint2)(a[18].x << 21 | a[18].y >> 11, a[18].y << 21 | a[18].x >> 11);
b[5] = (uint2)(a[3].x << 28 | a[3].y >> 4, a[3].y << 28 | a[3].x >> 4);
b[16] = (uint2)(a[5].y << 4 | a[5].x >> 28, a[5].x << 4 | a[5].y >> 28);
b[8] = (uint2)(a[16].y << 13 | a[16].x >> 19, a[16].x << 13 | a[16].y >> 19);
b[21] = (uint2)(a[8].y << 23 | a[8].x >> 9, a[8].x << 23 | a[8].y >> 9);
b[24] = (uint2)(a[21].x << 2 | a[21].y >> 30, a[21].y << 2 | a[21].x >> 30);
b[4] = (uint2)(a[24].x << 14 | a[24].y >> 18, a[24].y << 14 | a[24].x >> 18);
b[15] = (uint2)(a[4].x << 27 | a[4].y >> 5, a[4].y << 27 | a[4].x >> 5);
b[23] = (uint2)(a[15].y << 9 | a[15].x >> 23, a[15].x << 9 | a[15].y >> 23);
b[19] = (uint2)(a[23].y << 24 | a[23].x >> 8, a[23].x << 24 | a[23].y >> 8);
b[13] = (uint2)(a[19].x << 8 | a[19].y >> 24, a[19].y << 8 | a[19].x >> 24);
b[12] = (uint2)(a[13].x << 25 | a[13].y >> 7, a[13].y << 25 | a[13].x >> 7);
b[2] = (uint2)(a[12].y << 11 | a[12].x >> 21, a[12].x << 11 | a[12].y >> 21);
b[20] = (uint2)(a[2].y << 30 | a[2].x >> 2, a[2].x << 30 | a[2].y >> 2);
b[14] = (uint2)(a[20].x << 18 | a[20].y >> 14, a[20].y << 18 | a[20].x >> 14);
b[22] = (uint2)(a[14].y << 7 | a[14].x >> 25, a[14].x << 7 | a[14].y >> 25);
b[9] = (uint2)(a[22].y << 29 | a[22].x >> 3, a[22].x << 29 | a[22].y >> 3);
b[6] = (uint2)(a[9].x << 20 | a[9].y >> 12, a[9].y << 20 | a[9].x >> 12);
b[1] = (uint2)(a[6].y << 12 | a[6].x >> 20, a[6].x << 12 | a[6].y >> 20);
// Chi
a[0] = bitselect(b[0] ^ b[2], b[0], b[1]);
a[1] = bitselect(b[1] ^ b[3], b[1], b[2]);
a[2] = bitselect(b[2] ^ b[4], b[2], b[3]);
a[3] = bitselect(b[3] ^ b[0], b[3], b[4]);
if (out_size >= 4)
{
a[4] = bitselect(b[4] ^ b[1], b[4], b[0]);
a[5] = bitselect(b[5] ^ b[7], b[5], b[6]);
a[6] = bitselect(b[6] ^ b[8], b[6], b[7]);
a[7] = bitselect(b[7] ^ b[9], b[7], b[8]);
a[8] = bitselect(b[8] ^ b[5], b[8], b[9]);
if (out_size >= 8)
{
a[9] = bitselect(b[9] ^ b[6], b[9], b[5]);
a[10] = bitselect(b[10] ^ b[12], b[10], b[11]);
a[11] = bitselect(b[11] ^ b[13], b[11], b[12]);
a[12] = bitselect(b[12] ^ b[14], b[12], b[13]);
a[13] = bitselect(b[13] ^ b[10], b[13], b[14]);
a[14] = bitselect(b[14] ^ b[11], b[14], b[10]);
a[15] = bitselect(b[15] ^ b[17], b[15], b[16]);
a[16] = bitselect(b[16] ^ b[18], b[16], b[17]);
a[17] = bitselect(b[17] ^ b[19], b[17], b[18]);
a[18] = bitselect(b[18] ^ b[15], b[18], b[19]);
a[19] = bitselect(b[19] ^ b[16], b[19], b[15]);
a[20] = bitselect(b[20] ^ b[22], b[20], b[21]);
a[21] = bitselect(b[21] ^ b[23], b[21], b[22]);
a[22] = bitselect(b[22] ^ b[24], b[22], b[23]);
a[23] = bitselect(b[23] ^ b[20], b[23], b[24]);
a[24] = bitselect(b[24] ^ b[21], b[24], b[20]);
}
}
// Iota
a[0] ^= Keccak_f1600_RC[r];
#if !__ENDIAN_LITTLE__
for (uint i = 0; i != 25; ++i)
a[i] = a[i].yx;
#endif
}
void keccak_f1600_no_absorb(ulong* a, uint in_size, uint out_size, uint isolate)
{
for (uint i = in_size; i != 25; ++i)
{
a[i] = 0;
}
#if __ENDIAN_LITTLE__
a[in_size] ^= 0x0000000000000001;
a[24-out_size*2] ^= 0x8000000000000000;
#else
a[in_size] ^= 0x0100000000000000;
a[24-out_size*2] ^= 0x0000000000000080;
#endif
// Originally I unrolled the first and last rounds to interface
// better with surrounding code, however I haven't done this
// without causing the AMD compiler to blow up the VGPR usage.
uint r = 0;
do
{
// This dynamic branch stops the AMD compiler unrolling the loop
// and additionally saves about 33% of the VGPRs, enough to gain another
// wavefront. Ideally we'd get 4 in flight, but 3 is the best I can
// massage out of the compiler. It doesn't really seem to matter how
// much we try and help the compiler save VGPRs because it seems to throw
// that information away, hence the implementation of keccak here
// doesn't bother.
if (isolate)
{
keccak_f1600_round((uint2*)a, r++, 25);
}
}
while (r < 23);
// final round optimised for digest size
keccak_f1600_round((uint2*)a, r++, out_size);
}
#define copy(dst, src, count) for (uint i = 0; i != count; ++i) { (dst)[i] = (src)[i]; }
#define countof(x) (sizeof(x) / sizeof(x[0]))
uint fnv(uint x, uint y)
{
return x * FNV_PRIME ^ y;
}
uint4 fnv4(uint4 x, uint4 y)
{
return x * FNV_PRIME ^ y;
}
uint fnv_reduce(uint4 v)
{
return fnv(fnv(fnv(v.x, v.y), v.z), v.w);
}
typedef union
{
ulong ulongs[32 / sizeof(ulong)];
uint uints[32 / sizeof(uint)];
} hash32_t;
typedef union
{
ulong ulongs[64 / sizeof(ulong)];
uint4 uint4s[64 / sizeof(uint4)];
} hash64_t;
typedef union
{
uint uints[128 / sizeof(uint)];
uint4 uint4s[128 / sizeof(uint4)];
} hash128_t;
hash64_t init_hash(__constant hash32_t const* header, ulong nonce, uint isolate)
{
hash64_t init;
uint const init_size = countof(init.ulongs);
uint const hash_size = countof(header->ulongs);
// sha3_512(header .. nonce)
ulong state[25];
copy(state, header->ulongs, hash_size);
state[hash_size] = nonce;
keccak_f1600_no_absorb(state, hash_size + 1, init_size, isolate);
copy(init.ulongs, state, init_size);
return init;
}
uint inner_loop_chunks(uint4 init, uint thread_id, __local uint* share, __global hash128_t const* g_dag, __global hash128_t const* g_dag1, __global hash128_t const* g_dag2, __global hash128_t const* g_dag3, uint isolate)
{
uint4 mix = init;
// share init0
if (thread_id == 0)
*share = mix.x;
barrier(CLK_LOCAL_MEM_FENCE);
uint init0 = *share;
uint a = 0;
do
{
bool update_share = thread_id == (a/4) % THREADS_PER_HASH;
#pragma unroll
for (uint i = 0; i != 4; ++i)
{
if (update_share)
{
uint m[4] = { mix.x, mix.y, mix.z, mix.w };
*share = fnv(init0 ^ (a+i), m[i]) % DAG_SIZE;
}
barrier(CLK_LOCAL_MEM_FENCE);
mix = fnv4(mix, *share>=3 * DAG_SIZE / 4 ? g_dag3[*share - 3 * DAG_SIZE / 4].uint4s[thread_id] : *share>=DAG_SIZE / 2 ? g_dag2[*share - DAG_SIZE / 2].uint4s[thread_id] : *share>=DAG_SIZE / 4 ? g_dag1[*share - DAG_SIZE / 4].uint4s[thread_id]:g_dag[*share].uint4s[thread_id]);
}
} while ((a += 4) != (ACCESSES & isolate));
return fnv_reduce(mix);
}
uint inner_loop(uint4 init, uint thread_id, __local uint* share, __global hash128_t const* g_dag, uint isolate)
{
uint4 mix = init;
// share init0
if (thread_id == 0)
*share = mix.x;
barrier(CLK_LOCAL_MEM_FENCE);
uint init0 = *share;
uint a = 0;
do
{
bool update_share = thread_id == (a/4) % THREADS_PER_HASH;
#pragma unroll
for (uint i = 0; i != 4; ++i)
{
if (update_share)
{
uint m[4] = { mix.x, mix.y, mix.z, mix.w };
*share = fnv(init0 ^ (a+i), m[i]) % DAG_SIZE;
}
barrier(CLK_LOCAL_MEM_FENCE);
mix = fnv4(mix, g_dag[*share].uint4s[thread_id]);
}
}
while ((a += 4) != (ACCESSES & isolate));
return fnv_reduce(mix);
}
hash32_t final_hash(hash64_t const* init, hash32_t const* mix, uint isolate)
{
ulong state[25];
hash32_t hash;
uint const hash_size = countof(hash.ulongs);
uint const init_size = countof(init->ulongs);
uint const mix_size = countof(mix->ulongs);
// keccak_256(keccak_512(header..nonce) .. mix);
copy(state, init->ulongs, init_size);
copy(state + init_size, mix->ulongs, mix_size);
keccak_f1600_no_absorb(state, init_size+mix_size, hash_size, isolate);
// copy out
copy(hash.ulongs, state, hash_size);
return hash;
}
hash32_t compute_hash_simple(
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
ulong nonce,
uint isolate
)
{
hash64_t init = init_hash(g_header, nonce, isolate);
hash128_t mix;
for (uint i = 0; i != countof(mix.uint4s); ++i)
{
mix.uint4s[i] = init.uint4s[i % countof(init.uint4s)];
}
uint mix_val = mix.uints[0];
uint init0 = mix.uints[0];
uint a = 0;
do
{
uint pi = fnv(init0 ^ a, mix_val) % DAG_SIZE;
uint n = (a+1) % countof(mix.uints);
#pragma unroll
for (uint i = 0; i != countof(mix.uints); ++i)
{
mix.uints[i] = fnv(mix.uints[i], g_dag[pi].uints[i]);
mix_val = i == n ? mix.uints[i] : mix_val;
}
}
while (++a != (ACCESSES & isolate));
// reduce to output
hash32_t fnv_mix;
for (uint i = 0; i != countof(fnv_mix.uints); ++i)
{
fnv_mix.uints[i] = fnv_reduce(mix.uint4s[i]);
}
return final_hash(&init, &fnv_mix, isolate);
}
typedef union
{
struct
{
hash64_t init;
uint pad; // avoid lds bank conflicts
};
hash32_t mix;
} compute_hash_share;
hash32_t compute_hash(
__local compute_hash_share* share,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
ulong nonce,
uint isolate
)
{
uint const gid = get_global_id(0);
// Compute one init hash per work item.
hash64_t init = init_hash(g_header, nonce, isolate);
// Threads work together in this phase in groups of 8.
uint const thread_id = gid % THREADS_PER_HASH;
uint const hash_id = (gid % GROUP_SIZE) / THREADS_PER_HASH;
hash32_t mix;
uint i = 0;
do
{
// share init with other threads
if (i == thread_id)
share[hash_id].init = init;
barrier(CLK_LOCAL_MEM_FENCE);
uint4 thread_init = share[hash_id].init.uint4s[thread_id % (64 / sizeof(uint4))];
barrier(CLK_LOCAL_MEM_FENCE);
uint thread_mix = inner_loop(thread_init, thread_id, share[hash_id].mix.uints, g_dag, isolate);
share[hash_id].mix.uints[thread_id] = thread_mix;
barrier(CLK_LOCAL_MEM_FENCE);
if (i == thread_id)
mix = share[hash_id].mix;
barrier(CLK_LOCAL_MEM_FENCE);
}
while (++i != (THREADS_PER_HASH & isolate));
return final_hash(&init, &mix, isolate);
}
hash32_t compute_hash_chunks(
__local compute_hash_share* share,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
__global hash128_t const* g_dag1,
__global hash128_t const* g_dag2,
__global hash128_t const* g_dag3,
ulong nonce,
uint isolate
)
{
uint const gid = get_global_id(0);
// Compute one init hash per work item.
hash64_t init = init_hash(g_header, nonce, isolate);
// Threads work together in this phase in groups of 8.
uint const thread_id = gid % THREADS_PER_HASH;
uint const hash_id = (gid % GROUP_SIZE) / THREADS_PER_HASH;
hash32_t mix;
uint i = 0;
do
{
// share init with other threads
if (i == thread_id)
share[hash_id].init = init;
barrier(CLK_LOCAL_MEM_FENCE);
uint4 thread_init = share[hash_id].init.uint4s[thread_id % (64 / sizeof(uint4))];
barrier(CLK_LOCAL_MEM_FENCE);
uint thread_mix = inner_loop_chunks(thread_init, thread_id, share[hash_id].mix.uints, g_dag, g_dag1, g_dag2, g_dag3, isolate);
share[hash_id].mix.uints[thread_id] = thread_mix;
barrier(CLK_LOCAL_MEM_FENCE);
if (i == thread_id)
mix = share[hash_id].mix;
barrier(CLK_LOCAL_MEM_FENCE);
}
while (++i != (THREADS_PER_HASH & isolate));
return final_hash(&init, &mix, isolate);
}
__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
__kernel void ethash_hash_simple(
__global hash32_t* g_hashes,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
ulong start_nonce,
uint isolate
)
{
uint const gid = get_global_id(0);
g_hashes[gid] = compute_hash_simple(g_header, g_dag, start_nonce + gid, isolate);
}
__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
__kernel void ethash_search_simple(
__global volatile uint* restrict g_output,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
ulong start_nonce,
ulong target,
uint isolate
)
{
uint const gid = get_global_id(0);
hash32_t hash = compute_hash_simple(g_header, g_dag, start_nonce + gid, isolate);
if (hash.ulongs[countof(hash.ulongs)-1] < target)
{
uint slot = min(convert_uint(MAX_OUTPUTS), convert_uint(atomic_inc(&g_output[0]) + 1));
g_output[slot] = gid;
}
}
__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
__kernel void ethash_hash(
__global hash32_t* g_hashes,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
ulong start_nonce,
uint isolate
)
{
__local compute_hash_share share[HASHES_PER_LOOP];
uint const gid = get_global_id(0);
g_hashes[gid] = compute_hash(share, g_header, g_dag, start_nonce + gid, isolate);
}
__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
__kernel void ethash_search(
__global volatile uint* restrict g_output,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
ulong start_nonce,
ulong target,
uint isolate
)
{
__local compute_hash_share share[HASHES_PER_LOOP];
uint const gid = get_global_id(0);
hash32_t hash = compute_hash(share, g_header, g_dag, start_nonce + gid, isolate);
if (as_ulong(as_uchar8(hash.ulongs[0]).s76543210) < target)
{
uint slot = min((uint)MAX_OUTPUTS, atomic_inc(&g_output[0]) + 1);
g_output[slot] = gid;
}
}
__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
__kernel void ethash_hash_chunks(
__global hash32_t* g_hashes,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
__global hash128_t const* g_dag1,
__global hash128_t const* g_dag2,
__global hash128_t const* g_dag3,
ulong start_nonce,
uint isolate
)
{
__local compute_hash_share share[HASHES_PER_LOOP];
uint const gid = get_global_id(0);
g_hashes[gid] = compute_hash_chunks(share, g_header, g_dag, g_dag1, g_dag2, g_dag3,start_nonce + gid, isolate);
}
__attribute__((reqd_work_group_size(GROUP_SIZE, 1, 1)))
__kernel void ethash_search_chunks(
__global volatile uint* restrict g_output,
__constant hash32_t const* g_header,
__global hash128_t const* g_dag,
__global hash128_t const* g_dag1,
__global hash128_t const* g_dag2,
__global hash128_t const* g_dag3,
ulong start_nonce,
ulong target,
uint isolate
)
{
__local compute_hash_share share[HASHES_PER_LOOP];
uint const gid = get_global_id(0);
hash32_t hash = compute_hash_chunks(share, g_header, g_dag, g_dag1, g_dag2, g_dag3, start_nonce + gid, isolate);
if (as_ulong(as_uchar8(hash.ulongs[0]).s76543210) < target)
{
uint slot = min(convert_uint(MAX_OUTPUTS), convert_uint(atomic_inc(&g_output[0]) + 1));
g_output[slot] = gid;
}
}
`

View File

@@ -0,0 +1,51 @@
// Copyright 2015 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library 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.
//
// The go-ethereum library 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 the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package ethash
/*
-mno-stack-arg-probe disables stack probing which avoids the function
__chkstk_ms being linked. this avoids a clash of this symbol as we also
separately link the secp256k1 lib which ends up defining this symbol
1. https://gcc.gnu.org/onlinedocs/gccint/Stack-Checking.html
2. https://groups.google.com/forum/#!msg/golang-dev/v1bziURSQ4k/88fXuJ24e-gJ
3. https://groups.google.com/forum/#!topic/golang-nuts/VNP6Mwz_B6o
*/
/*
#cgo CFLAGS: -std=gnu99 -Wall
#cgo windows CFLAGS: -mno-stack-arg-probe
#cgo LDFLAGS: -lm
#include "src/libethash/internal.c"
#include "src/libethash/sha3.c"
#include "src/libethash/io.c"
#ifdef _WIN32
# include "src/libethash/io_win32.c"
# include "src/libethash/mmap_win32.c"
#else
# include "src/libethash/io_posix.c"
#endif
// 'gateway function' for calling back into go.
extern int ethashGoCallback(unsigned);
int ethashGoCallback_cgo(unsigned percent) { return ethashGoCallback(percent); }
*/
import "C"

View File

@@ -0,0 +1,47 @@
#!/usr/bin/env python
import os
from distutils.core import setup, Extension
sources = [
'src/python/core.c',
'src/libethash/io.c',
'src/libethash/internal.c',
'src/libethash/sha3.c']
if os.name == 'nt':
sources += [
'src/libethash/util_win32.c',
'src/libethash/io_win32.c',
'src/libethash/mmap_win32.c',
]
else:
sources += [
'src/libethash/io_posix.c'
]
depends = [
'src/libethash/ethash.h',
'src/libethash/compiler.h',
'src/libethash/data_sizes.h',
'src/libethash/endian.h',
'src/libethash/ethash.h',
'src/libethash/io.h',
'src/libethash/fnv.h',
'src/libethash/internal.h',
'src/libethash/sha3.h',
'src/libethash/util.h',
]
pyethash = Extension('pyethash',
sources=sources,
depends=depends,
extra_compile_args=["-Isrc/", "-std=gnu99", "-Wall"])
setup(
name='pyethash',
author="Matthew Wampler-Doty",
author_email="matthew.wampler.doty@gmail.com",
license='GPL',
version='0.1.23',
url='https://github.com/ethereum/ethash',
download_url='https://github.com/ethereum/ethash/tarball/v23',
description=('Python wrappers for ethash, the ethereum proof of work'
'hashing function'),
ext_modules=[pyethash],
)

View File

@@ -0,0 +1,44 @@
set(LIBRARY ethash)
if (CPPETHEREUM)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
endif ()
set(CMAKE_BUILD_TYPE Release)
if (NOT MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
endif()
set(FILES util.h
io.c
internal.c
ethash.h
endian.h
compiler.h
fnv.h
data_sizes.h)
if (MSVC)
list(APPEND FILES util_win32.c io_win32.c mmap_win32.c)
else()
list(APPEND FILES io_posix.c)
endif()
if (NOT CRYPTOPP_FOUND)
find_package(CryptoPP 5.6.2)
endif()
if (CRYPTOPP_FOUND)
add_definitions(-DWITH_CRYPTOPP)
include_directories( ${CRYPTOPP_INCLUDE_DIRS} )
list(APPEND FILES sha3_cryptopp.cpp sha3_cryptopp.h)
else()
list(APPEND FILES sha3.c sha3.h)
endif()
add_library(${LIBRARY} ${FILES})
if (CRYPTOPP_FOUND)
TARGET_LINK_LIBRARIES(${LIBRARY} ${CRYPTOPP_LIBRARIES})
endif()

View File

@@ -0,0 +1,33 @@
/*
This file is part of cpp-ethereum.
cpp-ethereum is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
cpp-ethereum 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file compiler.h
* @date 2014
*/
#pragma once
// Visual Studio doesn't support the inline keyword in C mode
#if defined(_MSC_VER) && !defined(__cplusplus)
#define inline __inline
#endif
// pretend restrict is a standard keyword
#if defined(_MSC_VER)
#define restrict __restrict
#else
#define restrict __restrict__
#endif

View File

@@ -0,0 +1,812 @@
/*
This file is part of cpp-ethereum.
cpp-ethereum is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software FoundationUUU,either version 3 of the LicenseUUU,or
(at your option) any later version.
cpp-ethereum is distributed in the hope that it will be usefulU,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with cpp-ethereum. If notUUU,see <http://www.gnu.org/licenses/>.
*/
/** @file data_sizes.h
* @author Matthew Wampler-Doty <negacthulhu@gmail.com>
* @date 2015
*/
#pragma once
#include <stdint.h>
#include "compiler.h"
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
// 2048 Epochs (~20 years) worth of tabulated DAG sizes
// Generated with the following Mathematica Code:
// GetCacheSizes[n_] := Module[{
// CacheSizeBytesInit = 2^24,
// CacheGrowth = 2^17,
// HashBytes = 64,
// j = 0},
// Reap[
// While[j < n,
// Module[{i =
// Floor[(CacheSizeBytesInit + CacheGrowth * j) / HashBytes]},
// While[! PrimeQ[i], i--];
// Sow[i*HashBytes]; j++]]]][[2]][[1]]
static const uint64_t dag_sizes[2048] = {
1073739904U, 1082130304U, 1090514816U, 1098906752U, 1107293056U,
1115684224U, 1124070016U, 1132461952U, 1140849536U, 1149232768U,
1157627776U, 1166013824U, 1174404736U, 1182786944U, 1191180416U,
1199568512U, 1207958912U, 1216345216U, 1224732032U, 1233124736U,
1241513344U, 1249902464U, 1258290304U, 1266673792U, 1275067264U,
1283453312U, 1291844992U, 1300234112U, 1308619904U, 1317010048U,
1325397376U, 1333787776U, 1342176128U, 1350561664U, 1358954368U,
1367339392U, 1375731584U, 1384118144U, 1392507008U, 1400897408U,
1409284736U, 1417673344U, 1426062464U, 1434451072U, 1442839168U,
1451229056U, 1459615616U, 1468006016U, 1476394112U, 1484782976U,
1493171584U, 1501559168U, 1509948032U, 1518337664U, 1526726528U,
1535114624U, 1543503488U, 1551892096U, 1560278656U, 1568669056U,
1577056384U, 1585446272U, 1593831296U, 1602219392U, 1610610304U,
1619000192U, 1627386752U, 1635773824U, 1644164224U, 1652555648U,
1660943488U, 1669332608U, 1677721216U, 1686109312U, 1694497664U,
1702886272U, 1711274624U, 1719661184U, 1728047744U, 1736434816U,
1744829056U, 1753218944U, 1761606272U, 1769995904U, 1778382464U,
1786772864U, 1795157888U, 1803550592U, 1811937664U, 1820327552U,
1828711552U, 1837102976U, 1845488768U, 1853879936U, 1862269312U,
1870656896U, 1879048064U, 1887431552U, 1895825024U, 1904212096U,
1912601216U, 1920988544U, 1929379456U, 1937765504U, 1946156672U,
1954543232U, 1962932096U, 1971321728U, 1979707264U, 1988093056U,
1996487552U, 2004874624U, 2013262208U, 2021653888U, 2030039936U,
2038430848U, 2046819968U, 2055208576U, 2063596672U, 2071981952U,
2080373632U, 2088762752U, 2097149056U, 2105539712U, 2113928576U,
2122315136U, 2130700672U, 2139092608U, 2147483264U, 2155872128U,
2164257664U, 2172642176U, 2181035392U, 2189426048U, 2197814912U,
2206203008U, 2214587264U, 2222979712U, 2231367808U, 2239758208U,
2248145024U, 2256527744U, 2264922752U, 2273312128U, 2281701248U,
2290086272U, 2298476672U, 2306867072U, 2315251072U, 2323639168U,
2332032128U, 2340420224U, 2348808064U, 2357196416U, 2365580416U,
2373966976U, 2382363008U, 2390748544U, 2399139968U, 2407530368U,
2415918976U, 2424307328U, 2432695424U, 2441084288U, 2449472384U,
2457861248U, 2466247808U, 2474637184U, 2483026816U, 2491414144U,
2499803776U, 2508191872U, 2516582272U, 2524970368U, 2533359232U,
2541743488U, 2550134144U, 2558525056U, 2566913408U, 2575301504U,
2583686528U, 2592073856U, 2600467328U, 2608856192U, 2617240448U,
2625631616U, 2634022016U, 2642407552U, 2650796416U, 2659188352U,
2667574912U, 2675965312U, 2684352896U, 2692738688U, 2701130624U,
2709518464U, 2717907328U, 2726293376U, 2734685056U, 2743073152U,
2751462016U, 2759851648U, 2768232832U, 2776625536U, 2785017728U,
2793401984U, 2801794432U, 2810182016U, 2818571648U, 2826959488U,
2835349376U, 2843734144U, 2852121472U, 2860514432U, 2868900992U,
2877286784U, 2885676928U, 2894069632U, 2902451584U, 2910843008U,
2919234688U, 2927622784U, 2936011648U, 2944400768U, 2952789376U,
2961177728U, 2969565568U, 2977951616U, 2986338944U, 2994731392U,
3003120256U, 3011508352U, 3019895936U, 3028287104U, 3036675968U,
3045063808U, 3053452928U, 3061837696U, 3070228352U, 3078615424U,
3087003776U, 3095394944U, 3103782272U, 3112173184U, 3120562048U,
3128944768U, 3137339264U, 3145725056U, 3154109312U, 3162505088U,
3170893184U, 3179280256U, 3187669376U, 3196056704U, 3204445568U,
3212836736U, 3221224064U, 3229612928U, 3238002304U, 3246391168U,
3254778496U, 3263165824U, 3271556224U, 3279944576U, 3288332416U,
3296719232U, 3305110912U, 3313500032U, 3321887104U, 3330273152U,
3338658944U, 3347053184U, 3355440512U, 3363827072U, 3372220288U,
3380608384U, 3388997504U, 3397384576U, 3405774208U, 3414163072U,
3422551936U, 3430937984U, 3439328384U, 3447714176U, 3456104576U,
3464493952U, 3472883584U, 3481268864U, 3489655168U, 3498048896U,
3506434432U, 3514826368U, 3523213952U, 3531603584U, 3539987072U,
3548380288U, 3556763264U, 3565157248U, 3573545344U, 3581934464U,
3590324096U, 3598712704U, 3607098752U, 3615488384U, 3623877248U,
3632265856U, 3640646528U, 3649043584U, 3657430144U, 3665821568U,
3674207872U, 3682597504U, 3690984832U, 3699367808U, 3707764352U,
3716152448U, 3724541056U, 3732925568U, 3741318016U, 3749706368U,
3758091136U, 3766481536U, 3774872704U, 3783260032U, 3791650432U,
3800036224U, 3808427648U, 3816815488U, 3825204608U, 3833592704U,
3841981568U, 3850370432U, 3858755968U, 3867147904U, 3875536256U,
3883920512U, 3892313728U, 3900702592U, 3909087872U, 3917478784U,
3925868416U, 3934256512U, 3942645376U, 3951032192U, 3959422336U,
3967809152U, 3976200064U, 3984588416U, 3992974976U, 4001363584U,
4009751168U, 4018141312U, 4026530432U, 4034911616U, 4043308928U,
4051695488U, 4060084352U, 4068472448U, 4076862848U, 4085249408U,
4093640576U, 4102028416U, 4110413696U, 4118805632U, 4127194496U,
4135583104U, 4143971968U, 4152360832U, 4160746112U, 4169135744U,
4177525888U, 4185912704U, 4194303616U, 4202691968U, 4211076736U,
4219463552U, 4227855488U, 4236246656U, 4244633728U, 4253022848U,
4261412224U, 4269799808U, 4278184832U, 4286578048U, 4294962304U,
4303349632U, 4311743104U, 4320130432U, 4328521088U, 4336909184U,
4345295488U, 4353687424U, 4362073472U, 4370458496U, 4378852736U,
4387238528U, 4395630208U, 4404019072U, 4412407424U, 4420790656U,
4429182848U, 4437571456U, 4445962112U, 4454344064U, 4462738048U,
4471119232U, 4479516544U, 4487904128U, 4496289664U, 4504682368U,
4513068416U, 4521459584U, 4529846144U, 4538232704U, 4546619776U,
4555010176U, 4563402112U, 4571790208U, 4580174464U, 4588567936U,
4596957056U, 4605344896U, 4613734016U, 4622119808U, 4630511488U,
4638898816U, 4647287936U, 4655675264U, 4664065664U, 4672451968U,
4680842624U, 4689231488U, 4697620352U, 4706007424U, 4714397056U,
4722786176U, 4731173248U, 4739562368U, 4747951744U, 4756340608U,
4764727936U, 4773114496U, 4781504384U, 4789894784U, 4798283648U,
4806667648U, 4815059584U, 4823449472U, 4831835776U, 4840226176U,
4848612224U, 4857003392U, 4865391488U, 4873780096U, 4882169728U,
4890557312U, 4898946944U, 4907333248U, 4915722368U, 4924110976U,
4932499328U, 4940889728U, 4949276032U, 4957666432U, 4966054784U,
4974438016U, 4982831488U, 4991221376U, 4999607168U, 5007998848U,
5016386432U, 5024763776U, 5033164672U, 5041544576U, 5049941888U,
5058329728U, 5066717056U, 5075107456U, 5083494272U, 5091883904U,
5100273536U, 5108662144U, 5117048192U, 5125436032U, 5133827456U,
5142215296U, 5150605184U, 5158993024U, 5167382144U, 5175769472U,
5184157568U, 5192543872U, 5200936064U, 5209324928U, 5217711232U,
5226102656U, 5234490496U, 5242877312U, 5251263872U, 5259654016U,
5268040832U, 5276434304U, 5284819328U, 5293209728U, 5301598592U,
5309986688U, 5318374784U, 5326764416U, 5335151488U, 5343542144U,
5351929472U, 5360319872U, 5368706944U, 5377096576U, 5385484928U,
5393871232U, 5402263424U, 5410650496U, 5419040384U, 5427426944U,
5435816576U, 5444205952U, 5452594816U, 5460981376U, 5469367936U,
5477760896U, 5486148736U, 5494536832U, 5502925952U, 5511315328U,
5519703424U, 5528089984U, 5536481152U, 5544869504U, 5553256064U,
5561645696U, 5570032768U, 5578423936U, 5586811264U, 5595193216U,
5603585408U, 5611972736U, 5620366208U, 5628750464U, 5637143936U,
5645528192U, 5653921408U, 5662310272U, 5670694784U, 5679082624U,
5687474048U, 5695864448U, 5704251008U, 5712641408U, 5721030272U,
5729416832U, 5737806208U, 5746194304U, 5754583936U, 5762969984U,
5771358592U, 5779748224U, 5788137856U, 5796527488U, 5804911232U,
5813300608U, 5821692544U, 5830082176U, 5838468992U, 5846855552U,
5855247488U, 5863636096U, 5872024448U, 5880411008U, 5888799872U,
5897186432U, 5905576832U, 5913966976U, 5922352768U, 5930744704U,
5939132288U, 5947522432U, 5955911296U, 5964299392U, 5972688256U,
5981074304U, 5989465472U, 5997851008U, 6006241408U, 6014627968U,
6023015552U, 6031408256U, 6039796096U, 6048185216U, 6056574848U,
6064963456U, 6073351808U, 6081736064U, 6090128768U, 6098517632U,
6106906496U, 6115289216U, 6123680896U, 6132070016U, 6140459648U,
6148849024U, 6157237376U, 6165624704U, 6174009728U, 6182403712U,
6190792064U, 6199176064U, 6207569792U, 6215952256U, 6224345216U,
6232732544U, 6241124224U, 6249510272U, 6257899136U, 6266287744U,
6274676864U, 6283065728U, 6291454336U, 6299843456U, 6308232064U,
6316620928U, 6325006208U, 6333395584U, 6341784704U, 6350174848U,
6358562176U, 6366951296U, 6375337856U, 6383729536U, 6392119168U,
6400504192U, 6408895616U, 6417283456U, 6425673344U, 6434059136U,
6442444672U, 6450837376U, 6459223424U, 6467613056U, 6476004224U,
6484393088U, 6492781952U, 6501170048U, 6509555072U, 6517947008U,
6526336384U, 6534725504U, 6543112832U, 6551500672U, 6559888768U,
6568278656U, 6576662912U, 6585055616U, 6593443456U, 6601834112U,
6610219648U, 6618610304U, 6626999168U, 6635385472U, 6643777408U,
6652164224U, 6660552832U, 6668941952U, 6677330048U, 6685719424U,
6694107776U, 6702493568U, 6710882176U, 6719274112U, 6727662976U,
6736052096U, 6744437632U, 6752825984U, 6761213824U, 6769604224U,
6777993856U, 6786383488U, 6794770816U, 6803158144U, 6811549312U,
6819937664U, 6828326528U, 6836706176U, 6845101696U, 6853491328U,
6861880448U, 6870269312U, 6878655104U, 6887046272U, 6895433344U,
6903822208U, 6912212864U, 6920596864U, 6928988288U, 6937377152U,
6945764992U, 6954149248U, 6962544256U, 6970928768U, 6979317376U,
6987709312U, 6996093824U, 7004487296U, 7012875392U, 7021258624U,
7029652352U, 7038038912U, 7046427776U, 7054818944U, 7063207808U,
7071595136U, 7079980928U, 7088372608U, 7096759424U, 7105149824U,
7113536896U, 7121928064U, 7130315392U, 7138699648U, 7147092352U,
7155479168U, 7163865728U, 7172249984U, 7180648064U, 7189036672U,
7197424768U, 7205810816U, 7214196608U, 7222589824U, 7230975104U,
7239367552U, 7247755904U, 7256145536U, 7264533376U, 7272921472U,
7281308032U, 7289694848U, 7298088832U, 7306471808U, 7314864512U,
7323253888U, 7331643008U, 7340029568U, 7348419712U, 7356808832U,
7365196672U, 7373585792U, 7381973888U, 7390362752U, 7398750592U,
7407138944U, 7415528576U, 7423915648U, 7432302208U, 7440690304U,
7449080192U, 7457472128U, 7465860992U, 7474249088U, 7482635648U,
7491023744U, 7499412608U, 7507803008U, 7516192384U, 7524579968U,
7532967296U, 7541358464U, 7549745792U, 7558134656U, 7566524032U,
7574912896U, 7583300992U, 7591690112U, 7600075136U, 7608466816U,
7616854912U, 7625244544U, 7633629824U, 7642020992U, 7650410368U,
7658794112U, 7667187328U, 7675574912U, 7683961984U, 7692349568U,
7700739712U, 7709130368U, 7717519232U, 7725905536U, 7734295424U,
7742683264U, 7751069056U, 7759457408U, 7767849088U, 7776238208U,
7784626816U, 7793014912U, 7801405312U, 7809792128U, 7818179968U,
7826571136U, 7834957184U, 7843347328U, 7851732352U, 7860124544U,
7868512384U, 7876902016U, 7885287808U, 7893679744U, 7902067072U,
7910455936U, 7918844288U, 7927230848U, 7935622784U, 7944009344U,
7952400256U, 7960786048U, 7969176704U, 7977565312U, 7985953408U,
7994339968U, 8002730368U, 8011119488U, 8019508096U, 8027896192U,
8036285056U, 8044674688U, 8053062272U, 8061448832U, 8069838464U,
8078227328U, 8086616704U, 8095006592U, 8103393664U, 8111783552U,
8120171392U, 8128560256U, 8136949376U, 8145336704U, 8153726848U,
8162114944U, 8170503296U, 8178891904U, 8187280768U, 8195669632U,
8204058496U, 8212444544U, 8220834176U, 8229222272U, 8237612672U,
8246000768U, 8254389376U, 8262775168U, 8271167104U, 8279553664U,
8287944064U, 8296333184U, 8304715136U, 8313108352U, 8321497984U,
8329885568U, 8338274432U, 8346663296U, 8355052928U, 8363441536U,
8371828352U, 8380217984U, 8388606592U, 8396996224U, 8405384576U,
8413772672U, 8422161536U, 8430549376U, 8438939008U, 8447326592U,
8455715456U, 8464104832U, 8472492928U, 8480882048U, 8489270656U,
8497659776U, 8506045312U, 8514434944U, 8522823808U, 8531208832U,
8539602304U, 8547990656U, 8556378752U, 8564768384U, 8573154176U,
8581542784U, 8589933952U, 8598322816U, 8606705024U, 8615099264U,
8623487872U, 8631876992U, 8640264064U, 8648653952U, 8657040256U,
8665430656U, 8673820544U, 8682209152U, 8690592128U, 8698977152U,
8707374464U, 8715763328U, 8724151424U, 8732540032U, 8740928384U,
8749315712U, 8757704576U, 8766089344U, 8774480768U, 8782871936U,
8791260032U, 8799645824U, 8808034432U, 8816426368U, 8824812928U,
8833199488U, 8841591424U, 8849976448U, 8858366336U, 8866757248U,
8875147136U, 8883532928U, 8891923328U, 8900306816U, 8908700288U,
8917088384U, 8925478784U, 8933867392U, 8942250368U, 8950644608U,
8959032704U, 8967420544U, 8975809664U, 8984197504U, 8992584064U,
9000976256U, 9009362048U, 9017752448U, 9026141312U, 9034530688U,
9042917504U, 9051307904U, 9059694208U, 9068084864U, 9076471424U,
9084861824U, 9093250688U, 9101638528U, 9110027648U, 9118416512U,
9126803584U, 9135188096U, 9143581312U, 9151969664U, 9160356224U,
9168747136U, 9177134464U, 9185525632U, 9193910144U, 9202302848U,
9210690688U, 9219079552U, 9227465344U, 9235854464U, 9244244864U,
9252633472U, 9261021824U, 9269411456U, 9277799296U, 9286188928U,
9294574208U, 9302965888U, 9311351936U, 9319740032U, 9328131968U,
9336516736U, 9344907392U, 9353296768U, 9361685888U, 9370074752U,
9378463616U, 9386849408U, 9395239808U, 9403629184U, 9412016512U,
9420405376U, 9428795008U, 9437181568U, 9445570688U, 9453960832U,
9462346624U, 9470738048U, 9479121536U, 9487515008U, 9495903616U,
9504289664U, 9512678528U, 9521067904U, 9529456256U, 9537843584U,
9546233728U, 9554621312U, 9563011456U, 9571398784U, 9579788672U,
9588178304U, 9596567168U, 9604954496U, 9613343104U, 9621732992U,
9630121856U, 9638508416U, 9646898816U, 9655283584U, 9663675776U,
9672061312U, 9680449664U, 9688840064U, 9697230464U, 9705617536U,
9714003584U, 9722393984U, 9730772608U, 9739172224U, 9747561088U,
9755945344U, 9764338816U, 9772726144U, 9781116544U, 9789503872U,
9797892992U, 9806282624U, 9814670464U, 9823056512U, 9831439232U,
9839833984U, 9848224384U, 9856613504U, 9865000576U, 9873391232U,
9881772416U, 9890162816U, 9898556288U, 9906940544U, 9915333248U,
9923721088U, 9932108672U, 9940496512U, 9948888448U, 9957276544U,
9965666176U, 9974048384U, 9982441088U, 9990830464U, 9999219584U,
10007602816U, 10015996544U, 10024385152U, 10032774016U, 10041163648U,
10049548928U, 10057940096U, 10066329472U, 10074717824U, 10083105152U,
10091495296U, 10099878784U, 10108272256U, 10116660608U, 10125049216U,
10133437312U, 10141825664U, 10150213504U, 10158601088U, 10166991232U,
10175378816U, 10183766144U, 10192157312U, 10200545408U, 10208935552U,
10217322112U, 10225712768U, 10234099328U, 10242489472U, 10250876032U,
10259264896U, 10267656064U, 10276042624U, 10284429184U, 10292820352U,
10301209472U, 10309598848U, 10317987712U, 10326375296U, 10334763392U,
10343153536U, 10351541632U, 10359930752U, 10368318592U, 10376707456U,
10385096576U, 10393484672U, 10401867136U, 10410262144U, 10418647424U,
10427039104U, 10435425664U, 10443810176U, 10452203648U, 10460589952U,
10468982144U, 10477369472U, 10485759104U, 10494147712U, 10502533504U,
10510923392U, 10519313536U, 10527702656U, 10536091264U, 10544478592U,
10552867712U, 10561255808U, 10569642368U, 10578032768U, 10586423168U,
10594805632U, 10603200128U, 10611588992U, 10619976064U, 10628361344U,
10636754048U, 10645143424U, 10653531776U, 10661920384U, 10670307968U,
10678696832U, 10687086464U, 10695475072U, 10703863168U, 10712246144U,
10720639616U, 10729026688U, 10737414784U, 10745806208U, 10754190976U,
10762581376U, 10770971264U, 10779356288U, 10787747456U, 10796135552U,
10804525184U, 10812915584U, 10821301888U, 10829692288U, 10838078336U,
10846469248U, 10854858368U, 10863247232U, 10871631488U, 10880023424U,
10888412032U, 10896799616U, 10905188992U, 10913574016U, 10921964672U,
10930352768U, 10938742912U, 10947132544U, 10955518592U, 10963909504U,
10972298368U, 10980687488U, 10989074816U, 10997462912U, 11005851776U,
11014241152U, 11022627712U, 11031017344U, 11039403904U, 11047793024U,
11056184704U, 11064570752U, 11072960896U, 11081343872U, 11089737856U,
11098128256U, 11106514816U, 11114904448U, 11123293568U, 11131680128U,
11140065152U, 11148458368U, 11156845696U, 11165236864U, 11173624192U,
11182013824U, 11190402688U, 11198790784U, 11207179136U, 11215568768U,
11223957376U, 11232345728U, 11240734592U, 11249122688U, 11257511296U,
11265899648U, 11274285952U, 11282675584U, 11291065472U, 11299452544U,
11307842432U, 11316231296U, 11324616832U, 11333009024U, 11341395584U,
11349782656U, 11358172288U, 11366560384U, 11374950016U, 11383339648U,
11391721856U, 11400117376U, 11408504192U, 11416893568U, 11425283456U,
11433671552U, 11442061184U, 11450444672U, 11458837888U, 11467226752U,
11475611776U, 11484003968U, 11492392064U, 11500780672U, 11509169024U,
11517550976U, 11525944448U, 11534335616U, 11542724224U, 11551111808U,
11559500672U, 11567890304U, 11576277376U, 11584667008U, 11593056128U,
11601443456U, 11609830016U, 11618221952U, 11626607488U, 11634995072U,
11643387776U, 11651775104U, 11660161664U, 11668552576U, 11676940928U,
11685330304U, 11693718656U, 11702106496U, 11710496128U, 11718882688U,
11727273088U, 11735660416U, 11744050048U, 11752437376U, 11760824704U,
11769216128U, 11777604736U, 11785991296U, 11794381952U, 11802770048U,
11811157888U, 11819548544U, 11827932544U, 11836324736U, 11844713344U,
11853100928U, 11861486464U, 11869879936U, 11878268032U, 11886656896U,
11895044992U, 11903433088U, 11911822976U, 11920210816U, 11928600448U,
11936987264U, 11945375872U, 11953761152U, 11962151296U, 11970543488U,
11978928512U, 11987320448U, 11995708288U, 12004095104U, 12012486272U,
12020875136U, 12029255552U, 12037652096U, 12046039168U, 12054429568U,
12062813824U, 12071206528U, 12079594624U, 12087983744U, 12096371072U,
12104759936U, 12113147264U, 12121534592U, 12129924992U, 12138314624U,
12146703232U, 12155091584U, 12163481216U, 12171864704U, 12180255872U,
12188643968U, 12197034112U, 12205424512U, 12213811328U, 12222199424U,
12230590336U, 12238977664U, 12247365248U, 12255755392U, 12264143488U,
12272531584U, 12280920448U, 12289309568U, 12297694592U, 12306086528U,
12314475392U, 12322865024U, 12331253632U, 12339640448U, 12348029312U,
12356418944U, 12364805248U, 12373196672U, 12381580928U, 12389969024U,
12398357632U, 12406750592U, 12415138432U, 12423527552U, 12431916416U,
12440304512U, 12448692352U, 12457081216U, 12465467776U, 12473859968U,
12482245504U, 12490636672U, 12499025536U, 12507411584U, 12515801728U,
12524190592U, 12532577152U, 12540966272U, 12549354368U, 12557743232U,
12566129536U, 12574523264U, 12582911872U, 12591299456U, 12599688064U,
12608074624U, 12616463488U, 12624845696U, 12633239936U, 12641631616U,
12650019968U, 12658407296U, 12666795136U, 12675183232U, 12683574656U,
12691960192U, 12700350592U, 12708740224U, 12717128576U, 12725515904U,
12733906816U, 12742295168U, 12750680192U, 12759071872U, 12767460736U,
12775848832U, 12784236928U, 12792626816U, 12801014656U, 12809404288U,
12817789312U, 12826181504U, 12834568832U, 12842954624U, 12851345792U,
12859732352U, 12868122496U, 12876512128U, 12884901248U, 12893289088U,
12901672832U, 12910067584U, 12918455168U, 12926842496U, 12935232896U,
12943620736U, 12952009856U, 12960396928U, 12968786816U, 12977176192U,
12985563776U, 12993951104U, 13002341504U, 13010730368U, 13019115392U,
13027506304U, 13035895168U, 13044272512U, 13052673152U, 13061062528U,
13069446272U, 13077838976U, 13086227072U, 13094613632U, 13103000192U,
13111393664U, 13119782528U, 13128157568U, 13136559232U, 13144945024U,
13153329536U, 13161724288U, 13170111872U, 13178502784U, 13186884736U,
13195279744U, 13203667072U, 13212057472U, 13220445824U, 13228832128U,
13237221248U, 13245610624U, 13254000512U, 13262388352U, 13270777472U,
13279166336U, 13287553408U, 13295943296U, 13304331904U, 13312719488U,
13321108096U, 13329494656U, 13337885824U, 13346274944U, 13354663808U,
13363051136U, 13371439232U, 13379825024U, 13388210816U, 13396605056U,
13404995456U, 13413380224U, 13421771392U, 13430159744U, 13438546048U,
13446937216U, 13455326848U, 13463708288U, 13472103808U, 13480492672U,
13488875648U, 13497269888U, 13505657728U, 13514045312U, 13522435712U,
13530824576U, 13539210112U, 13547599232U, 13555989376U, 13564379008U,
13572766336U, 13581154432U, 13589544832U, 13597932928U, 13606320512U,
13614710656U, 13623097472U, 13631477632U, 13639874944U, 13648264064U,
13656652928U, 13665041792U, 13673430656U, 13681818496U, 13690207616U,
13698595712U, 13706982272U, 13715373184U, 13723762048U, 13732150144U,
13740536704U, 13748926592U, 13757316224U, 13765700992U, 13774090112U,
13782477952U, 13790869376U, 13799259008U, 13807647872U, 13816036736U,
13824425344U, 13832814208U, 13841202304U, 13849591424U, 13857978752U,
13866368896U, 13874754688U, 13883145344U, 13891533184U, 13899919232U,
13908311168U, 13916692096U, 13925085056U, 13933473152U, 13941866368U,
13950253696U, 13958643584U, 13967032192U, 13975417216U, 13983807616U,
13992197504U, 14000582272U, 14008973696U, 14017363072U, 14025752192U,
14034137984U, 14042528384U, 14050918016U, 14059301504U, 14067691648U,
14076083584U, 14084470144U, 14092852352U, 14101249664U, 14109635968U,
14118024832U, 14126407552U, 14134804352U, 14143188608U, 14151577984U,
14159968384U, 14168357248U, 14176741504U, 14185127296U, 14193521024U,
14201911424U, 14210301824U, 14218685056U, 14227067264U, 14235467392U,
14243855488U, 14252243072U, 14260630144U, 14269021568U, 14277409408U,
14285799296U, 14294187904U, 14302571392U, 14310961792U, 14319353728U,
14327738752U, 14336130944U, 14344518784U, 14352906368U, 14361296512U,
14369685376U, 14378071424U, 14386462592U, 14394848128U, 14403230848U,
14411627392U, 14420013952U, 14428402304U, 14436793472U, 14445181568U,
14453569664U, 14461959808U, 14470347904U, 14478737024U, 14487122816U,
14495511424U, 14503901824U, 14512291712U, 14520677504U, 14529064832U,
14537456768U, 14545845632U, 14554234496U, 14562618496U, 14571011456U,
14579398784U, 14587789184U, 14596172672U, 14604564608U, 14612953984U,
14621341312U, 14629724288U, 14638120832U, 14646503296U, 14654897536U,
14663284864U, 14671675264U, 14680061056U, 14688447616U, 14696835968U,
14705228416U, 14713616768U, 14722003328U, 14730392192U, 14738784128U,
14747172736U, 14755561088U, 14763947648U, 14772336512U, 14780725376U,
14789110144U, 14797499776U, 14805892736U, 14814276992U, 14822670208U,
14831056256U, 14839444352U, 14847836032U, 14856222848U, 14864612992U,
14872997504U, 14881388672U, 14889775744U, 14898165376U, 14906553472U,
14914944896U, 14923329664U, 14931721856U, 14940109696U, 14948497024U,
14956887424U, 14965276544U, 14973663616U, 14982053248U, 14990439808U,
14998830976U, 15007216768U, 15015605888U, 15023995264U, 15032385152U,
15040768384U, 15049154944U, 15057549184U, 15065939072U, 15074328448U,
15082715008U, 15091104128U, 15099493504U, 15107879296U, 15116269184U,
15124659584U, 15133042304U, 15141431936U, 15149824384U, 15158214272U,
15166602368U, 15174991232U, 15183378304U, 15191760512U, 15200154496U,
15208542592U, 15216931712U, 15225323392U, 15233708416U, 15242098048U,
15250489216U, 15258875264U, 15267265408U, 15275654528U, 15284043136U,
15292431488U, 15300819584U, 15309208192U, 15317596544U, 15325986176U,
15334374784U, 15342763648U, 15351151744U, 15359540608U, 15367929728U,
15376318336U, 15384706432U, 15393092992U, 15401481856U, 15409869952U,
15418258816U, 15426649984U, 15435037568U, 15443425664U, 15451815296U,
15460203392U, 15468589184U, 15476979328U, 15485369216U, 15493755776U,
15502146944U, 15510534272U, 15518924416U, 15527311232U, 15535699072U,
15544089472U, 15552478336U, 15560866688U, 15569254528U, 15577642624U,
15586031488U, 15594419072U, 15602809472U, 15611199104U, 15619586432U,
15627975296U, 15636364928U, 15644753792U, 15653141888U, 15661529216U,
15669918848U, 15678305152U, 15686696576U, 15695083136U, 15703474048U,
15711861632U, 15720251264U, 15728636288U, 15737027456U, 15745417088U,
15753804928U, 15762194048U, 15770582656U, 15778971008U, 15787358336U,
15795747712U, 15804132224U, 15812523392U, 15820909696U, 15829300096U,
15837691264U, 15846071936U, 15854466944U, 15862855808U, 15871244672U,
15879634816U, 15888020608U, 15896409728U, 15904799104U, 15913185152U,
15921577088U, 15929966464U, 15938354816U, 15946743424U, 15955129472U,
15963519872U, 15971907968U, 15980296064U, 15988684928U, 15997073024U,
16005460864U, 16013851264U, 16022241152U, 16030629248U, 16039012736U,
16047406976U, 16055794816U, 16064181376U, 16072571264U, 16080957824U,
16089346688U, 16097737856U, 16106125184U, 16114514816U, 16122904192U,
16131292544U, 16139678848U, 16148066944U, 16156453504U, 16164839552U,
16173236096U, 16181623424U, 16190012032U, 16198401152U, 16206790528U,
16215177344U, 16223567744U, 16231956352U, 16240344704U, 16248731008U,
16257117824U, 16265504384U, 16273898624U, 16282281856U, 16290668672U,
16299064192U, 16307449216U, 16315842176U, 16324230016U, 16332613504U,
16341006464U, 16349394304U, 16357783168U, 16366172288U, 16374561664U,
16382951296U, 16391337856U, 16399726208U, 16408116352U, 16416505472U,
16424892032U, 16433282176U, 16441668224U, 16450058624U, 16458448768U,
16466836864U, 16475224448U, 16483613056U, 16492001408U, 16500391808U,
16508779648U, 16517166976U, 16525555328U, 16533944192U, 16542330752U,
16550719616U, 16559110528U, 16567497088U, 16575888512U, 16584274816U,
16592665472U, 16601051008U, 16609442944U, 16617832064U, 16626218624U,
16634607488U, 16642996096U, 16651385728U, 16659773824U, 16668163712U,
16676552576U, 16684938112U, 16693328768U, 16701718144U, 16710095488U,
16718492288U, 16726883968U, 16735272832U, 16743661184U, 16752049792U,
16760436608U, 16768827008U, 16777214336U, 16785599104U, 16793992832U,
16802381696U, 16810768768U, 16819151744U, 16827542656U, 16835934848U,
16844323712U, 16852711552U, 16861101952U, 16869489536U, 16877876864U,
16886265728U, 16894653056U, 16903044736U, 16911431296U, 16919821696U,
16928207488U, 16936592768U, 16944987776U, 16953375616U, 16961763968U,
16970152832U, 16978540928U, 16986929536U, 16995319168U, 17003704448U,
17012096896U, 17020481152U, 17028870784U, 17037262208U, 17045649536U,
17054039936U, 17062426496U, 17070814336U, 17079205504U, 17087592064U,
17095978112U, 17104369024U, 17112759424U, 17121147776U, 17129536384U,
17137926016U, 17146314368U, 17154700928U, 17163089792U, 17171480192U,
17179864192U, 17188256896U, 17196644992U, 17205033856U, 17213423488U,
17221811072U, 17230198912U, 17238588032U, 17246976896U, 17255360384U,
17263754624U, 17272143232U, 17280530048U, 17288918912U, 17297309312U,
17305696384U, 17314085504U, 17322475136U, 17330863744U, 17339252096U,
17347640192U, 17356026496U, 17364413824U, 17372796544U, 17381190016U,
17389583488U, 17397972608U, 17406360704U, 17414748544U, 17423135872U,
17431527296U, 17439915904U, 17448303232U, 17456691584U, 17465081728U,
17473468288U, 17481857408U, 17490247552U, 17498635904U, 17507022464U,
17515409024U, 17523801728U, 17532189824U, 17540577664U, 17548966016U,
17557353344U, 17565741184U, 17574131584U, 17582519168U, 17590907008U,
17599296128U, 17607687808U, 17616076672U, 17624455808U, 17632852352U,
17641238656U, 17649630848U, 17658018944U, 17666403968U, 17674794112U,
17683178368U, 17691573376U, 17699962496U, 17708350592U, 17716739968U,
17725126528U, 17733517184U, 17741898112U, 17750293888U, 17758673024U,
17767070336U, 17775458432U, 17783848832U, 17792236928U, 17800625536U,
17809012352U, 17817402752U, 17825785984U, 17834178944U, 17842563968U,
17850955648U, 17859344512U, 17867732864U, 17876119424U, 17884511872U,
17892900224U, 17901287296U, 17909677696U, 17918058112U, 17926451072U,
17934843776U, 17943230848U, 17951609216U, 17960008576U, 17968397696U,
17976784256U, 17985175424U, 17993564032U, 18001952128U, 18010339712U,
18018728576U, 18027116672U, 18035503232U, 18043894144U, 18052283264U,
18060672128U, 18069056384U, 18077449856U, 18085837184U, 18094225792U,
18102613376U, 18111004544U, 18119388544U, 18127781248U, 18136170368U,
18144558976U, 18152947328U, 18161336192U, 18169724288U, 18178108544U,
18186498944U, 18194886784U, 18203275648U, 18211666048U, 18220048768U,
18228444544U, 18236833408U, 18245220736U
};
// Generated with the following Mathematica Code:
// GetCacheSizes[n_] := Module[{
// DataSetSizeBytesInit = 2^30,
// MixBytes = 128,
// DataSetGrowth = 2^23,
// HashBytes = 64,
// CacheMultiplier = 1024,
// j = 0},
// Reap[
// While[j < n,
// Module[{i = Floor[(DataSetSizeBytesInit + DataSetGrowth * j) / (CacheMultiplier * HashBytes)]},
// While[! PrimeQ[i], i--];
// Sow[i*HashBytes]; j++]]]][[2]][[1]]
const uint64_t cache_sizes[2048] = {
16776896U, 16907456U, 17039296U, 17170112U, 17301056U, 17432512U, 17563072U,
17693888U, 17824192U, 17955904U, 18087488U, 18218176U, 18349504U, 18481088U,
18611392U, 18742336U, 18874304U, 19004224U, 19135936U, 19267264U, 19398208U,
19529408U, 19660096U, 19791424U, 19922752U, 20053952U, 20184896U, 20315968U,
20446912U, 20576576U, 20709184U, 20840384U, 20971072U, 21102272U, 21233216U,
21364544U, 21494848U, 21626816U, 21757376U, 21887552U, 22019392U, 22151104U,
22281536U, 22412224U, 22543936U, 22675264U, 22806464U, 22935872U, 23068096U,
23198272U, 23330752U, 23459008U, 23592512U, 23723968U, 23854912U, 23986112U,
24116672U, 24247616U, 24378688U, 24509504U, 24640832U, 24772544U, 24903488U,
25034432U, 25165376U, 25296704U, 25427392U, 25558592U, 25690048U, 25820096U,
25951936U, 26081728U, 26214208U, 26345024U, 26476096U, 26606656U, 26737472U,
26869184U, 26998208U, 27131584U, 27262528U, 27393728U, 27523904U, 27655744U,
27786688U, 27917888U, 28049344U, 28179904U, 28311488U, 28441792U, 28573504U,
28700864U, 28835648U, 28966208U, 29096768U, 29228608U, 29359808U, 29490752U,
29621824U, 29752256U, 29882816U, 30014912U, 30144448U, 30273728U, 30406976U,
30538432U, 30670784U, 30799936U, 30932672U, 31063744U, 31195072U, 31325248U,
31456192U, 31588288U, 31719232U, 31850432U, 31981504U, 32110784U, 32243392U,
32372672U, 32505664U, 32636608U, 32767808U, 32897344U, 33029824U, 33160768U,
33289664U, 33423296U, 33554368U, 33683648U, 33816512U, 33947456U, 34076992U,
34208704U, 34340032U, 34471744U, 34600256U, 34734016U, 34864576U, 34993984U,
35127104U, 35258176U, 35386688U, 35518528U, 35650624U, 35782336U, 35910976U,
36044608U, 36175808U, 36305728U, 36436672U, 36568384U, 36699968U, 36830656U,
36961984U, 37093312U, 37223488U, 37355072U, 37486528U, 37617472U, 37747904U,
37879232U, 38009792U, 38141888U, 38272448U, 38403392U, 38535104U, 38660672U,
38795584U, 38925632U, 39059264U, 39190336U, 39320768U, 39452096U, 39581632U,
39713984U, 39844928U, 39974848U, 40107968U, 40238144U, 40367168U, 40500032U,
40631744U, 40762816U, 40894144U, 41023552U, 41155904U, 41286208U, 41418304U,
41547712U, 41680448U, 41811904U, 41942848U, 42073792U, 42204992U, 42334912U,
42467008U, 42597824U, 42729152U, 42860096U, 42991552U, 43122368U, 43253696U,
43382848U, 43515712U, 43646912U, 43777088U, 43907648U, 44039104U, 44170432U,
44302144U, 44433344U, 44564288U, 44694976U, 44825152U, 44956864U, 45088448U,
45219008U, 45350464U, 45481024U, 45612608U, 45744064U, 45874496U, 46006208U,
46136768U, 46267712U, 46399424U, 46529344U, 46660672U, 46791488U, 46923328U,
47053504U, 47185856U, 47316928U, 47447872U, 47579072U, 47710144U, 47839936U,
47971648U, 48103232U, 48234176U, 48365248U, 48496192U, 48627136U, 48757312U,
48889664U, 49020736U, 49149248U, 49283008U, 49413824U, 49545152U, 49675712U,
49807168U, 49938368U, 50069056U, 50200256U, 50331584U, 50462656U, 50593472U,
50724032U, 50853952U, 50986048U, 51117632U, 51248576U, 51379904U, 51510848U,
51641792U, 51773248U, 51903296U, 52035136U, 52164032U, 52297664U, 52427968U,
52557376U, 52690112U, 52821952U, 52952896U, 53081536U, 53213504U, 53344576U,
53475776U, 53608384U, 53738816U, 53870528U, 54000832U, 54131776U, 54263744U,
54394688U, 54525248U, 54655936U, 54787904U, 54918592U, 55049152U, 55181248U,
55312064U, 55442752U, 55574336U, 55705024U, 55836224U, 55967168U, 56097856U,
56228672U, 56358592U, 56490176U, 56621888U, 56753728U, 56884928U, 57015488U,
57146816U, 57278272U, 57409216U, 57540416U, 57671104U, 57802432U, 57933632U,
58064576U, 58195264U, 58326976U, 58457408U, 58588864U, 58720192U, 58849984U,
58981696U, 59113024U, 59243456U, 59375552U, 59506624U, 59637568U, 59768512U,
59897792U, 60030016U, 60161984U, 60293056U, 60423872U, 60554432U, 60683968U,
60817216U, 60948032U, 61079488U, 61209664U, 61341376U, 61471936U, 61602752U,
61733696U, 61865792U, 61996736U, 62127808U, 62259136U, 62389568U, 62520512U,
62651584U, 62781632U, 62910784U, 63045056U, 63176128U, 63307072U, 63438656U,
63569216U, 63700928U, 63831616U, 63960896U, 64093888U, 64225088U, 64355392U,
64486976U, 64617664U, 64748608U, 64879424U, 65009216U, 65142464U, 65273792U,
65402816U, 65535424U, 65666752U, 65797696U, 65927744U, 66060224U, 66191296U,
66321344U, 66453056U, 66584384U, 66715328U, 66846656U, 66977728U, 67108672U,
67239104U, 67370432U, 67501888U, 67631296U, 67763776U, 67895104U, 68026304U,
68157248U, 68287936U, 68419264U, 68548288U, 68681408U, 68811968U, 68942912U,
69074624U, 69205568U, 69337024U, 69467584U, 69599168U, 69729472U, 69861184U,
69989824U, 70122944U, 70253888U, 70385344U, 70515904U, 70647232U, 70778816U,
70907968U, 71040832U, 71171648U, 71303104U, 71432512U, 71564992U, 71695168U,
71826368U, 71958464U, 72089536U, 72219712U, 72350144U, 72482624U, 72613568U,
72744512U, 72875584U, 73006144U, 73138112U, 73268672U, 73400128U, 73530944U,
73662272U, 73793344U, 73924544U, 74055104U, 74185792U, 74316992U, 74448832U,
74579392U, 74710976U, 74841664U, 74972864U, 75102784U, 75233344U, 75364544U,
75497024U, 75627584U, 75759296U, 75890624U, 76021696U, 76152256U, 76283072U,
76414144U, 76545856U, 76676672U, 76806976U, 76937792U, 77070016U, 77200832U,
77331392U, 77462464U, 77593664U, 77725376U, 77856448U, 77987776U, 78118336U,
78249664U, 78380992U, 78511424U, 78642496U, 78773056U, 78905152U, 79033664U,
79166656U, 79297472U, 79429568U, 79560512U, 79690816U, 79822784U, 79953472U,
80084672U, 80214208U, 80346944U, 80477632U, 80608576U, 80740288U, 80870848U,
81002048U, 81133504U, 81264448U, 81395648U, 81525952U, 81657536U, 81786304U,
81919808U, 82050112U, 82181312U, 82311616U, 82443968U, 82573376U, 82705984U,
82835776U, 82967744U, 83096768U, 83230528U, 83359552U, 83491264U, 83622464U,
83753536U, 83886016U, 84015296U, 84147776U, 84277184U, 84409792U, 84540608U,
84672064U, 84803008U, 84934336U, 85065152U, 85193792U, 85326784U, 85458496U,
85589312U, 85721024U, 85851968U, 85982656U, 86112448U, 86244416U, 86370112U,
86506688U, 86637632U, 86769344U, 86900672U, 87031744U, 87162304U, 87293632U,
87424576U, 87555392U, 87687104U, 87816896U, 87947968U, 88079168U, 88211264U,
88341824U, 88473152U, 88603712U, 88735424U, 88862912U, 88996672U, 89128384U,
89259712U, 89390272U, 89521984U, 89652544U, 89783872U, 89914816U, 90045376U,
90177088U, 90307904U, 90438848U, 90569152U, 90700096U, 90832832U, 90963776U,
91093696U, 91223744U, 91356992U, 91486784U, 91618496U, 91749824U, 91880384U,
92012224U, 92143552U, 92273344U, 92405696U, 92536768U, 92666432U, 92798912U,
92926016U, 93060544U, 93192128U, 93322816U, 93453632U, 93583936U, 93715136U,
93845056U, 93977792U, 94109504U, 94240448U, 94371776U, 94501184U, 94632896U,
94764224U, 94895552U, 95023424U, 95158208U, 95287744U, 95420224U, 95550016U,
95681216U, 95811904U, 95943872U, 96075328U, 96203584U, 96337856U, 96468544U,
96599744U, 96731072U, 96860992U, 96992576U, 97124288U, 97254848U, 97385536U,
97517248U, 97647808U, 97779392U, 97910464U, 98041408U, 98172608U, 98303168U,
98434496U, 98565568U, 98696768U, 98827328U, 98958784U, 99089728U, 99220928U,
99352384U, 99482816U, 99614272U, 99745472U, 99876416U, 100007104U,
100138048U, 100267072U, 100401088U, 100529984U, 100662592U, 100791872U,
100925248U, 101056064U, 101187392U, 101317952U, 101449408U, 101580608U,
101711296U, 101841728U, 101973824U, 102104896U, 102235712U, 102366016U,
102498112U, 102628672U, 102760384U, 102890432U, 103021888U, 103153472U,
103284032U, 103415744U, 103545152U, 103677248U, 103808576U, 103939648U,
104070976U, 104201792U, 104332736U, 104462528U, 104594752U, 104725952U,
104854592U, 104988608U, 105118912U, 105247808U, 105381184U, 105511232U,
105643072U, 105774784U, 105903296U, 106037056U, 106167872U, 106298944U,
106429504U, 106561472U, 106691392U, 106822592U, 106954304U, 107085376U,
107216576U, 107346368U, 107478464U, 107609792U, 107739712U, 107872192U,
108003136U, 108131392U, 108265408U, 108396224U, 108527168U, 108657344U,
108789568U, 108920384U, 109049792U, 109182272U, 109312576U, 109444928U,
109572928U, 109706944U, 109837888U, 109969088U, 110099648U, 110230976U,
110362432U, 110492992U, 110624704U, 110755264U, 110886208U, 111017408U,
111148864U, 111279296U, 111410752U, 111541952U, 111673024U, 111803456U,
111933632U, 112066496U, 112196416U, 112328512U, 112457792U, 112590784U,
112715968U, 112852672U, 112983616U, 113114944U, 113244224U, 113376448U,
113505472U, 113639104U, 113770304U, 113901376U, 114031552U, 114163264U,
114294592U, 114425536U, 114556864U, 114687424U, 114818624U, 114948544U,
115080512U, 115212224U, 115343296U, 115473472U, 115605184U, 115736128U,
115867072U, 115997248U, 116128576U, 116260288U, 116391488U, 116522944U,
116652992U, 116784704U, 116915648U, 117046208U, 117178304U, 117308608U,
117440192U, 117569728U, 117701824U, 117833024U, 117964096U, 118094656U,
118225984U, 118357312U, 118489024U, 118617536U, 118749632U, 118882112U,
119012416U, 119144384U, 119275328U, 119406016U, 119537344U, 119668672U,
119798464U, 119928896U, 120061376U, 120192832U, 120321728U, 120454336U,
120584512U, 120716608U, 120848192U, 120979136U, 121109056U, 121241408U,
121372352U, 121502912U, 121634752U, 121764416U, 121895744U, 122027072U,
122157632U, 122289088U, 122421184U, 122550592U, 122682944U, 122813888U,
122945344U, 123075776U, 123207488U, 123338048U, 123468736U, 123600704U,
123731264U, 123861952U, 123993664U, 124124608U, 124256192U, 124386368U,
124518208U, 124649024U, 124778048U, 124911296U, 125041088U, 125173696U,
125303744U, 125432896U, 125566912U, 125696576U, 125829056U, 125958592U,
126090304U, 126221248U, 126352832U, 126483776U, 126615232U, 126746432U,
126876608U, 127008704U, 127139392U, 127270336U, 127401152U, 127532224U,
127663552U, 127794752U, 127925696U, 128055232U, 128188096U, 128319424U,
128449856U, 128581312U, 128712256U, 128843584U, 128973632U, 129103808U,
129236288U, 129365696U, 129498944U, 129629888U, 129760832U, 129892288U,
130023104U, 130154048U, 130283968U, 130416448U, 130547008U, 130678336U,
130807616U, 130939456U, 131071552U, 131202112U, 131331776U, 131464384U,
131594048U, 131727296U, 131858368U, 131987392U, 132120256U, 132250816U,
132382528U, 132513728U, 132644672U, 132774976U, 132905792U, 133038016U,
133168832U, 133299392U, 133429312U, 133562048U, 133692992U, 133823296U,
133954624U, 134086336U, 134217152U, 134348608U, 134479808U, 134607296U,
134741056U, 134872384U, 135002944U, 135134144U, 135265472U, 135396544U,
135527872U, 135659072U, 135787712U, 135921472U, 136052416U, 136182848U,
136313792U, 136444864U, 136576448U, 136707904U, 136837952U, 136970048U,
137099584U, 137232064U, 137363392U, 137494208U, 137625536U, 137755712U,
137887424U, 138018368U, 138149824U, 138280256U, 138411584U, 138539584U,
138672832U, 138804928U, 138936128U, 139066688U, 139196864U, 139328704U,
139460032U, 139590208U, 139721024U, 139852864U, 139984576U, 140115776U,
140245696U, 140376512U, 140508352U, 140640064U, 140769856U, 140902336U,
141032768U, 141162688U, 141294016U, 141426496U, 141556544U, 141687488U,
141819584U, 141949888U, 142080448U, 142212544U, 142342336U, 142474432U,
142606144U, 142736192U, 142868288U, 142997824U, 143129408U, 143258944U,
143392448U, 143523136U, 143653696U, 143785024U, 143916992U, 144045632U,
144177856U, 144309184U, 144440768U, 144570688U, 144701888U, 144832448U,
144965056U, 145096384U, 145227584U, 145358656U, 145489856U, 145620928U,
145751488U, 145883072U, 146011456U, 146144704U, 146275264U, 146407232U,
146538176U, 146668736U, 146800448U, 146931392U, 147062336U, 147193664U,
147324224U, 147455936U, 147586624U, 147717056U, 147848768U, 147979456U,
148110784U, 148242368U, 148373312U, 148503232U, 148635584U, 148766144U,
148897088U, 149028416U, 149159488U, 149290688U, 149420224U, 149551552U,
149683136U, 149814976U, 149943616U, 150076352U, 150208064U, 150338624U,
150470464U, 150600256U, 150732224U, 150862784U, 150993088U, 151125952U,
151254976U, 151388096U, 151519168U, 151649728U, 151778752U, 151911104U,
152042944U, 152174144U, 152304704U, 152435648U, 152567488U, 152698816U,
152828992U, 152960576U, 153091648U, 153222976U, 153353792U, 153484096U,
153616192U, 153747008U, 153878336U, 154008256U, 154139968U, 154270912U,
154402624U, 154533824U, 154663616U, 154795712U, 154926272U, 155057984U,
155188928U, 155319872U, 155450816U, 155580608U, 155712064U, 155843392U,
155971136U, 156106688U, 156237376U, 156367424U, 156499264U, 156630976U,
156761536U, 156892352U, 157024064U, 157155008U, 157284416U, 157415872U,
157545536U, 157677248U, 157810496U, 157938112U, 158071744U, 158203328U,
158334656U, 158464832U, 158596288U, 158727616U, 158858048U, 158988992U,
159121216U, 159252416U, 159381568U, 159513152U, 159645632U, 159776192U,
159906496U, 160038464U, 160169536U, 160300352U, 160430656U, 160563008U,
160693952U, 160822208U, 160956352U, 161086784U, 161217344U, 161349184U,
161480512U, 161611456U, 161742272U, 161873216U, 162002752U, 162135872U,
162266432U, 162397888U, 162529216U, 162660032U, 162790976U, 162922048U,
163052096U, 163184576U, 163314752U, 163446592U, 163577408U, 163707968U,
163839296U, 163969984U, 164100928U, 164233024U, 164364224U, 164494912U,
164625856U, 164756672U, 164887616U, 165019072U, 165150016U, 165280064U,
165412672U, 165543104U, 165674944U, 165805888U, 165936832U, 166067648U,
166198336U, 166330048U, 166461248U, 166591552U, 166722496U, 166854208U,
166985408U, 167116736U, 167246656U, 167378368U, 167508416U, 167641024U,
167771584U, 167903168U, 168034112U, 168164032U, 168295744U, 168427456U,
168557632U, 168688448U, 168819136U, 168951616U, 169082176U, 169213504U,
169344832U, 169475648U, 169605952U, 169738048U, 169866304U, 169999552U,
170131264U, 170262464U, 170393536U, 170524352U, 170655424U, 170782016U,
170917696U, 171048896U, 171179072U, 171310784U, 171439936U, 171573184U,
171702976U, 171835072U, 171966272U, 172097216U, 172228288U, 172359232U,
172489664U, 172621376U, 172747712U, 172883264U, 173014208U, 173144512U,
173275072U, 173407424U, 173539136U, 173669696U, 173800768U, 173931712U,
174063424U, 174193472U, 174325696U, 174455744U, 174586816U, 174718912U,
174849728U, 174977728U, 175109696U, 175242688U, 175374272U, 175504832U,
175636288U, 175765696U, 175898432U, 176028992U, 176159936U, 176291264U,
176422592U, 176552512U, 176684864U, 176815424U, 176946496U, 177076544U,
177209152U, 177340096U, 177470528U, 177600704U, 177731648U, 177864256U,
177994816U, 178126528U, 178257472U, 178387648U, 178518464U, 178650176U,
178781888U, 178912064U, 179044288U, 179174848U, 179305024U, 179436736U,
179568448U, 179698496U, 179830208U, 179960512U, 180092608U, 180223808U,
180354752U, 180485696U, 180617152U, 180748096U, 180877504U, 181009984U,
181139264U, 181272512U, 181402688U, 181532608U, 181663168U, 181795136U,
181926592U, 182057536U, 182190016U, 182320192U, 182451904U, 182582336U,
182713792U, 182843072U, 182976064U, 183107264U, 183237056U, 183368384U,
183494848U, 183631424U, 183762752U, 183893824U, 184024768U, 184154816U,
184286656U, 184417984U, 184548928U, 184680128U, 184810816U, 184941248U,
185072704U, 185203904U, 185335616U, 185465408U, 185596352U, 185727296U,
185859904U, 185989696U, 186121664U, 186252992U, 186383552U, 186514112U,
186645952U, 186777152U, 186907328U, 187037504U, 187170112U, 187301824U,
187429184U, 187562048U, 187693504U, 187825472U, 187957184U, 188087104U,
188218304U, 188349376U, 188481344U, 188609728U, 188743616U, 188874304U,
189005248U, 189136448U, 189265088U, 189396544U, 189528128U, 189660992U,
189791936U, 189923264U, 190054208U, 190182848U, 190315072U, 190447424U,
190577984U, 190709312U, 190840768U, 190971328U, 191102656U, 191233472U,
191364032U, 191495872U, 191626816U, 191758016U, 191888192U, 192020288U,
192148928U, 192282176U, 192413504U, 192542528U, 192674752U, 192805952U,
192937792U, 193068608U, 193198912U, 193330496U, 193462208U, 193592384U,
193723456U, 193854272U, 193985984U, 194116672U, 194247232U, 194379712U,
194508352U, 194641856U, 194772544U, 194900672U, 195035072U, 195166016U,
195296704U, 195428032U, 195558592U, 195690304U, 195818176U, 195952576U,
196083392U, 196214336U, 196345792U, 196476736U, 196607552U, 196739008U,
196869952U, 197000768U, 197130688U, 197262784U, 197394368U, 197523904U,
197656384U, 197787584U, 197916608U, 198049472U, 198180544U, 198310208U,
198442432U, 198573632U, 198705088U, 198834368U, 198967232U, 199097792U,
199228352U, 199360192U, 199491392U, 199621696U, 199751744U, 199883968U,
200014016U, 200146624U, 200276672U, 200408128U, 200540096U, 200671168U,
200801984U, 200933312U, 201062464U, 201194944U, 201326144U, 201457472U,
201588544U, 201719744U, 201850816U, 201981632U, 202111552U, 202244032U,
202374464U, 202505152U, 202636352U, 202767808U, 202898368U, 203030336U,
203159872U, 203292608U, 203423296U, 203553472U, 203685824U, 203816896U,
203947712U, 204078272U, 204208192U, 204341056U, 204472256U, 204603328U,
204733888U, 204864448U, 204996544U, 205125568U, 205258304U, 205388864U,
205517632U, 205650112U, 205782208U, 205913536U, 206044736U, 206176192U,
206307008U, 206434496U, 206569024U, 206700224U, 206831168U, 206961856U,
207093056U, 207223616U, 207355328U, 207486784U, 207616832U, 207749056U,
207879104U, 208010048U, 208141888U, 208273216U, 208404032U, 208534336U,
208666048U, 208796864U, 208927424U, 209059264U, 209189824U, 209321792U,
209451584U, 209582656U, 209715136U, 209845568U, 209976896U, 210106432U,
210239296U, 210370112U, 210501568U, 210630976U, 210763712U, 210894272U,
211024832U, 211156672U, 211287616U, 211418176U, 211549376U, 211679296U,
211812032U, 211942592U, 212074432U, 212204864U, 212334016U, 212467648U,
212597824U, 212727616U, 212860352U, 212991424U, 213120832U, 213253952U,
213385024U, 213515584U, 213645632U, 213777728U, 213909184U, 214040128U,
214170688U, 214302656U, 214433728U, 214564544U, 214695232U, 214826048U,
214956992U, 215089088U, 215219776U, 215350592U, 215482304U, 215613248U,
215743552U, 215874752U, 216005312U, 216137024U, 216267328U, 216399296U,
216530752U, 216661696U, 216790592U, 216923968U, 217054528U, 217183168U,
217316672U, 217448128U, 217579072U, 217709504U, 217838912U, 217972672U,
218102848U, 218233024U, 218364736U, 218496832U, 218627776U, 218759104U,
218888896U, 219021248U, 219151936U, 219281728U, 219413056U, 219545024U,
219675968U, 219807296U, 219938624U, 220069312U, 220200128U, 220331456U,
220461632U, 220592704U, 220725184U, 220855744U, 220987072U, 221117888U,
221249216U, 221378368U, 221510336U, 221642048U, 221772736U, 221904832U,
222031808U, 222166976U, 222297536U, 222428992U, 222559936U, 222690368U,
222820672U, 222953152U, 223083968U, 223213376U, 223345984U, 223476928U,
223608512U, 223738688U, 223869376U, 224001472U, 224132672U, 224262848U,
224394944U, 224524864U, 224657344U, 224788288U, 224919488U, 225050432U,
225181504U, 225312704U, 225443776U, 225574592U, 225704768U, 225834176U,
225966784U, 226097216U, 226229824U, 226360384U, 226491712U, 226623424U,
226754368U, 226885312U, 227015104U, 227147456U, 227278528U, 227409472U,
227539904U, 227669696U, 227802944U, 227932352U, 228065216U, 228196288U,
228326464U, 228457792U, 228588736U, 228720064U, 228850112U, 228981056U,
229113152U, 229243328U, 229375936U, 229505344U, 229636928U, 229769152U,
229894976U, 230030272U, 230162368U, 230292416U, 230424512U, 230553152U,
230684864U, 230816704U, 230948416U, 231079616U, 231210944U, 231342016U,
231472448U, 231603776U, 231733952U, 231866176U, 231996736U, 232127296U,
232259392U, 232388672U, 232521664U, 232652608U, 232782272U, 232914496U,
233043904U, 233175616U, 233306816U, 233438528U, 233569984U, 233699776U,
233830592U, 233962688U, 234092224U, 234221888U, 234353984U, 234485312U,
234618304U, 234749888U, 234880832U, 235011776U, 235142464U, 235274048U,
235403456U, 235535936U, 235667392U, 235797568U, 235928768U, 236057152U,
236190272U, 236322752U, 236453312U, 236583616U, 236715712U, 236846528U,
236976448U, 237108544U, 237239104U, 237371072U, 237501632U, 237630784U,
237764416U, 237895232U, 238026688U, 238157632U, 238286912U, 238419392U,
238548032U, 238681024U, 238812608U, 238941632U, 239075008U, 239206336U,
239335232U, 239466944U, 239599168U, 239730496U, 239861312U, 239992384U,
240122816U, 240254656U, 240385856U, 240516928U, 240647872U, 240779072U,
240909632U, 241040704U, 241171904U, 241302848U, 241433408U, 241565248U,
241696192U, 241825984U, 241958848U, 242088256U, 242220224U, 242352064U,
242481856U, 242611648U, 242744896U, 242876224U, 243005632U, 243138496U,
243268672U, 243400384U, 243531712U, 243662656U, 243793856U, 243924544U,
244054592U, 244187072U, 244316608U, 244448704U, 244580032U, 244710976U,
244841536U, 244972864U, 245104448U, 245233984U, 245365312U, 245497792U,
245628736U, 245759936U, 245889856U, 246021056U, 246152512U, 246284224U,
246415168U, 246545344U, 246675904U, 246808384U, 246939584U, 247070144U,
247199552U, 247331648U, 247463872U, 247593536U, 247726016U, 247857088U,
247987648U, 248116928U, 248249536U, 248380736U, 248512064U, 248643008U,
248773312U, 248901056U, 249036608U, 249167552U, 249298624U, 249429184U,
249560512U, 249692096U, 249822784U, 249954112U, 250085312U, 250215488U,
250345792U, 250478528U, 250608704U, 250739264U, 250870976U, 251002816U,
251133632U, 251263552U, 251395136U, 251523904U, 251657792U, 251789248U,
251919424U, 252051392U, 252182464U, 252313408U, 252444224U, 252575552U,
252706624U, 252836032U, 252968512U, 253099712U, 253227584U, 253361728U,
253493056U, 253623488U, 253754432U, 253885504U, 254017216U, 254148032U,
254279488U, 254410432U, 254541376U, 254672576U, 254803264U, 254933824U,
255065792U, 255196736U, 255326528U, 255458752U, 255589952U, 255721408U,
255851072U, 255983296U, 256114624U, 256244416U, 256374208U, 256507712U,
256636096U, 256768832U, 256900544U, 257031616U, 257162176U, 257294272U,
257424448U, 257555776U, 257686976U, 257818432U, 257949632U, 258079552U,
258211136U, 258342464U, 258473408U, 258603712U, 258734656U, 258867008U,
258996544U, 259127744U, 259260224U, 259391296U, 259522112U, 259651904U,
259784384U, 259915328U, 260045888U, 260175424U, 260308544U, 260438336U,
260570944U, 260700992U, 260832448U, 260963776U, 261092672U, 261226304U,
261356864U, 261487936U, 261619648U, 261750592U, 261879872U, 262011968U,
262143424U, 262274752U, 262404416U, 262537024U, 262667968U, 262799296U,
262928704U, 263061184U, 263191744U, 263322944U, 263454656U, 263585216U,
263716672U, 263847872U, 263978944U, 264108608U, 264241088U, 264371648U,
264501184U, 264632768U, 264764096U, 264895936U, 265024576U, 265158464U,
265287488U, 265418432U, 265550528U, 265681216U, 265813312U, 265943488U,
266075968U, 266206144U, 266337728U, 266468032U, 266600384U, 266731072U,
266862272U, 266993344U, 267124288U, 267255616U, 267386432U, 267516992U,
267648704U, 267777728U, 267910592U, 268040512U, 268172096U, 268302784U,
268435264U, 268566208U, 268696256U, 268828096U, 268959296U, 269090368U,
269221312U, 269352256U, 269482688U, 269614784U, 269745856U, 269876416U,
270007616U, 270139328U, 270270272U, 270401216U, 270531904U, 270663616U,
270791744U, 270924736U, 271056832U, 271186112U, 271317184U, 271449536U,
271580992U, 271711936U, 271843136U, 271973056U, 272105408U, 272236352U,
272367296U, 272498368U, 272629568U, 272759488U, 272891456U, 273022784U,
273153856U, 273284672U, 273415616U, 273547072U, 273677632U, 273808448U,
273937088U, 274071488U, 274200896U, 274332992U, 274463296U, 274595392U,
274726208U, 274857536U, 274988992U, 275118656U, 275250496U, 275382208U,
275513024U, 275643968U, 275775296U, 275906368U, 276037184U, 276167872U,
276297664U, 276429376U, 276560576U, 276692672U, 276822976U, 276955072U,
277085632U, 277216832U, 277347008U, 277478848U, 277609664U, 277740992U,
277868608U, 278002624U, 278134336U, 278265536U, 278395328U, 278526784U,
278657728U, 278789824U, 278921152U, 279052096U, 279182912U, 279313088U,
279443776U, 279576256U, 279706048U, 279838528U, 279969728U, 280099648U,
280230976U, 280361408U, 280493632U, 280622528U, 280755392U, 280887104U,
281018176U, 281147968U, 281278912U, 281411392U, 281542592U, 281673152U,
281803712U, 281935552U, 282066496U, 282197312U, 282329024U, 282458816U,
282590272U, 282720832U, 282853184U, 282983744U, 283115072U, 283246144U,
283377344U, 283508416U, 283639744U, 283770304U, 283901504U, 284032576U,
284163136U, 284294848U, 284426176U, 284556992U, 284687296U, 284819264U,
284950208U, 285081536U
};
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,79 @@
#pragma once
#include <stdint.h>
#include "compiler.h"
#if defined(__MINGW32__) || defined(_WIN32)
# define LITTLE_ENDIAN 1234
# define BYTE_ORDER LITTLE_ENDIAN
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
# include <sys/endian.h>
#elif defined(__OpenBSD__) || defined(__SVR4)
# include <sys/types.h>
#elif defined(__APPLE__)
# include <machine/endian.h>
#elif defined( BSD ) && (BSD >= 199103)
# include <machine/endian.h>
#elif defined( __QNXNTO__ ) && defined( __LITTLEENDIAN__ )
# define LITTLE_ENDIAN 1234
# define BYTE_ORDER LITTLE_ENDIAN
#elif defined( __QNXNTO__ ) && defined( __BIGENDIAN__ )
# define BIG_ENDIAN 1234
# define BYTE_ORDER BIG_ENDIAN
#else
# include <endian.h>
#endif
#if defined(_WIN32)
#include <stdlib.h>
#define ethash_swap_u32(input_) _byteswap_ulong(input_)
#define ethash_swap_u64(input_) _byteswap_uint64(input_)
#elif defined(__APPLE__)
#include <libkern/OSByteOrder.h>
#define ethash_swap_u32(input_) OSSwapInt32(input_)
#define ethash_swap_u64(input_) OSSwapInt64(input_)
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
#define ethash_swap_u32(input_) bswap32(input_)
#define ethash_swap_u64(input_) bswap64(input_)
#elif defined(__OpenBSD__)
#include <endian.h>
#define ethash_swap_u32(input_) swap32(input_)
#define ethash_swap_u64(input_) swap64(input_)
#else // posix
#include <byteswap.h>
#define ethash_swap_u32(input_) bswap_32(input_)
#define ethash_swap_u64(input_) bswap_64(input_)
#endif
#if LITTLE_ENDIAN == BYTE_ORDER
#define fix_endian32(dst_ ,src_) dst_ = src_
#define fix_endian32_same(val_)
#define fix_endian64(dst_, src_) dst_ = src_
#define fix_endian64_same(val_)
#define fix_endian_arr32(arr_, size_)
#define fix_endian_arr64(arr_, size_)
#elif BIG_ENDIAN == BYTE_ORDER
#define fix_endian32(dst_, src_) dst_ = ethash_swap_u32(src_)
#define fix_endian32_same(val_) val_ = ethash_swap_u32(val_)
#define fix_endian64(dst_, src_) dst_ = ethash_swap_u64(src_
#define fix_endian64_same(val_) val_ = ethash_swap_u64(val_)
#define fix_endian_arr32(arr_, size_) \
do { \
for (unsigned i_ = 0; i_ < (size_), ++i_) { \
arr_[i_] = ethash_swap_u32(arr_[i_]); \
} \
while (0)
#define fix_endian_arr64(arr_, size_) \
do { \
for (unsigned i_ = 0; i_ < (size_), ++i_) { \
arr_[i_] = ethash_swap_u64(arr_[i_]); \
} \
while (0) \
#else
# error "endian not supported"
#endif // BYTE_ORDER

View File

@@ -0,0 +1,147 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file ethash.h
* @date 2015
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stddef.h>
#include "compiler.h"
#define ETHASH_REVISION 23
#define ETHASH_DATASET_BYTES_INIT 1073741824U // 2**30
#define ETHASH_DATASET_BYTES_GROWTH 8388608U // 2**23
#define ETHASH_CACHE_BYTES_INIT 1073741824U // 2**24
#define ETHASH_CACHE_BYTES_GROWTH 131072U // 2**17
#define ETHASH_EPOCH_LENGTH 30000U
#define ETHASH_MIX_BYTES 128
#define ETHASH_HASH_BYTES 64
#define ETHASH_DATASET_PARENTS 256
#define ETHASH_CACHE_ROUNDS 3
#define ETHASH_ACCESSES 64
#define ETHASH_DAG_MAGIC_NUM_SIZE 8
#define ETHASH_DAG_MAGIC_NUM 0xFEE1DEADBADDCAFE
#ifdef __cplusplus
extern "C" {
#endif
/// Type of a seedhash/blockhash e.t.c.
typedef struct ethash_h256 { uint8_t b[32]; } ethash_h256_t;
// convenience macro to statically initialize an h256_t
// usage:
// ethash_h256_t a = ethash_h256_static_init(1, 2, 3, ... )
// have to provide all 32 values. If you don't provide all the rest
// will simply be unitialized (not guranteed to be 0)
#define ethash_h256_static_init(...) \
{ {__VA_ARGS__} }
struct ethash_light;
typedef struct ethash_light* ethash_light_t;
struct ethash_full;
typedef struct ethash_full* ethash_full_t;
typedef int(*ethash_callback_t)(unsigned);
typedef struct ethash_return_value {
ethash_h256_t result;
ethash_h256_t mix_hash;
bool success;
} ethash_return_value_t;
/**
* Allocate and initialize a new ethash_light handler
*
* @param block_number The block number for which to create the handler
* @return Newly allocated ethash_light handler or NULL in case of
* ERRNOMEM or invalid parameters used for @ref ethash_compute_cache_nodes()
*/
ethash_light_t ethash_light_new(uint64_t block_number);
/**
* Frees a previously allocated ethash_light handler
* @param light The light handler to free
*/
void ethash_light_delete(ethash_light_t light);
/**
* Calculate the light client data
*
* @param light The light client handler
* @param header_hash The header hash to pack into the mix
* @param nonce The nonce to pack into the mix
* @return an object of ethash_return_value_t holding the return values
*/
ethash_return_value_t ethash_light_compute(
ethash_light_t light,
ethash_h256_t const header_hash,
uint64_t nonce
);
/**
* Allocate and initialize a new ethash_full handler
*
* @param light The light handler containing the cache.
* @param callback A callback function with signature of @ref ethash_callback_t
* It accepts an unsigned with which a progress of DAG calculation
* can be displayed. If all goes well the callback should return 0.
* If a non-zero value is returned then DAG generation will stop.
* Be advised. A progress value of 100 means that DAG creation is
* almost complete and that this function will soon return succesfully.
* It does not mean that the function has already had a succesfull return.
* @return Newly allocated ethash_full handler or NULL in case of
* ERRNOMEM or invalid parameters used for @ref ethash_compute_full_data()
*/
ethash_full_t ethash_full_new(ethash_light_t light, ethash_callback_t callback);
/**
* Frees a previously allocated ethash_full handler
* @param full The light handler to free
*/
void ethash_full_delete(ethash_full_t full);
/**
* Calculate the full client data
*
* @param full The full client handler
* @param header_hash The header hash to pack into the mix
* @param nonce The nonce to pack into the mix
* @return An object of ethash_return_value to hold the return value
*/
ethash_return_value_t ethash_full_compute(
ethash_full_t full,
ethash_h256_t const header_hash,
uint64_t nonce
);
/**
* Get a pointer to the full DAG data
*/
void const* ethash_full_dag(ethash_full_t full);
/**
* Get the size of the DAG data
*/
uint64_t ethash_full_dag_size(ethash_full_t full);
/**
* Calculate the seedhash for a given block number
*/
ethash_h256_t ethash_get_seedhash(uint64_t block_number);
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,43 @@
/*
This file is part of cpp-ethereum.
cpp-ethereum is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
cpp-ethereum 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file fnv.h
* @author Matthew Wampler-Doty <negacthulhu@gmail.com>
* @date 2015
*/
#pragma once
#include <stdint.h>
#include "compiler.h"
#ifdef __cplusplus
extern "C" {
#endif
#define FNV_PRIME 0x01000193
/* The FNV-1 spec multiplies the prime with the input one byte (octet) in turn.
We instead multiply it with the full 32-bit input.
This gives a different result compared to a canonical FNV-1 implementation.
*/
static inline uint32_t fnv_hash(uint32_t const x, uint32_t const y)
{
return x * FNV_PRIME ^ y;
}
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,507 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file internal.c
* @author Tim Hughes <tim@twistedfury.com>
* @author Matthew Wampler-Doty
* @date 2015
*/
#include <assert.h>
#include <inttypes.h>
#include <stddef.h>
#include <errno.h>
#include <math.h>
#include "mmap.h"
#include "ethash.h"
#include "fnv.h"
#include "endian.h"
#include "internal.h"
#include "data_sizes.h"
#include "io.h"
#ifdef WITH_CRYPTOPP
#include "sha3_cryptopp.h"
#else
#include "sha3.h"
#endif // WITH_CRYPTOPP
uint64_t ethash_get_datasize(uint64_t const block_number)
{
assert(block_number / ETHASH_EPOCH_LENGTH < 2048);
return dag_sizes[block_number / ETHASH_EPOCH_LENGTH];
}
uint64_t ethash_get_cachesize(uint64_t const block_number)
{
assert(block_number / ETHASH_EPOCH_LENGTH < 2048);
return cache_sizes[block_number / ETHASH_EPOCH_LENGTH];
}
// Follows Sergio's "STRICT MEMORY HARD HASHING FUNCTIONS" (2014)
// https://bitslog.files.wordpress.com/2013/12/memohash-v0-3.pdf
// SeqMemoHash(s, R, N)
bool static ethash_compute_cache_nodes(
node* const nodes,
uint64_t cache_size,
ethash_h256_t const* seed
)
{
if (cache_size % sizeof(node) != 0) {
return false;
}
uint32_t const num_nodes = (uint32_t) (cache_size / sizeof(node));
SHA3_512(nodes[0].bytes, (uint8_t*)seed, 32);
for (uint32_t i = 1; i != num_nodes; ++i) {
SHA3_512(nodes[i].bytes, nodes[i - 1].bytes, 64);
}
for (uint32_t j = 0; j != ETHASH_CACHE_ROUNDS; j++) {
for (uint32_t i = 0; i != num_nodes; i++) {
uint32_t const idx = nodes[i].words[0] % num_nodes;
node data;
data = nodes[(num_nodes - 1 + i) % num_nodes];
for (uint32_t w = 0; w != NODE_WORDS; ++w) {
data.words[w] ^= nodes[idx].words[w];
}
SHA3_512(nodes[i].bytes, data.bytes, sizeof(data));
}
}
// now perform endian conversion
fix_endian_arr32(nodes->words, num_nodes * NODE_WORDS);
return true;
}
void ethash_calculate_dag_item(
node* const ret,
uint32_t node_index,
ethash_light_t const light
)
{
uint32_t num_parent_nodes = (uint32_t) (light->cache_size / sizeof(node));
node const* cache_nodes = (node const *) light->cache;
node const* init = &cache_nodes[node_index % num_parent_nodes];
memcpy(ret, init, sizeof(node));
ret->words[0] ^= node_index;
SHA3_512(ret->bytes, ret->bytes, sizeof(node));
#if defined(_M_X64) && ENABLE_SSE
__m128i const fnv_prime = _mm_set1_epi32(FNV_PRIME);
__m128i xmm0 = ret->xmm[0];
__m128i xmm1 = ret->xmm[1];
__m128i xmm2 = ret->xmm[2];
__m128i xmm3 = ret->xmm[3];
#endif
for (uint32_t i = 0; i != ETHASH_DATASET_PARENTS; ++i) {
uint32_t parent_index = fnv_hash(node_index ^ i, ret->words[i % NODE_WORDS]) % num_parent_nodes;
node const *parent = &cache_nodes[parent_index];
#if defined(_M_X64) && ENABLE_SSE
{
xmm0 = _mm_mullo_epi32(xmm0, fnv_prime);
xmm1 = _mm_mullo_epi32(xmm1, fnv_prime);
xmm2 = _mm_mullo_epi32(xmm2, fnv_prime);
xmm3 = _mm_mullo_epi32(xmm3, fnv_prime);
xmm0 = _mm_xor_si128(xmm0, parent->xmm[0]);
xmm1 = _mm_xor_si128(xmm1, parent->xmm[1]);
xmm2 = _mm_xor_si128(xmm2, parent->xmm[2]);
xmm3 = _mm_xor_si128(xmm3, parent->xmm[3]);
// have to write to ret as values are used to compute index
ret->xmm[0] = xmm0;
ret->xmm[1] = xmm1;
ret->xmm[2] = xmm2;
ret->xmm[3] = xmm3;
}
#else
{
for (unsigned w = 0; w != NODE_WORDS; ++w) {
ret->words[w] = fnv_hash(ret->words[w], parent->words[w]);
}
}
#endif
}
SHA3_512(ret->bytes, ret->bytes, sizeof(node));
}
bool ethash_compute_full_data(
void* mem,
uint64_t full_size,
ethash_light_t const light,
ethash_callback_t callback
)
{
if (full_size % (sizeof(uint32_t) * MIX_WORDS) != 0 ||
(full_size % sizeof(node)) != 0) {
return false;
}
uint32_t const max_n = (uint32_t)(full_size / sizeof(node));
node* full_nodes = mem;
double const progress_change = 1.0f / max_n;
double progress = 0.0f;
// now compute full nodes
for (uint32_t n = 0; n != max_n; ++n) {
if (callback &&
n % (max_n / 100) == 0 &&
callback((unsigned int)(ceil(progress * 100.0f))) != 0) {
return false;
}
progress += progress_change;
ethash_calculate_dag_item(&(full_nodes[n]), n, light);
}
return true;
}
static bool ethash_hash(
ethash_return_value_t* ret,
node const* full_nodes,
ethash_light_t const light,
uint64_t full_size,
ethash_h256_t const header_hash,
uint64_t const nonce
)
{
if (full_size % MIX_WORDS != 0) {
return false;
}
// pack hash and nonce together into first 40 bytes of s_mix
assert(sizeof(node) * 8 == 512);
node s_mix[MIX_NODES + 1];
memcpy(s_mix[0].bytes, &header_hash, 32);
fix_endian64(s_mix[0].double_words[4], nonce);
// compute sha3-512 hash and replicate across mix
SHA3_512(s_mix->bytes, s_mix->bytes, 40);
fix_endian_arr32(s_mix[0].words, 16);
node* const mix = s_mix + 1;
for (uint32_t w = 0; w != MIX_WORDS; ++w) {
mix->words[w] = s_mix[0].words[w % NODE_WORDS];
}
unsigned const page_size = sizeof(uint32_t) * MIX_WORDS;
unsigned const num_full_pages = (unsigned) (full_size / page_size);
for (unsigned i = 0; i != ETHASH_ACCESSES; ++i) {
uint32_t const index = fnv_hash(s_mix->words[0] ^ i, mix->words[i % MIX_WORDS]) % num_full_pages;
for (unsigned n = 0; n != MIX_NODES; ++n) {
node const* dag_node;
if (full_nodes) {
dag_node = &full_nodes[MIX_NODES * index + n];
} else {
node tmp_node;
ethash_calculate_dag_item(&tmp_node, index * MIX_NODES + n, light);
dag_node = &tmp_node;
}
#if defined(_M_X64) && ENABLE_SSE
{
__m128i fnv_prime = _mm_set1_epi32(FNV_PRIME);
__m128i xmm0 = _mm_mullo_epi32(fnv_prime, mix[n].xmm[0]);
__m128i xmm1 = _mm_mullo_epi32(fnv_prime, mix[n].xmm[1]);
__m128i xmm2 = _mm_mullo_epi32(fnv_prime, mix[n].xmm[2]);
__m128i xmm3 = _mm_mullo_epi32(fnv_prime, mix[n].xmm[3]);
mix[n].xmm[0] = _mm_xor_si128(xmm0, dag_node->xmm[0]);
mix[n].xmm[1] = _mm_xor_si128(xmm1, dag_node->xmm[1]);
mix[n].xmm[2] = _mm_xor_si128(xmm2, dag_node->xmm[2]);
mix[n].xmm[3] = _mm_xor_si128(xmm3, dag_node->xmm[3]);
}
#else
{
for (unsigned w = 0; w != NODE_WORDS; ++w) {
mix[n].words[w] = fnv_hash(mix[n].words[w], dag_node->words[w]);
}
}
#endif
}
}
// compress mix
for (uint32_t w = 0; w != MIX_WORDS; w += 4) {
uint32_t reduction = mix->words[w + 0];
reduction = reduction * FNV_PRIME ^ mix->words[w + 1];
reduction = reduction * FNV_PRIME ^ mix->words[w + 2];
reduction = reduction * FNV_PRIME ^ mix->words[w + 3];
mix->words[w / 4] = reduction;
}
fix_endian_arr32(mix->words, MIX_WORDS / 4);
memcpy(&ret->mix_hash, mix->bytes, 32);
// final Keccak hash
SHA3_256(&ret->result, s_mix->bytes, 64 + 32); // Keccak-256(s + compressed_mix)
return true;
}
void ethash_quick_hash(
ethash_h256_t* return_hash,
ethash_h256_t const* header_hash,
uint64_t const nonce,
ethash_h256_t const* mix_hash
)
{
uint8_t buf[64 + 32];
memcpy(buf, header_hash, 32);
fix_endian64_same(nonce);
memcpy(&(buf[32]), &nonce, 8);
SHA3_512(buf, buf, 40);
memcpy(&(buf[64]), mix_hash, 32);
SHA3_256(return_hash, buf, 64 + 32);
}
ethash_h256_t ethash_get_seedhash(uint64_t block_number)
{
ethash_h256_t ret;
ethash_h256_reset(&ret);
uint64_t const epochs = block_number / ETHASH_EPOCH_LENGTH;
for (uint32_t i = 0; i < epochs; ++i)
SHA3_256(&ret, (uint8_t*)&ret, 32);
return ret;
}
bool ethash_quick_check_difficulty(
ethash_h256_t const* header_hash,
uint64_t const nonce,
ethash_h256_t const* mix_hash,
ethash_h256_t const* boundary
)
{
ethash_h256_t return_hash;
ethash_quick_hash(&return_hash, header_hash, nonce, mix_hash);
return ethash_check_difficulty(&return_hash, boundary);
}
ethash_light_t ethash_light_new_internal(uint64_t cache_size, ethash_h256_t const* seed)
{
struct ethash_light *ret;
ret = calloc(sizeof(*ret), 1);
if (!ret) {
return NULL;
}
ret->cache = malloc((size_t)cache_size);
if (!ret->cache) {
goto fail_free_light;
}
node* nodes = (node*)ret->cache;
if (!ethash_compute_cache_nodes(nodes, cache_size, seed)) {
goto fail_free_cache_mem;
}
ret->cache_size = cache_size;
return ret;
fail_free_cache_mem:
free(ret->cache);
fail_free_light:
free(ret);
return NULL;
}
ethash_light_t ethash_light_new(uint64_t block_number)
{
ethash_h256_t seedhash = ethash_get_seedhash(block_number);
ethash_light_t ret;
ret = ethash_light_new_internal(ethash_get_cachesize(block_number), &seedhash);
ret->block_number = block_number;
return ret;
}
void ethash_light_delete(ethash_light_t light)
{
if (light->cache) {
free(light->cache);
}
free(light);
}
ethash_return_value_t ethash_light_compute_internal(
ethash_light_t light,
uint64_t full_size,
ethash_h256_t const header_hash,
uint64_t nonce
)
{
ethash_return_value_t ret;
ret.success = true;
if (!ethash_hash(&ret, NULL, light, full_size, header_hash, nonce)) {
ret.success = false;
}
return ret;
}
ethash_return_value_t ethash_light_compute(
ethash_light_t light,
ethash_h256_t const header_hash,
uint64_t nonce
)
{
uint64_t full_size = ethash_get_datasize(light->block_number);
return ethash_light_compute_internal(light, full_size, header_hash, nonce);
}
static bool ethash_mmap(struct ethash_full* ret, FILE* f)
{
int fd;
char* mmapped_data;
errno = 0;
ret->file = f;
if ((fd = ethash_fileno(ret->file)) == -1) {
return false;
}
mmapped_data= mmap(
NULL,
(size_t)ret->file_size + ETHASH_DAG_MAGIC_NUM_SIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED,
fd,
0
);
if (mmapped_data == MAP_FAILED) {
return false;
}
ret->data = (node*)(mmapped_data + ETHASH_DAG_MAGIC_NUM_SIZE);
return true;
}
ethash_full_t ethash_full_new_internal(
char const* dirname,
ethash_h256_t const seed_hash,
uint64_t full_size,
ethash_light_t const light,
ethash_callback_t callback
)
{
struct ethash_full* ret;
FILE *f = NULL;
ret = calloc(sizeof(*ret), 1);
if (!ret) {
return NULL;
}
ret->file_size = (size_t)full_size;
switch (ethash_io_prepare(dirname, seed_hash, &f, (size_t)full_size, false)) {
case ETHASH_IO_FAIL:
// ethash_io_prepare will do all ETHASH_CRITICAL() logging in fail case
goto fail_free_full;
case ETHASH_IO_MEMO_MATCH:
if (!ethash_mmap(ret, f)) {
ETHASH_CRITICAL("mmap failure()");
goto fail_close_file;
}
return ret;
case ETHASH_IO_MEMO_SIZE_MISMATCH:
// if a DAG of same filename but unexpected size is found, silently force new file creation
if (ethash_io_prepare(dirname, seed_hash, &f, (size_t)full_size, true) != ETHASH_IO_MEMO_MISMATCH) {
ETHASH_CRITICAL("Could not recreate DAG file after finding existing DAG with unexpected size.");
goto fail_free_full;
}
// fallthrough to the mismatch case here, DO NOT go through match
case ETHASH_IO_MEMO_MISMATCH:
if (!ethash_mmap(ret, f)) {
ETHASH_CRITICAL("mmap failure()");
goto fail_close_file;
}
break;
}
if (!ethash_compute_full_data(ret->data, full_size, light, callback)) {
ETHASH_CRITICAL("Failure at computing DAG data.");
goto fail_free_full_data;
}
// after the DAG has been filled then we finalize it by writting the magic number at the beginning
if (fseek(f, 0, SEEK_SET) != 0) {
ETHASH_CRITICAL("Could not seek to DAG file start to write magic number.");
goto fail_free_full_data;
}
uint64_t const magic_num = ETHASH_DAG_MAGIC_NUM;
if (fwrite(&magic_num, ETHASH_DAG_MAGIC_NUM_SIZE, 1, f) != 1) {
ETHASH_CRITICAL("Could not write magic number to DAG's beginning.");
goto fail_free_full_data;
}
if (fflush(f) != 0) {// make sure the magic number IS there
ETHASH_CRITICAL("Could not flush memory mapped data to DAG file. Insufficient space?");
goto fail_free_full_data;
}
return ret;
fail_free_full_data:
// could check that munmap(..) == 0 but even if it did not can't really do anything here
munmap(ret->data, (size_t)full_size);
fail_close_file:
fclose(ret->file);
fail_free_full:
free(ret);
return NULL;
}
ethash_full_t ethash_full_new(ethash_light_t light, ethash_callback_t callback)
{
char strbuf[256];
if (!ethash_get_default_dirname(strbuf, 256)) {
return NULL;
}
uint64_t full_size = ethash_get_datasize(light->block_number);
ethash_h256_t seedhash = ethash_get_seedhash(light->block_number);
return ethash_full_new_internal(strbuf, seedhash, full_size, light, callback);
}
void ethash_full_delete(ethash_full_t full)
{
// could check that munmap(..) == 0 but even if it did not can't really do anything here
munmap(full->data, (size_t)full->file_size);
if (full->file) {
fclose(full->file);
}
free(full);
}
ethash_return_value_t ethash_full_compute(
ethash_full_t full,
ethash_h256_t const header_hash,
uint64_t nonce
)
{
ethash_return_value_t ret;
ret.success = true;
if (!ethash_hash(
&ret,
(node const*)full->data,
NULL,
full->file_size,
header_hash,
nonce)) {
ret.success = false;
}
return ret;
}
void const* ethash_full_dag(ethash_full_t full)
{
return full->data;
}
uint64_t ethash_full_dag_size(ethash_full_t full)
{
return full->file_size;
}

View File

@@ -0,0 +1,179 @@
#pragma once
#include "compiler.h"
#include "endian.h"
#include "ethash.h"
#include <stdio.h>
#define ENABLE_SSE 0
#if defined(_M_X64) && ENABLE_SSE
#include <smmintrin.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
// compile time settings
#define NODE_WORDS (64/4)
#define MIX_WORDS (ETHASH_MIX_BYTES/4)
#define MIX_NODES (MIX_WORDS / NODE_WORDS)
#include <stdint.h>
typedef union node {
uint8_t bytes[NODE_WORDS * 4];
uint32_t words[NODE_WORDS];
uint64_t double_words[NODE_WORDS / 2];
#if defined(_M_X64) && ENABLE_SSE
__m128i xmm[NODE_WORDS/4];
#endif
} node;
static inline uint8_t ethash_h256_get(ethash_h256_t const* hash, unsigned int i)
{
return hash->b[i];
}
static inline void ethash_h256_set(ethash_h256_t* hash, unsigned int i, uint8_t v)
{
hash->b[i] = v;
}
static inline void ethash_h256_reset(ethash_h256_t* hash)
{
memset(hash, 0, 32);
}
// Returns if hash is less than or equal to boundary (2^256/difficulty)
static inline bool ethash_check_difficulty(
ethash_h256_t const* hash,
ethash_h256_t const* boundary
)
{
// Boundary is big endian
for (int i = 0; i < 32; i++) {
if (ethash_h256_get(hash, i) == ethash_h256_get(boundary, i)) {
continue;
}
return ethash_h256_get(hash, i) < ethash_h256_get(boundary, i);
}
return true;
}
/**
* Difficulty quick check for POW preverification
*
* @param header_hash The hash of the header
* @param nonce The block's nonce
* @param mix_hash The mix digest hash
* @param boundary The boundary is defined as (2^256 / difficulty)
* @return true for succesful pre-verification and false otherwise
*/
bool ethash_quick_check_difficulty(
ethash_h256_t const* header_hash,
uint64_t const nonce,
ethash_h256_t const* mix_hash,
ethash_h256_t const* boundary
);
struct ethash_light {
void* cache;
uint64_t cache_size;
uint64_t block_number;
};
/**
* Allocate and initialize a new ethash_light handler. Internal version
*
* @param cache_size The size of the cache in bytes
* @param seed Block seedhash to be used during the computation of the
* cache nodes
* @return Newly allocated ethash_light handler or NULL in case of
* ERRNOMEM or invalid parameters used for @ref ethash_compute_cache_nodes()
*/
ethash_light_t ethash_light_new_internal(uint64_t cache_size, ethash_h256_t const* seed);
/**
* Calculate the light client data. Internal version.
*
* @param light The light client handler
* @param full_size The size of the full data in bytes.
* @param header_hash The header hash to pack into the mix
* @param nonce The nonce to pack into the mix
* @return The resulting hash.
*/
ethash_return_value_t ethash_light_compute_internal(
ethash_light_t light,
uint64_t full_size,
ethash_h256_t const header_hash,
uint64_t nonce
);
struct ethash_full {
FILE* file;
uint64_t file_size;
node* data;
};
/**
* Allocate and initialize a new ethash_full handler. Internal version.
*
* @param dirname The directory in which to put the DAG file.
* @param seedhash The seed hash of the block. Used in the DAG file naming.
* @param full_size The size of the full data in bytes.
* @param cache A cache object to use that was allocated with @ref ethash_cache_new().
* Iff this function succeeds the ethash_full_t will take memory
* memory ownership of the cache and free it at deletion. If
* not then the user still has to handle freeing of the cache himself.
* @param callback A callback function with signature of @ref ethash_callback_t
* It accepts an unsigned with which a progress of DAG calculation
* can be displayed. If all goes well the callback should return 0.
* If a non-zero value is returned then DAG generation will stop.
* @return Newly allocated ethash_full handler or NULL in case of
* ERRNOMEM or invalid parameters used for @ref ethash_compute_full_data()
*/
ethash_full_t ethash_full_new_internal(
char const* dirname,
ethash_h256_t const seed_hash,
uint64_t full_size,
ethash_light_t const light,
ethash_callback_t callback
);
void ethash_calculate_dag_item(
node* const ret,
uint32_t node_index,
ethash_light_t const cache
);
void ethash_quick_hash(
ethash_h256_t* return_hash,
ethash_h256_t const* header_hash,
const uint64_t nonce,
ethash_h256_t const* mix_hash
);
uint64_t ethash_get_datasize(uint64_t const block_number);
uint64_t ethash_get_cachesize(uint64_t const block_number);
/**
* Compute the memory data for a full node's memory
*
* @param mem A pointer to an ethash full's memory
* @param full_size The size of the full data in bytes
* @param cache A cache object to use in the calculation
* @param callback The callback function. Check @ref ethash_full_new() for details.
* @return true if all went fine and false for invalid parameters
*/
bool ethash_compute_full_data(
void* mem,
uint64_t full_size,
ethash_light_t const light,
ethash_callback_t callback
);
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,119 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file io.c
* @author Lefteris Karapetsas <lefteris@ethdev.com>
* @date 2015
*/
#include "io.h"
#include <string.h>
#include <stdio.h>
#include <errno.h>
enum ethash_io_rc ethash_io_prepare(
char const* dirname,
ethash_h256_t const seedhash,
FILE** output_file,
uint64_t file_size,
bool force_create
)
{
char mutable_name[DAG_MUTABLE_NAME_MAX_SIZE];
enum ethash_io_rc ret = ETHASH_IO_FAIL;
// reset errno before io calls
errno = 0;
// assert directory exists
if (!ethash_mkdir(dirname)) {
ETHASH_CRITICAL("Could not create the ethash directory");
goto end;
}
ethash_io_mutable_name(ETHASH_REVISION, &seedhash, mutable_name);
char* tmpfile = ethash_io_create_filename(dirname, mutable_name, strlen(mutable_name));
if (!tmpfile) {
ETHASH_CRITICAL("Could not create the full DAG pathname");
goto end;
}
FILE *f;
if (!force_create) {
// try to open the file
f = ethash_fopen(tmpfile, "rb+");
if (f) {
size_t found_size;
if (!ethash_file_size(f, &found_size)) {
fclose(f);
ETHASH_CRITICAL("Could not query size of DAG file: \"%s\"", tmpfile);
goto free_memo;
}
if (file_size != found_size - ETHASH_DAG_MAGIC_NUM_SIZE) {
fclose(f);
ret = ETHASH_IO_MEMO_SIZE_MISMATCH;
goto free_memo;
}
// compare the magic number, no need to care about endianess since it's local
uint64_t magic_num;
if (fread(&magic_num, ETHASH_DAG_MAGIC_NUM_SIZE, 1, f) != 1) {
// I/O error
fclose(f);
ETHASH_CRITICAL("Could not read from DAG file: \"%s\"", tmpfile);
ret = ETHASH_IO_MEMO_SIZE_MISMATCH;
goto free_memo;
}
if (magic_num != ETHASH_DAG_MAGIC_NUM) {
fclose(f);
ret = ETHASH_IO_MEMO_SIZE_MISMATCH;
goto free_memo;
}
ret = ETHASH_IO_MEMO_MATCH;
goto set_file;
}
}
// file does not exist, will need to be created
f = ethash_fopen(tmpfile, "wb+");
if (!f) {
ETHASH_CRITICAL("Could not create DAG file: \"%s\"", tmpfile);
goto free_memo;
}
// make sure it's of the proper size
if (fseek(f, (long int)(file_size + ETHASH_DAG_MAGIC_NUM_SIZE - 1), SEEK_SET) != 0) {
fclose(f);
ETHASH_CRITICAL("Could not seek to the end of DAG file: \"%s\". Insufficient space?", tmpfile);
goto free_memo;
}
if (fputc('\n', f) == EOF) {
fclose(f);
ETHASH_CRITICAL("Could not write in the end of DAG file: \"%s\". Insufficient space?", tmpfile);
goto free_memo;
}
if (fflush(f) != 0) {
fclose(f);
ETHASH_CRITICAL("Could not flush at end of DAG file: \"%s\". Insufficient space?", tmpfile);
goto free_memo;
}
ret = ETHASH_IO_MEMO_MISMATCH;
goto set_file;
ret = ETHASH_IO_MEMO_MATCH;
set_file:
*output_file = f;
free_memo:
free(tmpfile);
end:
return ret;
}

View File

@@ -0,0 +1,202 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file io.h
* @author Lefteris Karapetsas <lefteris@ethdev.com>
* @date 2015
*/
#pragma once
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#ifdef __cplusplus
#define __STDC_FORMAT_MACROS 1
#endif
#include <inttypes.h>
#include "endian.h"
#include "ethash.h"
#ifdef __cplusplus
extern "C" {
#endif
// Maximum size for mutable part of DAG file name
// 6 is for "full-R", the suffix of the filename
// 10 is for maximum number of digits of a uint32_t (for REVISION)
// 1 is for - and 16 is for the first 16 hex digits for first 8 bytes of
// the seedhash and last 1 is for the null terminating character
// Reference: https://github.com/ethereum/wiki/wiki/Ethash-DAG
#define DAG_MUTABLE_NAME_MAX_SIZE (6 + 10 + 1 + 16 + 1)
/// Possible return values of @see ethash_io_prepare
enum ethash_io_rc {
ETHASH_IO_FAIL = 0, ///< There has been an IO failure
ETHASH_IO_MEMO_SIZE_MISMATCH, ///< DAG with revision/hash match, but file size was wrong.
ETHASH_IO_MEMO_MISMATCH, ///< The DAG file did not exist or there was revision/hash mismatch
ETHASH_IO_MEMO_MATCH, ///< DAG file existed and revision/hash matched. No need to do anything
};
// small hack for windows. I don't feel I should use va_args and forward just
// to have this one function properly cross-platform abstracted
#if defined(_WIN32) && !defined(__GNUC__)
#define snprintf(...) sprintf_s(__VA_ARGS__)
#endif
/**
* Logs a critical error in important parts of ethash. Should mostly help
* figure out what kind of problem (I/O, memory e.t.c.) causes a NULL
* ethash_full_t
*/
#ifdef ETHASH_PRINT_CRITICAL_OUTPUT
#define ETHASH_CRITICAL(...) \
do \
{ \
printf("ETHASH CRITICAL ERROR: "__VA_ARGS__); \
printf("\n"); \
fflush(stdout); \
} while (0)
#else
#define ETHASH_CRITICAL(...)
#endif
/**
* Prepares io for ethash
*
* Create the DAG directory and the DAG file if they don't exist.
*
* @param[in] dirname A null terminated c-string of the path of the ethash
* data directory. If it does not exist it's created.
* @param[in] seedhash The seedhash of the current block number, used in the
* naming of the file as can be seen from the spec at:
* https://github.com/ethereum/wiki/wiki/Ethash-DAG
* @param[out] output_file If there was no failure then this will point to an open
* file descriptor. User is responsible for closing it.
* In the case of memo match then the file is open on read
* mode, while on the case of mismatch a new file is created
* on write mode
* @param[in] file_size The size that the DAG file should have on disk
* @param[out] force_create If true then there is no check to see if the file
* already exists
* @return For possible return values @see enum ethash_io_rc
*/
enum ethash_io_rc ethash_io_prepare(
char const* dirname,
ethash_h256_t const seedhash,
FILE** output_file,
uint64_t file_size,
bool force_create
);
/**
* An fopen wrapper for no-warnings crossplatform fopen.
*
* Msvc compiler considers fopen to be insecure and suggests to use their
* alternative. This is a wrapper for this alternative. Another way is to
* #define _CRT_SECURE_NO_WARNINGS, but disabling all security warnings does
* not sound like a good idea.
*
* @param file_name The path to the file to open
* @param mode Opening mode. Check fopen()
* @return The FILE* or NULL in failure
*/
FILE* ethash_fopen(char const* file_name, char const* mode);
/**
* An strncat wrapper for no-warnings crossplatform strncat.
*
* Msvc compiler considers strncat to be insecure and suggests to use their
* alternative. This is a wrapper for this alternative. Another way is to
* #define _CRT_SECURE_NO_WARNINGS, but disabling all security warnings does
* not sound like a good idea.
*
* @param des Destination buffer
* @param dest_size Maximum size of the destination buffer. This is the
* extra argument for the MSVC secure strncat
* @param src Souce buffer
* @param count Number of bytes to copy from source
* @return If all is well returns the dest buffer. If there is an
* error returns NULL
*/
char* ethash_strncat(char* dest, size_t dest_size, char const* src, size_t count);
/**
* A cross-platform mkdir wrapper to create a directory or assert it's there
*
* @param dirname The full path of the directory to create
* @return true if the directory was created or if it already
* existed
*/
bool ethash_mkdir(char const* dirname);
/**
* Get a file's size
*
* @param[in] f The open file stream whose size to get
* @param[out] size Pass a size_t by reference to contain the file size
* @return true in success and false if there was a failure
*/
bool ethash_file_size(FILE* f, size_t* ret_size);
/**
* Get a file descriptor number from a FILE stream
*
* @param f The file stream whose fd to get
* @return Platform specific fd handler
*/
int ethash_fileno(FILE* f);
/**
* Create the filename for the DAG.
*
* @param dirname The directory name in which the DAG file should reside
* If it does not end with a directory separator it is appended.
* @param filename The actual name of the file
* @param filename_length The length of the filename in bytes
* @return A char* containing the full name. User must deallocate.
*/
char* ethash_io_create_filename(
char const* dirname,
char const* filename,
size_t filename_length
);
/**
* Gets the default directory name for the DAG depending on the system
*
* The spec defining this directory is here: https://github.com/ethereum/wiki/wiki/Ethash-DAG
*
* @param[out] strbuf A string buffer of sufficient size to keep the
* null termninated string of the directory name
* @param[in] buffsize Size of @a strbuf in bytes
* @return true for success and false otherwise
*/
bool ethash_get_default_dirname(char* strbuf, size_t buffsize);
static inline bool ethash_io_mutable_name(
uint32_t revision,
ethash_h256_t const* seed_hash,
char* output
)
{
uint64_t hash = *((uint64_t*)seed_hash);
#if LITTLE_ENDIAN == BYTE_ORDER
hash = ethash_swap_u64(hash);
#endif
return snprintf(output, DAG_MUTABLE_NAME_MAX_SIZE, "full-R%u-%016" PRIx64, revision, hash) >= 0;
}
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,111 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file io_posix.c
* @author Lefteris Karapetsas <lefteris@ethdev.com>
* @date 2015
*/
#include "io.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <libgen.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pwd.h>
FILE* ethash_fopen(char const* file_name, char const* mode)
{
return fopen(file_name, mode);
}
char* ethash_strncat(char* dest, size_t dest_size, char const* src, size_t count)
{
return strlen(dest) + count + 1 <= dest_size ? strncat(dest, src, count) : NULL;
}
bool ethash_mkdir(char const* dirname)
{
int rc = mkdir(dirname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
return rc != -1 || errno == EEXIST;
}
int ethash_fileno(FILE *f)
{
return fileno(f);
}
char* ethash_io_create_filename(
char const* dirname,
char const* filename,
size_t filename_length
)
{
size_t dirlen = strlen(dirname);
size_t dest_size = dirlen + filename_length + 1;
if (dirname[dirlen] != '/') {
dest_size += 1;
}
char* name = malloc(dest_size);
if (!name) {
return NULL;
}
name[0] = '\0';
ethash_strncat(name, dest_size, dirname, dirlen);
if (dirname[dirlen] != '/') {
ethash_strncat(name, dest_size, "/", 1);
}
ethash_strncat(name, dest_size, filename, filename_length);
return name;
}
bool ethash_file_size(FILE* f, size_t* ret_size)
{
struct stat st;
int fd;
if ((fd = fileno(f)) == -1 || fstat(fd, &st) != 0) {
return false;
}
*ret_size = st.st_size;
return true;
}
bool ethash_get_default_dirname(char* strbuf, size_t buffsize)
{
static const char dir_suffix[] = ".ethash/";
strbuf[0] = '\0';
char* home_dir = getenv("HOME");
if (!home_dir || strlen(home_dir) == 0)
{
struct passwd* pwd = getpwuid(getuid());
if (pwd)
home_dir = pwd->pw_dir;
}
size_t len = strlen(home_dir);
if (!ethash_strncat(strbuf, buffsize, home_dir, len)) {
return false;
}
if (home_dir[len] != '/') {
if (!ethash_strncat(strbuf, buffsize, "/", 1)) {
return false;
}
}
return ethash_strncat(strbuf, buffsize, dir_suffix, sizeof(dir_suffix));
}

View File

@@ -0,0 +1,100 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file io_win32.c
* @author Lefteris Karapetsas <lefteris@ethdev.com>
* @date 2015
*/
#include "io.h"
#include <direct.h>
#include <errno.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <shlobj.h>
FILE* ethash_fopen(char const* file_name, char const* mode)
{
FILE* f;
return fopen_s(&f, file_name, mode) == 0 ? f : NULL;
}
char* ethash_strncat(char* dest, size_t dest_size, char const* src, size_t count)
{
return strncat_s(dest, dest_size, src, count) == 0 ? dest : NULL;
}
bool ethash_mkdir(char const* dirname)
{
int rc = _mkdir(dirname);
return rc != -1 || errno == EEXIST;
}
int ethash_fileno(FILE* f)
{
return _fileno(f);
}
char* ethash_io_create_filename(
char const* dirname,
char const* filename,
size_t filename_length
)
{
size_t dirlen = strlen(dirname);
size_t dest_size = dirlen + filename_length + 1;
if (dirname[dirlen] != '\\' || dirname[dirlen] != '/') {
dest_size += 1;
}
char* name = malloc(dest_size);
if (!name) {
return NULL;
}
name[0] = '\0';
ethash_strncat(name, dest_size, dirname, dirlen);
if (dirname[dirlen] != '\\' || dirname[dirlen] != '/') {
ethash_strncat(name, dest_size, "\\", 1);
}
ethash_strncat(name, dest_size, filename, filename_length);
return name;
}
bool ethash_file_size(FILE* f, size_t* ret_size)
{
struct _stat st;
int fd;
if ((fd = _fileno(f)) == -1 || _fstat(fd, &st) != 0) {
return false;
}
*ret_size = st.st_size;
return true;
}
bool ethash_get_default_dirname(char* strbuf, size_t buffsize)
{
static const char dir_suffix[] = "Ethash\\";
strbuf[0] = '\0';
if (!SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, (CHAR*)strbuf))) {
return false;
}
if (!ethash_strncat(strbuf, buffsize, "\\", 1)) {
return false;
}
return ethash_strncat(strbuf, buffsize, dir_suffix, sizeof(dir_suffix));
}

View File

@@ -0,0 +1,47 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file mmap.h
* @author Lefteris Karapetsas <lefteris@ethdev.com>
* @date 2015
*/
#pragma once
#if defined(__MINGW32__) || defined(_WIN32)
#include <sys/types.h>
#define PROT_READ 0x1
#define PROT_WRITE 0x2
/* This flag is only available in WinXP+ */
#ifdef FILE_MAP_EXECUTE
#define PROT_EXEC 0x4
#else
#define PROT_EXEC 0x0
#define FILE_MAP_EXECUTE 0
#endif
#define MAP_SHARED 0x01
#define MAP_PRIVATE 0x02
#define MAP_ANONYMOUS 0x20
#define MAP_ANON MAP_ANONYMOUS
#define MAP_FAILED ((void *) -1)
void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset);
void munmap(void* addr, size_t length);
#else // posix, yay! ^_^
#include <sys/mman.h>
#endif

View File

@@ -0,0 +1,84 @@
/* mmap() replacement for Windows
*
* Author: Mike Frysinger <vapier@gentoo.org>
* Placed into the public domain
*/
/* References:
* CreateFileMapping: http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx
* CloseHandle: http://msdn.microsoft.com/en-us/library/ms724211(VS.85).aspx
* MapViewOfFile: http://msdn.microsoft.com/en-us/library/aa366761(VS.85).aspx
* UnmapViewOfFile: http://msdn.microsoft.com/en-us/library/aa366882(VS.85).aspx
*/
#include <io.h>
#include <windows.h>
#include "mmap.h"
#ifdef __USE_FILE_OFFSET64
# define DWORD_HI(x) (x >> 32)
# define DWORD_LO(x) ((x) & 0xffffffff)
#else
# define DWORD_HI(x) (0)
# define DWORD_LO(x) (x)
#endif
void* mmap(void* start, size_t length, int prot, int flags, int fd, off_t offset)
{
if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC))
return MAP_FAILED;
if (fd == -1) {
if (!(flags & MAP_ANON) || offset)
return MAP_FAILED;
} else if (flags & MAP_ANON)
return MAP_FAILED;
DWORD flProtect;
if (prot & PROT_WRITE) {
if (prot & PROT_EXEC)
flProtect = PAGE_EXECUTE_READWRITE;
else
flProtect = PAGE_READWRITE;
} else if (prot & PROT_EXEC) {
if (prot & PROT_READ)
flProtect = PAGE_EXECUTE_READ;
else if (prot & PROT_EXEC)
flProtect = PAGE_EXECUTE;
} else
flProtect = PAGE_READONLY;
off_t end = length + offset;
HANDLE mmap_fd, h;
if (fd == -1)
mmap_fd = INVALID_HANDLE_VALUE;
else
mmap_fd = (HANDLE)_get_osfhandle(fd);
h = CreateFileMapping(mmap_fd, NULL, flProtect, DWORD_HI(end), DWORD_LO(end), NULL);
if (h == NULL)
return MAP_FAILED;
DWORD dwDesiredAccess;
if (prot & PROT_WRITE)
dwDesiredAccess = FILE_MAP_WRITE;
else
dwDesiredAccess = FILE_MAP_READ;
if (prot & PROT_EXEC)
dwDesiredAccess |= FILE_MAP_EXECUTE;
if (flags & MAP_PRIVATE)
dwDesiredAccess |= FILE_MAP_COPY;
void *ret = MapViewOfFile(h, dwDesiredAccess, DWORD_HI(offset), DWORD_LO(offset), length);
if (ret == NULL) {
ret = MAP_FAILED;
}
// since we are handling the file ourselves with fd, close the Windows Handle here
CloseHandle(h);
return ret;
}
void munmap(void* addr, size_t length)
{
UnmapViewOfFile(addr);
}
#undef DWORD_HI
#undef DWORD_LO

View File

@@ -0,0 +1,151 @@
/** libkeccak-tiny
*
* A single-file implementation of SHA-3 and SHAKE.
*
* Implementor: David Leon Gil
* License: CC0, attribution kindly requested. Blame taken too,
* but not liability.
*/
#include "sha3.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/******** The Keccak-f[1600] permutation ********/
/*** Constants. ***/
static const uint8_t rho[24] = \
{ 1, 3, 6, 10, 15, 21,
28, 36, 45, 55, 2, 14,
27, 41, 56, 8, 25, 43,
62, 18, 39, 61, 20, 44};
static const uint8_t pi[24] = \
{10, 7, 11, 17, 18, 3,
5, 16, 8, 21, 24, 4,
15, 23, 19, 13, 12, 2,
20, 14, 22, 9, 6, 1};
static const uint64_t RC[24] = \
{1ULL, 0x8082ULL, 0x800000000000808aULL, 0x8000000080008000ULL,
0x808bULL, 0x80000001ULL, 0x8000000080008081ULL, 0x8000000000008009ULL,
0x8aULL, 0x88ULL, 0x80008009ULL, 0x8000000aULL,
0x8000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL, 0x8000000000008003ULL,
0x8000000000008002ULL, 0x8000000000000080ULL, 0x800aULL, 0x800000008000000aULL,
0x8000000080008081ULL, 0x8000000000008080ULL, 0x80000001ULL, 0x8000000080008008ULL};
/*** Helper macros to unroll the permutation. ***/
#define rol(x, s) (((x) << s) | ((x) >> (64 - s)))
#define REPEAT6(e) e e e e e e
#define REPEAT24(e) REPEAT6(e e e e)
#define REPEAT5(e) e e e e e
#define FOR5(v, s, e) \
v = 0; \
REPEAT5(e; v += s;)
/*** Keccak-f[1600] ***/
static inline void keccakf(void* state) {
uint64_t* a = (uint64_t*)state;
uint64_t b[5] = {0};
uint64_t t = 0;
uint8_t x, y;
for (int i = 0; i < 24; i++) {
// Theta
FOR5(x, 1,
b[x] = 0;
FOR5(y, 5,
b[x] ^= a[x + y]; ))
FOR5(x, 1,
FOR5(y, 5,
a[y + x] ^= b[(x + 4) % 5] ^ rol(b[(x + 1) % 5], 1); ))
// Rho and pi
t = a[1];
x = 0;
REPEAT24(b[0] = a[pi[x]];
a[pi[x]] = rol(t, rho[x]);
t = b[0];
x++; )
// Chi
FOR5(y,
5,
FOR5(x, 1,
b[x] = a[y + x];)
FOR5(x, 1,
a[y + x] = b[x] ^ ((~b[(x + 1) % 5]) & b[(x + 2) % 5]); ))
// Iota
a[0] ^= RC[i];
}
}
/******** The FIPS202-defined functions. ********/
/*** Some helper macros. ***/
#define _(S) do { S } while (0)
#define FOR(i, ST, L, S) \
_(for (size_t i = 0; i < L; i += ST) { S; })
#define mkapply_ds(NAME, S) \
static inline void NAME(uint8_t* dst, \
const uint8_t* src, \
size_t len) { \
FOR(i, 1, len, S); \
}
#define mkapply_sd(NAME, S) \
static inline void NAME(const uint8_t* src, \
uint8_t* dst, \
size_t len) { \
FOR(i, 1, len, S); \
}
mkapply_ds(xorin, dst[i] ^= src[i]) // xorin
mkapply_sd(setout, dst[i] = src[i]) // setout
#define P keccakf
#define Plen 200
// Fold P*F over the full blocks of an input.
#define foldP(I, L, F) \
while (L >= rate) { \
F(a, I, rate); \
P(a); \
I += rate; \
L -= rate; \
}
/** The sponge-based hash construction. **/
static inline int hash(uint8_t* out, size_t outlen,
const uint8_t* in, size_t inlen,
size_t rate, uint8_t delim) {
if ((out == NULL) || ((in == NULL) && inlen != 0) || (rate >= Plen)) {
return -1;
}
uint8_t a[Plen] = {0};
// Absorb input.
foldP(in, inlen, xorin);
// Xor in the DS and pad frame.
a[inlen] ^= delim;
a[rate - 1] ^= 0x80;
// Xor in the last block.
xorin(a, in, inlen);
// Apply P
P(a);
// Squeeze output.
foldP(out, outlen, setout);
setout(a, out, outlen);
memset(a, 0, 200);
return 0;
}
#define defsha3(bits) \
int sha3_##bits(uint8_t* out, size_t outlen, \
const uint8_t* in, size_t inlen) { \
if (outlen > (bits/8)) { \
return -1; \
} \
return hash(out, outlen, in, inlen, 200 - (bits / 4), 0x01); \
}
/*** FIPS202 SHA3 FOFs ***/
defsha3(256)
defsha3(512)

View File

@@ -0,0 +1,31 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "compiler.h"
#include <stdint.h>
#include <stdlib.h>
struct ethash_h256;
#define decsha3(bits) \
int sha3_##bits(uint8_t*, size_t, uint8_t const*, size_t);
decsha3(256)
decsha3(512)
static inline void SHA3_256(struct ethash_h256 const* ret, uint8_t const* data, size_t const size)
{
sha3_256((uint8_t*)ret, 32, data, size);
}
static inline void SHA3_512(uint8_t* ret, uint8_t const* data, size_t const size)
{
sha3_512(ret, 64, data, size);
}
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,37 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file sha3.cpp
* @author Tim Hughes <tim@twistedfury.com>
* @date 2015
*/
#include <stdint.h>
#include <cryptopp/sha3.h>
extern "C" {
struct ethash_h256;
typedef struct ethash_h256 ethash_h256_t;
void SHA3_256(ethash_h256_t const* ret, uint8_t const* data, size_t size)
{
CryptoPP::SHA3_256().CalculateDigest((uint8_t*)ret, data, size);
}
void SHA3_512(uint8_t* const ret, uint8_t const* data, size_t size)
{
CryptoPP::SHA3_512().CalculateDigest(ret, data, size);
}
}

View File

@@ -0,0 +1,18 @@
#pragma once
#include "compiler.h"
#include <stdint.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
struct ethash_h256;
void SHA3_256(struct ethash_h256 const* ret, uint8_t const* data, size_t size);
void SHA3_512(uint8_t* const ret, uint8_t const* data, size_t size);
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,47 @@
/*
This file is part of ethash.
ethash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethash 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with ethash. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file util.h
* @author Tim Hughes <tim@twistedfury.com>
* @date 2015
*/
#pragma once
#include <stdint.h>
#include "compiler.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _MSC_VER
void debugf(char const* str, ...);
#else
#define debugf printf
#endif
static inline uint32_t min_u32(uint32_t a, uint32_t b)
{
return a < b ? a : b;
}
static inline uint32_t clamp_u32(uint32_t x, uint32_t min_, uint32_t max_)
{
return x < min_ ? min_ : (x > max_ ? max_ : x);
}
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,38 @@
/*
This file is part of cpp-ethereum.
cpp-ethereum is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
cpp-ethereum 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file util.c
* @author Tim Hughes <tim@twistedfury.com>
* @date 2015
*/
#include <stdarg.h>
#include <stdio.h>
#include "util.h"
// foward declare without all of Windows.h
__declspec(dllimport) void __stdcall OutputDebugStringA(char const* lpOutputString);
void debugf(char const* str, ...)
{
va_list args;
va_start(args, str);
char buf[1<<16];
_vsnprintf_s(buf, sizeof(buf), sizeof(buf), str, args);
buf[sizeof(buf)-1] = '\0';
OutputDebugStringA(buf);
}

View File

@@ -0,0 +1,3 @@
language: go
go: 1.3

View File

@@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2013 Fatih Arslan
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

151
Godeps/_workspace/src/github.com/fatih/color/README.md generated vendored Normal file
View File

@@ -0,0 +1,151 @@
# Color [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/fatih/color) [![Build Status](http://img.shields.io/travis/fatih/color.svg?style=flat-square)](https://travis-ci.org/fatih/color)
Color lets you use colorized outputs in terms of [ANSI Escape Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It has support for Windows too! The API can be used in several ways, pick one that suits you.
![Color](http://i.imgur.com/c1JI0lA.png)
## Install
```bash
go get github.com/fatih/color
```
## Examples
### Standard colors
```go
// Print with default helper functions
color.Cyan("Prints text in cyan.")
// A newline will be appended automatically
color.Blue("Prints %s in blue.", "text")
// These are using the default foreground colors
color.Red("We have red")
color.Magenta("And many others ..")
```
### Mix and reuse colors
```go
// Create a new color object
c := color.New(color.FgCyan).Add(color.Underline)
c.Println("Prints cyan text with an underline.")
// Or just add them to New()
d := color.New(color.FgCyan, color.Bold)
d.Printf("This prints bold cyan %s\n", "too!.")
// Mix up foreground and background colors, create new mixes!
red := color.New(color.FgRed)
boldRed := red.Add(color.Bold)
boldRed.Println("This will print text in bold red.")
whiteBackground := red.Add(color.BgWhite)
whiteBackground.Println("Red text with white background.")
```
### Custom print functions (PrintFunc)
```go
// Create a custom print function for convenience
red := color.New(color.FgRed).PrintfFunc()
red("Warning")
red("Error: %s", err)
// Mix up multiple attributes
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
notice("Don't forget this...")
```
### Insert into noncolor strings (SprintFunc)
```go
// Create SprintXxx functions to mix strings with other non-colorized strings:
yellow := color.New(color.FgYellow).SprintFunc()
red := color.New(color.FgRed).SprintFunc()
fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error"))
info := color.New(color.FgWhite, color.BgGreen).SprintFunc()
fmt.Printf("This %s rocks!\n", info("package"))
// Use helper functions
fmt.Printf("This", color.RedString("warning"), "should be not neglected.")
fmt.Printf(color.GreenString("Info:"), "an important message." )
// Windows supported too! Just don't forget to change the output to color.Output
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
```
### Plug into existing code
```go
// Use handy standard colors
color.Set(color.FgYellow)
fmt.Println("Existing text will now be in yellow")
fmt.Printf("This one %s\n", "too")
color.Unset() // Don't forget to unset
// You can mix up parameters
color.Set(color.FgMagenta, color.Bold)
defer color.Unset() // Use it in your function
fmt.Println("All text will now be bold magenta.")
```
### Disable color
There might be a case where you want to disable color output (for example to
pipe the standard output of your app to somewhere else). `Color` has support to
disable colors both globally and for single color definition. For example
suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
the color output with:
```go
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
if *flagNoColor {
color.NoColor = true // disables colorized output
}
```
It also has support for single color definitions (local). You can
disable/enable color output on the fly:
```go
c := color.New(color.FgCyan)
c.Println("Prints cyan text")
c.DisableColor()
c.Println("This is printed without any color")
c.EnableColor()
c.Println("This prints again cyan...")
```
## Todo
* Save/Return previous values
* Evaluate fmt.Formatter interface
## Credits
* [Fatih Arslan](https://github.com/fatih)
* Windows support via @shiena: [ansicolor](https://github.com/shiena/ansicolor)
## License
The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details

402
Godeps/_workspace/src/github.com/fatih/color/color.go generated vendored Normal file
View File

@@ -0,0 +1,402 @@
package color
import (
"fmt"
"os"
"strconv"
"strings"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
)
// NoColor defines if the output is colorized or not. It's dynamically set to
// false or true based on the stdout's file descriptor referring to a terminal
// or not. This is a global option and affects all colors. For more control
// over each color block use the methods DisableColor() individually.
var NoColor = !isatty.IsTerminal(os.Stdout.Fd())
// Color defines a custom color object which is defined by SGR parameters.
type Color struct {
params []Attribute
noColor *bool
}
// Attribute defines a single SGR Code
type Attribute int
const escape = "\x1b"
// Base attributes
const (
Reset Attribute = iota
Bold
Faint
Italic
Underline
BlinkSlow
BlinkRapid
ReverseVideo
Concealed
CrossedOut
)
// Foreground text colors
const (
FgBlack Attribute = iota + 30
FgRed
FgGreen
FgYellow
FgBlue
FgMagenta
FgCyan
FgWhite
)
// Foreground Hi-Intensity text colors
const (
FgHiBlack Attribute = iota + 90
FgHiRed
FgHiGreen
FgHiYellow
FgHiBlue
FgHiMagenta
FgHiCyan
FgHiWhite
)
// Background text colors
const (
BgBlack Attribute = iota + 40
BgRed
BgGreen
BgYellow
BgBlue
BgMagenta
BgCyan
BgWhite
)
// Background Hi-Intensity text colors
const (
BgHiBlack Attribute = iota + 100
BgHiRed
BgHiGreen
BgHiYellow
BgHiBlue
BgHiMagenta
BgHiCyan
BgHiWhite
)
// New returns a newly created color object.
func New(value ...Attribute) *Color {
c := &Color{params: make([]Attribute, 0)}
c.Add(value...)
return c
}
// Set sets the given parameters immediately. It will change the color of
// output with the given SGR parameters until color.Unset() is called.
func Set(p ...Attribute) *Color {
c := New(p...)
c.Set()
return c
}
// Unset resets all escape attributes and clears the output. Usually should
// be called after Set().
func Unset() {
if NoColor {
return
}
fmt.Fprintf(Output, "%s[%dm", escape, Reset)
}
// Set sets the SGR sequence.
func (c *Color) Set() *Color {
if c.isNoColorSet() {
return c
}
fmt.Fprintf(Output, c.format())
return c
}
func (c *Color) unset() {
if c.isNoColorSet() {
return
}
Unset()
}
// Add is used to chain SGR parameters. Use as many as parameters to combine
// and create custom color objects. Example: Add(color.FgRed, color.Underline).
func (c *Color) Add(value ...Attribute) *Color {
c.params = append(c.params, value...)
return c
}
func (c *Color) prepend(value Attribute) {
c.params = append(c.params, 0)
copy(c.params[1:], c.params[0:])
c.params[0] = value
}
// Output defines the standard output of the print functions. By default
// os.Stdout is used.
var Output = colorable.NewColorableStdout()
// Print formats using the default formats for its operands and writes to
// standard output. Spaces are added between operands when neither is a
// string. It returns the number of bytes written and any write error
// encountered. This is the standard fmt.Print() method wrapped with the given
// color.
func (c *Color) Print(a ...interface{}) (n int, err error) {
c.Set()
defer c.unset()
return fmt.Fprint(Output, a...)
}
// Printf formats according to a format specifier and writes to standard output.
// It returns the number of bytes written and any write error encountered.
// This is the standard fmt.Printf() method wrapped with the given color.
func (c *Color) Printf(format string, a ...interface{}) (n int, err error) {
c.Set()
defer c.unset()
return fmt.Fprintf(Output, format, a...)
}
// Println formats using the default formats for its operands and writes to
// standard output. Spaces are always added between operands and a newline is
// appended. It returns the number of bytes written and any write error
// encountered. This is the standard fmt.Print() method wrapped with the given
// color.
func (c *Color) Println(a ...interface{}) (n int, err error) {
c.Set()
defer c.unset()
return fmt.Fprintln(Output, a...)
}
// PrintFunc returns a new function that prints the passed arguments as
// colorized with color.Print().
func (c *Color) PrintFunc() func(a ...interface{}) {
return func(a ...interface{}) { c.Print(a...) }
}
// PrintfFunc returns a new function that prints the passed arguments as
// colorized with color.Printf().
func (c *Color) PrintfFunc() func(format string, a ...interface{}) {
return func(format string, a ...interface{}) { c.Printf(format, a...) }
}
// PrintlnFunc returns a new function that prints the passed arguments as
// colorized with color.Println().
func (c *Color) PrintlnFunc() func(a ...interface{}) {
return func(a ...interface{}) { c.Println(a...) }
}
// SprintFunc returns a new function that returns colorized strings for the
// given arguments with fmt.Sprint(). Useful to put into or mix into other
// string. Windows users should use this in conjuction with color.Output, example:
//
// put := New(FgYellow).SprintFunc()
// fmt.Fprintf(color.Output, "This is a %s", put("warning"))
func (c *Color) SprintFunc() func(a ...interface{}) string {
return func(a ...interface{}) string {
return c.wrap(fmt.Sprint(a...))
}
}
// SprintfFunc returns a new function that returns colorized strings for the
// given arguments with fmt.Sprintf(). Useful to put into or mix into other
// string. Windows users should use this in conjuction with color.Output.
func (c *Color) SprintfFunc() func(format string, a ...interface{}) string {
return func(format string, a ...interface{}) string {
return c.wrap(fmt.Sprintf(format, a...))
}
}
// SprintlnFunc returns a new function that returns colorized strings for the
// given arguments with fmt.Sprintln(). Useful to put into or mix into other
// string. Windows users should use this in conjuction with color.Output.
func (c *Color) SprintlnFunc() func(a ...interface{}) string {
return func(a ...interface{}) string {
return c.wrap(fmt.Sprintln(a...))
}
}
// sequence returns a formated SGR sequence to be plugged into a "\x1b[...m"
// an example output might be: "1;36" -> bold cyan
func (c *Color) sequence() string {
format := make([]string, len(c.params))
for i, v := range c.params {
format[i] = strconv.Itoa(int(v))
}
return strings.Join(format, ";")
}
// wrap wraps the s string with the colors attributes. The string is ready to
// be printed.
func (c *Color) wrap(s string) string {
if c.isNoColorSet() {
return s
}
return c.format() + s + c.unformat()
}
func (c *Color) format() string {
return fmt.Sprintf("%s[%sm", escape, c.sequence())
}
func (c *Color) unformat() string {
return fmt.Sprintf("%s[%dm", escape, Reset)
}
// DisableColor disables the color output. Useful to not change any existing
// code and still being able to output. Can be used for flags like
// "--no-color". To enable back use EnableColor() method.
func (c *Color) DisableColor() {
c.noColor = boolPtr(true)
}
// EnableColor enables the color output. Use it in conjuction with
// DisableColor(). Otherwise this method has no side effects.
func (c *Color) EnableColor() {
c.noColor = boolPtr(false)
}
func (c *Color) isNoColorSet() bool {
// check first if we have user setted action
if c.noColor != nil {
return *c.noColor
}
// if not return the global option, which is disabled by default
return NoColor
}
// Equals returns a boolean value indicating whether two colors are equal.
func (c *Color) Equals(c2 *Color) bool {
if len(c.params) != len(c2.params) {
return false
}
for _, attr := range c.params {
if !c2.attrExists(attr) {
return false
}
}
return true
}
func (c *Color) attrExists(a Attribute) bool {
for _, attr := range c.params {
if attr == a {
return true
}
}
return false
}
func boolPtr(v bool) *bool {
return &v
}
// Black is an convenient helper function to print with black foreground. A
// newline is appended to format by default.
func Black(format string, a ...interface{}) { printColor(format, FgBlack, a...) }
// Red is an convenient helper function to print with red foreground. A
// newline is appended to format by default.
func Red(format string, a ...interface{}) { printColor(format, FgRed, a...) }
// Green is an convenient helper function to print with green foreground. A
// newline is appended to format by default.
func Green(format string, a ...interface{}) { printColor(format, FgGreen, a...) }
// Yellow is an convenient helper function to print with yellow foreground.
// A newline is appended to format by default.
func Yellow(format string, a ...interface{}) { printColor(format, FgYellow, a...) }
// Blue is an convenient helper function to print with blue foreground. A
// newline is appended to format by default.
func Blue(format string, a ...interface{}) { printColor(format, FgBlue, a...) }
// Magenta is an convenient helper function to print with magenta foreground.
// A newline is appended to format by default.
func Magenta(format string, a ...interface{}) { printColor(format, FgMagenta, a...) }
// Cyan is an convenient helper function to print with cyan foreground. A
// newline is appended to format by default.
func Cyan(format string, a ...interface{}) { printColor(format, FgCyan, a...) }
// White is an convenient helper function to print with white foreground. A
// newline is appended to format by default.
func White(format string, a ...interface{}) { printColor(format, FgWhite, a...) }
func printColor(format string, p Attribute, a ...interface{}) {
if !strings.HasSuffix(format, "\n") {
format += "\n"
}
c := &Color{params: []Attribute{p}}
c.Printf(format, a...)
}
// BlackString is an convenient helper function to return a string with black
// foreground.
func BlackString(format string, a ...interface{}) string {
return New(FgBlack).SprintfFunc()(format, a...)
}
// RedString is an convenient helper function to return a string with red
// foreground.
func RedString(format string, a ...interface{}) string {
return New(FgRed).SprintfFunc()(format, a...)
}
// GreenString is an convenient helper function to return a string with green
// foreground.
func GreenString(format string, a ...interface{}) string {
return New(FgGreen).SprintfFunc()(format, a...)
}
// YellowString is an convenient helper function to return a string with yellow
// foreground.
func YellowString(format string, a ...interface{}) string {
return New(FgYellow).SprintfFunc()(format, a...)
}
// BlueString is an convenient helper function to return a string with blue
// foreground.
func BlueString(format string, a ...interface{}) string {
return New(FgBlue).SprintfFunc()(format, a...)
}
// MagentaString is an convenient helper function to return a string with magenta
// foreground.
func MagentaString(format string, a ...interface{}) string {
return New(FgMagenta).SprintfFunc()(format, a...)
}
// CyanString is an convenient helper function to return a string with cyan
// foreground.
func CyanString(format string, a ...interface{}) string {
return New(FgCyan).SprintfFunc()(format, a...)
}
// WhiteString is an convenient helper function to return a string with white
// foreground.
func WhiteString(format string, a ...interface{}) string {
return New(FgWhite).SprintfFunc()(format, a...)
}

114
Godeps/_workspace/src/github.com/fatih/color/doc.go generated vendored Normal file
View File

@@ -0,0 +1,114 @@
/*
Package color is an ANSI color package to output colorized or SGR defined
output to the standard output. The API can be used in several way, pick one
that suits you.
Use simple and default helper functions with predefined foreground colors:
color.Cyan("Prints text in cyan.")
// a newline will be appended automatically
color.Blue("Prints %s in blue.", "text")
// More default foreground colors..
color.Red("We have red")
color.Yellow("Yellow color too!")
color.Magenta("And many others ..")
However there are times where custom color mixes are required. Below are some
examples to create custom color objects and use the print functions of each
separate color object.
// Create a new color object
c := color.New(color.FgCyan).Add(color.Underline)
c.Println("Prints cyan text with an underline.")
// Or just add them to New()
d := color.New(color.FgCyan, color.Bold)
d.Printf("This prints bold cyan %s\n", "too!.")
// Mix up foreground and background colors, create new mixes!
red := color.New(color.FgRed)
boldRed := red.Add(color.Bold)
boldRed.Println("This will print text in bold red.")
whiteBackground := red.Add(color.BgWhite)
whiteBackground.Println("Red text with White background.")
You can create PrintXxx functions to simplify even more:
// Create a custom print function for convenient
red := color.New(color.FgRed).PrintfFunc()
red("warning")
red("error: %s", err)
// Mix up multiple attributes
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
notice("don't forget this...")
Or create SprintXxx functions to mix strings with other non-colorized strings:
yellow := New(FgYellow).SprintFunc()
red := New(FgRed).SprintFunc()
fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error"))
info := New(FgWhite, BgGreen).SprintFunc()
fmt.Printf("this %s rocks!\n", info("package"))
Windows support is enabled by default. All Print functions works as intended.
However only for color.SprintXXX functions, user should use fmt.FprintXXX and
set the output to color.Output:
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
info := New(FgWhite, BgGreen).SprintFunc()
fmt.Fprintf(color.Output, "this %s rocks!\n", info("package"))
Using with existing code is possible. Just use the Set() method to set the
standard output to the given parameters. That way a rewrite of an existing
code is not required.
// Use handy standard colors.
color.Set(color.FgYellow)
fmt.Println("Existing text will be now in Yellow")
fmt.Printf("This one %s\n", "too")
color.Unset() // don't forget to unset
// You can mix up parameters
color.Set(color.FgMagenta, color.Bold)
defer color.Unset() // use it in your function
fmt.Println("All text will be now bold magenta.")
There might be a case where you want to disable color output (for example to
pipe the standard output of your app to somewhere else). `Color` has support to
disable colors both globally and for single color definition. For example
suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
the color output with:
var flagNoColor = flag.Bool("no-color", false, "Disable color output")
if *flagNoColor {
color.NoColor = true // disables colorized output
}
It also has support for single color definitions (local). You can
disable/enable color output on the fly:
c := color.New(color.FgCyan)
c.Println("Prints cyan text")
c.DisableColor()
c.Println("This is printed without any color")
c.EnableColor()
c.Println("This prints again cyan...")
*/
package color

View File

@@ -0,0 +1,25 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof
.DS_Store

View File

@@ -0,0 +1,6 @@
language: go
go:
- tip
script: go test -v ./

22
Godeps/_workspace/src/github.com/gizak/termui/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 Zack Guo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

148
Godeps/_workspace/src/github.com/gizak/termui/README.md generated vendored Normal file
View File

@@ -0,0 +1,148 @@
# termui [![Build Status](https://travis-ci.org/gizak/termui.svg?branch=master)](https://travis-ci.org/gizak/termui) [![Doc Status](https://godoc.org/github.com/gizak/termui?status.png)](https://godoc.org/github.com/gizak/termui)
<img src="./_example/dashboard.gif" alt="demo cast under osx 10.10; Terminal.app; Menlo Regular 12pt.)" width="80%">
`termui` is a cross-platform, easy-to-compile, and fully-customizable terminal dashboard. It is inspired by [blessed-contrib](https://github.com/yaronn/blessed-contrib), but purely in Go.
Now version v2 has arrived! It brings new event system, new theme system, new `Buffer` interface and specific colour text rendering. (some docs are missing, but it will be completed soon!)
## Installation
`master` mirrors v2 branch, to install:
go get -u github.com/gizak/termui
For the compatible reason, you can choose to install the legacy version of `termui`:
go get gopkg.in/gizak/termui.v1
## Usage
### Layout
To use `termui`, the very first thing you may want to know is how to manage layout. `termui` offers two ways of doing this, known as absolute layout and grid layout.
__Absolute layout__
Each widget has an underlying block structure which basically is a box model. It has border, label and padding properties. A border of a widget can be chosen to hide or display (with its border label), you can pick a different front/back colour for the border as well. To display such a widget at a specific location in terminal window, you need to assign `.X`, `.Y`, `.Height`, `.Width` values for each widget before send it to `.Render`. Let's demonstrate these by a code snippet:
`````go
import ui "github.com/gizak/termui" // <- ui shortcut, optional
func main() {
err := ui.Init()
if err != nil {
panic(err)
}
defer ui.Close()
p := ui.NewPar(":PRESS q TO QUIT DEMO")
p.Height = 3
p.Width = 50
p.TextFgColor = ui.ColorWhite
p.BorderLabel = "Text Box"
p.BorderFg = ui.ColorCyan
g := ui.NewGauge()
g.Percent = 50
g.Width = 50
g.Height = 3
g.Y = 11
g.BorderLabel = "Gauge"
g.BarColor = ui.ColorRed
g.BorderFg = ui.ColorWhite
g.BorderLabelFg = ui.ColorCyan
ui.Render(p, g) // feel free to call Render, it's async and non-block
// event handler...
}
`````
Note that components can be overlapped (I'd rather call this a feature...), `Render(rs ...Renderer)` renders its args from left to right (i.e. each component's weight is arising from left to right).
__Grid layout:__
<img src="./_example/grid.gif" alt="grid" width="60%">
Grid layout uses [12 columns grid system](http://www.w3schools.com/bootstrap/bootstrap_grid_system.asp) with expressive syntax. To use `Grid`, all we need to do is build a widget tree consisting of `Row`s and Cols (Actually a Col is also a `Row` but with a widget endpoint attached).
```go
import ui "github.com/gizak/termui"
// init and create widgets...
// build
ui.Body.AddRows(
ui.NewRow(
ui.NewCol(6, 0, widget0),
ui.NewCol(6, 0, widget1)),
ui.NewRow(
ui.NewCol(3, 0, widget2),
ui.NewCol(3, 0, widget30, widget31, widget32),
ui.NewCol(6, 0, widget4)))
// calculate layout
ui.Body.Align()
ui.Render(ui.Body)
```
### Events
`termui` ships with a http-like event mux handling system. All events are channeled up from different sources (typing, click, windows resize, custom event) and then encoded as universal `Event` object. `Event.Path` indicates the event type and `Event.Data` stores the event data struct. Add a handler to a certain event is easy as below:
```go
// handle key q pressing
ui.Handle("/sys/kbd/q", func(ui.Event) {
// press q to quit
ui.StopLoop()
})
ui.Handle("/sys/kbd/C-x", func(ui.Event) {
// handle Ctrl + x combination
})
ui.Handle("/sys/kbd", func(ui.Event) {
// handle all other key pressing
})
// handle a 1s timer
ui.Handle("/timer/1s", func(e ui.Event) {
t := e.Data.(ui.EvtTimer)
// t is a EvtTimer
if t.Count%2 ==0 {
// do something
}
})
ui.Loop() // block until StopLoop is called
```
### Widgets
Click image to see the corresponding demo codes.
[<img src="./_example/par.png" alt="par" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/par.go)
[<img src="./_example/list.png" alt="list" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/list.go)
[<img src="./_example/gauge.png" alt="gauge" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/gauge.go)
[<img src="./_example/linechart.png" alt="linechart" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/linechart.go)
[<img src="./_example/barchart.png" alt="barchart" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/barchart.go)
[<img src="./_example/mbarchart.png" alt="barchart" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/mbarchart.go)
[<img src="./_example/sparklines.png" alt="sparklines" type="image/png" width="45%">](https://github.com/gizak/termui/blob/master/_example/sparklines.go)
## GoDoc
[godoc](https://godoc.org/github.com/gizak/termui)
## TODO
- [x] Grid layout
- [x] Event system
- [x] Canvas widget
- [x] Refine APIs
- [ ] Focusable widgets
## Changelog
## License
This library is under the [MIT License](http://opensource.org/licenses/MIT)

Some files were not shown because too many files have changed in this diff Show More