# `Ethers.Contracts.ERC777`
[🔗](https://github.com/ExWeb3/elixir_ethers/blob/v0.6.12/lib/ethers/contracts/erc777.ex#L1)

ERC777 token interface

More info: https://ethereum.org/en/developers/docs/standards/tokens/erc-777/

# `__default_address__`

```elixir
@spec __default_address__() :: nil
```

Default address of the contract. Returns `nil` if not specified.

To specify a default address see `Ethers.Contract`

# `allowance`

```elixir
@spec allowance(Ethers.Types.t_address(), Ethers.Types.t_address()) ::
  Ethers.TxData.t()
```

Prepares `allowance(address holder, address spender)` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Function Parameter Types
 - holder: `:address`
 - spender: `:address`

## Return Types (when called with `Ethers.call/2`)
 - `{:uint, 256}`

# `approve`

```elixir
@spec approve(Ethers.Types.t_address(), non_neg_integer()) :: Ethers.TxData.t()
```

Prepares `approve(address spender, uint256 value)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - spender: `:address`
 - value: `{:uint, 256}`

## Return Types (when called with `Ethers.call/2`)
 - `:bool`

# `authorize_operator`

```elixir
@spec authorize_operator(Ethers.Types.t_address()) :: Ethers.TxData.t()
```

Prepares `authorizeOperator(address operator)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - operator: `:address`

## Return Types (when called with `Ethers.call/2`)
This function does not return any values!

# `balance_of`

```elixir
@spec balance_of(Ethers.Types.t_address()) :: Ethers.TxData.t()
```

Prepares `balanceOf(address tokenHolder)` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Function Parameter Types
 - tokenHolder: `:address`

## Return Types (when called with `Ethers.call/2`)
 - `{:uint, 256}`

# `burn`

```elixir
@spec burn(non_neg_integer(), binary()) :: Ethers.TxData.t()
```

Prepares `burn(uint256 amount, bytes data)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - amount: `{:uint, 256}`
 - data: `:bytes`

## Return Types (when called with `Ethers.call/2`)
This function does not return any values!

# `constructor`

```elixir
@spec constructor(String.t(), String.t(), [Ethers.Types.t_address()]) :: binary()
```

Prepares contract constructor values for deployment.

To deploy a contracts use `Ethers.deploy/2` and pass the result of this function as
`:encoded_constructor` option.

## Parameters
 - name_: `:string`
 - symbol_: `:string`
 - defaultOperators_: `{:array, :address}`

# `decimals`

```elixir
@spec decimals() :: Ethers.TxData.t()
```

Prepares `decimals()` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `pure`

## Return Types (when called with `Ethers.call/2`)
 - `{:uint, 8}`

# `default_operators`

```elixir
@spec default_operators() :: Ethers.TxData.t()
```

Prepares `defaultOperators()` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Return Types (when called with `Ethers.call/2`)
 - `{:array, :address}`

# `granularity`

```elixir
@spec granularity() :: Ethers.TxData.t()
```

Prepares `granularity()` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Return Types (when called with `Ethers.call/2`)
 - `{:uint, 256}`

# `is_operator_for`

```elixir
@spec is_operator_for(Ethers.Types.t_address(), Ethers.Types.t_address()) ::
  Ethers.TxData.t()
```

Prepares `isOperatorFor(address operator, address tokenHolder)` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Function Parameter Types
 - operator: `:address`
 - tokenHolder: `:address`

## Return Types (when called with `Ethers.call/2`)
 - `:bool`

# `name`

```elixir
@spec name() :: Ethers.TxData.t()
```

Prepares `name()` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Return Types (when called with `Ethers.call/2`)
 - `:string`

# `operator_burn`

```elixir
@spec operator_burn(Ethers.Types.t_address(), non_neg_integer(), binary(), binary()) ::
  Ethers.TxData.t()
```

Prepares `operatorBurn(address account, uint256 amount, bytes data, bytes operatorData)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - account: `:address`
 - amount: `{:uint, 256}`
 - data: `:bytes`
 - operatorData: `:bytes`

## Return Types (when called with `Ethers.call/2`)
This function does not return any values!

# `operator_send`

```elixir
@spec operator_send(
  Ethers.Types.t_address(),
  Ethers.Types.t_address(),
  non_neg_integer(),
  binary(),
  binary()
) :: Ethers.TxData.t()
```

Prepares `operatorSend(address sender, address recipient, uint256 amount, bytes data, bytes operatorData)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - sender: `:address`
 - recipient: `:address`
 - amount: `{:uint, 256}`
 - data: `:bytes`
 - operatorData: `:bytes`

## Return Types (when called with `Ethers.call/2`)
This function does not return any values!

# `revoke_operator`

```elixir
@spec revoke_operator(Ethers.Types.t_address()) :: Ethers.TxData.t()
```

Prepares `revokeOperator(address operator)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - operator: `:address`

## Return Types (when called with `Ethers.call/2`)
This function does not return any values!

# `send`

```elixir
@spec send(Ethers.Types.t_address(), non_neg_integer(), binary()) :: Ethers.TxData.t()
```

Prepares `send(address recipient, uint256 amount, bytes data)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - recipient: `:address`
 - amount: `{:uint, 256}`
 - data: `:bytes`

## Return Types (when called with `Ethers.call/2`)
This function does not return any values!

# `symbol`

```elixir
@spec symbol() :: Ethers.TxData.t()
```

Prepares `symbol()` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Return Types (when called with `Ethers.call/2`)
 - `:string`

# `total_supply`

```elixir
@spec total_supply() :: Ethers.TxData.t()
```

Prepares `totalSupply()` call parameters on the contract.

This function should only be called for result and never in a transaction on its own. (Use `Ethers.call/2`)

State mutability: `view`

## Return Types (when called with `Ethers.call/2`)
 - `{:uint, 256}`

# `transfer`

```elixir
@spec transfer(Ethers.Types.t_address(), non_neg_integer()) :: Ethers.TxData.t()
```

Prepares `transfer(address recipient, uint256 amount)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - recipient: `:address`
 - amount: `{:uint, 256}`

## Return Types (when called with `Ethers.call/2`)
 - `:bool`

# `transfer_from`

```elixir
@spec transfer_from(
  Ethers.Types.t_address(),
  Ethers.Types.t_address(),
  non_neg_integer()
) ::
  Ethers.TxData.t()
```

Prepares `transferFrom(address holder, address recipient, uint256 amount)` call parameters on the contract.

This function can be used for a transaction or additionally called for results (Use `Ethers.send_transaction/2`).
No amount of Ether can be sent with this function.

State mutability: `non_payable`

## Function Parameter Types
 - holder: `:address`
 - recipient: `:address`
 - amount: `{:uint, 256}`

## Return Types (when called with `Ethers.call/2`)
 - `:bool`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
