Fix eth_sign/parity_postSign (#4432)
* Fix dispatch for signing. * Remove console log * Fix signing & tests.
This commit is contained in:
		
							parent
							
								
									b4c24d5ab3
								
							
						
					
					
						commit
						4553f517ce
					
				| @ -57,8 +57,6 @@ export default class SignerMiddleware { | |||||||
|     const handlePromise = (promise) => { |     const handlePromise = (promise) => { | ||||||
|       promise |       promise | ||||||
|         .then((txHash) => { |         .then((txHash) => { | ||||||
|           console.log('confirmRequest', id, txHash); |  | ||||||
| 
 |  | ||||||
|           if (!txHash) { |           if (!txHash) { | ||||||
|             store.dispatch(actions.errorConfirmRequest({ id, err: 'Unable to confirm.' })); |             store.dispatch(actions.errorConfirmRequest({ id, err: 'Unable to confirm.' })); | ||||||
|             return; |             return; | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ | |||||||
| use std::fmt::Debug; | use std::fmt::Debug; | ||||||
| use std::ops::Deref; | use std::ops::Deref; | ||||||
| use rlp; | use rlp; | ||||||
| use util::{Address, H256, U256, Uint, Bytes}; | use util::{Address, H520, H256, U256, Uint, Bytes}; | ||||||
| use util::bytes::ToPretty; | use util::bytes::ToPretty; | ||||||
| use util::sha3::Hashable; | use util::sha3::Hashable; | ||||||
| 
 | 
 | ||||||
| @ -112,6 +112,14 @@ pub fn execute<C, M>(client: &C, miner: &M, accounts: &AccountProvider, payload: | |||||||
| 		ConfirmationPayload::Signature(address, data) => { | 		ConfirmationPayload::Signature(address, data) => { | ||||||
| 			signature(accounts, address, data.sha3(), pass) | 			signature(accounts, address, data.sha3(), pass) | ||||||
| 				.map(|result| result | 				.map(|result| result | ||||||
|  | 					.map(|rsv| { | ||||||
|  | 						let mut vrs = [0u8; 65]; | ||||||
|  | 						let rsv = rsv.as_ref(); | ||||||
|  | 						vrs[0] = rsv[64] + 27; | ||||||
|  | 						vrs[1..33].copy_from_slice(&rsv[0..32]); | ||||||
|  | 						vrs[33..65].copy_from_slice(&rsv[32..64]); | ||||||
|  | 						H520(vrs) | ||||||
|  | 					}) | ||||||
| 					.map(RpcH520::from) | 					.map(RpcH520::from) | ||||||
| 					.map(ConfirmationResponse::Signature) | 					.map(ConfirmationResponse::Signature) | ||||||
| 				) | 				) | ||||||
|  | |||||||
| @ -22,7 +22,8 @@ use rustc_serialize::hex::{FromHex, ToHex}; | |||||||
| use time::get_time; | use time::get_time; | ||||||
| use rlp; | use rlp; | ||||||
| 
 | 
 | ||||||
| use util::{Uint, U256, Address, H256, FixedHash, Mutex, Hashable}; | use util::{Uint, U256, Address, H256, FixedHash, Mutex}; | ||||||
|  | use ethkey::Secret; | ||||||
| use ethcore::account_provider::AccountProvider; | use ethcore::account_provider::AccountProvider; | ||||||
| use ethcore::client::{TestBlockChainClient, EachBlockWith, Executed, TransactionId}; | use ethcore::client::{TestBlockChainClient, EachBlockWith, Executed, TransactionId}; | ||||||
| use ethcore::log_entry::{LocalizedLogEntry, LogEntry}; | use ethcore::log_entry::{LocalizedLogEntry, LogEntry}; | ||||||
| @ -296,10 +297,9 @@ fn rpc_eth_submit_hashrate() { | |||||||
| fn rpc_eth_sign() { | fn rpc_eth_sign() { | ||||||
| 	let tester = EthTester::default(); | 	let tester = EthTester::default(); | ||||||
| 
 | 
 | ||||||
| 	let account = tester.accounts_provider.new_account("abcd").unwrap(); | 	let account = tester.accounts_provider.insert_account(Secret::from_slice(&[69u8; 32]).unwrap(), "abcd").unwrap(); | ||||||
| 	tester.accounts_provider.unlock_account_permanently(account, "abcd".into()).unwrap(); | 	tester.accounts_provider.unlock_account_permanently(account, "abcd".into()).unwrap(); | ||||||
| 	let message = "0cc175b9c0f1b6a831c399e26977266192eb5ffee6ae2fec3ad71c777531578f".from_hex().unwrap(); | 	let _message = "0cc175b9c0f1b6a831c399e26977266192eb5ffee6ae2fec3ad71c777531578f".from_hex().unwrap(); | ||||||
| 	let signed = tester.accounts_provider.sign(account, None, message.sha3()).unwrap(); |  | ||||||
| 
 | 
 | ||||||
| 	let req = r#"{
 | 	let req = r#"{
 | ||||||
| 		"jsonrpc": "2.0", | 		"jsonrpc": "2.0", | ||||||
| @ -310,9 +310,9 @@ fn rpc_eth_sign() { | |||||||
| 		], | 		], | ||||||
| 		"id": 1 | 		"id": 1 | ||||||
| 	}"#;
 | 	}"#;
 | ||||||
| 	let res = r#"{"jsonrpc":"2.0","result":""#.to_owned() + &format!("0x{}", signed) + r#"","id":1}"#; | 	let res = r#"{"jsonrpc":"2.0","result":"0x1b5100b2be0aafd86271c8f49891262920bfbfeaeccb2ef1d0b2053aefc3ddb399483eb3c902ecf4add3156461a61f59e924a65eb5e6cdbab0a158d45db5f87cdf","id":1}"#; | ||||||
| 
 | 
 | ||||||
| 	assert_eq!(tester.io.handle_request_sync(&req), Some(res)); | 	assert_eq!(tester.io.handle_request_sync(&req), Some(res.into())); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[test] | #[test] | ||||||
|  | |||||||
| @ -27,7 +27,8 @@ use v1::types::ConfirmationResponse; | |||||||
| use v1::tests::helpers::TestMinerService; | use v1::tests::helpers::TestMinerService; | ||||||
| use v1::tests::mocked::parity; | use v1::tests::mocked::parity; | ||||||
| 
 | 
 | ||||||
| use util::{Address, FixedHash, Uint, U256, ToPretty, Hashable}; | use util::{Address, FixedHash, Uint, U256, ToPretty}; | ||||||
|  | use ethkey::Secret; | ||||||
| use ethcore::account_provider::AccountProvider; | use ethcore::account_provider::AccountProvider; | ||||||
| use ethcore::client::TestBlockChainClient; | use ethcore::client::TestBlockChainClient; | ||||||
| use ethcore::transaction::{Transaction, Action, SignedTransaction}; | use ethcore::transaction::{Transaction, Action, SignedTransaction}; | ||||||
| @ -186,11 +187,9 @@ fn should_sign_if_account_is_unlocked() { | |||||||
| 	// given
 | 	// given
 | ||||||
| 	let tester = eth_signing(); | 	let tester = eth_signing(); | ||||||
| 	let data = vec![5u8]; | 	let data = vec![5u8]; | ||||||
| 	let acc = tester.accounts.new_account("test").unwrap(); | 	let acc = tester.accounts.insert_account(Secret::from_slice(&[69u8; 32]).unwrap(), "test").unwrap(); | ||||||
| 	tester.accounts.unlock_account_permanently(acc, "test".into()).unwrap(); | 	tester.accounts.unlock_account_permanently(acc, "test".into()).unwrap(); | ||||||
| 
 | 
 | ||||||
| 	let signature = tester.accounts.sign(acc, None, data.sha3()).unwrap(); |  | ||||||
| 
 |  | ||||||
| 	// when
 | 	// when
 | ||||||
| 	let request = r#"{
 | 	let request = r#"{
 | ||||||
| 		"jsonrpc": "2.0", | 		"jsonrpc": "2.0", | ||||||
| @ -201,7 +200,7 @@ fn should_sign_if_account_is_unlocked() { | |||||||
| 		], | 		], | ||||||
| 		"id": 1 | 		"id": 1 | ||||||
| 	}"#;
 | 	}"#;
 | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":""#.to_owned() + format!("0x{}", signature).as_ref() + r#"","id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":"0x1bb3062482b0687e9c97c7609ea60c1649959dbb334f71b3d5cacd496e0848ba8137bc765756627722389c6c39bc77700ccdc8916916a0eb03bcf5191d4f74dc65","id":1}"#; | ||||||
| 	assert_eq!(tester.io.handle_request_sync(&request), Some(response.to_owned())); | 	assert_eq!(tester.io.handle_request_sync(&request), Some(response.to_owned())); | ||||||
| 	assert_eq!(tester.signer.requests().len(), 0); | 	assert_eq!(tester.signer.requests().len(), 0); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user