> For the complete documentation index, see [llms.txt](https://docs.gooddollar.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.gooddollar.org/previous-protocol-versions/protocol-v3/core-contracts-and-api/gooddollar.md).

# GoodDollar

### Events

#### Transfer

Emitted when `value` tokens are moved from one account (`from`) to another (`to`).

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>from</td><td>The address from which tokens are moved.</td></tr><tr><td>to</td><td>The address to which tokens are moved.</td></tr><tr><td>value</td><td>The value to be processed and then transferred.</td></tr></tbody></table>

Note that `value` may be zero.

```
event Transfer(address indexed from, address indexed to, uint256 value);
```

#### Approval

Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>owner</td><td>The address of the tokens owner.</td></tr><tr><td>spender</td><td>The address which can spend tokens in allowance.</td></tr><tr><td>value</td><td>The tokens amount to be spent on behave of the tokens owner.</td></tr></tbody></table>

```
event Approval(address indexed owner, address indexed spender, uint256 value);
```

### transfer

Processes fees from given value and sends remainder to given address.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>to</td><td>The address to be sent to.</td></tr><tr><td>value</td><td>The value to be processed and then transferred.</td></tr></tbody></table>

Returns: a boolean that indicates if the operation was successful.

```
function transfer(address to, uint256 value) public returns (bool);
```

### approve

Approve the passed address to spend the specified amount of tokens on behalf of `msg.sender`.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>spender</td><td>The address which will spend the funds.</td></tr><tr><td>value</td><td>The amount of tokens to be spent.</td></tr></tbody></table>

Returns: a boolean that indicates if the operation was successful.

```
function approve(address spender, uint256 value) public returns (bool);
```

### transferFrom

Transfer tokens from one address to another on behalf of the third party as `msg.sender`.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>from</td><td>The address which you want to send tokens from.</td></tr><tr><td>to</td><td>The address which you want to transfer to.</td></tr><tr><td>value</td><td>The amount of tokens to be transferred.</td></tr></tbody></table>

Returns: a boolean that indicates if the operation was successful.

```
function transferFrom(
        address from,
        address to,
        uint256 value
    ) public returns (bool);
```

### transferAndCall

Processes transfer fees and calls ERC677Token transferAndCall function.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>from</td><td>The address to transfer to.</td></tr><tr><td>value</td><td>The amount to transfer.</td></tr><tr><td>data</td><td>The data to be used in further execution according to ERC677.</td></tr></tbody></table>

Returns: a boolean that indicates if the operation was successful.

```
function transferAndCall(
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (bool);
```

### mint

Minting function.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>to</td><td>The address that will receive the minted tokens. Must be out of blocklist. The blocklist is managed by the administrator of the contract.</td></tr><tr><td>value</td><td>Value the amount of tokens to mint.</td></tr></tbody></table>

Who can execute: An address who is in minter role.

Returns: a boolean that indicates if the operation was successful.

```
function mint(address to, uint256 value) public;
```

### burn

Burns a specific amount of tokens.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>value</td><td>The amount of token to be burned..</td></tr></tbody></table>

Who can execute: An address who is not blocklisted by the administration.

```
function burn(uint256 value) public;
```

### burnFrom

Burns a specific amount of tokens from the target address and decreases an allowance.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>from</td><td>The address which you want to burn tokens from. Must not be in blocklist.</td></tr><tr><td>value</td><td>The amount of token to be burned.</td></tr></tbody></table>

Who can execute: An address who is not blocklisted by the administration.

```
function burnFrom(address from, uint256 value) public;
```

### increaseAllowance

Increase the amount of tokens that an owner allows a spender.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>spender</td><td>The address which will spend the funds.</td></tr><tr><td>addedValue</td><td>The amount of tokens to increase the allowance by.</td></tr></tbody></table>

Returns: a boolean that indicates if the operation was successful.

```
function increaseAllowance(address spender, uint256 addedValue) public returns (bool);
```

### decreaseAllowance

Decrease the amount of tokens that an owner allowed to a spender.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>spender</td><td>The address which will spend the funds.</td></tr><tr><td>subtractedValue</td><td>The amount of tokens to decrease the allowance by.</td></tr></tbody></table>

Returns: a boolean that indicates if the operation was successful.

```
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool);
```

### getFees

Gets the current transaction fees.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>value</td><td>Value the amount of tokens to mint.</td></tr></tbody></table>

Returns: tuple of `uint256` and `bool`, first is an absolute amount of fees based on value and the second is whether `msg.sender` paying or not.

```
function getFees(uint256 value) public view returns (uint256, bool);
```

### setFeeRecipient

Sets the address that receives the transactional fees.

<table><thead><tr><th width="150">Parameter name</th><th>Annotation</th></tr></thead><tbody><tr><td>_feeRecipient</td><td>The new address to receive transactional fees.</td></tr></tbody></table>

Who can execute: An adminstrator only.

```
function setFeeRecipient(address _feeRecipient) public;
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.gooddollar.org/previous-protocol-versions/protocol-v3/core-contracts-and-api/gooddollar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
