> For the complete documentation index, see [llms.txt](https://fuzzing-docs.diligence.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fuzzing-docs.diligence.tools/getting-started-1/writing-properties.md).

# Writing Properties

With fuzzing you can automatically test properties (also called property-based testing). So, you'll first need to write some properties.

Diligence Fuzzing supports multiple property formats, but our preferred option is Scribble.

## Scribble

Scribble is a specification language for smart contracts where you write properties as annotations in your code. These annotations can be translated into runtime checks that trigger whenever a specified property is violated. This way Diligence Fuzzing can tell you exactly which property was violated.

**Example Scribble property:**

```
// #if_succeeds balance(_to) == old(balance(_to)) + amount;
function transfer(address _to, uint amount) public { ... }
```

{% hint style="success" %}
Learn more about Scribble over at [docs.scribble.codes](https://docs.scribble.codes).
{% endhint %}

## Other formats

### Assertions

We don't just find property violations of Scribble properties, but we also detect regular assertion failures.

### Property-Based Testing&#x20;

We realise that you might already have test-cases for property-based testing tools. For this reason we've implemented a utility which converts such tests to Scribble-annotations!
