@@ -33,15 +33,15 @@ use {
3333
3434#[ tokio:: test]
3535async fn success_initialize ( ) {
36- for ( scale , authority) in [
36+ for ( multiplier , authority) in [
3737 ( f64:: MIN_POSITIVE , None ) ,
3838 ( f64:: MAX , Some ( Pubkey :: new_unique ( ) ) ) ,
3939 ] {
4040 let mut context = TestContext :: new ( ) . await ;
4141 context
4242 . init_token_with_mint ( vec ! [ ExtensionInitializationParams :: ScaledUiAmountConfig {
4343 authority,
44- scale ,
44+ multiplier ,
4545 } ] )
4646 . await
4747 . unwrap ( ) ;
@@ -50,42 +50,95 @@ async fn success_initialize() {
5050 let state = token. get_mint_info ( ) . await . unwrap ( ) ;
5151 let extension = state. get_extension :: < ScaledUiAmountConfig > ( ) . unwrap ( ) ;
5252 assert_eq ! ( Option :: <Pubkey >:: from( extension. authority) , authority, ) ;
53- assert_eq ! ( f64 :: from( extension. scale) , scale) ;
53+ assert_eq ! ( f64 :: from( extension. multiplier) , multiplier) ;
54+ assert_eq ! ( f64 :: from( extension. new_multiplier) , multiplier) ;
55+ assert_eq ! ( i64 :: from( extension. new_multiplier_effective_timestamp) , 0 ) ;
5456 }
5557}
5658
5759#[ tokio:: test]
58- async fn update_scale ( ) {
60+ async fn fail_initialize_with_interest_bearing ( ) {
61+ let authority = None ;
62+ let mut context = TestContext :: new ( ) . await ;
63+ let err = context
64+ . init_token_with_mint ( vec ! [
65+ ExtensionInitializationParams :: ScaledUiAmountConfig {
66+ authority,
67+ multiplier: 1.0 ,
68+ } ,
69+ ExtensionInitializationParams :: InterestBearingConfig {
70+ rate_authority: None ,
71+ rate: 0 ,
72+ } ,
73+ ] )
74+ . await
75+ . unwrap_err ( ) ;
76+ assert_eq ! (
77+ err,
78+ TokenClientError :: Client ( Box :: new( TransportError :: TransactionError (
79+ TransactionError :: InstructionError (
80+ 3 ,
81+ InstructionError :: Custom ( TokenError :: InvalidExtensionCombination as u32 )
82+ )
83+ ) ) )
84+ ) ;
85+ }
86+
87+ #[ tokio:: test]
88+ async fn update_multiplier ( ) {
5989 let authority = Keypair :: new ( ) ;
60- let initial_scale = 5.0 ;
90+ let initial_multiplier = 5.0 ;
6191 let mut context = TestContext :: new ( ) . await ;
6292 context
6393 . init_token_with_mint ( vec ! [ ExtensionInitializationParams :: ScaledUiAmountConfig {
6494 authority: Some ( authority. pubkey( ) ) ,
65- scale : initial_scale ,
95+ multiplier : initial_multiplier ,
6696 } ] )
6797 . await
6898 . unwrap ( ) ;
6999 let TokenContext { token, .. } = context. token_context . take ( ) . unwrap ( ) ;
70100
71101 let state = token. get_mint_info ( ) . await . unwrap ( ) ;
72102 let extension = state. get_extension :: < ScaledUiAmountConfig > ( ) . unwrap ( ) ;
73- assert_eq ! ( f64 :: from( extension. scale) , initial_scale) ;
103+ assert_eq ! ( f64 :: from( extension. multiplier) , initial_multiplier) ;
104+ assert_eq ! ( f64 :: from( extension. new_multiplier) , initial_multiplier) ;
74105
75106 // correct
76- let new_scale = 10.0 ;
107+ let new_multiplier = 10.0 ;
108+ token
109+ . update_multiplier ( & authority. pubkey ( ) , new_multiplier, 0 , & [ & authority] )
110+ . await
111+ . unwrap ( ) ;
112+ let state = token. get_mint_info ( ) . await . unwrap ( ) ;
113+ let extension = state. get_extension :: < ScaledUiAmountConfig > ( ) . unwrap ( ) ;
114+ assert_eq ! ( f64 :: from( extension. multiplier) , new_multiplier) ;
115+ assert_eq ! ( f64 :: from( extension. new_multiplier) , new_multiplier) ;
116+ assert_eq ! ( i64 :: from( extension. new_multiplier_effective_timestamp) , 0 ) ;
117+
118+ // correct in the future
119+ let newest_multiplier = 100.0 ;
77120 token
78- . update_scale ( & authority. pubkey ( ) , new_scale, & [ & authority] )
121+ . update_multiplier (
122+ & authority. pubkey ( ) ,
123+ newest_multiplier,
124+ i64:: MAX ,
125+ & [ & authority] ,
126+ )
79127 . await
80128 . unwrap ( ) ;
81129 let state = token. get_mint_info ( ) . await . unwrap ( ) ;
82130 let extension = state. get_extension :: < ScaledUiAmountConfig > ( ) . unwrap ( ) ;
83- assert_eq ! ( f64 :: from( extension. scale) , new_scale) ;
131+ assert_eq ! ( f64 :: from( extension. multiplier) , new_multiplier) ;
132+ assert_eq ! ( f64 :: from( extension. new_multiplier) , newest_multiplier) ;
133+ assert_eq ! (
134+ i64 :: from( extension. new_multiplier_effective_timestamp) ,
135+ i64 :: MAX
136+ ) ;
84137
85138 // wrong signer
86139 let wrong_signer = Keypair :: new ( ) ;
87140 let err = token
88- . update_scale ( & wrong_signer. pubkey ( ) , 1.0 , & [ & wrong_signer] )
141+ . update_multiplier ( & wrong_signer. pubkey ( ) , 1.0 , 0 , & [ & wrong_signer] )
89142 . await
90143 . unwrap_err ( ) ;
91144 assert_eq ! (
@@ -102,12 +155,12 @@ async fn update_scale() {
102155#[ tokio:: test]
103156async fn set_authority ( ) {
104157 let authority = Keypair :: new ( ) ;
105- let initial_scale = 500.0 ;
158+ let initial_multiplier = 500.0 ;
106159 let mut context = TestContext :: new ( ) . await ;
107160 context
108161 . init_token_with_mint ( vec ! [ ExtensionInitializationParams :: ScaledUiAmountConfig {
109162 authority: Some ( authority. pubkey( ) ) ,
110- scale : initial_scale ,
163+ multiplier : initial_multiplier ,
111164 } ] )
112165 . await
113166 . unwrap ( ) ;
@@ -132,11 +185,11 @@ async fn set_authority() {
132185 Some ( new_authority. pubkey( ) ) . try_into( ) . unwrap( ) ,
133186 ) ;
134187 token
135- . update_scale ( & new_authority. pubkey ( ) , 10.0 , & [ & new_authority] )
188+ . update_multiplier ( & new_authority. pubkey ( ) , 10.0 , 0 , & [ & new_authority] )
136189 . await
137190 . unwrap ( ) ;
138191 let err = token
139- . update_scale ( & authority. pubkey ( ) , 100.0 , & [ & authority] )
192+ . update_multiplier ( & authority. pubkey ( ) , 100.0 , 0 , & [ & authority] )
140193 . await
141194 . unwrap_err ( ) ;
142195 assert_eq ! (
@@ -166,7 +219,7 @@ async fn set_authority() {
166219
167220 // now all fail
168221 let err = token
169- . update_scale ( & new_authority. pubkey ( ) , 50.0 , & [ & new_authority] )
222+ . update_multiplier ( & new_authority. pubkey ( ) , 50.0 , 0 , & [ & new_authority] )
170223 . await
171224 . unwrap_err ( ) ;
172225 assert_eq ! (
@@ -179,7 +232,7 @@ async fn set_authority() {
179232 ) ) )
180233 ) ;
181234 let err = token
182- . update_scale ( & authority. pubkey ( ) , 5.5 , & [ & authority] )
235+ . update_multiplier ( & authority. pubkey ( ) , 5.5 , 0 , & [ & authority] )
183236 . await
184237 . unwrap_err ( ) ;
185238 assert_eq ! (
@@ -256,11 +309,11 @@ async fn amount_conversions() {
256309 context,
257310 token_context : None ,
258311 } ;
259- let initial_scale = 5.0 ;
312+ let initial_multiplier = 5.0 ;
260313 context
261314 . init_token_with_mint ( vec ! [ ExtensionInitializationParams :: ScaledUiAmountConfig {
262315 authority: Some ( authority. pubkey( ) ) ,
263- scale : initial_scale ,
316+ multiplier : initial_multiplier ,
264317 } ] )
265318 . await
266319 . unwrap ( ) ;
0 commit comments