Icon HelpCircleForumIcon Link

⌘K

Icon HelpCircleForumIcon Link
Debugging With Scripts

Icon LinkDebugging with Scripts

In every aspect of development, trade-offs are inevitable. As previously mentioned, logging is not feasible when dealing with predicates, since predicates are required to be pure. This raises an important question: how do we debug predicates?

Sway, a programming language, categorizes programs into four types, with scripts being one of them. Unlike predicates, scripts allow for shared logic.

Let's move outside our MultiSig project

cd ../..

and create a separate project called predicate-script-logging.

forc new --predicate predicate-script-logging

Copy and paste this new predicate in your src/main.sw. Attempting to build this predicate will result in an error, indicating that logging is an invalid operation.

predicate;
 
use std::{
    logging::log,
};
 
configurable {
    SECRET_NUMBER: u64 = 777
}
 
fn main() -> bool {
    log(SECRET_NUMBER);
    return true;
}

However, let's try switching the program type from a predicate to a script.

script;

Your code should now look like this:

script;
 
use std::{
    logging::log,
};
 
configurable {
    SECRET_NUMBER: u64 = 777
}
 
fn main() -> bool {
    log(SECRET_NUMBER);
    return true;
}

Now, if we attempt to build our script, it should compile without any issues.

forc build

Next, we'll generate a Rust template to see it in action!