Exercise 7 (Challenge). Undo transfer upon Mis-issued Deposit

Suppose Alice calls transfer function in TokenX SC and then realizes transfer is unsupported in our AMM protocol. Alice may want to undo this mis-issued deposit (i.e., transfer). Extend your pool SC with function undo_transfer, so that Alice can call undo_transfer to request the token refund from the mis-issued deposit.

Design the argument list of function undo_transfer() and implement the function in the Pool SC.

We will grade your solution with the following test case:

Calls X.balanceOf(A) X.balanceOf(P)
Init state 1 0
A.transfer(P,1) 0 1
A.undo_transfer(...) 1 0

Meanwhile, your undo_transfer() function should be secured against thief Bob. That is, Bob cannot extract value from Alice's mis-issued deposit (by transfer). In this regard, we will grade your solution with the following test case:

Calls X.balanceOf(A) X.balanceOf(P) X.balanceOf(B)
Init state 1 0 0
A.transfer(P,1) 0 1 0
B.undo_transfer(...) 1 0 0