> For the complete documentation index, see [llms.txt](https://lz-asia.gitbook.io/obelisk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lz-asia.gitbook.io/obelisk/development/v0-contracts/papyrus.md).

# Papyrus

Papyrus is an ONFT1155 contract that's a 1-n NFT and can be transferred across chains.

## Overview

`Papyrus` is an `ONFT1155` contract that's a 1-n NFT and can be transferred across chains. It's basically `SBT` so can't be transferred to another wallet by the owner. It can be transferred to same wallet address on another chain or by an authorized `transferrer` (e.g. `Obelisk`) to another wallet.

## Buying a Papyrus

A papyrus is needed for staking 1 NFT when entering a draw in [Obelisk](/obelisk/development/v0-contracts/obelisk.md). To get papyrus NFTs, you can call `buy()` with  `_quantity * price` ETH. FYI, `price` can be updated by `owner`.

The amount paid is transferred to `treasury`, which can also be updated by `owner`.

## Sending Across Chain

Papyrus NFTs can be sent across chain via `sendFrom()` or `sendBatchFrom()`. For more information on how ONFT1155 works, refer to <https://layerzero.gitbook.io/docs/evm-guides/code-examples/onft-overview/1155>.

## Functions

```solidity
price(): Returns the price of a Papyrus NFT.

treasury(): Returns the address to which the price of Papyrus is transferred.

isTransferrer(address _transferrer): Checks if a given address is a transferrer. Returns true if the address is a transferrer.

buy(uint256 _quantity): Allows users to buy Papyrus NFTs. The transaction is reverted if the exact amount is not sent. The price is transferred to the treasury.

updatePrice(uint256 _price): Allows the owner to update the price of the NFT.

updateTreasury(address _treasury): Allows the owner to update the treasury address.

updateTransferrer(address _transferrer, bool _access): Allows the owner to update a transferrer's access rights.
```
