@@ -291,20 +291,26 @@ impl crate::testutils::MuxedAddress for MuxedAddress {
291291 sc_val. try_into_val ( env) . unwrap ( )
292292 }
293293
294- fn clone_with_id ( & self , new_id : u64 ) -> crate :: MuxedAddress {
295- let mut sc_val = ScVal :: try_from_val ( & self . env , self . as_val ( ) ) . unwrap ( ) ;
296- match & mut sc_val {
294+ fn new < T : Into < MuxedAddress > > ( address : T , id : u64 ) -> crate :: MuxedAddress {
295+ let address: MuxedAddress = address. into ( ) ;
296+ let sc_val = ScVal :: try_from_val ( & address. env , address. as_val ( ) ) . unwrap ( ) ;
297+ let account_id = match sc_val {
297298 ScVal :: Address ( address) => match address {
298- ScAddress :: MuxedAccount ( muxed_account) => {
299- muxed_account. id = new_id;
300- }
301- ScAddress :: Account ( _)
302- | ScAddress :: Contract ( _)
303- | ScAddress :: ClaimableBalance ( _)
304- | ScAddress :: LiquidityPool ( _) => unreachable ! ( ) ,
299+ ScAddress :: MuxedAccount ( muxed_account) => muxed_account. ed25519 ,
300+ ScAddress :: Account ( crate :: env:: internal:: xdr:: AccountId (
301+ crate :: env:: internal:: xdr:: PublicKey :: PublicKeyTypeEd25519 ( account_id) ,
302+ ) ) => account_id,
303+ ScAddress :: Contract ( _) => panic ! ( "contract addresses can not be multiplexed" ) ,
304+ ScAddress :: ClaimableBalance ( _) | ScAddress :: LiquidityPool ( _) => unreachable ! ( ) ,
305305 } ,
306306 _ => unreachable ! ( ) ,
307- }
308- sc_val. try_into_val ( & self . env ) . unwrap ( )
307+ } ;
308+ let result_sc_val = ScVal :: Address ( ScAddress :: MuxedAccount (
309+ crate :: env:: internal:: xdr:: MuxedEd25519Account {
310+ id,
311+ ed25519 : account_id,
312+ } ,
313+ ) ) ;
314+ result_sc_val. try_into_val ( & address. env ) . unwrap ( )
309315 }
310316}
0 commit comments