Skip to content

Commit 808eee0

Browse files
Seulgi Kimmergify[bot]
authored andcommitted
Add a unittest to check mulisig is not unlocked when the key is duplicated
1 parent bd9e9f4 commit 808eee0

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

vm/tests/chk_multi_sig.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
192250
fn valid_multi_sig_2_of_3_110() {
193251
let client = TestClient::default();

0 commit comments

Comments
 (0)