---
# System prepended metadata

title: 'Actor Spec: Account'

---

# Actor Spec: Account

[Back to Master Tracking Doc](https://hackmd.io/LOZjAsz-THelSD5lWqSVlw)

## Contents

[TOC]

## At a Glance

The Account actor is a unique Instanced actor; the Filecoin equivalent of an EOA. Account actors are created implicitly whenever a top-level message is sent to a BLS or SECP public key.

Note that the implicit creation of an Account actor involves the VM mutating the Init actor's state (without invoking any of its methods). Created Account actors:
* Are given a unique ID address, which increments the Init actor's `NextID` by 1.
* Are stored in the Init actor's table: `Init.state.AddressMap` will map the BLS or SECP pubkey to the newly-created ID address of the Account actor.
    * Unlike other Instanced actors, Account actors do not have an ACTOR address. Their associated BLS or SECP address is used instead.

**Actor Type:**
- Instanced
- Signable

**Exported Methods:**

1. Constructor
2. PubkeyAddress

## State

```go=
type State struct {
	Address addr.Address
}
```

**`Address`**: The BLS or SECP address associated with this Account actor.

## Exported Methods

#### 1. Constructor

```go=
func (a Actor) Constructor(rt vmr.Runtime, address *addr.Address) *adt.EmptyValue
```

The passed-in `address` should use either SECP or BLS address protocols. Anything else will result in an `Abortf`.

#### 2. PubkeyAddress

```go=
func (a Actor) PubkeyAddress(rt vmr.Runtime, _ *adt.EmptyValue) addr.Address
```

Simple getter. Returns the BLS or SECP address stored in state.