@@ -4,6 +4,7 @@ use std::str::FromStr;
4
4
use ic_base_types:: { CanisterId , PrincipalId , SubnetId } ;
5
5
use ic_btc_interface:: NetworkInRequest as BitcoinNetwork ;
6
6
use ic_error_types:: UserError ;
7
+ use ic_logger:: { info, ReplicaLogger } ;
7
8
use ic_management_canister_types_private:: {
8
9
BitcoinGetBalanceArgs , BitcoinGetBlockHeadersArgs , BitcoinGetCurrentFeePercentilesArgs ,
9
10
BitcoinGetUtxosArgs , BitcoinSendTransactionArgs , CanisterIdRecord , CanisterInfoRequest ,
@@ -57,6 +58,8 @@ pub(super) fn resolve_destination(
57
58
method_name : & str ,
58
59
payload : & [ u8 ] ,
59
60
own_subnet : SubnetId ,
61
+ caller : CanisterId ,
62
+ logger : & ReplicaLogger ,
60
63
) -> Result < PrincipalId , ResolveDestinationError > {
61
64
// Figure out the destination subnet based on the method and the payload.
62
65
let method = Ic00Method :: from_str ( method_name) ;
@@ -131,6 +134,9 @@ pub(super) fn resolve_destination(
131
134
args. network ,
132
135
network_topology,
133
136
own_subnet,
137
+ caller,
138
+ method_name,
139
+ logger,
134
140
) )
135
141
}
136
142
Ok ( Ic00Method :: BitcoinGetUtxos ) => {
@@ -139,6 +145,9 @@ pub(super) fn resolve_destination(
139
145
args. network ,
140
146
network_topology,
141
147
own_subnet,
148
+ caller,
149
+ method_name,
150
+ logger,
142
151
) )
143
152
}
144
153
Ok ( Ic00Method :: BitcoinGetBlockHeaders ) => {
@@ -147,6 +156,9 @@ pub(super) fn resolve_destination(
147
156
args. network ,
148
157
network_topology,
149
158
own_subnet,
159
+ caller,
160
+ method_name,
161
+ logger,
150
162
) )
151
163
}
152
164
Ok ( Ic00Method :: BitcoinSendTransaction ) => {
@@ -156,6 +168,9 @@ pub(super) fn resolve_destination(
156
168
args. network ,
157
169
network_topology,
158
170
own_subnet,
171
+ caller,
172
+ method_name,
173
+ logger,
159
174
) )
160
175
}
161
176
Ok ( Ic00Method :: BitcoinGetCurrentFeePercentiles ) => {
@@ -164,6 +179,9 @@ pub(super) fn resolve_destination(
164
179
args. network ,
165
180
network_topology,
166
181
own_subnet,
182
+ caller,
183
+ method_name,
184
+ logger,
167
185
) )
168
186
}
169
187
Ok ( Ic00Method :: NodeMetricsHistory ) => {
@@ -431,7 +449,17 @@ fn route_bitcoin_message(
431
449
network : BitcoinNetwork ,
432
450
network_topology : & NetworkTopology ,
433
451
own_subnet : SubnetId ,
452
+ caller : CanisterId ,
453
+ method_name : & str ,
454
+ logger : & ReplicaLogger ,
434
455
) -> PrincipalId {
456
+ info ! (
457
+ logger,
458
+ "Canister {} called Bitcoin method {} with network: {:?} directly on the management canister" ,
459
+ caller,
460
+ method_name,
461
+ network
462
+ ) ;
435
463
match network {
436
464
// Route to the bitcoin canister if it exists, otherwise route to own subnet.
437
465
// NOTE: Local deployments can run regtest mode for testing, and that routes to the
@@ -455,6 +483,7 @@ mod tests {
455
483
use assert_matches:: assert_matches;
456
484
use candid:: Encode ;
457
485
use ic_base_types:: RegistryVersion ;
486
+ use ic_logger:: no_op_logger;
458
487
use ic_management_canister_types_private:: {
459
488
DerivationPath , EcdsaCurve , EcdsaKeyId , SchnorrAlgorithm , SchnorrKeyId , SignWithECDSAArgs ,
460
489
VetKdCurve , VetKdKeyId ,
@@ -612,6 +641,7 @@ mod tests {
612
641
613
642
#[ test]
614
643
fn resolve_reshare_chain_key ( ) {
644
+ let logger = no_op_logger ( ) ;
615
645
for ( network_topology, key_id) in [
616
646
( network_with_ecdsa_subnets ( ) , ecdsa_master_key_id ( 1 ) ) ,
617
647
( network_with_schnorr_subnets ( ) , schnorr_master_key_id ( 1 ) ) ,
@@ -623,6 +653,8 @@ mod tests {
623
653
& Ic00Method :: ReshareChainKey . to_string( ) ,
624
654
& reshare_chain_key_request( key_id. clone( ) , subnet_test_id( 1 ) ) ,
625
655
subnet_test_id( 2 ) ,
656
+ canister_test_id( 1 ) ,
657
+ & logger,
626
658
)
627
659
. unwrap( ) ,
628
660
PrincipalId :: new_subnet_test_id( 1 )
@@ -632,6 +664,7 @@ mod tests {
632
664
633
665
#[ test]
634
666
fn resolve_reshare_chain_key_key_not_held_error ( ) {
667
+ let logger = no_op_logger ( ) ;
635
668
for ( network_topology, key_id) in [
636
669
( network_with_ecdsa_subnets ( ) , ecdsa_master_key_id ( 1 ) ) ,
637
670
( network_with_schnorr_subnets ( ) , schnorr_master_key_id ( 1 ) ) ,
@@ -643,6 +676,8 @@ mod tests {
643
676
& Ic00Method :: ReshareChainKey . to_string( ) ,
644
677
& reshare_chain_key_request( key_id. clone( ) , subnet_test_id( 2 ) ) ,
645
678
subnet_test_id( 2 ) ,
679
+ canister_test_id( 1 ) ,
680
+ & logger,
646
681
)
647
682
. unwrap_err( ) ,
648
683
ResolveDestinationError :: ChainKeyError ( err) => assert_eq!(
@@ -659,6 +694,7 @@ mod tests {
659
694
660
695
#[ test]
661
696
fn resolve_reshare_chain_key_unknown_subnet_error ( ) {
697
+ let logger = no_op_logger ( ) ;
662
698
for ( network_topology, key_id) in [
663
699
( network_with_ecdsa_subnets ( ) , ecdsa_master_key_id ( 1 ) ) ,
664
700
( network_with_schnorr_subnets ( ) , schnorr_master_key_id ( 1 ) ) ,
@@ -670,6 +706,8 @@ mod tests {
670
706
& Ic00Method :: ReshareChainKey . to_string( ) ,
671
707
& reshare_chain_key_request( key_id. clone( ) , subnet_test_id( 3 ) ) ,
672
708
subnet_test_id( 2 ) ,
709
+ canister_test_id( 1 ) ,
710
+ & logger,
673
711
)
674
712
. unwrap_err( ) ,
675
713
ResolveDestinationError :: ChainKeyError ( err) => assert_eq!(
@@ -686,6 +724,7 @@ mod tests {
686
724
687
725
#[ test]
688
726
fn resolve_reshare_chain_key_wrong_subnet_error ( ) {
727
+ let logger = no_op_logger ( ) ;
689
728
for ( network_topology, key_id) in [
690
729
( network_with_ecdsa_subnets ( ) , ecdsa_master_key_id ( 1 ) ) ,
691
730
( network_with_schnorr_subnets ( ) , schnorr_master_key_id ( 1 ) ) ,
@@ -698,6 +737,8 @@ mod tests {
698
737
// Subnet 2 doesn't have the requested key.
699
738
& reshare_chain_key_request( key_id. clone( ) , subnet_test_id( 2 ) ) ,
700
739
subnet_test_id( 2 ) ,
740
+ canister_test_id( 1 ) ,
741
+ & logger,
701
742
)
702
743
. unwrap_err( ) ,
703
744
ResolveDestinationError :: ChainKeyError ( err) => assert_eq!(
@@ -714,6 +755,7 @@ mod tests {
714
755
715
756
#[ test]
716
757
fn resolve_reshare_chain_key_subnet_not_found_error ( ) {
758
+ let logger = no_op_logger ( ) ;
717
759
for ( network_topology, key_id) in [
718
760
( network_with_ecdsa_subnets ( ) , ecdsa_master_key_id ( 1 ) ) ,
719
761
( network_with_schnorr_subnets ( ) , schnorr_master_key_id ( 1 ) ) ,
@@ -726,6 +768,8 @@ mod tests {
726
768
// Subnet 3 doesn't exist
727
769
& reshare_chain_key_request( key_id. clone( ) , subnet_test_id( 3 ) ) ,
728
770
subnet_test_id( 2 ) ,
771
+ canister_test_id( 1 ) ,
772
+ & logger,
729
773
)
730
774
. unwrap_err( ) ,
731
775
ResolveDestinationError :: ChainKeyError ( err) => assert_eq!(
@@ -742,6 +786,7 @@ mod tests {
742
786
743
787
#[ test]
744
788
fn resolve_chain_key_request ( ) {
789
+ let logger = no_op_logger ( ) ;
745
790
for ( network_topology, method, payload) in [
746
791
(
747
792
network_with_ecdsa_subnets ( ) ,
@@ -765,6 +810,8 @@ mod tests {
765
810
& method. to_string( ) ,
766
811
& payload,
767
812
subnet_test_id( 1 ) ,
813
+ canister_test_id( 1 ) ,
814
+ & logger,
768
815
)
769
816
. unwrap( ) ,
770
817
PrincipalId :: new_subnet_test_id( 0 )
@@ -774,6 +821,7 @@ mod tests {
774
821
775
822
#[ test]
776
823
fn resolve_chain_key_request_error ( ) {
824
+ let logger = no_op_logger ( ) ;
777
825
for ( method, payload, master_key_id) in [
778
826
(
779
827
Ic00Method :: SignWithECDSA ,
@@ -796,6 +844,8 @@ mod tests {
796
844
& method. to_string( ) ,
797
845
& payload,
798
846
subnet_test_id( 1 ) ,
847
+ canister_test_id( 1 ) ,
848
+ & logger,
799
849
)
800
850
. unwrap_err( ) ,
801
851
ResolveDestinationError :: ChainKeyError ( err) => assert_eq!(
@@ -811,6 +861,7 @@ mod tests {
811
861
812
862
#[ test]
813
863
fn resolve_chain_key_public_key_works_with_disabled_keys ( ) {
864
+ let logger = no_op_logger ( ) ;
814
865
for ( network_topology, method, payload) in [
815
866
(
816
867
network_with_ecdsa_subnets ( ) ,
@@ -834,6 +885,8 @@ mod tests {
834
885
& method. to_string( ) ,
835
886
& payload,
836
887
subnet_test_id( 1 ) ,
888
+ canister_test_id( 1 ) ,
889
+ & logger,
837
890
)
838
891
. unwrap( ) ,
839
892
PrincipalId :: new_subnet_test_id( 0 )
@@ -843,6 +896,7 @@ mod tests {
843
896
844
897
#[ test]
845
898
fn resolve_reshare_chain_key_works_with_disabled_keys ( ) {
899
+ let logger = no_op_logger ( ) ;
846
900
for ( network_topology, key_id) in [
847
901
( network_with_ecdsa_subnets ( ) , ecdsa_master_key_id ( 1 ) ) ,
848
902
( network_with_schnorr_subnets ( ) , schnorr_master_key_id ( 1 ) ) ,
@@ -854,6 +908,8 @@ mod tests {
854
908
& Ic00Method :: ReshareChainKey . to_string( ) ,
855
909
& reshare_chain_key_request( key_id, subnet_test_id( 0 ) ) ,
856
910
subnet_test_id( 1 ) ,
911
+ canister_test_id( 1 ) ,
912
+ & logger,
857
913
)
858
914
. unwrap( ) ,
859
915
PrincipalId :: new_subnet_test_id( 0 )
0 commit comments