@@ -3,15 +3,17 @@ use crate::prelude::{Address, U256};
33use crate :: utils:: {
44 self ,
55 solidity:: erc20:: { self , ERC20Constructor , ERC20 } ,
6- Signer ,
6+ str_to_account_id , Signer ,
77} ;
88use aurora_engine:: engine:: EngineErrorKind ;
99use aurora_engine:: parameters:: TransactionStatus ;
1010use aurora_engine_sdk as sdk;
1111use aurora_engine_types:: account_id:: AccountId ;
12+ use aurora_engine_types:: borsh:: BorshSerialize ;
1213use aurora_engine_types:: parameters:: connector:: {
1314 Erc20Identifier , Erc20Metadata , SetErc20MetadataArgs ,
1415} ;
16+ use aurora_engine_types:: parameters:: engine:: SetOwnerArgs ;
1517use bstr:: ByteSlice ;
1618use libsecp256k1:: SecretKey ;
1719use std:: str:: FromStr ;
@@ -297,6 +299,70 @@ fn test_erc20_get_and_set_metadata() {
297299 assert_eq ! ( metadata, new_metadata) ;
298300}
299301
302+ #[ test]
303+ fn test_erc20_get_and_set_metadata_by_owner ( ) {
304+ let mut runner = utils:: deploy_runner ( ) ;
305+ let token_account_id = "token" ;
306+ let erc20_address = runner. deploy_erc20_token ( token_account_id) ;
307+ let caller = runner. aurora_account_id . clone ( ) ;
308+
309+ // Change the owner of the aurora contract
310+ let new_owner = "new_owner" ;
311+ let set_owner_args = SetOwnerArgs {
312+ new_owner : str_to_account_id ( new_owner) ,
313+ } ;
314+
315+ let result = runner. call ( "set_owner" , & caller, set_owner_args. try_to_vec ( ) . unwrap ( ) ) ;
316+ assert ! ( result. is_ok( ) ) ;
317+
318+ let caller = new_owner;
319+
320+ // Getting ERC-20 metadata by Address.
321+ let result = runner. one_shot ( ) . call (
322+ "get_erc20_metadata" ,
323+ caller,
324+ serde_json:: to_vec :: < Erc20Identifier > ( & erc20_address. into ( ) ) . unwrap ( ) ,
325+ ) ;
326+
327+ assert ! ( result. is_ok( ) ) ;
328+
329+ let metadata: Erc20Metadata =
330+ serde_json:: from_slice ( & result. unwrap ( ) . return_data . as_value ( ) . unwrap ( ) ) . unwrap ( ) ;
331+ assert_eq ! ( metadata, Erc20Metadata :: default ( ) ) ;
332+
333+ let new_metadata = Erc20Metadata {
334+ name : "USD Token" . to_string ( ) ,
335+ symbol : "USDT" . to_string ( ) ,
336+ decimals : 20 ,
337+ } ;
338+
339+ let result = runner. call (
340+ "set_erc20_metadata" ,
341+ caller,
342+ serde_json:: to_vec ( & SetErc20MetadataArgs {
343+ erc20_identifier : erc20_address. into ( ) ,
344+ metadata : new_metadata. clone ( ) ,
345+ } )
346+ . unwrap ( ) ,
347+ ) ;
348+ assert ! ( result. is_ok( ) ) ;
349+
350+ // Getting ERC-20 metadata by NEP-141 account id.
351+ let result = runner. one_shot ( ) . call (
352+ "get_erc20_metadata" ,
353+ caller,
354+ serde_json:: to_vec :: < Erc20Identifier > (
355+ & AccountId :: from_str ( token_account_id) . unwrap ( ) . into ( ) ,
356+ )
357+ . unwrap ( ) ,
358+ ) ;
359+ assert ! ( result. is_ok( ) ) ;
360+
361+ let metadata: Erc20Metadata =
362+ serde_json:: from_slice ( & result. unwrap ( ) . return_data . as_value ( ) . unwrap ( ) ) . unwrap ( ) ;
363+ assert_eq ! ( metadata, new_metadata) ;
364+ }
365+
300366fn get_address_erc20_balance (
301367 runner : & utils:: AuroraRunner ,
302368 signer : & Signer ,
0 commit comments