# Attribution

Utility functions for working with [ERC-8021 Transaction Attribution](https://eip.tools/eip/8021).

## Examples

Below are some examples demonstrating common usages of the `Attribution` module:

* [Converting an Attribution to Data Suffix](#converting-an-attribution-to-data-suffix)

* [Extracting an Attribution from Calldata](#extracting-an-attribution-from-calldata)

### Converting an Attribution to Data Suffix

```ts twoslash
import { Attribution } from 'ox/erc8021'

const dataSuffix1 = Attribution.toDataSuffix({
  codes: ['baseapp']
})

const dataSuffix2 = Attribution.toDataSuffix({
  codes: ['baseapp', 'morpho'],
  codeRegistry: {
    address: '0x0000000000000000000000000000000000000000',
    chainId: 1
  }
})

const dataSuffix3 = Attribution.toDataSuffix({
  appCode: 'baseapp',
  walletCode: 'privy'
})
```

### Extracting an Attribution from Calldata

```ts twoslash
import { Attribution } from 'ox/erc8021'

const attribution = Attribution.fromData('0x...')

console.log(attribution)
// @log: { codes: ['baseapp', 'morpho'], codeRegistry: { address: '0x...', chainId: 1 } }
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Attribution.fromData`](/ercs/erc8021/Attribution/fromData) | Extracts an [`Attribution.Attribution`](/ercs/erc8021/Attribution/types#attribution) from transaction calldata. |
| [`Attribution.getSchemaId`](/ercs/erc8021/Attribution/getSchemaId) | Determines the schema ID for an [`Attribution.Attribution`](/ercs/erc8021/Attribution/types#attribution). |
| [`Attribution.toDataSuffix`](/ercs/erc8021/Attribution/toDataSuffix) | Converts an [`Attribution.Attribution`](/ercs/erc8021/Attribution/types#attribution) to a data suffix that can be appended to transaction calldata. |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`Attribution.Attribution`](/ercs/erc8021/Attribution/types#attributionattribution) | ERC-8021 Transaction Attribution. |
| [`Attribution.AttributionSchemaId0`](/ercs/erc8021/Attribution/types#attributionattributionschemaid0) | Schema 0: Canonical Registry Attribution. |
| [`Attribution.AttributionSchemaId1`](/ercs/erc8021/Attribution/types#attributionattributionschemaid1) | Schema 1: Custom Registry Attribution. |
| [`Attribution.AttributionSchemaId1Registry`](/ercs/erc8021/Attribution/types#attributionattributionschemaid1registry) |  |
| [`Attribution.AttributionSchemaId2`](/ercs/erc8021/Attribution/types#attributionattributionschemaid2) | Schema 2: CBOR-Encoded Attribution. |
| [`Attribution.AttributionSchemaId2Registries`](/ercs/erc8021/Attribution/types#attributionattributionschemaid2registries) |  |
| [`Attribution.AttributionSchemaId2Registry`](/ercs/erc8021/Attribution/types#attributionattributionschemaid2registry) |  |
| [`Attribution.SchemaId`](/ercs/erc8021/Attribution/types#attributionschemaid) | Attribution schema identifier. |
