@@ -6,7 +6,7 @@ use ckb_types::{
66 core:: DepType ,
77 packed:: { CellOutput , OutPoint } ,
88 prelude:: * ,
9- H256 ,
9+ H160 , H256 ,
1010} ;
1111
1212use crate :: {
@@ -289,17 +289,6 @@ fn test_omnilock_solana() {
289289 omnilock_test ( cfg, & sign_context_2) ;
290290}
291291
292- #[ ignore]
293- #[ test]
294- fn test_omnilock_owner ( ) {
295- let account0_key = secp256k1:: SecretKey :: from_slice ( ACCOUNT0_KEY . as_bytes ( ) ) . unwrap ( ) ;
296- let pubkey = secp256k1:: PublicKey :: from_secret_key ( & SECP256K1 , & account0_key) ;
297- let cfg = OmniLockConfig :: new_ownerlock ( blake160 ( & Pubkey :: from ( pubkey) . serialize ( ) ) ) ;
298- // cfg.enable_cobuild(true);
299- let sign_context = SignContexts :: new_omnilock ( vec ! [ account0_key] , cfg. clone ( ) ) ;
300- omnilock_test ( cfg, & sign_context)
301- }
302-
303292fn omnilock_test ( cfg : OmniLockConfig , sign_context : & SignContexts ) {
304293 let network_info = NetworkInfo :: testnet ( ) ;
305294
@@ -345,7 +334,7 @@ fn omnilock_test(cfg: OmniLockConfig, sign_context: &SignContexts) {
345334 crate :: ScriptId :: new_data1 ( H256 :: from ( blake2b_256 ( OMNILOCK_BIN ) ) ) ,
346335 crate :: transaction:: signer:: omnilock:: OmnilockSigner { } ,
347336 )
348- . sign_transaction ( & mut tx_with_groups, & sign_context)
337+ . sign_transaction ( & mut tx_with_groups, sign_context)
349338 . unwrap ( ) ;
350339
351340 // let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
@@ -369,3 +358,82 @@ fn omnilock_test(cfg: OmniLockConfig, sign_context: &SignContexts) {
369358
370359 ctx. verify ( tx, FEE_RATE ) . unwrap ( ) ;
371360}
361+
362+ #[ test]
363+ fn test_omnilock_owner ( ) {
364+ let network_info = NetworkInfo :: testnet ( ) ;
365+ let receiver = build_sighash_script ( ACCOUNT2_ARG ) ;
366+ let sender1 = build_sighash_script ( ACCOUNT0_ARG ) ;
367+ let account0_key = secp256k1:: SecretKey :: from_slice ( ACCOUNT0_KEY . as_bytes ( ) ) . unwrap ( ) ;
368+ let hash = H160 :: from_slice ( & sender1. calc_script_hash ( ) . as_slice ( ) [ 0 ..20 ] ) . unwrap ( ) ;
369+ let cfg = OmniLockConfig :: new_ownerlock ( hash) ;
370+ let sender0 = build_omnilock_script ( & cfg) ;
371+ let mut sign_context = SignContexts :: new_omnilock ( vec ! [ account0_key. clone( ) ] , cfg. clone ( ) ) ;
372+ let hashall_unlock =
373+ crate :: transaction:: signer:: sighash:: Secp256k1Blake160SighashAllSignerContext :: new ( vec ! [
374+ account0_key. clone( ) ,
375+ ] ) ;
376+ sign_context. add_context ( Box :: new ( hashall_unlock) ) ;
377+
378+ let ( ctx, mut outpoints) = init_context (
379+ vec ! [ ( OMNILOCK_BIN , true ) ] ,
380+ vec ! [
381+ ( sender0. clone( ) , Some ( 150 * ONE_CKB ) ) ,
382+ ( sender1. clone( ) , Some ( 61 * ONE_CKB ) ) ,
383+ ] ,
384+ ) ;
385+
386+ let configuration = test_omnilock_config ( outpoints. pop ( ) . unwrap ( ) ) ;
387+ let iterator = InputIterator :: new_with_cell_collector (
388+ vec ! [ sender0. clone( ) , sender1. clone( ) ] ,
389+ Box :: new ( ctx. to_live_cells_context ( ) ) as Box < _ > ,
390+ ) ;
391+ let mut builder = SimpleTransactionBuilder :: new ( configuration, iterator) ;
392+ let output = CellOutput :: new_builder ( )
393+ . capacity ( ( 110 * ONE_CKB ) . pack ( ) )
394+ . lock ( receiver. clone ( ) )
395+ . build ( ) ;
396+ builder. add_output_and_data ( output. clone ( ) , ckb_types:: packed:: Bytes :: default ( ) ) ;
397+ builder. set_change_lock ( sender0. clone ( ) ) ;
398+
399+ let context = OmnilockScriptContext :: new ( cfg. clone ( ) , network_info. url . clone ( ) ) ;
400+ let mut contexts = HandlerContexts :: default ( ) ;
401+ contexts. add_context ( Box :: new ( context) as Box < _ > ) ;
402+
403+ let mut tx_with_groups = builder. build ( & contexts) . expect ( "build failed" ) ;
404+
405+ // let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
406+ // println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
407+
408+ TransactionSigner :: new ( & network_info)
409+ // use unitest lock to verify
410+ . insert_unlocker (
411+ crate :: ScriptId :: new_data1 ( H256 :: from ( blake2b_256 ( OMNILOCK_BIN ) ) ) ,
412+ crate :: transaction:: signer:: omnilock:: OmnilockSigner { } ,
413+ )
414+ . sign_transaction ( & mut tx_with_groups, & sign_context)
415+ . unwrap ( ) ;
416+
417+ let tx = tx_with_groups. get_tx_view ( ) . clone ( ) ;
418+ // let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
419+ // println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
420+
421+ let script_groups = tx_with_groups. script_groups . clone ( ) ;
422+ assert_eq ! ( script_groups. len( ) , 2 ) ;
423+ assert_eq ! ( tx. header_deps( ) . len( ) , 0 ) ;
424+ assert_eq ! ( tx. cell_deps( ) . len( ) , 2 ) ;
425+ assert_eq ! ( tx. inputs( ) . len( ) , 2 ) ;
426+ let mut senders = vec ! [ sender0. clone( ) , sender1. clone( ) ] ;
427+ for out_point in tx. input_pts_iter ( ) {
428+ let sender = ctx. get_input ( & out_point) . unwrap ( ) . 0 . lock ( ) ;
429+ assert ! ( senders. contains( & sender) ) ;
430+ senders. retain ( |x| x != & sender) ;
431+ }
432+ assert_eq ! ( tx. outputs( ) . len( ) , 2 ) ;
433+ assert_eq ! ( tx. output( 0 ) . unwrap( ) , output) ;
434+ assert_eq ! ( tx. output( 1 ) . unwrap( ) . lock( ) , sender0) ;
435+ let change_capacity: u64 = tx. output ( 1 ) . unwrap ( ) . capacity ( ) . unpack ( ) ;
436+ let fee = ( 150 + 61 - 110 ) * ONE_CKB - change_capacity;
437+ assert_eq ! ( tx. data( ) . as_reader( ) . serialized_size_in_block( ) as u64 , fee) ;
438+ ctx. verify ( tx, FEE_RATE ) . unwrap ( ) ;
439+ }
0 commit comments