# 相關名詞解釋 :
## tokenId:
**同一份智能合約產生的tokenId一定會是獨特的,但不同份合約產出的tokenId有可能重複,例的精靈王,但tokenId為7的精靈王在我們的合約中只會有一隻,在我們的合約中是獨一無二的存在,token如我們的合約和axie的合約都能產生一隻tokenId為7Id 7在我們的合約和axie的合約中代表的是不同的NFT物件實例。**
**我們的NFT分為<font color="#f00">已孵化和未孵化</font>,未孵化時仍是NFT,也可交易,但看不到基因**
## ABI:
**我寫好的合約是sol檔,這會被編譯成byte code, 放到區塊鏈上的是byte code, abi就是方便我們操作區塊鏈上byte code的介面**
以下省略...
# ELFCore
## ELFCore.transferFrom
### 描述:
將NFT轉給指定地址, 只有三種人有權轉移NFT擁有權:
1. NFT的擁有人
2. NFT擁有人的operator(詳見function setApprovalForAll)
3. 該NFT的approved address(詳見function approve)
**為NFT協議規定的 func,改動區塊鏈 state, 需要 gas**
params參數格式如下:
*(EX: 可舉範例說明 )*
```javascript=
const params = {
address: 0xa357969ce308B2E5691b5acb9fBCdBad99a8D357,
address: 0xbF38dBb4DF5260F2B7287974B6Fa54e72bBBF392,
tokenId: 10000,
};
```
* address, NFT的原擁有者
* address, 欲轉出的地址
* uint256, 欲轉出的NFT的 tokenId
*(參數應該是 tokenId? )*
## ELFCore.setApprovalForAll
### 描述:
呼叫此function的人, 指定將某地址設成是(或不是)他的operator, 如果B地址被A地址設成operator, 則B地址有權操作A地址擁有的全部NFT, 包刮A地址後來才擁有的NFT.
每個地址都能有多個operator(讓多個人操作你全部的NFT), 當然也可以選擇完全不要 operator
**為NFT協議規定的 func,改動區塊鏈 state, 需要 gas**
params參數格式如下:
*(EX: 可舉範例說明 )*
```javascript=
const params = {
address: 0xa357969ce308B2E5691b5acb9fBCdBad99a8D357,
bool: false,
};
```
* address, 目標地址
* bool, 如果是, 將目標地址設為operator, 如果否, 剝奪目標地址的operator權力
## 備註 :
### 需求文件圖片第一張:
4.總獻祭的精靈蛋數量: 打合約中 **stakeELF.totalEggs** 取已獻祭的<font color="#f00">所有</font>精靈蛋總數
5.預期獎勵年報酬率 : <font color="#ff9900">**待合約工程師提供。**</font> (計算方式 : 九種蛋的APR加總起來除以九,加上1100%)
7.ROE 價格,從 uniswap 取得。
8.每日獎勵: <font color="#ff9900">**待合約工程師提供。**</font> 。
9.流通供應量: 取A幣合約即可。
### 需求文件圖片第二張:
2.取得祭壇耐久度 = 打合約中 **stakeELF.altar** 取得,<font color="#f00">**注意耐久度部分會因獻祭多寡而變動。**</font>
4.取得祭壇右側的容量 = 打合約中 **stakeELF.totalEggs** 取已獻祭的<font color="#f00">**所有**</font>精靈蛋總數
### 需求文件圖片第三張:
2.個人錢包地址
3.取得已獻祭的<font color="#f00">**該玩家**</font>的精靈蛋總數 = 打合約中 **stakeELF.userStakeEggs** 取特定玩家質押的蛋的總數
5.取得可領取獎勵 = 打合約中 stakeELF.getWithdrawValue 取特定玩家的可領取獎勵 (經開會後,需再確認一次。)
(需求第 4 5 6 項, 經 07/12 開會確認後,合約工程師 hoper 需再開發。)
***(獻祭精靈蛋操作頁面,還需確認相關資訊如何取得)***