You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Returning precise error codes and informative error messages for AVM runtime failures is crucial for the Smart Contract clients (and overall user experience).
Solution
Include a native Algorand Python way to handle Smart Contract errors.
Common standard formatting, codes and messages should be harmonized with an ARC (e.g. 401:Unauthorized Caller).
Proposal
A base BaseError class with with standard errors (standard error_codes and harmonized error_messages) which can be inherited and extended as Error(BaseErrors) with Smart Contract specific error codes and messages.
Additionally, would be good to have utilities like: add_error(code: int, message: str) -> Error which automatically formats the error etc.
This would combine nicely for tests, like in pytest where you can do:
To maintain semantic compatibility, raise in Python can only be used with objects that inherit from BaseException.
Given we don't support user objects, true inheritance (ie dynamic polymorphism), and try/catch/finally, I don't see this as a viable option.
From the other angle, there's only two ways to report errors back. One is statically, with comments. These cannot contain any runtime information, so a plain string with an assert message is all that can be done here. The situation is basically the same with ARC-56, which is again just a linking of PC failures to static strings. A standard set of error codes would be something best done outside the compiler core, as a simple user library.
The other way could be through ARC-28 events, which can contain runtime information. We currently have arc4.emit which supports this. User code can already use this, and then immediately op.err() to reject the transaction - perhaps we could combine these with an emit+err function, arc4.error perhaps? (Edit: although this too could and perhaps should be done in a user library instead.)
We don't yet support inheritance of ARC4 Struct types either, but if we did, any "community standards" for ARC-28 events acting as error "classes", would best be defined in a user library rather than the core compiler also.
Problem
Returning precise error codes and informative error messages for AVM runtime failures is crucial for the Smart Contract clients (and overall user experience).
Solution
Include a native Algorand Python way to handle Smart Contract errors.
Common standard formatting, codes and messages should be harmonized with an ARC (e.g.
401:Unauthorized Caller
).Proposal
A base
BaseError
class with with standard errors (standarderror_codes
and harmonizederror_messages
) which can be inherited and extended asError(BaseErrors)
with Smart Contract specific error codes and messages.Additionally, would be good to have utilities like:
add_error(code: int, message: str) -> Error
which automatically formats the error etc.This would combine nicely for tests, like in
pytest
where you can do:so that you write a test that expects a specific error code.
Pros and Cons
Pros: fostering the standardization of Smart Contract error codes and messages in the ecosystem.
Cons: I can not see any.
Dependencies
None
The text was updated successfully, but these errors were encountered: