How a contract account can opt-in an ASA?
Yes, Contract Accounts can Opt-In ASAs if in their TEAL logic Opt-In transactions are properly handled. This means that when you build the Stateless ASC1 you have to include Opt-In transaction checks among its approval conditions.
Here you have some best practices to code an Opt-In approval for a Contract Account.
( (Scenario 1) OR ( ( Scenario 2 ) OR ( Scenario 3 ) ) AND Fee) ( ( Opt-in ) bnz ( ( Time Lock: ( ASA || Algos ) ) bnz ( Hash Lock: ASA Only ) ) && Fee )
Ok thanks i understand. However, a problem remains: Once the Opt-in transactions have been handled in the logic of the contract, when I send the Opt-in transaction for the contract account, a wallet is required but i don’t know which wallet to specify
goal (from the link above):
5. (Owner) Sign the opt-in transaction using the
asa-htlc.teal file as the logicSig
goal clerk sign -i asa-htlc-opt-in-escrow.utxn -o asa-htlc-opt-in-escrow.stxn -p asa-htlc.teal -d $DATA
Importantly, notice the
-p asa-htlc.teal which is the source TEAL program applied as the LogicSig to the unsigned transaction. No “wallet” is required; the program logic passing acts as the private key.
I have to use this instruction first right?
4. (Owner) Create an unsigned opt-in transaction from/to the escrow account for specified ASA
goal asset send -o asa-htlc-opt-in-escrow.utxn -a 0 --assetid $ASSET_ID -f $ESCROW_ACCOUNT -t $ESCROW_ACCOUNT -d $DATA
But when i try to send it i get this
open asa-htlc-opt-in-escrow.utxn: no such file or directory
Yes, Step 4 generates the unsigned transaction file for you. Please confirm you successfully completed Steps 1-3. It seems odd you would get that open error in step 4 (unless you don’t have write access to create the file?). If you got Step 2 to work, I assume you have write access. That will create a new compiled file asa-htlc.teal.tok file.
It’s been awhile since I last ran thru this example, so I’m going to start from the top see if I can reproduce your error. I’m happy to receive some feedback if I missing any steps or can improve the wording.
I tried to compile using
./sandbox goal clerk compile asa-htlc.teal
but i get the same error:
asa-htlc.teal: open asa-htlc.teal: no such file or directory
So i decided to compile using SDK and i get the contract account address
Modifying my test to use
thanks @fabrice for the reply. Unfortunately I didn’t understand how to transfer a teal program from outside to sandbox, can you help me?
The name of the container indeed changed with the new sandbox version.
It is now
If you want to compile the program
example.teal that is in your folder outside of the sandbox into
example.teal.tok, you do:
example.tealto the sandbox:
$ docker cp example.teal algorand-sandbox-algod:/opt/
- Enter the sandbox, and compile inside the sandbox:
$ ./sandbox enter algod Entering /bin/bash session in the algod container... root@e4fd29b8cee4:~/testnetwork/Node# cd root@e4fd29b8cee4:~# ls data example.teal start_algod.sh testnetwork root@e4fd29b8cee4:~# goal clerk compile example.teal example.teal: 6Z3C3LDVWGMX23BMSYMANACQOSINPFIRF77H7N3AWJZYV6OH6GWTJKVMXY root@e4fd29b8cee4:~# ls data example.teal example.teal.tok start_algod.sh testnetwork root@e4fd29b8cee4:~# exit exit
- Retrieve the compiled program:
$ docker cp algorand-sandbox-algod:/opt/example.teal.tok .
Thank you so much, finally everything works correctly !!