Projet échafaudé Go NFT pour ERC-721
Blockchain App Builder prend l'entrée de votre fichier de spécification NFT et génère un projet de chaîne de blocs entièrement fonctionnel.
Le projet génère automatiquement des classes et des fonctions de cycle de vie NFT, y compris des méthodes CRUD et non CRUD. La validation des arguments, la conversion de paramètres/déconversion des paramètres et la capacité de persistance transparente sont toutes prises en charge automatiquement.
Pour plus d'informations sur le projet échafaudé et les méthodes qui ne sont pas directement liées à des tâches de chaîne, voir Projet de code de chaîne Go échafaudé.
Modèle
La capacité de persistance transparente, ou ORM simplifié, est saisie dans la classe OchainModel
.
package model
type ArtCollection struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"artcollection"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
Symbol string `json:"Symbol" final:"ART"`
TokenStandard string `json:"TokenStandard" final:"erc721+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`
Behavior []string `json:"Behavior" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
Owner string `json:"Owner,omitempty" validate:"string"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
TransferredBy string `json:"TransferredBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
TransferredDate string `json:"TransferredDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
BurnedBy string `json:"BurnedBy,omitempty" validate:"string"`
BurnedDate string `json:"BurnedDate,omitempty" validate:"string"`
TokenUri string `json:"TokenUri" validate:"string,max=2000"`
TokenMetadata ArtCollectionMetadata `json:"TokenMetadata"`
Price int `json:"Price" validate:"int"`
On_sale_flag bool `json:"On_sale_flag" validate:"bool"`
}
type ArtCollectionMetadata struct {
Painting_name string `json:"Painting_name" validate:"string"`
Description string `json:"Description" validate:"string"`
Image string `json:"Image" validate:"string"`
Painter_name string `json:"Painter_name" validate:"string"`
}
Contrôleur
Il n'y a qu'un seul contrôleur principal.
type Controller struct {
Ctx trxcontext.TrxContext
}
Vous pouvez créer n'importe quel nombre de classes, de fonctions ou de fichiers, mais seules les méthodes définies dans la classe de contrôleur principale peuvent être appelées. Les autres méthodes sont masquées.
Vous pouvez utiliser les méthodes de la trousse SDK de jeton pour écrire des méthodes personnalisées pour votre application d'affaires.
Méthodes NFT générées automatiquement
Blockchain App Builder génère automatiquement des méthodes pour prendre en charge les NFT et les cycles de vie NFT. Vous pouvez utiliser ces méthodes pour initialiser les NFT, gérer les rôles et les comptes et effectuer d'autres tâches de cycle de vie NFT sans codage supplémentaire.
Blockchain App Builder génère automatiquement des méthodes pour prendre en charge les NFT et les cycles de vie NFT. Vous pouvez utiliser ces méthodes pour initialiser les NFT, gérer les rôles et les comptes et effectuer d'autres tâches de cycle de vie NFT sans codage supplémentaire. Les méthodes de contrôleur doivent être publiques pour pouvoir être invoquées. Les noms de méthode publics commencent par un caractère majuscule. Les noms de méthode qui commencent par un caractère minuscule sont privés.
- Gestion du contrôle d'accès
- Gestion de la configuration de jeton
- Gestion du compte
- Gestion des rôles
- Gestion de l'historique des transactions
- Gestion du comportement des jetons
Méthodes pour la gestion du contrôle d'accès
-
AddTokenAdmin
- Cette méthode ajoute un utilisateur en tant que
Token Admin
du code de chaîne. Cette méthode ne peut être appelée que par un élémentToken Admin
du code de chaîne. -
RemoveTokenAdmin
- Cette méthode supprime un utilisateur en tant que
Token Admin
du code de chaîne. Cette méthode ne peut être appelée que par un élémentToken Admin
du code de chaîne. Vous ne pouvez pas utiliser cette méthode pour vous supprimer en tant queToken Admin
. -
IsTokenAdmin
- Cette méthode retourne la valeur booléenne
true
si l'appelant de la fonction estToken Admin
, sinon elle retournefalse
. UnToken Admin
peut appeler cette fonction sur tout autre utilisateur du réseau de chaîne de blocs. Les autres utilisateurs ne peuvent appeler cette méthode que sur leur propre compte. -
GetAllTokenAdmins
- Cette méthode retourne une liste de tous les utilisateurs qui sont des
Token Admin
du code de chaîne. Cette méthode ne peut être appelée que par la chaîneToken Admin
du code de chaîne.
Méthodes de gestion de la configuration de jeton
-
Init
- Cette méthode est appelée lorsque le code de chaîne est instancié. Chaque valeur
Token Admin
est identifiée par les informationsUserId
etOrgId
dans le paramètreadminList
.UserId
est le nom d'utilisateur ou l'ID courriel du responsable de l'instance ou de l'utilisateur qui est connecté à l'instance.OrgId
est l'ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation de réseau courante. Le paramètreadminList
est obligatoire lors du premier déploiement du code de chaîne. Si vous mettez à niveau le code de chaîne, transmettez une liste vide ([]
). Toutes les autres informations du paramètreadminList
sont ignorées lors des mises à niveau. -
GetAllTokens
- Cette méthode retourne toutes les ressources de jeton enregistrées dans la base de données d'état. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant. -
GetAllTokensByUser
- Cette méthode retourne toutes les ressources de jeton appartenant à un utilisateur spécifié. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne ou par le responsable du compte. -
GetTokenById
- Cette méthode retourne un objet de jeton si le jeton est présent dans la base de données d'état. Cette méthode ne peut être appelée que par
Token Admin
du code de chaîne ou du responsable du jeton. -
GetTokenHistory
- Cette méthode retourne l'historique pour un ID jeton spécifié. Cette méthode ne peut être appelée que lorsqu'elle est connectée au réseau distant Oracle Blockchain Platform. Tout le monde peut appeler cette méthode.
-
getTokenObject
- Il s'agit d'une méthode utilitaire qui retourne une instance du jeton pour un ID jeton spécifié. Cette méthode est utilisée par de nombreuses méthodes générées automatiquement pour extraire les objets de jeton. Vous pouvez appeler cette méthode au besoin à partir de vos méthodes personnalisées. Lorsque vous créez une ressource ou une classe segmentée en unités, mettez à jour la casse du commutateur avec la classe
Token
correspondante pour retourner l'objet de jeton correct. La commandeochain sync
dans le générateur d'applications de chaîne de blocs crée automatiquement un cas de commutateur lorsqu'une ressource segmentée en unités est créée dans le fichier de spécification. Comme cette méthode est privée, elle n'est pas directement invokable et ne peut être appelée qu'à partir d'autres méthodes. -
OwnerOf
- Cette méthode retourne l'ID compte du responsable de l'ID jeton spécifié. Tout le monde peut appeler cette méthode.
-
Name
- Cette méthode retourne le nom de la classe de jeton. Tout le monde peut appeler cette méthode.
-
Symbol
- Cette méthode retourne le symbole de la classe de jeton. Tout le monde peut appeler cette méthode.
-
TokenURI
- Cette méthode retourne l'URI d'un jeton spécifié. Tout le monde peut appeler cette méthode.
-
TotalSupply
- Cette méthode retourne le nombre total de jetons frappés. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. -
TotalNetSupply
- Cette méthode retourne le nombre total de jetons frappés moins le nombre de jetons brûlés. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne.
Méthodes de gestion des comptes
-
CreateAccount
- Cette méthode crée un compte pour un utilisateur et un jeton spécifiés. Un compte doit être créé pour tout utilisateur qui aura des jetons à tout moment. Les comptes suivent le nombre de transactions NFT d'un utilisateur. Les utilisateurs doivent avoir des comptes dans le réseau pour effectuer les opérations liées aux jetons. Vous ne pouvez créer qu'un seul compte NFT par utilisateur.
Un ID compte est un jeu de caractères alphanumériques, précédé de
oaccount~
et suivi d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion (OrgId
) de l'utilisateur dans l'organisation de réseau courante, du nom d'utilisateur ou de l'ID courriel (UserId
) du responsable de l'instance ou de l'utilisateur connecté à l'instance, et de la chaîne constantenft
. Cette méthode ne peut être appelée que par la chaîneToken Admin
du code de chaîne. -
BalanceOf
- Cette méthode retourne le nombre total de transactions NFT détenues par un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne ou par le responsable du compte. -
GetAllAccounts
- Cette méthode retourne une liste de tous les comptes. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant. -
GetAccountByUser
- Cette méthode retourne les détails du compte pour un utilisateur spécifié. Cette méthode ne peut être appelée que par
Token Admin
du code de chaîne ou parAccount Owner
du compte. -
GetUserByAccountId
- Cette méthode retourne les détails de l'utilisateur d'un compte spécifié. Cette méthode peut être appelée par n'importe quel utilisateur.
-
GetAccountHistory
- Cette méthode retourne l'historique du compte pour un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne ou par le responsable du compte.
Méthodes pour la gestion des rôles
-
AddRole
- Cette méthode ajoute un rôle à un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. -
RemoveRole
- Cette méthode supprime un rôle d'un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. -
GetAccountsByRole
- Cette méthode retourne une liste de tous les ID compte pour un rôle spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. -
GetUsersByRole
- Cette méthode retourne une liste de tous les utilisateurs pour un rôle spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne. -
IsInRole
- Cette méthode retourne une valeur booléenne pour indiquer si un utilisateur a un rôle spécifié. Cette méthode ne peut être appelée que par
Token Admin
du code de chaîne ou parAccount Owner
du compte.
Méthodes de gestion de l'historique des transactions
-
GetAccountTransactionHistory
- Cette méthode retourne l'historique des transactions de compte pour un utilisateur spécifié. Cette méthode peut être appelée par
Token Admin
du code de chaîne ou par le responsable du compte. -
GetAccountTransactionHistoryWithFilters
- Cette méthode retourne l'historique des transactions de compte pour un utilisateur spécifié, filtré par
PageSize
,Bookmark
,StartTime
etEndTime
. Cette méthode ne peut être appelée que lorsqu'elle est connectée au réseau distant Oracle Blockchain Platform. Cette méthode ne peut être appelée que par un élémentToken Admin
du code de chaîne ou par le responsable du compte. -
GetTransactionById
- Cette méthode retourne l'historique des transactions pour un ID transaction spécifié. Cette méthode ne peut être appelée que par un élément
Token Admin
du code de chaîne ou par le responsable du compte. -
DeleteHistoricalTransactions
- Cette méthode supprime les transactions antérieures à un horodatage spécifié dans la base de données d'état. Cette méthode ne peut être appelée que par la chaîne
Token Admin
du code de chaîne.
Méthodes de gestion du comportement des jetons - Comportement mintable
-
Create<Token Name>Token
- Cette méthode crée (mints) un NFT. La ressource et les propriétés associées sont enregistrées dans la base de données d'état. L'appelant de cette transaction doit avoir un compte de jeton. L'appelant de cette transaction devient le propriétaire de la NFT. Si le fichier de spécification de jeton inclut la section
roles
pourbehaviors
et la propriétéminter_role_name
pourroles
, l'appelant de la transaction doit avoir le rôle de filtre. Sinon, n'importe quel appelant peut extraire des NFT. -
Update<Token Name>Token
- Cette méthode met à jour les propriétés du jeton. Cette méthode ne peut être appelée que par l'utilisateur responsable ou créateur du jeton. Après la création d'une ressource de jeton, seul le responsable du jeton peut mettre à jour les propriétés personnalisées du jeton. Si l'utilisateur est à la fois le responsable et le créateur d'un jeton, il peut également mettre à jour la propriété
TokenDesc
. Les métadonnées de jeton ne peuvent pas être mises à jour. Vous devez transmettre toutes les propriétés de jeton à cette méthode, même si vous souhaitez mettre à jour uniquement certaines propriétés.
Méthodes de gestion du comportement des jetons - Comportement transférable
-
SafeTransferFrom
- Cette méthode transfère la propriété de la TNF spécifiée de l'appelant à un autre compte. Cette méthode comprend les validations suivantes :
- Le jeton existe et n'est pas brûlé.
- Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
- Le compte de l'expéditeur est responsable du jeton.
- L'appelant de la fonction est l'expéditeur.
-
TransferFrom
- Cette méthode transfère la propriété de la transaction de transfert de fonds nationale spécifiée d'un compte d'expéditeur à un compte de destinataire. Il est de la responsabilité de l'appelant de transmettre les paramètres corrects. Cette méthode peut être appelée par n'importe quel utilisateur, pas seulement par le propriétaire du jeton. Cette méthode comprend les validations suivantes :
- Le jeton existe et n'est pas brûlé.
- Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
- Le compte de l'expéditeur est responsable du jeton.
Méthodes de gestion du comportement des jetons - Comportement brûlable
-
Burn
- Cette méthode désactive, ou brûle, le NFT spécifié du compte de l'appelant. L'appelant de cette méthode doit avoir un compte. Un jeton ne peut pas être gravé sauf si le fichier de spécification du jeton inclut le comportement
burnable
. Si aucune propriétéburner_role_name
n'est spécifiée dans la sectionroles
du fichier de spécification, le responsable du jeton peut le graver. Si une propriétéburner_role_name
est spécifiée dans la sectionroles
, l'utilisateur affecté au rôle de brûleur qui est également le créateur du jeton peut brûler le jeton. -
BurnNFT
- Cette méthode désactive ou grave le NFT spécifié à partir du compte de l'appelant et retourne un objet de jeton et un historique de jeton. L'appelant de cette méthode doit avoir un compte. Un jeton ne peut pas être gravé sauf si le fichier de spécification du jeton inclut le comportement
burnable
. Si aucune propriétéburner_role_name
n'est spécifiée dans la sectionroles
du fichier de spécification, le responsable du jeton peut le graver. Si une propriétéburner_role_name
est spécifiée dans la sectionroles
, l'utilisateur affecté au rôle de brûleur qui est également le créateur ou le responsable du jeton peut brûler le jeton.
Méthodes personnalisées
Vous pouvez utiliser les méthodes de la trousse SDK de jeton pour écrire des méthodes personnalisées pour votre application d'affaires.
L'exemple suivant montre comment utiliser des méthodes de trousse SDK de jeton dans des méthodes personnalisées. Lorsque la méthode Sell
est appelée, elle publie un jeton à vendre pour un prix spécifié.
func (t *Controller) Sell(tokenId string, sellingPrice int) (interface{}, error) {
var tokenAsset ArtCollection
_, err := t.Ctx.ERC721Token.Get(tokenId, &tokenAsset)
if err != nil {
return nil, err
}
/** * price is a custom asset
attribute to set the price of a non-fungible token in the
marketplace */
tokenAsset.Price = sellingPrice
/** * on_sale_flag is a
custom asset attribute that maintains non-fungible token selling status in the
marketplace */
tokenAsset.On_sale_flag = true
_, err = t.Ctx.ERC721Token.UpdateToken(tokenAsset)
if err != nil {
return nil, err
}
msg := fmt.Sprintf("Token ID : %s has been posted for selling in the marketplace", tokenId)
return msg, nil
}
Méthodes de trousse SDK NFT
- Gestion du contrôle d'accès
- Gestion de la configuration de jeton
- Gestion du compte
- Gestion des rôles
- Gestion de l'historique des transactions
- Gestion du comportement des jetons
Méthodes pour la gestion du contrôle d'accès
Token Admin
ou Account Owner
du jeton. Vous pouvez utiliser cette fonction pour vous assurer que les opérations sont effectuées uniquement par les utilisateurs prévus. Tout accès non autorisé entraîne une erreur. Pour utiliser la fonction de contrôle d'accès, importez la classe Authorization
à partir du module ../lib/auth
.import { ERC721Authorization } from '../lib/erc721-auth';
-
CheckAuthorization
- Utilisez cette méthode pour ajouter une vérification de contrôle d'accès à une opération. La plupart des méthodes générées automatiquement incluent le contrôle d'accès. Certaines méthodes de jeton ne peuvent être exécutées que par
ERC721Admin
ouAccount Owner
du jeton ou parMultipleAccountOwner
pour les utilisateurs ayant plusieurs comptes. La méthodeCheckAuthorization
fait partie de l'ensembleerc721Auth
, auquel vous accédez au moyen de la structureCtx
(récepteur). Le mappage du contrôle d'accès est décrit dans le fichieroChainUtil.go
, comme indiqué dans le texte suivant. Vous pouvez modifier le contrôle d'accès en modifiant le fichieroChainUtil.go
. Pour utiliser votre propre contrôle d'accès ou pour désactiver le contrôle d'accès, supprimez le code de contrôle d'accès des méthodes de contrôleur et des méthodes personnalisées générées automatiquement.var t TokenAccess var r RoleAccess var a AccountAccess var as AccountStatusAccess var h HoldAccess var ad AdminAccess var trx TransactionAccess var tc TokenConversionAccess var auth AuthAccess var erc721ad ERC721AdminAccess var erc721t ERC721TokenAccess var erc721r ERC721RoleAccess var erc721a ERC721AccountAccess var erc721as ERC721AccountStatusAccess var erc721trx ERC721TransactionAccess auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"} trx.DeleteHistoricalTransactions = []string{"Admin"} ad.AddAdmin = []string{"Admin"} ad.RemoveAdmin = []string{"Admin"} ad.GetAllAdmins = []string{"Admin", "OrgAdmin"} ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"} ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"} t.Save = []string{"Admin"} t.GetAllTokens = []string{"Admin", "OrgAdmin"} t.Update = []string{"Admin"} t.GetTokenDecimals = []string{"Admin", "OrgAdmin"} t.GetTokensByName = []string{"Admin", "OrgAdmin"} t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"} t.GetNetTokens = []string{"Admin", "OrgAdmin"} t.Get = []string{"Admin", "OrgAdmin"} t.GetTokenHistory = []string{"Admin", "OrgAdmin"} a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"} a.GetAllAccounts = []string{"Admin"} a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"} a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.History = []string{"Admin", "AccountOwner"} a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"} a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"} a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"} as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetAccountsByRole = []string{"Admin"} r.GetUsersByRole = []string{"Admin"} r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"} tc.InitializeExchangePoolUser = []string{"Admin"} tc.AddConversionRate = []string{"Admin"} tc.UpdateConversionRate = []string{"Admin"} tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.TokenConversion = []string{"Admin", "AnyAccountOwner"} tc.GetExchangePoolUser = []string{"Admin"} erc721ad.AddAdmin = []string{"Admin"} erc721ad.GetAllAdmins = []string{"Admin"} erc721ad.IsTokenAdmin = []string{"Admin"} erc721ad.RemoveAdmin = []string{"Admin"} erc721trx.DeleteHistoricalTransactions = []string{"Admin"} erc721t.Save = []string{"Admin"} erc721t.GetAllTokens = []string{"Admin"} erc721t.Update = []string{"Admin"} erc721t.GetTokensByName = []string{"Admin"} erc721t.AddRoleMember = []string{"Admin"} erc721t.RemoveRoleMember = []string{"Admin"} erc721t.IsInRole = []string{"Admin", "AccountOwner"} erc721t.Get = []string{"Admin", "TokenOwner"} erc721t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc721t.TotalSupply = []string{"Admin"} erc721t.TotalNetSupply = []string{"Admin"} erc721t.History = []string{"Admin"} erc721a.CreateAccount = []string{"Admin"} erc721a.CreateUserAccount = []string{"Admin"} erc721a.CreateTokenAccount = []string{"Admin"} erc721a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc721a.GetAllAccounts = []string{"Admin"} erc721a.History = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc721a.GetAccountByUser = []string{"Admin", "MultipleAccountOwner"} erc721a.BalanceOf = []string{"Admin", "MultipleAccountOwner"} erc721as.Get = []string{"Admin", "AccountOwner"} erc721as.ActivateAccount = []string{"Admin"} erc721as.SuspendAccount = []string{"Admin"} erc721as.DeleteAccount = []string{"Admin"} erc721r.GetAccountsByRole = []string{"Admin"} erc721r.GetUsersByRole = []string{"Admin"} var accessMap TokenAccessControl accessMap.Token = t accessMap.Account = a accessMap.AccountStatus = as accessMap.Hold = h accessMap.Role = r accessMap.Admin = ad accessMap.Auth = auth accessMap.TokenConversion = tc accessMap.ERC721ADMIN = erc721ad accessMap.ERC721TOKEN = erc721t accessMap.ERC721ACCOUNT = erc721a accessMap.ERC721AccountStatus = erc721as accessMap.ERC721ROLE = erc721r accessMap.ERC721TRANSACTION = erc721trx
-
IsUserTokenAdmin
- Cette méthode retourne un mappage avec la valeur booléenne
true
si l'appelant de la fonction estToken Admin
. Sinon, la méthode retournefalse
. -
AddAdmin
- Cette méthode ajoute un utilisateur en tant que
Token Admin
du code de chaîne du jeton. -
RemoveAdmin
- Cette méthode supprime un utilisateur en tant que
Token Admin
du code de chaîne du jeton. -
GetAllAdmins
- Cette méthode retourne une liste de tous les utilisateurs
Token Admin
. -
GetAllAdminUsers
- Cette méthode retourne une liste de tous les utilisateurs
Token Admin
.
Méthodes de gestion de la configuration de jeton
-
CreateToken
- Cette méthode crée un jeton et enregistre ses propriétés dans la base de données d'état. Cette méthode ne peut être appelée que par les utilisateurs dotés du rôle de mineur.
-
GetTokenUri
- Cette méthode retourne l'URI du jeton pour un jeton spécifié.
-
TokenUri
- Cette méthode retourne l'URI du jeton pour un jeton spécifié.
-
Symbol
- Cette méthode retourne le symbole de la classe de jeton.
-
Name
- Cette méthode retourne le nom de la classe de jeton.
-
OwnerOf
- Cette méthode retourne l'ID compte du responsable d'un jeton spécifié.
-
TotalSupply
- Cette méthode retourne le nombre total de transactions NFT frappées.
-
GetAllTokens
- Cette méthode retourne toutes les ressources de jeton enregistrées dans la base de données d'état. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant.
-
GetAllTokensByUser
- Cette méthode retourne tous les jetons appartenant à un ID compte spécifié. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant.
-
Get
- Cette méthode retourne l'objet de jeton spécifié s'il est présent dans la base de données d'état.
-
UpdateToken
- Cette méthode met à jour les propriétés du jeton. Cette méthode ne peut être appelée que par le propriétaire ou le créateur du jeton. Après la création d'une ressource de jeton, seul le responsable du jeton peut mettre à jour les propriétés personnalisées du jeton. Si l'utilisateur est à la fois le responsable et le créateur d'un jeton, il peut également mettre à jour la propriété
TokenDesc
. Les métadonnées de jeton ne peuvent pas être mises à jour. Vous devez transmettre toutes les propriétés de jeton à cette méthode, même si vous souhaitez mettre à jour uniquement certaines propriétés. -
History
- Cette méthode retourne l'historique pour le jeton spécifié.
-
GetNewCtx
- Cette méthode retourne un nouvel objet
TrxContext
. La structuretrxcontext
contient des références à toutes les bibliothèques SDK. Accédez aux méthodes de la trousse SDK en utilisant uniquement cet objet. L'objettrxcontext
maintient l'exclusivité mutuelle des talons de transaction dans les bibliothèques SDK lorsque des transactions concurrentes sont en cours d'exécution.
Méthodes de gestion des comptes
-
GenerateAccountId
- Cette méthode retourne un ID compte, qui est formé par la concaténation de l'ID fournisseur de services d'adhésion (
orgId
) et du nom d'utilisateur ou de l'ID courriel (userId
), puis la création d'un hachage SHA-256. -
CreateAccount
- Cette méthode crée un compte pour un utilisateur spécifié. Un compte doit être créé pour tout utilisateur qui aura des jetons à tout moment. Les comptes suivent le nombre de transactions NFT d'un utilisateur. Les utilisateurs doivent avoir des comptes dans le réseau pour effectuer les opérations liées aux jetons. Vous ne pouvez créer qu'un seul compte NFT par utilisateur.
Un ID compte est un jeu de caractères alphanumériques, précédé de
oaccount~
et suivi d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion (org_id
) de l'utilisateur dans l'organisation de réseau courante, du nom d'utilisateur ou de l'ID courriel (userId
) du responsable de l'instance ou de l'utilisateur connecté à l'instance, et de la chaîne constantenft
. -
GetAllAccounts
- Cette méthode retourne une liste de tous les comptes. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant.
-
History
- Cette méthode retourne un tableau des détails de l'historique du compte pour un compte spécifié.
-
GetUserByAccountId
- Cette méthode retourne les détails de l'utilisateur pour un compte spécifié.
-
GetAccountWithStatusByUser
- Cette méthode retourne les détails du compte pour un utilisateur spécifié, y compris le statut du compte. Cette méthode ne peut être appelée que par
Token Admin
du code de chaîne ou parAccount Owner
du compte. -
GetAccountByUser
- Cette méthode retourne les détails du compte pour un utilisateur spécifié. Cette méthode ne peut être appelée que par
Token Admin
du code de chaîne ou parAccount Owner
du compte. -
BalanceOf
- Cette méthode retourne le nombre total de transactions NFT détenues par l'utilisateur spécifié.
Méthodes pour la gestion des rôles
-
AddRoleMember
- Cette méthode ajoute un rôle à un utilisateur spécifié.
-
RemoveRoleMember
- Cette méthode supprime un rôle d'un utilisateur et d'un jeton spécifiés. Un ID compte est formé par la création d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion concaténé (
orgId
) et du nom d'utilisateur ou de l'ID courriel (userId
). -
IsInRole
- Cette méthode retourne une valeur booléenne pour indiquer si un utilisateur et un jeton ont un rôle spécifié. Un ID compte est formé par la création d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion concaténé (
orgId
) et du nom d'utilisateur ou de l'ID courriel (userId
). -
GetAccountsByRole
- Cette méthode retourne une liste de tous les ID compte pour un rôle spécifié.
-
GetUsersByRole
- Cette méthode retourne une liste de tous les utilisateurs pour un rôle spécifié.
Méthodes de gestion de l'historique des transactions
-
GetAccountTransactionHistory
- Cette méthode retourne un tableau des détails de l'historique des transactions pour un compte spécifié.
-
GetAccountTransactionHistoryWithFilters
- Cette méthode retourne l'historique des transactions de compte pour un utilisateur spécifié, filtré par
PageSize
,Bookmark
,startTime
etendTime
. Cette méthode ne peut être appelée que lorsqu'elle est connectée au réseau distant Oracle Blockchain Platform. -
GetTransactionById
- Cette méthode retourne l'historique d'une ressource
Transaction
. -
DeleteHistoricalTransactions
- Cette méthode supprime de la base de données d'état les transactions antérieures à une date spécifiée.
Gestion du comportement des jetons - Comportement à la menthe
-
GetMaxMintQuantity
- Cette méthode retourne la quantité minimale maximale d'un jeton. Si le comportement
max_mint_quantity
n'est pas configuré dans le fichier de spécification, la valeur par défaut est 0 et un nombre infini de jetons peut être frappé. -
GetTotalMintedTokens
- Cette méthode retourne le nombre net total de jetons disponibles dans le système pour le jeton spécifié. Le nombre net de jetons disponibles est le nombre total de jetons frappés moins le nombre de jetons brûlés.
Gestion du comportement des jetons - Comportement transférable
-
SafeTransferFrom
- Cette méthode transfère la propriété de la TNF spécifiée de l'appelant à un autre compte. Cette méthode comprend les validations suivantes :
- Le jeton existe et n'est pas brûlé.
- Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
- Le compte de l'expéditeur est responsable du jeton.
- L'appelant de la fonction est l'expéditeur.
-
TransferFrom
- Cette méthode transfère la propriété de la transaction de transfert de fonds nationale spécifiée d'un compte d'expéditeur à un compte de destinataire. Il est de la responsabilité de l'appelant de transmettre les paramètres corrects. Cette méthode peut être appelée par n'importe quel utilisateur, pas seulement par le propriétaire du jeton. Cette méthode comprend les validations suivantes :
- Le jeton existe et n'est pas brûlé.
- Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
- Le compte de l'expéditeur est responsable du jeton.
Gestion du comportement des jetons - Comportement brûlable
-
Burn
- Cette méthode désactive, ou brûle, le NFT spécifié du compte de l'appelant. L'appelant de cette méthode doit avoir un compte. Un jeton ne peut pas être gravé sauf si le fichier de spécification du jeton inclut le comportement
burnable
. Si aucune propriétéburner_role_name
n'est spécifiée dans la sectionroles
du fichier de spécification, le responsable du jeton peut le graver. Si une propriétéburner_role_name
est spécifiée dans la sectionroles
, l'utilisateur affecté au rôle de brûleur qui est également le créateur du jeton peut brûler le jeton. La méthodeburn
fait partie de l'ensembleERC721Token
, auquel vous accédez au moyen du récepteur de la structureCtx
.