Looks complicated... Maybe you could have a look at this first, before scrolling down.
How do I use the flag: authorization revocable
.
.
.
2 operations are related to your questions: [Set Options] & [Allow Trust]. Both operations can only be done by the asset issuer.
And 3 info essential to your questions: (I'll skip explanations here)
- Allow Trust
- Set Options >> Flags
Authorization required (0x1): Requires the issuing account to give other accounts permission before they can hold the issuing account’s credit.
- Asset freezing
This can be useful for national currencies, but is not always applicable to other kinds of assets.
(so it may not be applicable to your case..)
Q1
For example, is it only possible to use the freezing option after the tokens only moved one-hop away from the original wallet or can it still be done after the tokens have circulated between many wallets?
Seems unlikely to monitor how many hops easily. Stellar Smart Contract functionality handles rather simple use cases, but it seems too generic. It is simpler to implement on your application level.
Can the assets be repeatedly frozen/unfrozen?
Yes.
"0x1"
flag lets the asset issuer to allow someone to handle (send/receive) the issued assets, i.e. "unfreezing"
"0x2"
flag lets the asset issuer to ban someone to handle the issued assets, i.e. "freezing.
Q2
Once the assets are frozen, they can only be moved to the original wallet but is it possible to only move a portion of the frozen assets or is movement of asset allowed only when the full amount of the frozen tokens is transferred?
This is revoking, and I am not sure how it works.
Just tested that after the ISSUER set "0x2"
flag to an account: this account could not handle the asset at all. He couldn't even send it (any amount) back to the asset issuer, failing with "op_src_not_authorized" code.
Not sure if I made something wrong, as it is supposed to be able to send the asset back to the issuer. If capable, the amount to be sent back should be unconstrained.
Q3
Are the assets unfrozen automatically once they come back to the original wallet?
I am not sure with what you mean by "original wallet". A note is that revoking concerns with the asset issuer, and once again I have no idea how revoking works..
What exactly needs to be done to unfreeze them?
Set the flag "0x1"
to the account that you have frozen the asset at.