When you want to move the assets from a two or more stealth address to another stealth address or you want unshield the asset (in other words withdraw from the arcane contract) you’d call the transferFromMultiple function:
/** * @notice Transfer from multiple stealth addresses * @dev Allows for a single transaction to transfer tokens from multiple stealth addresses. * * In a situation where a user has multiple stealth addresses with some token T and wants to * transfer a certain amount of T, but one stealth address does not have enough T to transfer, * the user can use this function to transfer the tokens from multiple stealth addresses. * * Emits a {Transfer} event indicating the transfer * * @param _token token to transfer * @param _senders an array of stealth addresses to transfer the token from * @param _amounts an array of amounts to transfer from each stealth address respectively * @param _totalAmount the total amount of tokens to transfer * @param _receiver the stealth address to transfer the token to * @param _signatures an array of signatures of the senders respectively * @param _transferData extra parameters for the transfer * @param _announcementData the transfer announcement data */functiontransferFromMultiple(address_token,address[] calldata_senders,uint256[] calldata_amounts,uint256_totalAmount,address payable _receiver,Signature[] calldata_signatures,TransferDatacalldata_transferData,AnnouncementDatacalldata_announcementData) external;
You’d notice the _signatures paramater, this is a list of signature generated using the private keys of the _senders respectively.