conforming to the p2p specs, requiring error_messages to be bound (#1593)
## Issue Addressed #1421 ## Proposed Changes Bounding the error_message that can be returned for RPC domain errors Co-authored-by: Age Manning <Age@AgeManning.com>
This commit is contained in:
		
							parent
							
								
									a6376b4585
								
							
						
					
					
						commit
						2a9a815f29
					
				
							
								
								
									
										78
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										78
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -756,7 +756,7 @@ dependencies = [ | ||||
|  "sloggers", | ||||
|  "slot_clock", | ||||
|  "store", | ||||
|  "time 0.2.16", | ||||
|  "time 0.2.17", | ||||
|  "timer", | ||||
|  "tokio 0.2.22", | ||||
|  "toml", | ||||
| @ -849,6 +849,12 @@ dependencies = [ | ||||
|  "proc-macro-hack", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "const_fn" | ||||
| version = "0.4.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ce90df4c658c62f12d78f7508cf92f9173e5184a539c10bfe54a3107b3ffd0f2" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "constant_time_eq" | ||||
| version = "0.1.5" | ||||
| @ -938,12 +944,12 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "crossbeam-channel" | ||||
| version = "0.4.3" | ||||
| version = "0.4.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "09ee0cc8804d5393478d743b035099520087a5186f3b93fa58cec08fa62407b6" | ||||
| checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
|  "crossbeam-utils", | ||||
|  "maybe-uninit", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -2111,12 +2117,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hashbrown" | ||||
| version = "0.8.2" | ||||
| version = "0.9.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" | ||||
| dependencies = [ | ||||
|  "autocfg 1.0.1", | ||||
| ] | ||||
| checksum = "00d63df3d41950fb462ed38308eea019113ad1508da725bbedcd0fa5a85ef5f7" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "hashset_delay" | ||||
| @ -2412,12 +2415,12 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "indexmap" | ||||
| version = "1.5.1" | ||||
| version = "1.6.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "86b45e59b16c76b11bf9738fd5d38879d3bd28ad292d7b313608becb17ae2df9" | ||||
| checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" | ||||
| dependencies = [ | ||||
|  "autocfg 1.0.1", | ||||
|  "hashbrown 0.8.2", | ||||
|  "hashbrown 0.9.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -2642,7 +2645,7 @@ dependencies = [ | ||||
|  "libp2p-tcp", | ||||
|  "libp2p-websocket", | ||||
|  "multihash", | ||||
|  "parity-multiaddr 0.9.1 (git+https://github.com/sigp/rust-libp2p?rev=03f998022ce2f566a6c6e6c4206bc0ce4d45109f)", | ||||
|  "parity-multiaddr 0.9.1", | ||||
|  "parking_lot 0.10.2", | ||||
|  "pin-project", | ||||
|  "smallvec 1.4.2", | ||||
| @ -2667,7 +2670,7 @@ dependencies = [ | ||||
|  "log 0.4.11", | ||||
|  "multihash", | ||||
|  "multistream-select 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "parity-multiaddr 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", | ||||
|  "parity-multiaddr 0.9.2", | ||||
|  "parking_lot 0.10.2", | ||||
|  "pin-project", | ||||
|  "prost", | ||||
| @ -2700,7 +2703,7 @@ dependencies = [ | ||||
|  "log 0.4.11", | ||||
|  "multihash", | ||||
|  "multistream-select 0.8.2 (git+https://github.com/sigp/rust-libp2p?rev=03f998022ce2f566a6c6e6c4206bc0ce4d45109f)", | ||||
|  "parity-multiaddr 0.9.1 (git+https://github.com/sigp/rust-libp2p?rev=03f998022ce2f566a6c6e6c4206bc0ce4d45109f)", | ||||
|  "parity-multiaddr 0.9.1", | ||||
|  "parking_lot 0.10.2", | ||||
|  "pin-project", | ||||
|  "prost", | ||||
| @ -2888,9 +2891,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libz-sys" | ||||
| version = "1.1.0" | ||||
| version = "1.1.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "af67924b8dd885cccea261866c8ce5b74d239d272e154053ff927dae839f5ae9" | ||||
| checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" | ||||
| dependencies = [ | ||||
|  "cc", | ||||
|  "pkg-config", | ||||
| @ -3534,9 +3537,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "parity-multiaddr" | ||||
| version = "0.9.1" | ||||
| version = "0.9.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "cc20af3143a62c16e7c9e92ea5c6ae49f7d271d97d4d8fe73afc28f0514a3d0f" | ||||
| checksum = "2165a93382a93de55868dcbfa11e4a8f99676a9164eee6a2b4a9479ad319c257" | ||||
| dependencies = [ | ||||
|  "arrayref", | ||||
|  "bs58", | ||||
| @ -3830,9 +3833,9 @@ checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "proc-macro2" | ||||
| version = "1.0.19" | ||||
| version = "1.0.20" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12" | ||||
| checksum = "175c513d55719db99da20232b06cda8bab6b83ec2d04e3283edf0213c37c1a29" | ||||
| dependencies = [ | ||||
|  "unicode-xid", | ||||
| ] | ||||
| @ -4590,12 +4593,6 @@ version = "0.7.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "send_wrapper" | ||||
| version = "0.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "serde" | ||||
| version = "1.0.115" | ||||
| @ -4775,9 +4772,9 @@ checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "simple_logger" | ||||
| version = "1.6.0" | ||||
| version = "1.9.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fea0c4611f32f4c2bac73754f22dca1f57e6c1945e0590dae4e5f2a077b92367" | ||||
| checksum = "13a53ed2efd04911c8280f2da7bf9abd350c931b86bc7f9f2386fbafbf525ff9" | ||||
| dependencies = [ | ||||
|  "atty", | ||||
|  "chrono", | ||||
| @ -5008,9 +5005,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "soketto" | ||||
| version = "0.4.1" | ||||
| version = "0.4.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "85457366ae0c6ce56bf05a958aef14cd38513c236568618edbcd9a8c52cb80b0" | ||||
| checksum = "b5c71ed3d54db0a699f4948e1bb3e45b450fa31fe602621dee6680361d569c88" | ||||
| dependencies = [ | ||||
|  "base64 0.12.3", | ||||
|  "bytes 0.5.6", | ||||
| @ -5019,7 +5016,7 @@ dependencies = [ | ||||
|  "httparse", | ||||
|  "log 0.4.11", | ||||
|  "rand 0.7.3", | ||||
|  "sha-1 0.8.2", | ||||
|  "sha-1 0.9.1", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| @ -5201,9 +5198,9 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "syn" | ||||
| version = "1.0.39" | ||||
| version = "1.0.40" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "891d8d6567fe7c7f8835a3a98af4208f3846fba258c1bc3c31d6e506239f11f9" | ||||
| checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
| @ -5345,11 +5342,11 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "time" | ||||
| version = "0.2.16" | ||||
| version = "0.2.17" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3a51cadc5b1eec673a685ff7c33192ff7b7603d0b75446fb354939ee615acb15" | ||||
| checksum = "ca7ec98a72285d12e0febb26f0847b12d54be24577618719df654c66cadab55d" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
|  "const_fn", | ||||
|  "libc", | ||||
|  "standback", | ||||
|  "stdweb", | ||||
| @ -6292,15 +6289,14 @@ dependencies = [ | ||||
| 
 | ||||
| [[package]] | ||||
| name = "wasm-timer" | ||||
| version = "0.2.4" | ||||
| version = "0.2.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "324c5e65a08699c9c4334ba136597ab22b85dccd4b65dd1e36ccf8f723a95b54" | ||||
| checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" | ||||
| dependencies = [ | ||||
|  "futures 0.3.5", | ||||
|  "js-sys", | ||||
|  "parking_lot 0.9.0", | ||||
|  "parking_lot 0.11.0", | ||||
|  "pin-utils", | ||||
|  "send_wrapper", | ||||
|  "wasm-bindgen", | ||||
|  "wasm-bindgen-futures", | ||||
|  "web-sys", | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| //! This handles the various supported encoding mechanism for the Eth 2.0 RPC.
 | ||||
| 
 | ||||
| use crate::rpc::methods::ErrorType; | ||||
| use crate::rpc::{RPCCodedResponse, RPCRequest, RPCResponse}; | ||||
| use libp2p::bytes::BufMut; | ||||
| use libp2p::bytes::BytesMut; | ||||
| @ -8,12 +9,12 @@ use tokio_util::codec::{Decoder, Encoder}; | ||||
| use types::EthSpec; | ||||
| 
 | ||||
| pub trait OutboundCodec<TItem>: Encoder<TItem> + Decoder { | ||||
|     type ErrorType; | ||||
|     type CodecErrorType; | ||||
| 
 | ||||
|     fn decode_error( | ||||
|         &mut self, | ||||
|         src: &mut BytesMut, | ||||
|     ) -> Result<Option<Self::ErrorType>, <Self as Decoder>::Error>; | ||||
|     ) -> Result<Option<Self::CodecErrorType>, <Self as Decoder>::Error>; | ||||
| } | ||||
| 
 | ||||
| /* Global Inbound Codec */ | ||||
| @ -130,8 +131,8 @@ where | ||||
| impl<TCodec, TSpec> Decoder for BaseOutboundCodec<TCodec, TSpec> | ||||
| where | ||||
|     TSpec: EthSpec, | ||||
|     TCodec: | ||||
|         OutboundCodec<RPCRequest<TSpec>, ErrorType = String> + Decoder<Item = RPCResponse<TSpec>>, | ||||
|     TCodec: OutboundCodec<RPCRequest<TSpec>, CodecErrorType = ErrorType> | ||||
|         + Decoder<Item = RPCResponse<TSpec>>, | ||||
| { | ||||
|     type Item = RPCCodedResponse<TSpec>; | ||||
|     type Error = <TCodec as Decoder>::Error; | ||||
|  | ||||
| @ -374,9 +374,12 @@ impl<TSpec: EthSpec> Decoder for SSZSnappyOutboundCodec<TSpec> { | ||||
| } | ||||
| 
 | ||||
| impl<TSpec: EthSpec> OutboundCodec<RPCRequest<TSpec>> for SSZSnappyOutboundCodec<TSpec> { | ||||
|     type ErrorType = String; | ||||
|     type CodecErrorType = ErrorType; | ||||
| 
 | ||||
|     fn decode_error(&mut self, src: &mut BytesMut) -> Result<Option<Self::ErrorType>, RPCError> { | ||||
|     fn decode_error( | ||||
|         &mut self, | ||||
|         src: &mut BytesMut, | ||||
|     ) -> Result<Option<Self::CodecErrorType>, RPCError> { | ||||
|         if self.len.is_none() { | ||||
|             // Decode the length of the uncompressed bytes from an unsigned varint
 | ||||
|             match self.inner.decode(src).map_err(RPCError::from)? { | ||||
| @ -401,9 +404,9 @@ impl<TSpec: EthSpec> OutboundCodec<RPCRequest<TSpec>> for SSZSnappyOutboundCodec | ||||
|                 let n = reader.get_ref().position(); | ||||
|                 self.len = None; | ||||
|                 let _read_bytes = src.split_to(n as usize); | ||||
|                 Ok(Some( | ||||
|                     String::from_utf8_lossy(&<Vec<u8>>::from_ssz_bytes(&decoded_buffer)?).into(), | ||||
|                 )) | ||||
|                 Ok(Some(ErrorType(VariableList::from_ssz_bytes( | ||||
|                     &decoded_buffer, | ||||
|                 )?))) | ||||
|             } | ||||
|             Err(e) => match e.kind() { | ||||
|                 // Haven't received enough bytes to decode yet
 | ||||
|  | ||||
| @ -19,7 +19,7 @@ type MaxErrorLen = U256; | ||||
| 
 | ||||
| /// Wrapper over SSZ List to represent error message in rpc responses.
 | ||||
| #[derive(Debug, Clone)] | ||||
| pub struct ErrorType(VariableList<u8, MaxErrorLen>); | ||||
| pub struct ErrorType(pub VariableList<u8, MaxErrorLen>); | ||||
| 
 | ||||
| impl From<String> for ErrorType { | ||||
|     fn from(s: String) -> Self { | ||||
| @ -283,13 +283,13 @@ impl<T: EthSpec> RPCCodedResponse<T> { | ||||
|     } | ||||
| 
 | ||||
|     /// Builds an RPCCodedResponse from a response code and an ErrorMessage
 | ||||
|     pub fn from_error(response_code: u8, err: String) -> Self { | ||||
|     pub fn from_error(response_code: u8, err: ErrorType) -> Self { | ||||
|         let code = match response_code { | ||||
|             1 => RPCResponseErrorCode::InvalidRequest, | ||||
|             2 => RPCResponseErrorCode::ServerError, | ||||
|             _ => RPCResponseErrorCode::Unknown, | ||||
|         }; | ||||
|         RPCCodedResponse::Error(code, err.into()) | ||||
|         RPCCodedResponse::Error(code, err) | ||||
|     } | ||||
| 
 | ||||
|     /// Specifies which response allows for multiple chunks for the stream handler.
 | ||||
|  | ||||
| @ -15,7 +15,7 @@ mod transition_blocks; | ||||
| 
 | ||||
| use clap::{App, Arg, ArgMatches, SubCommand}; | ||||
| use environment::EnvironmentBuilder; | ||||
| use log::Level; | ||||
| use log::LevelFilter; | ||||
| use parse_hex::run_parse_hex; | ||||
| use std::fs::File; | ||||
| use std::path::PathBuf; | ||||
| @ -25,7 +25,10 @@ use transition_blocks::run_transition_blocks; | ||||
| use types::{test_utils::TestingBeaconStateBuilder, EthSpec, MainnetEthSpec, MinimalEthSpec}; | ||||
| 
 | ||||
| fn main() { | ||||
|     simple_logger::init_with_level(Level::Info).expect("logger should initialize"); | ||||
|     simple_logger::SimpleLogger::new() | ||||
|         .with_level(LevelFilter::Info) | ||||
|         .init() | ||||
|         .expect("Logger should be initialised"); | ||||
| 
 | ||||
|     let matches = App::new("Lighthouse CLI Tool") | ||||
|         .version(lighthouse_version::VERSION) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user