ERC-1155 的鷹架式 TypeScript 權杖專案
Blockchain App Builder 會從您的權杖規格檔案進行輸入,並產生功能完整的鷹架式鏈碼專案。
專案會自動產生權杖生命週期類別和函數,包括 CRUD 和非 CRUD 方法。系統會自動支援引數驗證、封送處理 (Marshall) / 取消封送處理 (unmarshal) 以及通透保存功能。
如需結構化專案與與變數替代字無關的方法的相關資訊,請參閱鷹架式 TypeScript 鏈碼專案。
Model
每個記號化模型類別都會擴充 OchainModel
類別。「通透持續性功能 (Transparent Persistence Capability)」或簡化的 ORM 會擷取到 OchainModel
類別中。下列模型顯示整個不可執行的權杖。
import * as yup from "yup";
import { Id, Mandatory, Validate, Default, Embedded, Derived, ReadOnly } from "../../lib/decorators";
import { OchainModel } from "../../lib/ochain-model";
import { STRATEGY } from "../../lib/utils";
import { EmbeddedModel } from "../../lib/ochain-embedded-model";
export class ArtCollectionMetadata extends EmbeddedModel<ArtCollectionMetadata> {
@Validate(yup.string())
public painting_name: string;
@Validate(yup.string())
public description: string;
@Validate(yup.string())
public image: string;
@Validate(yup.string())
public painter_name: string;
}
@Id("tokenId")
export class ArtCollection extends OchainModel<ArtCollection> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("artcollection")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("nonfungible")
public tokenType: string;
@ReadOnly("whole")
public tokenUnit: string;
@ReadOnly(["indivisible","singleton","mintable","transferable","burnable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 20000 })
public mintable: object;
@Validate(yup.string())
public owner: string;
@Validate(yup.string())
public createdBy: string;
@Validate(yup.string())
public transferredBy: string;
@Validate(yup.string())
public creationDate: string;
@Validate(yup.string())
public transferredDate: string;
@Validate(yup.bool())
public isBurned: boolean;
@Validate(yup.string())
public burnedBy: string;
@Validate(yup.string())
public burnedDate: string;
@Mandatory()
@Validate(yup.string().required().max(2000))
public tokenUri: string;
@Embedded(ArtCollectionMetadata)
public tokenMetadata: ArtCollectionMetadata;
@Validate(yup.number())
public price: number;
@Validate(yup.boolean())
public on_sale_flag: boolean;
}
@Id("tokenId")
export class Loyalty extends OchainModel<Loyalty> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("loyalty")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("fungible")
public tokenType: string;
@ReadOnly("fractional")
public tokenUnit: string;
@ReadOnly(["divisible","mintable","transferable","burnable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 10000 })
public mintable: object;
@ReadOnly({ decimal: 2 })
public divisible: object;
@Validate(yup.string())
public currency_name: string;
@Validate(yup.number())
public token_to_currency_ratio: number;
}
下列模型顯示小數的不可篩選記號。export class RealEstatePropertyMetadata extends EmbeddedModel<RealEstatePropertyMetadata> {
@Validate(yup.string())
public propertyType: string;
@Validate(yup.string())
public propertyName: string;
@Validate(yup.string())
public propertyAddress: string;
@Validate(yup.string())
public propertyImage: string;
}
@Id("tokenId")
export class RealEstateProperty extends OchainModel<RealEstateProperty> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("realestateproperty")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("nonfungible")
public tokenType: string;
@ReadOnly("fractional")
public tokenUnit: string;
@ReadOnly(["divisible","mintable","transferable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 0 })
public mintable: object;
@Validate(yup.number().positive())
public quantity: number;
@Validate(yup.string())
public createdBy: string;
@Validate(yup.string())
public creationDate: string;
@ReadOnly({ decimal: 0 })
public divisible: object;
@Validate(yup.bool())
public isBurned: boolean;
@Mandatory()
@Validate(yup.string().required().max(2000))
public tokenUri: string;
@Embedded(RealEstatePropertyMetadata)
public tokenMetadata: RealEstatePropertyMetadata;
@Validate(yup.number())
public propertySellingPrice: number;
@Validate(yup.number())
public propertyRentingPrice: number;
}
控制器
main 控制器類別會擴充 OchainController
類別。只有一個主要控制器。
export class DigiCurrCCController extends OchainController{
您可以建立不限數目的類別、函數或檔案,但只能呼叫在 main Controller 類別中定義的方法。其他方法則會隱藏。
您可以使用記號 SDK 方法,為您的商業應用程式撰寫自訂方法。
自動產生的權杖方法
Blockchain App Builder 會自動產生支援權杖和權杖生命週期的方法。您可以使用這些方法來初始化記號、管理角色和帳戶,以及完成其他記號生命週期工作,而無需進行任何其他編碼。控制器方法必須要有 @Validator(...params)
修飾器才能呼叫。
存取控制管理方法
-
isTokenAdmin
- 如果函數的呼叫程式是
Token Admin
,則此方法會傳回布林值true
,否則會傳回false
。只有鏈碼的Token Admin
才能呼叫此方法。 -
addTokenAdmin
- 此方法會將使用者新增為鏈碼的
Token Admin
。只有鏈碼的Token Admin
才能呼叫此方法。 -
removeTokenAdmin
- 此方法會移除使用者作為鏈碼的
Token Admin
。只有鏈碼的Token Admin
才能呼叫此方法。您無法將自己移除為Token Admin
。 -
getAllTokenAdmins
- 此方法會傳回鏈碼為
Token Admin
的所有使用者清單。只有鏈碼的Token Admin
才能呼叫此方法。
權杖組態管理方法
-
init
- 建立鏈碼時會呼叫這個方法。每個
Token Admin
都是由adminList
參數中的userId
和orgId
資訊來識別。userId
是執行處理擁有者或登入執行處理之使用者的使用者名稱或電子郵件 ID。orgId
是目前網路組織中使用者的成員服務提供者 (MSP) ID。第一次部署鏈碼時,必須輸入adminList
參數。如果您要升級鏈碼,請傳送空白清單 ([]
)。如果您是初始部署鏈碼的使用者,您也可以在升級鏈碼時,在adminList
參數中指定新的管理員。升級時會忽略adminList
參數中的任何其他資訊。 -
create<Token Name>Token
- 此方法會建立記號。每個定義的記號都有自己的建立方法。對於有趣的記號,只能由鏈碼的
Token Admin
呼叫此方法。對於無法執行的記號,如果規格檔案中已定義了小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法來建立 NFT。若未定義 minter 角色,任何使用者都可以使用此方法來建立 (mint) NFT。呼叫此方法的使用者會成為 NFT 的擁有者。 -
update<Token Name>Token
- 此方法會更新記號。每個定義的記號都有自己的更新方法。您無法更新權杖描述資料或無法產生權杖的權杖 URI。對於有趣的記號,只能由鏈碼的
Token Admin
呼叫此方法。對於無法執行的記號,只能由記號擁有者呼叫此方法。 -
getTokenHistory
- 這個方法會傳回所指定記號 ID 的歷史記錄。任何人都可以呼叫這個方法。
-
getAllTokens
- 此方法會傳回狀態資料庫中儲存的所有記號資產。只有鏈碼的
Token Admin
才能呼叫此方法。此方法使用 Berkeley DB SQL 豐富查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。 -
getTokenById
- 如果狀態資料庫中有記號,這個方法會傳回一個記號物件。若為小數 NFT,也會傳回擁有者清單。只有鏈碼的
Token Admin
或記號擁有者才能呼叫此方法。 -
getAllTokensByUser
- 此方法會傳回指定使用者擁有的所有權杖資產。此方法使用 Berkeley DB SQL 豐富查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。 -
ownerOf
- 此方法會傳回指定權杖 ID 之擁有者的帳戶 ID、組織 ID 和使用者 ID。任何人都可以呼叫這個方法。
-
URI
- 此方法會傳回所指定記號的 URI。任何人都可以呼叫這個方法。
-
name
- 這個方法會傳回記號類別的名稱。任何人都可以呼叫這個方法。
-
totalSupply
- 此方法會傳回所提示記號的總數。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。只有鏈碼的
Token Admin
才能呼叫此方法。 -
totalNetSupply
- 此方法會傳回所提示記號的總數減去已燒記號的數目。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。只有鏈碼的
Token Admin
才能呼叫此方法。 -
getTokensByName
- 此方法會傳回指定記號名稱的所有記號資產。此方法使用 Berkeley DB SQL 豐富查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。只有鏈碼的
Token Admin
才能呼叫此方法。 -
getTokenDecimal
- 此方法會傳回指定記號的小數位數。只有鏈碼的
Token Admin
才能呼叫此方法。
帳戶管理方法
-
createAccount
- 此方法會為指定的使用者建立一個帳戶,並為有趣或不有趣的記號建立關聯的記號帳戶。必須為任何需要記號的使用者建立帳戶。使用者帳戶會追蹤使用者持有的 NFT 帳戶和有趣的權杖帳戶。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。只有鏈碼的
Token Admin
才能呼叫此方法。使用者帳戶具有唯一的 ID,由
orgId
參數的 SHA-256 雜湊與userId
參數組成。使用者可以有多個具有唯一帳戶 ID 的有趣記號帳戶。有趣的記號帳戶 ID 是由
orgId
參數的 SHA-256 雜湊、userId
參數、以波狀符號 (~
) 分隔的常數字串ft
,以及一個計數器編號,代表以波狀符號 (~
) 分隔建立的有趣帳戶索引。使用者只能有一個不可執行的權杖帳戶。不可套用的記號帳戶 ID 是唯一的,由
orgId
參數的 SHA-256 雜湊、userId
參數,以及以波狀符號 (~
) 分隔的常數字串nft
組成。使用者擁有的所有不可變記號 (不論是全部或小數) 都會連結至此帳戶。使用者帳戶 ID 的開頭為
ouaccount~
。權杖帳戶 ID 的開頭為oaccount~
。 -
createUserAccount
- 此方法會為指定的使用者建立帳戶。必須為任何需要記號的使用者建立帳戶。使用者帳戶會追蹤 NFT 帳戶,以及使用者擁有的有趣記號帳戶。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。
帳戶 ID 是
orgId
參數和userId
參數的 SHA-256 雜湊。只有鏈碼的Token Admin
才能呼叫此方法。 -
createTokenAccount
- 此方法會建立一個有趣或無法執行的權杖帳戶,以與使用者帳戶建立關聯。
使用者可以有多個具有唯一帳戶 ID 的有趣記號帳戶。有趣的記號帳戶 ID 是由
orgId
參數的 SHA-256 雜湊、userId
參數、以波狀符號 (~
) 分隔的常數字串ft
,以及一個計數器編號,代表以波狀符號 (~
) 分隔建立的有趣帳戶索引。使用者只能有一個不可執行的權杖帳戶。不可套用的記號帳戶 ID 是唯一的,由
orgId
參數的 SHA-256 雜湊、userId
參數,以及以波狀符號 (~
) 分隔的常數字串nft
組成。使用者擁有的所有不可變記號 (不論是全部或小數) 都會連結至此帳戶。只有鏈碼的
Token Admin
才能呼叫此方法。 -
associateFungibleTokenAccount
- 此方法會將使用者的有趣記號帳戶與特定有趣的記號建立關聯。
只有鏈碼的
Token Admin
才能呼叫此方法。 -
getAccountHistory
- 此方法會傳回指定記號帳戶的歷史記錄。此為非同步方法。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。 -
getAccount
- 此方法會傳回指定使用者的記號帳戶詳細資訊。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
getAllAccounts
- 此方法會傳回所有使用者帳戶的詳細資料。只有鏈碼的
Token Admin
才能呼叫此方法。 -
getAccountDetailsByUser
- 此方法會傳回指定使用者的帳戶摘要,以及與使用者關聯之有趣和不可行記號的詳細資訊。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
getUserByAccountId
- 此方法會傳回指定帳戶 ID 的使用者詳細資料。任何使用者都可以呼叫這個方法。
角色管理方法
-
addRole
- 此方法會新增角色至指定的使用者和記號。只有鏈碼的
Token Admin
才能呼叫此方法。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。指定的使用者必須要有一個與真菌記號關聯的記號帳戶,或是 NFT 角色的不可變記號帳戶。指定的角色必須存在於變數替代字的規格檔案中。 -
isInRole
- 此方法會傳回布林值,以指出使用者是否具有指定的角色。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。指定的使用者必須要有一個與真菌記號關聯的記號帳戶,或是 NFT 角色的不可變記號帳戶。指定的角色必須存在於變數替代字的規格檔案中。 -
removeRole
- 這個方法會從指定的使用者和記號中移除角色。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。只有鏈碼的
Token Admin
才能呼叫此方法。指定的使用者必須要有一個與真菌記號關聯的記號帳戶,或是 NFT 角色的不可變記號帳戶。指定的角色必須存在於變數替代字的規格檔案中。 -
getAccountsByRole
- 此方法會傳回指定角色和記號的所有帳戶 ID 清單。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。只有鏈碼的
Token Admin
才能呼叫此方法。 -
getUsersByRole
- 此方法會傳回指定角色和記號之所有使用者的清單。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。只有鏈碼的
Token Admin
才能呼叫此方法。
交易歷史記錄管理的方式
-
getAccountTransactionHistory
- 此方法會傳回帳戶交易歷史記錄。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。對於無法執行的記號,只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。 -
getTransactionById
- 此方法會傳回指定交易 ID 的交易詳細資料。任何人都可以呼叫這個方法。
-
deleteHistoricalTransactions
- 此方法會從狀態資料庫刪除在指定時間戳記之前的交易。只有鏈碼的
Token Admin
才能呼叫此方法。
權杖行為管理方法 - 可變行為
-
mintBatch
- 此方法會在批次作業中建立 (mints) 多個記號。此方法只會建立有趣的記號或小數的不可行記號。
對於有趣的記號,如果規格檔案中定義了探勘器角色,則任何具有探勘器角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。如果在建立或更新記號時指定了該特性,您就不能超過記號的
max_mint_quantity
特性。對於無法執行的記號,如果在規格檔案中定義了小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。此外,呼叫者也必須是記號的建立者。對於可進行靜音的小數不可變記號數量,沒有上限。
您無法使用此方法來提示整個不可執行的記號。
權杖行為管理方法 - 可轉移行為
-
batchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
此方法不會驗證方法的呼叫程式是否為指定的寄件者。任何使用者都可以呼叫這個方法。
-
safeBatchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
方法的呼叫程式必須是指定的傳送程式。任何使用者都可以呼叫這個方法。
-
balanceOfBatch
- 此方法會完成取得權杖帳戶餘額的批次作業。帳戶詳細資料指定於三個不同的組織 ID、使用者 ID 與憑證 ID 清單。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。帳戶擁有者只能查看自己擁有的帳戶的餘額詳細資料。 -
exchangeToken
- 此方法會在指定的帳戶之間交換記號。此方法僅支援在 NFT 與有趣的記號之間交換,或有趣的記號與 NFT 之間交換。NFT 可以為整數或小數。只有帳戶擁有者才能呼叫此方法。
記號行為管理方法 - 可燃行為
SDK 方法
存取控制管理方法
-
isUserTokenAdmin
- 如果指定的使用者是
Token Admin
,則此方法會傳回布林值true
,否則傳回false
。此方法只能由記號鏈碼的Token Admin
呼叫。 -
addAdmin
- 此方法會將使用者新增為權杖鏈碼的
Token Admin
。此方法只能由記號鏈碼的Token Admin
呼叫。 -
removeAdmin
- 此方法會移除使用者作為記號鏈碼的
Token Admin
。此方法只能由記號鏈碼的Token Admin
呼叫。您無法將自己移除為Token Admin
。 -
getAllAdmins
- 此方法會傳回所有
Token Admin
使用者的清單。 -
checkAuthorization
- 使用此方法將存取控制檢查新增至作業。這是非同步函數。某些記號方法只能由記號的
Token Admin
或AccountOwner
執行,或由MultipleAccountOwner
針對具有多個帳戶的使用者執行。存取控制對應詳述於../lib/constant.ts
檔案中。您可以編輯../lib/constant.ts
檔案來修改存取控制。若要使用自己的存取控制或停用存取控制,請從自動產生的控制器方法和自訂方法中移除存取控制碼。ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, TOKEN: { save: ["Admin"], getAllTokens: ["Admin"], get: ["Admin"], update: ["Admin"], getDecimals: ["Admin"], getTokensByName: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], getTotalMintedTokens: ["Admin"], getNetTokens: ["Admin"], getTokenHistory: ["Admin"], }, ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], }, TRANSACTION: { deleteTransactions: ["Admin"], }, ACCOUNT: { createAccount: ["Admin"], associateToken: ["Admin"], getAllAccounts: ["Admin"], getAccountsByUser: ["Admin", "MultipleAccountOwner"], getAccount: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], getSubTransactionsById: ["Admin", TRANSACTION_INVOKER], getSubTransactionsByIdWithFilters: ["Admin", TRANSACTION_INVOKER], getAccountBalance: ["Admin", "AccountOwner"], getAccountOnHoldBalance: ["Admin", "AccountOwner"], getOnHoldIds: ["Admin", "AccountOwner"], getConversionHistory: ["Admin", "AccountOwner"], }, ACCOUNT_STATUS: { get: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], activateAccount: ["Admin"], suspendAccount: ["Admin"], deleteAccount: ["Admin"], }, TOKEN_CONVERSION: { initializeExchangePoolUser: ["Admin"], addConversionRate: ["Admin"], updateConversionRate: ["Admin"], getConversionRate: ["Admin", "AnyAccountOwner"], getConversionRateHistory: ["Admin", "AnyAccountOwner"], tokenConversion: ["Admin", "AnyAccountOwner"], getExchangePoolUser: ["Admin"], }, ERC721ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, ERC721TOKEN: { getAllTokens: ["Admin"], getAllTokensByUser: ["Admin", "AccountOwner"], get: ["Admin", TOKEN_OWNER], getTokensByName: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], totalSupply: ["Admin"], totalNetSupply: ["Admin"], history: ["Admin"], }, ERC721ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], }, ERC721TRANSACTION: { deleteTransactions: ["Admin"], }, ERC721ACCOUNT: { createAccount: ["Admin"], getAllAccounts: ["Admin"], getAccountByUser: ["Admin", "MultipleAccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], balanceOf: ["Admin", "MultipleAccountOwner"], }, ERC1155ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, ERC1155TOKEN: { getAllTokens: ["Admin"], get: ["Admin", TOKEN_OWNER], getAllTokensByUser: ["Admin", "AccountOwner"], totalSupply: ["Admin"], totalNetSupply: ["Admin"], getTokensByName: ["Admin"], getDecimals: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], save: ["Admin"], update: ["Admin"], }, ERC1155ACCOUNT: { createAccount: ["Admin"], createUserAccount: ["Admin"], createTokenAccount: ["Admin"], associateFungibleTokenToAccount: ["Admin", "AccountOwner"], getAccountsByUser: ["Admin", "AccountOwner"], getAccount: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], getAllAccounts: ["Admin"], balanceOfBatch: ["Admin"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], exchangeToken: ["AccountOwner"], getAccountDetailsByUser: ["Admin", "AccountOwner"], }, ERC1155ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], },
權杖組態管理方法
-
save
- 此方法會建立記號。每個定義的記號都有自己的建立方法。若為無用權杖,若規格檔案中已定義小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法來建立 NFT。如果沒有,任何使用者都可以使用此方法來建立 (mint) NFT。呼叫此方法的使用者會成為 NFT 的擁有者 (完整或小數)。
-
update
- 此方法會更新記號。您無法更新權杖描述資料或無法產生權杖的權杖 URI。
-
history (Token)
- 這個方法會傳回所指定記號 ID 的歷史記錄。
-
getAllTokens
- 此方法會傳回狀態資料庫中儲存的所有記號資產。只有鏈碼的
Token Admin
才能呼叫此方法。此方法使用 Berkeley DB SQL 豐富查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。 -
get (Token)
- 如果狀態資料庫中有記號,這個方法會傳回一個記號物件。只有鏈碼的
Token Admin
或記號擁有者才能呼叫此方法。 -
getAllTokensByUser
- 此方法會傳回指定使用者擁有的所有權杖資產。此方法使用 Berkeley DB SQL 豐富查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
-
ownerOf
- 此方法會傳回指定權杖 ID 之擁有者的帳戶 ID、組織 ID 和使用者 ID。
-
tokenURI
- 此方法會傳回所指定記號的 URI。任何人都可以呼叫這個方法。
-
name
- 這個方法會傳回記號類別的名稱。任何人都可以呼叫這個方法。
-
totalSupply
- 此方法會傳回所提示記號的總數。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
-
totalNetSupply
- 此方法會傳回所提示記號的總數減去已燒記號的數目。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
-
getTokensByName
- 此方法會傳回指定記號名稱的所有記號資產。此方法使用 Berkeley DB SQL 豐富查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
-
getDecimals
- 此方法會傳回指定記號的小數位數。如果未指定記號的可分割行為,則會傳回零位數的預設值。
帳戶管理方法
-
createAccount
- 此方法會為指定的使用者建立一個帳戶,並為有趣或不有趣的記號建立關聯的記號帳戶。必須為任何需要記號的使用者建立帳戶。使用者帳戶會追蹤 NFT 帳戶,以及使用者擁有的有趣記號帳戶。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。只有鏈碼的
Token Admin
才能呼叫此方法。使用者帳戶具有唯一的 ID,由
orgId
參數的 SHA-256 雜湊與userId
參數組成。使用者可以有多個具有唯一帳戶 ID 的有趣記號帳戶。有趣的記號帳戶 ID 是由
orgId
參數的 SHA-256 雜湊、userId
參數、以波狀符號 (~
) 分隔的常數字串ft
,以及一個計數器編號,代表以波狀符號 (~
) 分隔建立的有趣帳戶索引。使用者只能有一個不可執行的權杖帳戶。不可套用的記號帳戶 ID 是唯一的,由
orgId
參數的 SHA-256 雜湊、userId
參數,以及以波狀符號 (~
) 分隔的常數字串nft
組成。使用者擁有的所有不可變權杖 (不論是全部或小數) 都連結至此單一不可變權杖帳戶。 -
createUserAccount
- 此方法會為指定的使用者建立帳戶。必須為任何需要記號的使用者建立帳戶。使用者帳戶會追蹤 NFT 帳戶,以及使用者擁有的有趣記號帳戶。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。
帳戶 ID 是
orgId
參數和userId
參數的 SHA-256 雜湊。只有鏈碼的Token Admin
才能呼叫此方法。 -
createTokenAccount
- 此方法會建立一個有趣或無法執行的權杖帳戶,以與使用者帳戶建立關聯。
使用者可以有多個具有唯一帳戶 ID 的有趣記號帳戶。有趣的記號帳戶 ID 是由
orgId
參數的 SHA-256 雜湊、userId
參數、以波狀符號 (~
) 分隔的常數字串ft
,以及一個計數器編號,代表以波狀符號 (~
) 分隔建立的有趣帳戶索引。使用者只能有一個不可執行的權杖帳戶。不可套用的記號帳戶 ID 是唯一的,由
orgId
參數的 SHA-256 雜湊、userId
參數,以及以波狀符號 (~
) 分隔的常數字串nft
組成。使用者擁有的所有不可變權杖 (不論是全部或小數) 都連結至此單一不可變權杖帳戶。只有鏈碼的
Token Admin
才能呼叫此方法。 -
associateTokenToToken
- 此方法會將使用者的有趣記號帳戶與特定有趣的記號建立關聯。
-
getAccountHistory
- 此方法會傳回指定記號帳戶的歷史記錄。
-
getAccountWithStatus
- 此方法會傳回指定使用者的記號帳戶詳細資料 (包括帳戶狀態)。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
getAccount
- 此方法會傳回指定使用者的記號帳戶詳細資訊。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
getAllAccounts
- 此方法會傳回所有使用者帳戶的詳細資料。
-
getAccountDetailsByUser
- 此方法會傳回指定使用者的帳戶摘要,以及與使用者關聯之有趣和不可行記號的詳細資訊。
-
getUserByAccountId
- 此方法會傳回指定帳戶 ID 的使用者詳細資料。
角色管理方法
-
AddRoleMember
- 此方法會新增角色至指定的使用者和記號。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
-
isInRole
- 此方法會傳回布林值,以指出使用者是否具有指定的角色。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
-
removeRoleMember
- 這個方法會從指定的使用者和記號中移除角色。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
-
getAccountsByRole
- 此方法會傳回指定角色和記號的所有帳戶 ID 清單。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
-
getUsersByRole
- 此方法會傳回指定角色和記號之所有使用者的清單。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可執行的記號。
交易歷史記錄管理的方式
-
getAccountTransactionHistory
- 此方法會傳回帳戶交易歷史記錄。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。對於無法執行的記號,只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。 -
getTransactionById
- 此方法會傳回指定交易 ID 的交易詳細資料。
-
deleteTransactions
- 此方法會從狀態資料庫刪除在指定時間戳記之前的交易。
權杖行為管理方法 - 可變行為
-
mintBatch
- 此方法會在批次作業中建立 (mints) 多個記號。此方法只會建立有趣的記號或小數的不可行記號。
對於有趣的記號,如果規格檔案中定義了探勘器角色,則任何具有探勘器角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。如果在建立或更新記號時指定了該特性,您就不能超過記號的
max_mint_quantity
特性。對於無法執行的記號,如果在規格檔案中定義了小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。此外,呼叫者也必須是記號的建立者。對於可進行靜音的小數不可變記號數量,沒有上限。
您無法使用此方法來提示整個不可執行的記號。
權杖行為管理方法 - 可轉移行為
-
batchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
此方法不會驗證方法的呼叫程式是否為指定的寄件者。
-
safeBatchtransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
方法的呼叫程式必須是指定的傳送程式。
-
balanceOfBatch
- 此方法會完成取得權杖帳戶餘額的批次作業。帳戶詳細資料指定於三個不同的組織 ID、使用者 ID 與憑證 ID 清單。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。帳戶擁有者只能查看自己擁有的帳戶的餘額詳細資料。 -
exchangeToken
- 此方法會在指定的帳戶之間交換記號。此方法只支援在 NFT (整個或小數) 與有趣的記號或有趣的記號與 NFT (整個或小數) 之間交換。只有帳戶擁有者才能呼叫此方法。
記號行為管理方法 - 可燃行為