# Sui Move Language - Assertions & Error Handling

Hello everyone..

Welcome to another day of exploring Web3 Engineering. In this series, we are looking into the move language for developing smart contracts on Sui blockchain. So, without any further ado, let us get started.

Just like any other language, Move also has support for assertion conditions. We can't call them error handling because, the contracts are only allowed to throw errors, if the conditions are not met. Move lang provides two builtin functions `assert!` and `abort!`.

## Assertions

`assert` is a builtin, macro operation provided by the Move compiler. It takes two arguments, a condition of type bool and a code of type `u64`.

The syntax of the assert is as follows

```rust
assert!(condition, error_code);

// Example
assert!(1 == 2, 0);
```

## Errors

Sui move language doesn't have an in built error type to define errors but throws errors as `u64` numbers. So, to define various errors, the errors are usually defined as constants and are used.

```rust
const ENotEqual: u64 = 0;

assert!(1 == 2, ENotEqual);
```

The naming convention for error codes must be in Camel case prefixed with `E`.

## Abort

Move also provides `abort` statement for throwing errors. The syntax of the abort is as follows:

```c
abort ErrorCode;

// Example
const EUnAuthorizedUser :u64 = 0;
const user_has_access = true;
 
if(!user_has_access)
    abort EUnAuthorizedUser;
```

In our upcoming article, let us write our first smart contract on Sui blockchain.
