Skip to main content
Version: 0.42

Built-in Functions

panic


_10
fun panic(_ message: String): Never

Terminates the program unconditionally and reports a message which explains why the unrecoverable error occurred.


_10
let optionalAccount: AuthAccount? = // ...
_10
let account = optionalAccount ?? panic("missing account")

assert


_10
fun assert(_ condition: Bool, message: String)

Terminates the program if the given condition is false, and reports a message which explains how the condition is false. Use this function for internal sanity checks.

The message argument is optional.

revertibleRandom


_10
fun revertibleRandom(): UInt64

Returns a pseudo-random number.

The sequence of returned random numbers is independent for every transaction in each block. Under the hood, Cadence instantiates a cryptographically-secure pseudo-random number generator (CSPRG) for each transaction independently, where the seeds of any two transactions are different with near certainty.

The random numbers returned are unpredictable (unpredictable for miners at block construction time, and unpredictable for cadence logic at time of call), verifiable, as well as unbiasable by miners and previously-running Cadence code. See Secure random number generator for Flow’s smart contracts and FLIP120 for more details.

Nevertheless, developers need to be mindful to use revertibleRandom() correctly:

warning

A transaction can atomically revert all its action. It is possible for a transaction submitted by an untrusted party to post-select favorable results and revert the transaction for unfavorable results.

The function usage remains safe when called by a trusted party that does not perform post-selection on the returned random numbers.

This limitation is inherent to any smart contract platform that allows transactions to roll back atomically and cannot be solved through safe randomness alone.

This limitation is inherent to any smart contract platform that allows transactions to roll back atomically and cannot be solved through safe randomness alone. In cases where a non-trusted party can interact through their own transactions with smart contracts generating random numbers, it is recommended to use commit-reveal schemes as outlined in this tentative example (full tutorial coming soon).

unsafeRandom

This function is superseded by revertibleRandom(). unsafeRandom has the same interface and implementation as revertibleRandom() although it is called unsafe. The name is retained for downwards compatibility despite it technically being no longer unsafe (see revertibleRandom() for details).

info

unsafeRandom is deprecated and will be removed in an upcoming release of Cadence. Use revertibleRandom() instead.

RLP

RLP (Recursive Length Prefix) serialization allows the encoding of arbitrarily nested arrays of binary data.

Cadence provides RLP decoding functions in the built-in RLP contract, which does not need to be imported.


  • _10
    fun decodeString(_ input: [UInt8]): [UInt8]

    Decodes an RLP-encoded byte array (called string in the context of RLP). The byte array should only contain of a single encoded value for a string; if the encoded value type does not match, or it has trailing unnecessary bytes, the program aborts. If any error is encountered while decoding, the program aborts.


    _10
    fun decodeList(_ input: [UInt8]): [[UInt8]]`

    Decodes an RLP-encoded list into an array of RLP-encoded items. Note that this function does not recursively decode, so each element of the resulting array is RLP-encoded data. The byte array should only contain of a single encoded value for a list; if the encoded value type does not match, or it has trailing unnecessary bytes, the program aborts. If any error is encountered while decoding, the program aborts.