Approval program's length - General - Algorand

Approval program’s length

post by cotunho on May 14, 2021

I’m writing a Smart Contract in PyTeal, so an approval program and a clear program.

After I added some functions, I got this error: invalid : approval program too long. max len 1024 bytes, that let me think approval program couldn’t be longer. For me that’s a problem because I have to add so many lines of code.

Is there a solution to avoid this problem?

EDIT: to be clearer: my code is in approval_program function and I defined some functions out of approval_program.

In approval_program I call these function that I defined out of it.

post by Maugli on May 14, 2021

Situation is even worse: application “gas” cost can be only 700 unit, in contract with passive contract “gas” of 20000.

Separate logic as far as possible: app, for asset sending logic: contract. And the contract can be enabled/disabled by the app, and vice versa, using transaction groups. See the following great article: AlgoRealm, a NFT Royalty Game | Algorand Developer Portal

post by cotunho on May 14, 2021

What do you mean with ?

I’m not very practical with contracts and apps in this platform.

I’m using a program like this: PyTeal Examples — PyTeal documentation, so the only thing I’m using is an application defined by approval program. I can’t understand the difference between application and contract.

The real question is: my approval_program currently is 30KB and I have to write so many lines more. Is there a way to implement it in-chain? Or Algorand don’t support complex logics like this?

post by Maugli on May 14, 2021

Please try to read the article first I referred to.

Yes, there is a way to make applications cooperate, by sharing variables, but I haven’t tried that yet.

Now is the time to make a framework, to make your example working.

Btw, how could you write 30 K worth of rules? (in TEAL, I think) What kind of rules are that? I am curious…

post by cotunho on May 14, 2021

Actually my work is bachelor’s degree project, in which I try to implement an authentication system, based on biometrics, in-chain. So I tried to manage negative or float values, to avoid using of loops (repeating body n times) and so on.

My logic is (I think) too complex to run in-chain (this is what I want to discover).

post by fabrice on May 14, 2021

How are you planning to keep the biometrics secret and to prevent a user to re-use submitted biometrics for authentication?

Note that everything on-chain is completely public to everybody.

In particular, if a user submits their biometrics to a smart contract, they will be displayed to all users.

You might be able to use SNARK / zero-knowledge for that purpose but current limitations on TEAL do not allow for verification of a SNARK.

post by cotunho on May 14, 2021

I know everything involved in smart contract is public, but I don’t pass the biometrics in clear, so I don’t think there is some problem.

The real problem is to know if it is possible to develop a complex logic using smart contract, considering all these problems.

post by cotunho on May 14, 2021

I noticed one thing: my compiled file with the approval program is 1 KB dimension until I don’t add this call:

x = calculate_and_check_negative5(negative_t, t, h)

that referred to this:

def calculate_and_check_negative5(negative: Expr, a: Expr, b: Expr) -> TealType.uint64:
    return If (Eq(negative, Int(1)), a+b, Abs_diff(a, b))

and abs_diff(a, b) (that I call other times in approval_program) is:

def Abs_diff(a: Expr, b: Expr) -> TealType.uint64:
    return If (Lt(a, b), b-a, a-b)

When I add this call, file’s dimension increases from 1 KB to 21 KB, generating the length error.

Any tips?

post by Maugli on May 14, 2021

No tips, only guesses. If negative_t, t, h is very complex, then this may happen. Please check the generated TEAL code. If possible, try to simplify.

If nothing helps, please send me the .py files and the script to compile them in email.

post by cotunho on May 15, 2021

I use negative_t, t and h in other function call too, so I don’t think these can be a real problem.

If for you is ok, I can send you the whole project, because I split functions in different files.

post by Maugli on May 15, 2021

Go ahead, and send it, please.

post by cotunho on May 15, 2021

Where can I get the email?

post by Maugli on May 15, 2021

Click on my icon (“Maugli”), then press the “Message” button, and then upload the files.