@@ -188,6 +188,64 @@ fn valid_multi_sig_2_of_2() {
188188 ) ;
189189}
190190
191+ #[ test]
192+ fn nvalid_multi_sig_2_of_2_duplicated ( ) {
193+ let client = TestClient :: default ( ) ;
194+ let transaction = ShardTransaction :: TransferAsset {
195+ network_id : NetworkId :: default ( ) ,
196+ burns : Vec :: new ( ) ,
197+ inputs : Vec :: new ( ) ,
198+ outputs : Vec :: new ( ) ,
199+ orders : Vec :: new ( ) ,
200+ } ;
201+ let outpoint = AssetTransferInput {
202+ prev_out : AssetOutPoint {
203+ tracker : Default :: default ( ) ,
204+ index : 0 ,
205+ asset_type : H160 :: default ( ) ,
206+ shard_id : 0 ,
207+ quantity : 0 ,
208+ } ,
209+ timelock : None ,
210+ lock_script : Vec :: new ( ) ,
211+ unlock_script : Vec :: new ( ) ,
212+ } ;
213+ let keypair1 = KeyPair :: from_private ( Private :: from ( ONE_KEY ) ) . unwrap ( ) ;
214+ let keypair2 = KeyPair :: from_private ( Private :: from ( MINUS_ONE_KEY ) ) . unwrap ( ) ;
215+ let pubkey1 = <& [ u8 ] >:: from ( keypair1. public ( ) ) . to_vec ( ) ;
216+ let pubkey2 = <& [ u8 ] >:: from ( keypair2. public ( ) ) . to_vec ( ) ;
217+ let message = blake256_with_key (
218+ & ShardTransaction :: TransferAsset {
219+ network_id : NetworkId :: default ( ) ,
220+ burns : Vec :: new ( ) ,
221+ inputs : Vec :: new ( ) ,
222+ outputs : Vec :: new ( ) ,
223+ orders : Vec :: new ( ) ,
224+ }
225+ . rlp_bytes ( ) ,
226+ & blake128 ( & [ 0b11 as u8 ] ) ,
227+ ) ;
228+ let signature1 = sign ( keypair1. private ( ) , & message) . unwrap ( ) . to_vec ( ) ;
229+
230+ let unlock_script = vec ! [
231+ Instruction :: PushB ( vec![ 0b11 as u8 ] ) ,
232+ Instruction :: PushB ( signature1. clone( ) ) ,
233+ Instruction :: PushB ( signature1) ,
234+ ] ;
235+ let lock_script = vec ! [
236+ Instruction :: PushB ( vec![ 2 ] ) ,
237+ Instruction :: PushB ( pubkey1) ,
238+ Instruction :: PushB ( pubkey2) ,
239+ Instruction :: PushB ( vec![ 2 ] ) ,
240+ Instruction :: ChkMultiSig ,
241+ ] ;
242+
243+ assert_eq ! (
244+ execute( & unlock_script, & [ ] , & lock_script, & transaction, VMConfig :: default ( ) , & outpoint, false , & client, 0 , 0 ) ,
245+ Ok ( ScriptResult :: Fail )
246+ ) ;
247+ }
248+
191249#[ test]
192250fn valid_multi_sig_2_of_3_110 ( ) {
193251 let client = TestClient :: default ( ) ;
0 commit comments