@@ -12,6 +12,7 @@ use ic_ckbtc_minter::state::{Mode, RetrieveBtcStatus};
12
12
use ic_ckbtc_minter:: updates:: get_btc_address:: GetBtcAddressArgs ;
13
13
use ic_ckbtc_minter:: updates:: retrieve_btc:: { RetrieveBtcArgs , RetrieveBtcError , RetrieveBtcOk } ;
14
14
use ic_ckbtc_minter:: updates:: update_balance:: { UpdateBalanceArgs , UpdateBalanceError , UtxoStatus } ;
15
+ use ic_ckbtc_minter:: MinterInfo ;
15
16
use ic_icrc1_ledger:: { ArchiveOptions , InitArgs as LedgerInitArgs , LedgerArgument } ;
16
17
use ic_state_machine_tests:: { Cycles , StateMachine , StateMachineBuilder , WasmResult } ;
17
18
use ic_test_utilities_load_wasm:: load_wasm;
@@ -495,7 +496,7 @@ impl CkBtcSetup {
495
496
env. execute_ingress (
496
497
bitcoin_id,
497
498
"set_fee_percentiles" ,
498
- Encode ! ( & ( 1 ..=100 ) . collect:: <Vec <u64 >>( ) ) . unwrap ( ) ,
499
+ Encode ! ( & ( 1 ..=100 ) . map ( |i| i * 100 ) . collect:: <Vec <u64 >>( ) ) . unwrap ( ) ,
499
500
)
500
501
. expect ( "failed to set fee percentiles" ) ;
501
502
@@ -520,6 +521,16 @@ impl CkBtcSetup {
520
521
}
521
522
}
522
523
524
+ pub fn set_fee_percentiles ( & self , fees : & Vec < u64 > ) {
525
+ self . env
526
+ . execute_ingress (
527
+ self . bitcoin_id ,
528
+ "set_fee_percentiles" ,
529
+ Encode ! ( fees) . unwrap ( ) ,
530
+ )
531
+ . expect ( "failed to set fee percentiles" ) ;
532
+ }
533
+
523
534
pub fn push_utxo ( & self , address : String , utxo : Utxo ) {
524
535
assert_reply (
525
536
self . env
@@ -554,7 +565,19 @@ impl CkBtcSetup {
554
565
. unwrap ( )
555
566
}
556
567
557
- pub fn estimate_withdrawal_fee ( & self , amount : Option < u64 > ) -> WithdrawalFee {
568
+ pub fn get_minter_info ( & self ) -> MinterInfo {
569
+ Decode ! (
570
+ & assert_reply(
571
+ self . env
572
+ . execute_ingress( self . minter_id, "get_minter_info" , Encode !( ) . unwrap( ) , )
573
+ . expect( "failed to get minter info" )
574
+ ) ,
575
+ MinterInfo
576
+ )
577
+ . unwrap ( )
578
+ }
579
+
580
+ pub fn refresh_fee_percentiles ( & self ) {
558
581
Decode ! (
559
582
& assert_reply(
560
583
self . env
@@ -569,7 +592,10 @@ impl CkBtcSetup {
569
592
( )
570
593
)
571
594
. unwrap ( ) ;
595
+ }
572
596
597
+ pub fn estimate_withdrawal_fee ( & self , amount : Option < u64 > ) -> WithdrawalFee {
598
+ self . refresh_fee_percentiles ( ) ;
573
599
Decode ! (
574
600
& assert_reply(
575
601
self . env
@@ -843,3 +869,33 @@ fn test_transaction_finalization() {
843
869
844
870
assert_eq ! ( ckbtc. await_finalization( block_index, 10 ) , txid) ;
845
871
}
872
+
873
+ #[ test]
874
+ fn test_min_retrieval_amount ( ) {
875
+ let ckbtc = CkBtcSetup :: new ( ) ;
876
+
877
+ ckbtc. refresh_fee_percentiles ( ) ;
878
+ let retrieve_btc_min_amount = ckbtc. get_minter_info ( ) . retrieve_btc_min_amount ;
879
+ assert_eq ! ( retrieve_btc_min_amount, 100_000 ) ;
880
+
881
+ // The numbers used in this test have been re-computed using a python script using integers.
882
+ ckbtc. set_fee_percentiles ( & vec ! [ 0 ; 100 ] ) ;
883
+ ckbtc. refresh_fee_percentiles ( ) ;
884
+ let retrieve_btc_min_amount = ckbtc. get_minter_info ( ) . retrieve_btc_min_amount ;
885
+ assert_eq ! ( retrieve_btc_min_amount, 100_000 ) ;
886
+
887
+ ckbtc. set_fee_percentiles ( & vec ! [ 116_000 ; 100 ] ) ;
888
+ ckbtc. refresh_fee_percentiles ( ) ;
889
+ let retrieve_btc_min_amount = ckbtc. get_minter_info ( ) . retrieve_btc_min_amount ;
890
+ assert_eq ! ( retrieve_btc_min_amount, 150_000 ) ;
891
+
892
+ ckbtc. set_fee_percentiles ( & vec ! [ 342_000 ; 100 ] ) ;
893
+ ckbtc. refresh_fee_percentiles ( ) ;
894
+ let retrieve_btc_min_amount = ckbtc. get_minter_info ( ) . retrieve_btc_min_amount ;
895
+ assert_eq ! ( retrieve_btc_min_amount, 150_000 ) ;
896
+
897
+ ckbtc. set_fee_percentiles ( & vec ! [ 343_000 ; 100 ] ) ;
898
+ ckbtc. refresh_fee_percentiles ( ) ;
899
+ let retrieve_btc_min_amount = ckbtc. get_minter_info ( ) . retrieve_btc_min_amount ;
900
+ assert_eq ! ( retrieve_btc_min_amount, 200_000 ) ;
901
+ }
0 commit comments