> For the complete documentation index, see [llms.txt](https://pangeaswap.gitbook.io/pangeaswap/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pangeaswap.gitbook.io/pangeaswap/developers/contracts/contribution-point-nft.md).

# Contribution Point NFT

#### CP(Contribution Point) NFT 는 판게아 스왑에 대한 유저의 기여 내역 정보를 관리하는 NFT입니다.

1 지갑 당 하나의 CP NFT만 소유 가능하며, Non-Transferable한 형태로 지갑 주소에 귀속됩니다. 최초로 기여하는 시점에 CP NFT가 발급되며, 이후에 추가적인 기여를 했을 시에는 기존에 보유하고 있는 CP NFT 에 기여 내역이 추가됩니다.

CP NFT 에 기록되는 정보는 크게 \[태그] 정보와 \[기여 이력] 정보로 나뉩니다. \[태그] 는 기여의 유형을 나타내며, \[기여 이력]은 유저(지갑 주소)별로 실제 기여한 내역을 나타냅니다.

매니저들은 \[태그] 와 \[기여 이력]을 추가/수정/삭제 할 수 있는 권한을 가지며, 실제 CP NFT 를 수령하는 유저들은 기여에 따라 받은 CP를 사용할 수 있는 권한을 가집니다.

![](/files/csmjwbWviAY6okzBpOxJ)

CP NFT는 Opensea 에서 제공하는 metadata format 을 준수하여 설계되었습니다. 유저는 직접 스마트 컨트랙트를 호출하지 않아도 Opensea 의 컬렉션을 통해 자신의 기여 내역을 쉽게 확인할 수 있습니다.

유저는 이후에 `usePoint` 기능을 활용하여 본인이 소유하고 있는 CP NFT의 CP를 사용해 판게아 스왑의 다양한 혜택(e.g. 거버넌스 토큰 STONE 런칭시 리워드 수령)을 누릴 수 있습니다.

{% embed url="<https://github.com/pangea-protocol/contribution-point>" %}

## Methods

### contributionPointOf

```solidity
function contributionPointOf(address contributor) external view returns (int256)
```

### contributionRecordByIndex

```solidity
function contributionRecordByIndex(address contributor, uint256 orderId) external view returns (struct IContributionStruct.ContributionRecord)
```

### contributionRecordCounts

```solidity
function contributionRecordCounts(address contributor) external view returns (uint256)
```

### contributionRecords

```solidity
function contributionRecords(address contributor, uint256 start, uint256 nums) external view returns (struct IContributionStruct.ContributionRecord[] records)
```

### contributorIdOf

```solidity
function contributorIdOf(address contributor) external view returns (uint256)
```

### createRecord

```solidity
function createRecord(address contributor, uint32 tagId, uint32 point) external nonpayable
```

### createTag

```solidity
function createTag(string desc) external nonpayable returns (uint32 tagId)
```

### deleteRecord

```solidity
function deleteRecord(address contributor, uint256 orderId) external nonpayable returns (struct IContributionStruct.ContributionRecord record)
```

### totalTags

```solidity
function totalTags() external view returns (uint256)
```

### updateRecord

```solidity
function updateRecord(address contributor, uint256 orderId, uint32 point) external nonpayable
```

### updateTagDescription

```solidity
function updateTagDescription(uint32 tagId, string desc) external nonpayable
```

### usePoint

```solidity
function usePoint(uint32 amount, address to, bytes data) external nonpayable
```


---

# 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, and the optional `goal` query parameter:

```
GET https://pangeaswap.gitbook.io/pangeaswap/developers/contracts/contribution-point-nft.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
