@@ -6,7 +6,7 @@ use ckb_types::{
6
6
core:: DepType ,
7
7
packed:: { CellOutput , OutPoint } ,
8
8
prelude:: * ,
9
- H256 ,
9
+ H160 , H256 ,
10
10
} ;
11
11
12
12
use crate :: {
@@ -289,17 +289,6 @@ fn test_omnilock_solana() {
289
289
omnilock_test ( cfg, & sign_context_2) ;
290
290
}
291
291
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
-
303
292
fn omnilock_test ( cfg : OmniLockConfig , sign_context : & SignContexts ) {
304
293
let network_info = NetworkInfo :: testnet ( ) ;
305
294
@@ -345,7 +334,7 @@ fn omnilock_test(cfg: OmniLockConfig, sign_context: &SignContexts) {
345
334
crate :: ScriptId :: new_data1 ( H256 :: from ( blake2b_256 ( OMNILOCK_BIN ) ) ) ,
346
335
crate :: transaction:: signer:: omnilock:: OmnilockSigner { } ,
347
336
)
348
- . sign_transaction ( & mut tx_with_groups, & sign_context)
337
+ . sign_transaction ( & mut tx_with_groups, sign_context)
349
338
. unwrap ( ) ;
350
339
351
340
// let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
@@ -369,3 +358,88 @@ fn omnilock_test(cfg: OmniLockConfig, sign_context: &SignContexts) {
369
358
370
359
ctx. verify ( tx, FEE_RATE ) . unwrap ( ) ;
371
360
}
361
+
362
+ #[ test]
363
+ fn test_omnilock_owner_lock ( ) {
364
+ test_omnilock_owner_lock_tranfer ( false ) ;
365
+ test_omnilock_owner_lock_tranfer ( true )
366
+ }
367
+
368
+ fn test_omnilock_owner_lock_tranfer ( cobuild : bool ) {
369
+ let network_info = NetworkInfo :: testnet ( ) ;
370
+ let receiver = build_sighash_script ( ACCOUNT2_ARG ) ;
371
+ let sender1 = build_sighash_script ( ACCOUNT0_ARG ) ;
372
+ let account0_key = secp256k1:: SecretKey :: from_slice ( ACCOUNT0_KEY . as_bytes ( ) ) . unwrap ( ) ;
373
+ let hash = H160 :: from_slice ( & sender1. calc_script_hash ( ) . as_slice ( ) [ 0 ..20 ] ) . unwrap ( ) ;
374
+ let mut cfg = OmniLockConfig :: new_ownerlock ( hash) ;
375
+ cfg. enable_cobuild ( cobuild) ;
376
+ let sender0 = build_omnilock_script ( & cfg) ;
377
+ let mut sign_context = SignContexts :: new_omnilock ( vec ! [ account0_key. clone( ) ] , cfg. clone ( ) ) ;
378
+ let hashall_unlock =
379
+ crate :: transaction:: signer:: sighash:: Secp256k1Blake160SighashAllSignerContext :: new ( vec ! [
380
+ account0_key. clone( ) ,
381
+ ] ) ;
382
+ sign_context. add_context ( Box :: new ( hashall_unlock) ) ;
383
+
384
+ let ( ctx, mut outpoints) = init_context (
385
+ vec ! [ ( OMNILOCK_BIN , true ) ] ,
386
+ vec ! [
387
+ ( sender0. clone( ) , Some ( 150 * ONE_CKB ) ) ,
388
+ ( sender1. clone( ) , Some ( 61 * ONE_CKB ) ) ,
389
+ ] ,
390
+ ) ;
391
+
392
+ let configuration = test_omnilock_config ( outpoints. pop ( ) . unwrap ( ) ) ;
393
+ let iterator = InputIterator :: new_with_cell_collector (
394
+ vec ! [ sender0. clone( ) , sender1. clone( ) ] ,
395
+ Box :: new ( ctx. to_live_cells_context ( ) ) as Box < _ > ,
396
+ ) ;
397
+ let mut builder = SimpleTransactionBuilder :: new ( configuration, iterator) ;
398
+ let output = CellOutput :: new_builder ( )
399
+ . capacity ( ( 110 * ONE_CKB ) . pack ( ) )
400
+ . lock ( receiver. clone ( ) )
401
+ . build ( ) ;
402
+ builder. add_output_and_data ( output. clone ( ) , ckb_types:: packed:: Bytes :: default ( ) ) ;
403
+ builder. set_change_lock ( sender0. clone ( ) ) ;
404
+
405
+ let context = OmnilockScriptContext :: new ( cfg. clone ( ) , network_info. url . clone ( ) ) ;
406
+ let mut contexts = HandlerContexts :: default ( ) ;
407
+ contexts. add_context ( Box :: new ( context) as Box < _ > ) ;
408
+
409
+ let mut tx_with_groups = builder. build ( & contexts) . expect ( "build failed" ) ;
410
+
411
+ // let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
412
+ // println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
413
+
414
+ TransactionSigner :: new ( & network_info)
415
+ // use unitest lock to verify
416
+ . insert_unlocker (
417
+ crate :: ScriptId :: new_data1 ( H256 :: from ( blake2b_256 ( OMNILOCK_BIN ) ) ) ,
418
+ crate :: transaction:: signer:: omnilock:: OmnilockSigner { } ,
419
+ )
420
+ . sign_transaction ( & mut tx_with_groups, & sign_context)
421
+ . unwrap ( ) ;
422
+
423
+ let tx = tx_with_groups. get_tx_view ( ) . clone ( ) ;
424
+ // let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
425
+ // println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
426
+
427
+ let script_groups = tx_with_groups. script_groups . clone ( ) ;
428
+ assert_eq ! ( script_groups. len( ) , 2 ) ;
429
+ assert_eq ! ( tx. header_deps( ) . len( ) , 0 ) ;
430
+ assert_eq ! ( tx. cell_deps( ) . len( ) , 2 ) ;
431
+ assert_eq ! ( tx. inputs( ) . len( ) , 2 ) ;
432
+ let mut senders = vec ! [ sender0. clone( ) , sender1. clone( ) ] ;
433
+ for out_point in tx. input_pts_iter ( ) {
434
+ let sender = ctx. get_input ( & out_point) . unwrap ( ) . 0 . lock ( ) ;
435
+ assert ! ( senders. contains( & sender) ) ;
436
+ senders. retain ( |x| x != & sender) ;
437
+ }
438
+ assert_eq ! ( tx. outputs( ) . len( ) , 2 ) ;
439
+ assert_eq ! ( tx. output( 0 ) . unwrap( ) , output) ;
440
+ assert_eq ! ( tx. output( 1 ) . unwrap( ) . lock( ) , sender0) ;
441
+ let change_capacity: u64 = tx. output ( 1 ) . unwrap ( ) . capacity ( ) . unpack ( ) ;
442
+ let fee = ( 150 + 61 - 110 ) * ONE_CKB - change_capacity;
443
+ assert_eq ! ( tx. data( ) . as_reader( ) . serialized_size_in_block( ) as u64 , fee) ;
444
+ ctx. verify ( tx, FEE_RATE ) . unwrap ( ) ;
445
+ }
0 commit comments