V2.5.12 stable (#11336)
* Enable EIP-2384 for ice age hard fork (#11281) * ethcore/res: activate agharta on classic 9573000 (#11331) * Istanbul HF in xDai (2019-12-12) (#11299) * Istanbul HF in POA Core (2019-12-19) (#11298) * Istanbul HF in POA Sokol (2019-12-05) (#11282) * Activate ecip-1061 on kotti and mordor (#11338) * Enable basic verification of local transactions (#11332) * Disallow EIP-86 style null signatures for transactions outside tests (#11335)
This commit is contained in:
parent
fc129b4a26
commit
29ebddc64f
17
CHANGELOG.md
17
CHANGELOG.md
@ -1,3 +1,20 @@
|
|||||||
|
## Parity-Ethereum [v2.5.12](https://github.com/paritytech/parity-ethereum/releases/tag/v2.5.12)
|
||||||
|
|
||||||
|
Parity Ethereum v2.5.12-stable is a patch release that adds Istanbul hardfork
|
||||||
|
block numbers for POA and xDai networks, implements ECIP-1056 and implements
|
||||||
|
EIP-2384/2387 - Muir Glacier.
|
||||||
|
|
||||||
|
The full list of included changes:
|
||||||
|
* Enable EIP-2384 for ice age hard fork (#11281)
|
||||||
|
* ethcore/res: activate agharta on classic 9573000 (#11331)
|
||||||
|
* Istanbul HF in xDai (2019-12-12) (#11299)
|
||||||
|
* Istanbul HF in POA Core (2019-12-19) (#11298)
|
||||||
|
* Istanbul HF in POA Sokol (2019-12-05) (#11282)
|
||||||
|
* Activate ecip-1061 on kotti and mordor (#11338)
|
||||||
|
* Enable basic verification of local transactions (#11332)
|
||||||
|
* Disallow EIP-86 style null signatures for transactions outside tests (#11335)
|
||||||
|
|
||||||
|
|
||||||
## Parity-Ethereum [v2.5.11](https://github.com/paritytech/parity-ethereum/releases/tag/v2.5.11)
|
## Parity-Ethereum [v2.5.11](https://github.com/paritytech/parity-ethereum/releases/tag/v2.5.11)
|
||||||
|
|
||||||
Parity Ethereum v2.5.11-stable is an emergency patch release that adds the missing
|
Parity Ethereum v2.5.11-stable is an emergency patch release that adds the missing
|
||||||
|
12
Cargo.lock
generated
12
Cargo.lock
generated
@ -2726,7 +2726,7 @@ dependencies = [
|
|||||||
"futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
|
"futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"jni 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"jni 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"panic_hook 0.1.0",
|
"panic_hook 0.1.0",
|
||||||
"parity-ethereum 2.5.11",
|
"parity-ethereum 2.5.12",
|
||||||
"tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
@ -2783,7 +2783,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-ethereum"
|
name = "parity-ethereum"
|
||||||
version = "2.5.11"
|
version = "2.5.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
"atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2836,7 +2836,7 @@ dependencies = [
|
|||||||
"parity-rpc 1.12.0",
|
"parity-rpc 1.12.0",
|
||||||
"parity-runtime 0.1.0",
|
"parity-runtime 0.1.0",
|
||||||
"parity-updater 1.12.0",
|
"parity-updater 1.12.0",
|
||||||
"parity-version 2.5.11",
|
"parity-version 2.5.12",
|
||||||
"parity-whisper 0.1.0",
|
"parity-whisper 0.1.0",
|
||||||
"parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2982,7 +2982,7 @@ dependencies = [
|
|||||||
"parity-crypto 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parity-crypto 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-runtime 0.1.0",
|
"parity-runtime 0.1.0",
|
||||||
"parity-updater 1.12.0",
|
"parity-updater 1.12.0",
|
||||||
"parity-version 2.5.11",
|
"parity-version 2.5.12",
|
||||||
"parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -3080,7 +3080,7 @@ dependencies = [
|
|||||||
"parity-bytes 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parity-bytes 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-hash-fetch 1.12.0",
|
"parity-hash-fetch 1.12.0",
|
||||||
"parity-path 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parity-path 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-version 2.5.11",
|
"parity-version 2.5.12",
|
||||||
"parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -3090,7 +3090,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-version"
|
name = "parity-version"
|
||||||
version = "2.5.11"
|
version = "2.5.12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"parity-bytes 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parity-bytes 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rlp 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rlp 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
description = "Parity Ethereum client"
|
description = "Parity Ethereum client"
|
||||||
name = "parity-ethereum"
|
name = "parity-ethereum"
|
||||||
# NOTE Make sure to update util/version/Cargo.toml as well
|
# NOTE Make sure to update util/version/Cargo.toml as well
|
||||||
version = "2.5.11"
|
version = "2.5.12"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Parity Technologies <admin@parity.io>"]
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
|
|
||||||
|
@ -37,7 +37,10 @@
|
|||||||
"eip140Transition": "0x85d9a0",
|
"eip140Transition": "0x85d9a0",
|
||||||
"eip211Transition": "0x85d9a0",
|
"eip211Transition": "0x85d9a0",
|
||||||
"eip214Transition": "0x85d9a0",
|
"eip214Transition": "0x85d9a0",
|
||||||
"eip658Transition": "0x85d9a0"
|
"eip658Transition": "0x85d9a0",
|
||||||
|
"eip145Transition": "0x921288",
|
||||||
|
"eip1014Transition": "0x921288",
|
||||||
|
"eip1052Transition": "0x921288"
|
||||||
},
|
},
|
||||||
"genesis": {
|
"genesis": {
|
||||||
"seal": {
|
"seal": {
|
||||||
|
@ -136,7 +136,8 @@
|
|||||||
"eip100bTransition": "0x42ae50",
|
"eip100bTransition": "0x42ae50",
|
||||||
"difficultyBombDelays": {
|
"difficultyBombDelays": {
|
||||||
"0x42ae50": "0x2dc6c0",
|
"0x42ae50": "0x2dc6c0",
|
||||||
"0x6f1580": "0x1e8480"
|
"0x6f1580": "0x1e8480",
|
||||||
|
"0x8c6180": "0x3d0900"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,10 @@
|
|||||||
"eip658Transition": "0xaef49",
|
"eip658Transition": "0xaef49",
|
||||||
"eip1014Transition": "0x1a064d",
|
"eip1014Transition": "0x1a064d",
|
||||||
"eip1052Transition": "0x1a064d",
|
"eip1052Transition": "0x1a064d",
|
||||||
|
"eip1283Transition": "0x1f67cf",
|
||||||
|
"eip1344Transition": "0x1f67cf",
|
||||||
|
"eip1706Transition": "0x1f67cf",
|
||||||
|
"eip2028Transition": "0x1f67cf",
|
||||||
"gasLimitBoundDivisor": "0x400",
|
"gasLimitBoundDivisor": "0x400",
|
||||||
"maxCodeSize": "0x6000",
|
"maxCodeSize": "0x6000",
|
||||||
"maxCodeSizeTransition": "0xaef49",
|
"maxCodeSizeTransition": "0xaef49",
|
||||||
@ -123,7 +127,7 @@
|
|||||||
"0xaef49": {
|
"0xaef49": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"0x1f67cf": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
||||||
}
|
}
|
||||||
@ -138,7 +142,7 @@
|
|||||||
"0xaef49": {
|
"0xaef49": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"0x1f67cf": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
||||||
}
|
}
|
||||||
@ -153,7 +157,7 @@
|
|||||||
"0xaef49": {
|
"0xaef49": {
|
||||||
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"0x1f67cf": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
||||||
}
|
}
|
||||||
@ -161,7 +165,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"0x0000000000000000000000000000000000000009": {
|
"0x0000000000000000000000000000000000000009": {
|
||||||
"balance": "0x1"
|
"balance": "0x1",
|
||||||
|
"builtin": {
|
||||||
|
"name": "blake2_f",
|
||||||
|
"activate_at": "0x1f67cf",
|
||||||
|
"pricing": {
|
||||||
|
"blake2_f": {
|
||||||
|
"gas_per_round": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"0x000000000000000000000000000000000000000a": {
|
"0x000000000000000000000000000000000000000a": {
|
||||||
"balance": "0x1"
|
"balance": "0x1"
|
||||||
|
@ -37,7 +37,11 @@
|
|||||||
"eip658Transition":"0x0",
|
"eip658Transition":"0x0",
|
||||||
"eip145Transition":"0x498bb",
|
"eip145Transition":"0x498bb",
|
||||||
"eip1014Transition":"0x498bb",
|
"eip1014Transition":"0x498bb",
|
||||||
"eip1052Transition":"0x498bb"
|
"eip1052Transition":"0x498bb",
|
||||||
|
"eip1283Transition":"0xbe10b",
|
||||||
|
"eip1344Transition":"0xbe10b",
|
||||||
|
"eip1706Transition":"0xbe10b",
|
||||||
|
"eip2028Transition":"0xbe10b"
|
||||||
},
|
},
|
||||||
"genesis":{
|
"genesis":{
|
||||||
"seal":{
|
"seal":{
|
||||||
@ -59,7 +63,9 @@
|
|||||||
"enode://1813e90a0afdd7c1e4892c5376960e3577a9e6c5a4f86fa405a405c7421a4a1608248d77cc90333842f13d8954d82113dec480cfb76b4fef8cb475157cf4d5f2@10.28.224.3:30000",
|
"enode://1813e90a0afdd7c1e4892c5376960e3577a9e6c5a4f86fa405a405c7421a4a1608248d77cc90333842f13d8954d82113dec480cfb76b4fef8cb475157cf4d5f2@10.28.224.3:30000",
|
||||||
"enode://2b69a3926f36a7748c9021c34050be5e0b64346225e477fe7377070f6289bd363b2be73a06010fd516e6ea3ee90778dd0399bc007bb1281923a79374f842675a@51.15.116.226:30303",
|
"enode://2b69a3926f36a7748c9021c34050be5e0b64346225e477fe7377070f6289bd363b2be73a06010fd516e6ea3ee90778dd0399bc007bb1281923a79374f842675a@51.15.116.226:30303",
|
||||||
"enode://621e28e529146fd501709194885f50540c494f1a2985d1fb4ec8769226b5cb0b0d1a11545926077821474c2767cdd87888ead8a2509a2c9069dd5584e4b1c3b8@10.28.223.8:30000",
|
"enode://621e28e529146fd501709194885f50540c494f1a2985d1fb4ec8769226b5cb0b0d1a11545926077821474c2767cdd87888ead8a2509a2c9069dd5584e4b1c3b8@10.28.223.8:30000",
|
||||||
"enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.116.226:30303"
|
"enode://a59e33ccd2b3e52d578f1fbd70c6f9babda2650f0760d6ff3b37742fdcdfdb3defba5d56d315b40c46b70198c7621e63ffa3f987389c7118634b0fefbbdfa7fd@51.15.116.226:30303",
|
||||||
|
"enode://f840b007500f50c98ea6f9c9e56dabf4690bbbbb7036d43682c531204341aff8315013547e5bee54117eb22bd3603585ae6bf713d9fa710659533fcab65d5b84@35.238.101.58:30000",
|
||||||
|
"enode://19eda672030ad5debb98c9069b3e99d12438b96506325d9f3f82d76c5f8ce4942d345f41700a5223900e75ad48e76713b74c1b694d67a10c2112540035922256@35.238.101.58:30000"
|
||||||
],
|
],
|
||||||
"accounts":{
|
"accounts":{
|
||||||
"0x0000000000000000000000000000000000000001":{
|
"0x0000000000000000000000000000000000000001":{
|
||||||
@ -128,7 +134,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff":{
|
"0xbe10b":{
|
||||||
"info":"EIP 1108 transition",
|
"info":"EIP 1108 transition",
|
||||||
"price":{
|
"price":{
|
||||||
"alt_bn128_const_operations":{
|
"alt_bn128_const_operations":{
|
||||||
@ -150,7 +156,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff":{
|
"0xbe10b":{
|
||||||
"info":"EIP 1108 transition",
|
"info":"EIP 1108 transition",
|
||||||
"price":{
|
"price":{
|
||||||
"alt_bn128_const_operations":{
|
"alt_bn128_const_operations":{
|
||||||
@ -173,7 +179,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff":{
|
"0xbe10b":{
|
||||||
"info":"EIP 1108 transition",
|
"info":"EIP 1108 transition",
|
||||||
"price":{
|
"price":{
|
||||||
"alt_bn128_pairing":{
|
"alt_bn128_pairing":{
|
||||||
@ -184,6 +190,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"0x0000000000000000000000000000000000000009": {
|
||||||
|
"builtin": {
|
||||||
|
"name": "blake2_f",
|
||||||
|
"activate_at": "0xbe10b",
|
||||||
|
"pricing": {
|
||||||
|
"blake2_f": {
|
||||||
|
"gas_per_round": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,12 @@
|
|||||||
"eip658Transition": "0x0",
|
"eip658Transition": "0x0",
|
||||||
"eip145Transition": 8582254,
|
"eip145Transition": 8582254,
|
||||||
"eip1014Transition": 8582254,
|
"eip1014Transition": 8582254,
|
||||||
"eip1052Transition": 8582254
|
"eip1052Transition": 8582254,
|
||||||
|
"eip1283Transition": 12598600,
|
||||||
|
"eip1344Transition": 12598600,
|
||||||
|
"eip1706Transition": 12598600,
|
||||||
|
"eip1884Transition": 12598600,
|
||||||
|
"eip2028Transition": 12598600
|
||||||
},
|
},
|
||||||
"genesis": {
|
"genesis": {
|
||||||
"seal": {
|
"seal": {
|
||||||
@ -58,57 +63,89 @@
|
|||||||
"enode://96678da10ac83769ab3f63114a41b57b700476c5ac02719b878fa89909a936551bb7609aa09b068bf89903206fa03f23e1b5b9117ca278de304c2570b87dcb27@35.175.15.164:30303"
|
"enode://96678da10ac83769ab3f63114a41b57b700476c5ac02719b878fa89909a936551bb7609aa09b068bf89903206fa03f23e1b5b9117ca278de304c2570b87dcb27@35.175.15.164:30303"
|
||||||
],
|
],
|
||||||
"accounts": {
|
"accounts": {
|
||||||
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x0", "pricing": { "modexp": { "divisor": 20 } } } },
|
"0x0000000000000000000000000000000000000005": {
|
||||||
"0000000000000000000000000000000000000006": {
|
"builtin": {
|
||||||
|
"name": "modexp",
|
||||||
|
"pricing": {
|
||||||
|
"0": {
|
||||||
|
"price": {
|
||||||
|
"modexp": {
|
||||||
|
"divisor": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"0x0000000000000000000000000000000000000006": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "alt_bn128_add",
|
"name": "alt_bn128_add",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"12598600": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"0000000000000000000000000000000000000007": {
|
"0x0000000000000000000000000000000000000007": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "alt_bn128_mul",
|
"name": "alt_bn128_mul",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"12598600": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"0000000000000000000000000000000000000008": {
|
"0x0000000000000000000000000000000000000008": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "alt_bn128_pairing",
|
"name": "alt_bn128_pairing",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"12598600": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"0x0000000000000000000000000000000000000009": {
|
||||||
|
"builtin": {
|
||||||
|
"name": "blake2_f",
|
||||||
|
"pricing": {
|
||||||
|
"12598600": {
|
||||||
|
"info": "EIP 1108 transition",
|
||||||
|
"price": {
|
||||||
|
"blake2_f": {
|
||||||
|
"gas_per_round": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"0x0000000000000000000000000000000000000001": {
|
"0x0000000000000000000000000000000000000001": {
|
||||||
"balance": "1",
|
"balance": "1",
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "ecrecover",
|
"name": "ecrecover",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 3000,
|
"price": {
|
||||||
"word": 0
|
"linear": {
|
||||||
|
"base": 3000,
|
||||||
|
"word": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,9 +155,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "sha256",
|
"name": "sha256",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 60,
|
"price": {
|
||||||
"word": 12
|
"linear": {
|
||||||
|
"base": 60,
|
||||||
|
"word": 12
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,9 +171,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "ripemd160",
|
"name": "ripemd160",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 600,
|
"price": {
|
||||||
"word": 120
|
"linear": {
|
||||||
|
"base": 600,
|
||||||
|
"word": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,9 +187,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "identity",
|
"name": "identity",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 15,
|
"price": {
|
||||||
"word": 3
|
"linear": {
|
||||||
|
"base": 15,
|
||||||
|
"word": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,12 @@
|
|||||||
"eip1014Transition": 6464300,
|
"eip1014Transition": 6464300,
|
||||||
"eip1052Transition": 6464300,
|
"eip1052Transition": 6464300,
|
||||||
"eip1283Transition": 6464300,
|
"eip1283Transition": 6464300,
|
||||||
"eip1283DisableTransition": 7026400
|
"eip1283DisableTransition": 7026400,
|
||||||
|
"eip1283ReenableTransition": 12095200,
|
||||||
|
"eip1344Transition": 12095200,
|
||||||
|
"eip1706Transition": 12095200,
|
||||||
|
"eip1884Transition": 12095200,
|
||||||
|
"eip2028Transition": 12095200
|
||||||
},
|
},
|
||||||
"genesis": {
|
"genesis": {
|
||||||
"seal": {
|
"seal": {
|
||||||
@ -55,6 +60,7 @@
|
|||||||
"gasLimit": "0x663BE0"
|
"gasLimit": "0x663BE0"
|
||||||
},
|
},
|
||||||
"nodes": [
|
"nodes": [
|
||||||
|
"enode://bdcd6f875583df2bd8094f08ae58c7c2db6ed67795ca8c0e6415a30721d3657291aec9b933d15e17e0b36ad7a76424a1447ddbfc75809a04f7a0ffef5617dd56@3.91.206.172:30303",
|
||||||
"enode://8e0af07c86ec36590bb6368e7ad0c45b6dc658f5fb66ec68889a614affddda5e021bd513bcf4fb2fae4a3bbe08cf0de84f037cd58478a89665dfce1ded2595c7@34.236.37.74:30303",
|
"enode://8e0af07c86ec36590bb6368e7ad0c45b6dc658f5fb66ec68889a614affddda5e021bd513bcf4fb2fae4a3bbe08cf0de84f037cd58478a89665dfce1ded2595c7@34.236.37.74:30303",
|
||||||
"enode://f1a5100a81cb73163ae450c584d06b1f644aa4fad4486c6aeb4c384b343c54bb66c744aa5f133af66ea1b25f0f4a454f04878f3e96ee4cd2390c047396d6357b@209.97.158.4:30303",
|
"enode://f1a5100a81cb73163ae450c584d06b1f644aa4fad4486c6aeb4c384b343c54bb66c744aa5f133af66ea1b25f0f4a454f04878f3e96ee4cd2390c047396d6357b@209.97.158.4:30303",
|
||||||
"enode://0d1e0372f63a3f0b82d66635ea101ecc0f6797788a078805cc933dd93e6a22f7c9fa51ab4e2d21da02d04480ef19f3bbb9a2b41dd1c262085d295a354bb8b0f9@18.217.47.209:30303",
|
"enode://0d1e0372f63a3f0b82d66635ea101ecc0f6797788a078805cc933dd93e6a22f7c9fa51ab4e2d21da02d04480ef19f3bbb9a2b41dd1c262085d295a354bb8b0f9@18.217.47.209:30303",
|
||||||
@ -64,7 +70,20 @@
|
|||||||
"enode://b022ff70b5fcaf9596ae5efed99a8198b4ae0578ee9d17b733609d803a75cef95d3a2a18e50dca9a7c3b26139f158c59eaf8b5fb8d1d331c9a46934a78acabe8@206.189.76.128:30303"
|
"enode://b022ff70b5fcaf9596ae5efed99a8198b4ae0578ee9d17b733609d803a75cef95d3a2a18e50dca9a7c3b26139f158c59eaf8b5fb8d1d331c9a46934a78acabe8@206.189.76.128:30303"
|
||||||
],
|
],
|
||||||
"accounts": {
|
"accounts": {
|
||||||
"0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "activate_at": "0x0", "pricing": { "modexp": { "divisor": 20 } } } },
|
"0000000000000000000000000000000000000005": {
|
||||||
|
"builtin": {
|
||||||
|
"name": "modexp",
|
||||||
|
"pricing": {
|
||||||
|
"0": {
|
||||||
|
"price": {
|
||||||
|
"modexp": {
|
||||||
|
"divisor": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"0000000000000000000000000000000000000006": {
|
"0000000000000000000000000000000000000006": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "alt_bn128_add",
|
"name": "alt_bn128_add",
|
||||||
@ -72,7 +91,7 @@
|
|||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"12095200": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
||||||
}
|
}
|
||||||
@ -86,7 +105,7 @@
|
|||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"12095200": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
||||||
}
|
}
|
||||||
@ -100,21 +119,40 @@
|
|||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"12095200": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"0x0000000000000000000000000000000000000009": {
|
||||||
|
"builtin": {
|
||||||
|
"name": "blake2_f",
|
||||||
|
"pricing": {
|
||||||
|
"12095200": {
|
||||||
|
"info": "EIP 1108 transition",
|
||||||
|
"price": {
|
||||||
|
"blake2_f": {
|
||||||
|
"gas_per_round": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"0x0000000000000000000000000000000000000001": {
|
"0x0000000000000000000000000000000000000001": {
|
||||||
"balance": "1",
|
"balance": "1",
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "ecrecover",
|
"name": "ecrecover",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 3000,
|
"price": {
|
||||||
"word": 0
|
"linear": {
|
||||||
|
"base": 3000,
|
||||||
|
"word": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -124,9 +162,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "sha256",
|
"name": "sha256",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 60,
|
"price": {
|
||||||
"word": 12
|
"linear": {
|
||||||
|
"base": 60,
|
||||||
|
"word": 12
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,9 +178,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "ripemd160",
|
"name": "ripemd160",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 600,
|
"price": {
|
||||||
"word": 120
|
"linear": {
|
||||||
|
"base": 600,
|
||||||
|
"word": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,9 +194,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "identity",
|
"name": "identity",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 15,
|
"price": {
|
||||||
"word": 3
|
"linear": {
|
||||||
|
"base": 15,
|
||||||
|
"word": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
"eip100bTransition": "0x19f0a0",
|
"eip100bTransition": "0x19f0a0",
|
||||||
"difficultyBombDelays": {
|
"difficultyBombDelays": {
|
||||||
"0x19f0a0": "0x2dc6c0",
|
"0x19f0a0": "0x2dc6c0",
|
||||||
"0x408b70": "0x1e8480"
|
"0x408b70": "0x1e8480",
|
||||||
|
"0x6c993d": "0x3d0900"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,11 @@
|
|||||||
"eip1052Transition": 1604400,
|
"eip1052Transition": 1604400,
|
||||||
"eip1283Transition": 1604400,
|
"eip1283Transition": 1604400,
|
||||||
"eip1283DisableTransition": 2508800,
|
"eip1283DisableTransition": 2508800,
|
||||||
|
"eip1283ReenableTransition": 7298030,
|
||||||
|
"eip1344Transition": 7298030,
|
||||||
|
"eip1706Transition": 7298030,
|
||||||
|
"eip1884Transition": 7298030,
|
||||||
|
"eip2028Transition": 7298030,
|
||||||
"registrar": "0x1ec97dc137f5168af053c24460a1200502e1a9d2"
|
"registrar": "0x1ec97dc137f5168af053c24460a1200502e1a9d2"
|
||||||
},
|
},
|
||||||
"genesis": {
|
"genesis": {
|
||||||
@ -2865,10 +2870,13 @@
|
|||||||
"0x0000000000000000000000000000000000000005": {
|
"0x0000000000000000000000000000000000000005": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "modexp",
|
"name": "modexp",
|
||||||
"activate_at": "0x0",
|
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"modexp": {
|
"0": {
|
||||||
"divisor": 20
|
"price": {
|
||||||
|
"modexp": {
|
||||||
|
"divisor": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2880,7 +2888,7 @@
|
|||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
"price": { "alt_bn128_const_operations": { "price": 500 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"7298030": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
"price": { "alt_bn128_const_operations": { "price": 150 }}
|
||||||
}
|
}
|
||||||
@ -2894,7 +2902,7 @@
|
|||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
"price": { "alt_bn128_const_operations": { "price": 40000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"7298030": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
"price": { "alt_bn128_const_operations": { "price": 6000 }}
|
||||||
}
|
}
|
||||||
@ -2908,21 +2916,40 @@
|
|||||||
"0": {
|
"0": {
|
||||||
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
"price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 }}
|
||||||
},
|
},
|
||||||
"0x7fffffffffffff": {
|
"7298030": {
|
||||||
"info": "EIP 1108 transition",
|
"info": "EIP 1108 transition",
|
||||||
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
"price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 }}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"0x0000000000000000000000000000000000000009": {
|
||||||
|
"builtin": {
|
||||||
|
"name": "blake2_f",
|
||||||
|
"pricing": {
|
||||||
|
"7298030": {
|
||||||
|
"info": "EIP 1108 transition",
|
||||||
|
"price": {
|
||||||
|
"blake2_f": {
|
||||||
|
"gas_per_round": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"0x0000000000000000000000000000000000000001": {
|
"0x0000000000000000000000000000000000000001": {
|
||||||
"balance": "1",
|
"balance": "1",
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "ecrecover",
|
"name": "ecrecover",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 3000,
|
"price": {
|
||||||
"word": 0
|
"linear": {
|
||||||
|
"base": 3000,
|
||||||
|
"word": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2932,9 +2959,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "sha256",
|
"name": "sha256",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 60,
|
"price": {
|
||||||
"word": 12
|
"linear": {
|
||||||
|
"base": 60,
|
||||||
|
"word": 12
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2944,9 +2975,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "ripemd160",
|
"name": "ripemd160",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 600,
|
"price": {
|
||||||
"word": 120
|
"linear": {
|
||||||
|
"base": 600,
|
||||||
|
"word": 120
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2956,9 +2991,13 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"name": "identity",
|
"name": "identity",
|
||||||
"pricing": {
|
"pricing": {
|
||||||
"linear": {
|
"0": {
|
||||||
"base": 15,
|
"price": {
|
||||||
"word": 3
|
"linear": {
|
||||||
|
"base": 15,
|
||||||
|
"word": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ impl<'a> EvmTestClient<'a> {
|
|||||||
) -> std::result::Result<TransactSuccess<T::Output, V::Output>, TransactErr> {
|
) -> std::result::Result<TransactSuccess<T::Output, V::Output>, TransactErr> {
|
||||||
let initial_gas = transaction.gas;
|
let initial_gas = transaction.gas;
|
||||||
// Verify transaction
|
// Verify transaction
|
||||||
let is_ok = transaction.verify_basic(true, None, false);
|
let is_ok = transaction.verify_basic(true, None);
|
||||||
if let Err(error) = is_ok {
|
if let Err(error) = is_ok {
|
||||||
return Err(
|
return Err(
|
||||||
TransactErr{
|
TransactErr{
|
||||||
|
@ -367,7 +367,7 @@ impl EthereumMachine {
|
|||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
t.verify_basic(check_low_s, chain_id, false)?;
|
t.verify_basic(check_low_s, chain_id)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1600,6 +1600,30 @@ mod tests {
|
|||||||
assert_eq!(miner.prepare_pending_block(&client), BlockPreparationStatus::NotPrepared);
|
assert_eq!(miner.prepare_pending_block(&client), BlockPreparationStatus::NotPrepared);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_reject_local_transaction_with_invalid_chain_id() {
|
||||||
|
let spec = Spec::new_test();
|
||||||
|
let miner = Miner::new_for_tests(&spec, None);
|
||||||
|
let client = TestBlockChainClient::default();
|
||||||
|
let chain_id = spec.chain_id();
|
||||||
|
|
||||||
|
// chain_id + 100500 is invalid
|
||||||
|
let import = miner.import_claimed_local_transaction(
|
||||||
|
&client,
|
||||||
|
PendingTransaction::new(transaction_with_chain_id(chain_id + 10500), None),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
assert_eq!(import, Err(transaction::Error::InvalidChainId));
|
||||||
|
|
||||||
|
// chain_id is valid
|
||||||
|
let import = miner.import_claimed_local_transaction(
|
||||||
|
&client,
|
||||||
|
PendingTransaction::new(transaction_with_chain_id(chain_id), None),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
assert_eq!(import, Ok(()));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_prioritize_locals() {
|
fn should_prioritize_locals() {
|
||||||
let client = TestBlockChainClient::default();
|
let client = TestBlockChainClient::default();
|
||||||
|
@ -136,7 +136,12 @@ impl<'a, C: 'a> pool::client::Client for PoolClient<'a, C> where
|
|||||||
self.chain.transaction_block(TransactionId::Hash(*hash)).is_some()
|
self.chain.transaction_block(TransactionId::Hash(*hash)).is_some()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_transaction(&self, tx: UnverifiedTransaction)-> Result<SignedTransaction, transaction::Error> {
|
fn verify_transaction_basic(&self, tx: &UnverifiedTransaction) -> Result<(), transaction::Error> {
|
||||||
|
self.engine.verify_transaction_basic(tx, &self.best_block_header)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn verify_transaction(&self, tx: UnverifiedTransaction) -> Result<SignedTransaction, transaction::Error> {
|
||||||
self.engine.verify_transaction_basic(&tx, &self.best_block_header)?;
|
self.engine.verify_transaction_basic(&tx, &self.best_block_header)?;
|
||||||
let tx = self.engine.verify_transaction_unordered(tx, &self.best_block_header)?;
|
let tx = self.engine.verify_transaction_unordered(tx, &self.best_block_header)?;
|
||||||
|
|
||||||
|
@ -143,6 +143,7 @@ impl HeapSizeOf for Transaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(test, feature = "test-helpers"))]
|
||||||
impl From<ethjson::state::Transaction> for SignedTransaction {
|
impl From<ethjson::state::Transaction> for SignedTransaction {
|
||||||
fn from(t: ethjson::state::Transaction) -> Self {
|
fn from(t: ethjson::state::Transaction) -> Self {
|
||||||
let to: Option<ethjson::hash::Address> = t.to.into();
|
let to: Option<ethjson::hash::Address> = t.to.into();
|
||||||
@ -242,7 +243,10 @@ impl Transaction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add EIP-86 compatible empty signature.
|
/// Legacy EIP-86 compatible empty signature.
|
||||||
|
/// This method is used in json tests as well as
|
||||||
|
/// signature verification tests.
|
||||||
|
#[cfg(any(test, feature = "test-helpers"))]
|
||||||
pub fn null_sign(self, chain_id: u64) -> SignedTransaction {
|
pub fn null_sign(self, chain_id: u64) -> SignedTransaction {
|
||||||
SignedTransaction {
|
SignedTransaction {
|
||||||
transaction: UnverifiedTransaction {
|
transaction: UnverifiedTransaction {
|
||||||
@ -306,7 +310,7 @@ impl rlp::Decodable for UnverifiedTransaction {
|
|||||||
v: d.val_at(6)?,
|
v: d.val_at(6)?,
|
||||||
r: d.val_at(7)?,
|
r: d.val_at(7)?,
|
||||||
s: d.val_at(8)?,
|
s: d.val_at(8)?,
|
||||||
hash: hash,
|
hash,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,7 +327,7 @@ impl UnverifiedTransaction {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks is signature is empty.
|
/// Checks if the signature is empty.
|
||||||
pub fn is_unsigned(&self) -> bool {
|
pub fn is_unsigned(&self) -> bool {
|
||||||
self.r.is_zero() && self.s.is_zero()
|
self.r.is_zero() && self.s.is_zero()
|
||||||
}
|
}
|
||||||
@ -387,17 +391,12 @@ impl UnverifiedTransaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Verify basic signature params. Does not attempt sender recovery.
|
/// Verify basic signature params. Does not attempt sender recovery.
|
||||||
pub fn verify_basic(&self, check_low_s: bool, chain_id: Option<u64>, allow_empty_signature: bool) -> Result<(), error::Error> {
|
pub fn verify_basic(&self, check_low_s: bool, chain_id: Option<u64>) -> Result<(), error::Error> {
|
||||||
if check_low_s && !(allow_empty_signature && self.is_unsigned()) {
|
if self.is_unsigned() {
|
||||||
self.check_low_s()?;
|
|
||||||
}
|
|
||||||
// Disallow unsigned transactions in case EIP-86 is disabled.
|
|
||||||
if !allow_empty_signature && self.is_unsigned() {
|
|
||||||
return Err(ethkey::Error::InvalidSignature.into());
|
return Err(ethkey::Error::InvalidSignature.into());
|
||||||
}
|
}
|
||||||
// EIP-86: Transactions of this form MUST have gasprice = 0, nonce = 0, value = 0, and do NOT increment the nonce of account 0.
|
if check_low_s {
|
||||||
if allow_empty_signature && self.is_unsigned() && !(self.gas_price.is_zero() && self.value.is_zero() && self.nonce.is_zero()) {
|
self.check_low_s()?;
|
||||||
return Err(ethkey::Error::InvalidSignature.into())
|
|
||||||
}
|
}
|
||||||
match (self.chain_id(), chain_id) {
|
match (self.chain_id(), chain_id) {
|
||||||
(None, _) => {},
|
(None, _) => {},
|
||||||
@ -443,20 +442,15 @@ impl SignedTransaction {
|
|||||||
/// Try to verify transaction and recover sender.
|
/// Try to verify transaction and recover sender.
|
||||||
pub fn new(transaction: UnverifiedTransaction) -> Result<Self, ethkey::Error> {
|
pub fn new(transaction: UnverifiedTransaction) -> Result<Self, ethkey::Error> {
|
||||||
if transaction.is_unsigned() {
|
if transaction.is_unsigned() {
|
||||||
Ok(SignedTransaction {
|
return Err(ethkey::Error::InvalidSignature);
|
||||||
transaction: transaction,
|
|
||||||
sender: UNSIGNED_SENDER,
|
|
||||||
public: None,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
let public = transaction.recover_public()?;
|
|
||||||
let sender = public_to_address(&public);
|
|
||||||
Ok(SignedTransaction {
|
|
||||||
transaction: transaction,
|
|
||||||
sender: sender,
|
|
||||||
public: Some(public),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
let public = transaction.recover_public()?;
|
||||||
|
let sender = public_to_address(&public);
|
||||||
|
Ok(SignedTransaction {
|
||||||
|
transaction,
|
||||||
|
sender,
|
||||||
|
public: Some(public),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns transaction sender.
|
/// Returns transaction sender.
|
||||||
@ -646,6 +640,25 @@ mod tests {
|
|||||||
assert_eq!(t.chain_id(), None);
|
assert_eq!(t.chain_id(), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_reject_null_signature() {
|
||||||
|
use std::str::FromStr;
|
||||||
|
let t = Transaction {
|
||||||
|
nonce: U256::zero(),
|
||||||
|
gas_price: U256::from(10000000000u64),
|
||||||
|
gas: U256::from(21000),
|
||||||
|
action: Action::Call(Address::from_str("d46e8dd67c5d32be8058bb8eb970870f07244567").unwrap()),
|
||||||
|
value: U256::from(1),
|
||||||
|
data: vec![]
|
||||||
|
}.null_sign(1);
|
||||||
|
|
||||||
|
let res = SignedTransaction::new(t.transaction);
|
||||||
|
match res {
|
||||||
|
Err(ethkey::Error::InvalidSignature) => {}
|
||||||
|
_ => panic!("null signature should be rejected"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_recover_from_chain_specific_signing() {
|
fn should_recover_from_chain_specific_signing() {
|
||||||
use ethkey::{Random, Generator};
|
use ethkey::{Random, Generator};
|
||||||
|
@ -9,7 +9,7 @@ name = "parity-evm"
|
|||||||
path = "./src/main.rs"
|
path = "./src/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
common-types = { path = "../ethcore/types" }
|
common-types = { path = "../ethcore/types", features = ["test-helpers"] }
|
||||||
docopt = "1.0"
|
docopt = "1.0"
|
||||||
env_logger = "0.5"
|
env_logger = "0.5"
|
||||||
ethcore = { path = "../ethcore", features = ["test-helpers", "json-tests", "to-pod-full"] }
|
ethcore = { path = "../ethcore", features = ["test-helpers", "json-tests", "to-pod-full"] }
|
||||||
|
@ -203,6 +203,28 @@ mod tests {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn deserialization_alt_bn128_const_operations() {
|
||||||
|
let s = r#"{
|
||||||
|
"name": "alt_bn128_mul",
|
||||||
|
"pricing": {
|
||||||
|
"100500": {
|
||||||
|
"price": { "alt_bn128_const_operations": { "price": 123 }}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}"#;
|
||||||
|
let builtin: Builtin = serde_json::from_str::<BuiltinCompat>(s).unwrap().into();
|
||||||
|
assert_eq!(builtin.name, "alt_bn128_mul");
|
||||||
|
assert_eq!(builtin.pricing, map![
|
||||||
|
100500 => PricingAt {
|
||||||
|
info: None,
|
||||||
|
price: Pricing::AltBn128ConstOperations(AltBn128ConstOperations {
|
||||||
|
price: 123,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn activate_at() {
|
fn activate_at() {
|
||||||
let s = r#"{
|
let s = r#"{
|
||||||
|
@ -97,6 +97,7 @@ impl<'a> Visitor<'a> for UintVisitor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserialize and validate that the value is non-zero
|
||||||
pub fn validate_non_zero<'de, D>(d: D) -> Result<Uint, D::Error> where D: Deserializer<'de> {
|
pub fn validate_non_zero<'de, D>(d: D) -> Result<Uint, D::Error> where D: Deserializer<'de> {
|
||||||
let value = Uint::deserialize(d)?;
|
let value = Uint::deserialize(d)?;
|
||||||
|
|
||||||
@ -107,6 +108,7 @@ pub fn validate_non_zero<'de, D>(d: D) -> Result<Uint, D::Error> where D: Deseri
|
|||||||
Ok(value)
|
Ok(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserialize and validate that the value is non-zero
|
||||||
pub fn validate_optional_non_zero<'de, D>(d: D) -> Result<Option<Uint>, D::Error> where D: Deserializer<'de> {
|
pub fn validate_optional_non_zero<'de, D>(d: D) -> Result<Option<Uint>, D::Error> where D: Deserializer<'de> {
|
||||||
let value: Option<Uint> = Option::deserialize(d)?;
|
let value: Option<Uint> = Option::deserialize(d)?;
|
||||||
|
|
||||||
|
@ -50,6 +50,15 @@ pub trait Client: fmt::Debug + Sync {
|
|||||||
/// Is transaction with given hash already in the blockchain?
|
/// Is transaction with given hash already in the blockchain?
|
||||||
fn transaction_already_included(&self, hash: &H256) -> bool;
|
fn transaction_already_included(&self, hash: &H256) -> bool;
|
||||||
|
|
||||||
|
/// Perform basic/cheap transaction verification.
|
||||||
|
///
|
||||||
|
/// This should include all cheap checks that can be done before
|
||||||
|
/// actually checking the signature, like chain-replay protection.
|
||||||
|
///
|
||||||
|
/// This method is currently used only for verifying local transactions.
|
||||||
|
fn verify_transaction_basic(&self, t: &transaction::UnverifiedTransaction)
|
||||||
|
-> Result<(), transaction::Error>;
|
||||||
|
|
||||||
/// Structurarily verify given transaction.
|
/// Structurarily verify given transaction.
|
||||||
fn verify_transaction(&self, tx: transaction::UnverifiedTransaction)
|
fn verify_transaction(&self, tx: transaction::UnverifiedTransaction)
|
||||||
-> Result<transaction::SignedTransaction, transaction::Error>;
|
-> Result<transaction::SignedTransaction, transaction::Error>;
|
||||||
|
@ -103,6 +103,12 @@ impl pool::client::Client for TestClient {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn verify_transaction_basic(&self, _tx: &UnverifiedTransaction)
|
||||||
|
-> Result<(), transaction::Error>
|
||||||
|
{
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn verify_transaction(&self, tx: UnverifiedTransaction)
|
fn verify_transaction(&self, tx: UnverifiedTransaction)
|
||||||
-> Result<SignedTransaction, transaction::Error>
|
-> Result<SignedTransaction, transaction::Error>
|
||||||
{
|
{
|
||||||
|
@ -250,7 +250,13 @@ impl<C: Client> txpool::Verifier<Transaction> for Verifier<C, ::pool::scoring::N
|
|||||||
bail!(err)
|
bail!(err)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Transaction::Local(tx) => tx,
|
Transaction::Local(tx) => match self.client.verify_transaction_basic(&**tx) {
|
||||||
|
Ok(()) => tx,
|
||||||
|
Err(err) => {
|
||||||
|
warn!(target: "txqueue", "[{:?}] Rejected local tx {:?}", hash, err);
|
||||||
|
return Err(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Verify RLP payload
|
// Verify RLP payload
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "parity-version"
|
name = "parity-version"
|
||||||
# NOTE: this value is used for Parity Ethereum version string (via env CARGO_PKG_VERSION)
|
# NOTE: this value is used for Parity Ethereum version string (via env CARGO_PKG_VERSION)
|
||||||
version = "2.5.11"
|
version = "2.5.12"
|
||||||
authors = ["Parity Technologies <admin@parity.io>"]
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user