Let's pause here for a moment and build the predicate at the root of the predicate folder.
forc build
Unlike building a contract, constructing the predicate generates an additional piece of information: an address that is hashed from the predicate code of your templated project, known as the predicate root. Since this process is cryptographic, any changes to the code will result in a change in the predicate root.
Since everyone is starting with the exact same templated code, the predicate root should be exactly this:
0x1fb163b15211c39bd54e253a99d29130b2d7de06e0eeefdad6fe0dfc355cf5ec
Looking at the predicate, you can immediately notice several differences. There is no ABI or implementation, but simply a main function that returns true or false.
predicate;
fn main() -> bool {
true
}
Notice that we have not "deployed" anything on the Fuel blockchain, yet we already have an address that we can interact with. It is important to remember this:
Predicates are created, not deployed.