You can separate your code into multiple ZoKrates files using
import statements to import symbols, ignoring the
.zok extension of the imported file.
The preferred way to import a symbol is by module and name:
from "./path/to/my/module" import MySymbol; // `MySymbol` is now in scope.
To import multiple symbols with a single import statement, separate the symbols names with commas:
from "./path/to/my/module" import MySymbol, MyOtherSymbol;
as keyword enables renaming symbols:
from "./path/to/my/module" import MySymbol as MyAlias; // `MySymbol` is now in scope under the alias MyAlias.
The legacy way to import a symbol is by only specifying a module:
In this case, the name of the symbol is assumed to be
main and the alias is assumed to be the module's filename so that the above is equivalent to
from "./path/to/my/module" import main as module; // `main` is now in scope under the alias `module`.
Note that this legacy method is likely to become deprecated, so it is recommended to use the preferred way instead.
Three types of symbols can be imported
Functions are imported by name. If many functions have the same name but different signatures, all of them get imported, and which one to use in a particular call is inferred.
User-defined types declared with the
struct keyword are imported by name.
Constants declared with the
const keyword are imported by name.
You can import a resource in the same folder directly, like this:
from "./mycode" import foo;
Imports up the file-system tree are supported:
from "../../../mycode" import foo;
Absolute imports don't start with
../ in the path and are used to import components from the ZoKrates standard library. Please check the according section for more details.