@@ -18,35 +18,37 @@ use super::test_common::*;
1818use evm;
1919use ethjson;
2020use rlp:: UntrustedRlp ;
21- use transaction:: { Action , UnverifiedTransaction } ;
22- use ethstore:: ethkey:: public_to_address;
21+ use transaction:: { Action , UnverifiedTransaction , SignedTransaction } ;
2322
2423fn do_json_test ( json_data : & [ u8 ] ) -> Vec < String > {
2524 let tests = ethjson:: transaction:: Test :: load ( json_data) . unwrap ( ) ;
2625 let mut failed = Vec :: new ( ) ;
27- let old_schedule = evm:: Schedule :: new_frontier ( ) ;
28- let new_schedule = evm:: Schedule :: new_homestead ( ) ;
26+ let frontier_schedule = evm:: Schedule :: new_frontier ( ) ;
27+ let homestead_schedule = evm:: Schedule :: new_homestead ( ) ;
28+ let metropolis_schedule = evm:: Schedule :: new_metropolis ( ) ;
2929 for ( name, test) in tests. into_iter ( ) {
3030 let mut fail_unless = |cond : bool , title : & str | if !cond { failed. push ( name. clone ( ) ) ; println ! ( "Transaction failed: {:?}: {:?}" , name, title) ; } ;
3131
3232 let number: Option < u64 > = test. block_number . map ( Into :: into) ;
3333 let schedule = match number {
34- None => & old_schedule,
35- Some ( x) if x < 1_150_000 => & old_schedule,
36- Some ( _) => & new_schedule
34+ None => & frontier_schedule,
35+ Some ( x) if x < 1_150_000 => & frontier_schedule,
36+ Some ( x) if x < 3_000_000 => & homestead_schedule,
37+ Some ( _) => & metropolis_schedule
3738 } ;
3839 let allow_network_id_of_one = number. map_or ( false , |n| n >= 2_675_000 ) ;
40+ let allow_unsigned = number. map_or ( false , |n| n >= 3_000_000 ) ;
3941
4042 let rlp: Vec < u8 > = test. rlp . into ( ) ;
4143 let res = UntrustedRlp :: new ( & rlp)
4244 . as_val ( )
4345 . map_err ( From :: from)
44- . and_then ( |t : UnverifiedTransaction | t. validate ( schedule, schedule. have_delegate_call , allow_network_id_of_one) ) ;
46+ . and_then ( |t : UnverifiedTransaction | t. validate ( schedule, schedule. have_delegate_call , allow_network_id_of_one, allow_unsigned ) ) ;
4547
4648 fail_unless ( test. transaction . is_none ( ) == res. is_err ( ) , "Validity different" ) ;
4749 if let ( Some ( tx) , Some ( sender) ) = ( test. transaction , test. sender ) {
4850 let t = res. unwrap ( ) ;
49- fail_unless ( public_to_address ( & t . recover_public ( ) . unwrap ( ) ) == sender. into ( ) , "sender mismatch" ) ;
51+ fail_unless ( SignedTransaction :: new ( t . clone ( ) ) . unwrap ( ) . sender ( ) == sender. into ( ) , "sender mismatch" ) ;
5052 let is_acceptable_network_id = match t. network_id ( ) {
5153 None => true ,
5254 Some ( 1 ) if allow_network_id_of_one => true ,
@@ -84,3 +86,7 @@ declare_test!{TransactionTests_Homestead_ttTransactionTestEip155VitaliksTests, "
8486declare_test ! { TransactionTests_EIP155_ttTransactionTest , "TransactionTests/EIP155/ttTransactionTest" }
8587declare_test ! { TransactionTests_EIP155_ttTransactionTestEip155VitaliksTests , "TransactionTests/EIP155/ttTransactionTestEip155VitaliksTests" }
8688declare_test ! { TransactionTests_EIP155_ttTransactionTestVRule , "TransactionTests/EIP155/ttTransactionTestVRule" }
89+
90+ declare_test ! { TransactionTests_Metropolis_ttMetropolisTest , "TransactionTests/Metropolis/ttMetropolisTest" }
91+ declare_test ! { TransactionTests_Metropolis_ttTransactionTest , "TransactionTests/Metropolis/ttTransactionTest" }
92+ declare_test ! { TransactionTests_Metropolis_ttTransactionTestZeroSig , "TransactionTests/Metropolis/ttTransactionTestZeroSig" }
0 commit comments